@asgardeo/auth-spa 0.2.6 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/asgardeo-spa.production.esm.js +9 -9
  2. package/dist/asgardeo-spa.production.esm.js.map +1 -1
  3. package/dist/asgardeo-spa.production.js +24 -24
  4. package/dist/asgardeo-spa.production.js.map +1 -1
  5. package/dist/asgardeo-spa.production.min.js +1 -1
  6. package/dist/asgardeo-spa.production.min.js.map +1 -1
  7. package/dist/polyfilled/asgardeo-spa.production.esm.js +9 -9
  8. package/dist/polyfilled/asgardeo-spa.production.esm.js.map +1 -1
  9. package/dist/polyfilled/asgardeo-spa.production.js +11 -11
  10. package/dist/polyfilled/asgardeo-spa.production.js.map +1 -1
  11. package/dist/polyfilled/asgardeo-spa.production.min.js +1 -1
  12. package/dist/polyfilled/asgardeo-spa.production.min.js.map +1 -1
  13. package/dist/src/client.d.ts.map +1 -1
  14. package/dist/src/client.js +3 -2
  15. package/dist/src/client.js.map +1 -1
  16. package/dist/src/clients/main-thread-client.d.ts.map +1 -1
  17. package/dist/src/clients/main-thread-client.js +19 -17
  18. package/dist/src/clients/main-thread-client.js.map +1 -1
  19. package/dist/src/clients/web-worker-client.d.ts.map +1 -1
  20. package/dist/src/clients/web-worker-client.js +3 -3
  21. package/dist/src/clients/web-worker-client.js.map +1 -1
  22. package/dist/src/constants/messages-types.d.ts +1 -0
  23. package/dist/src/constants/messages-types.d.ts.map +1 -1
  24. package/dist/src/constants/messages-types.js +1 -0
  25. package/dist/src/constants/messages-types.js.map +1 -1
  26. package/dist/src/helpers/session-management-helper.d.ts +2 -1
  27. package/dist/src/helpers/session-management-helper.d.ts.map +1 -1
  28. package/dist/src/helpers/session-management-helper.js +81 -49
  29. package/dist/src/helpers/session-management-helper.js.map +1 -1
  30. package/dist/src/models/message.d.ts +2 -2
  31. package/dist/src/models/message.d.ts.map +1 -1
  32. package/dist/src/models/session-management-helper.d.ts +1 -1
  33. package/dist/src/models/session-management-helper.d.ts.map +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +1 -1
  36. package/src/client.ts +3 -2
  37. package/src/clients/main-thread-client.ts +11 -5
  38. package/src/clients/web-worker-client.ts +19 -14
  39. package/src/constants/messages-types.ts +1 -0
  40. package/src/helpers/session-management-helper.ts +98 -69
  41. package/src/models/message.ts +3 -1
  42. package/src/models/session-management-helper.ts +2 -1
@@ -1,4 +1,4 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).AsgardeoAuth={})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function i(t,e,n){return n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},t(n,n.exports),n.exports}var r,c,l=i((function(t){function e(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),o=n(l),a=function(t){return t&&t.Math==Math&&t},u=a("object"==("undefined"==typeof globalThis?"undefined":o(globalThis))&&globalThis)||a("object"==("undefined"==typeof window?"undefined":o(window))&&window)||a("object"==("undefined"==typeof self?"undefined":o(self))&&self)||a("object"==o(e)&&e)||function(){return this}()||Function("return this")(),d=function(t){try{return!!t()}catch(t){return!0}},s=!d((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),m={}.propertyIsEnumerable,h=Object.getOwnPropertyDescriptor,Z=h&&!m.call({1:2},1)?function(t){var e=h(this,t);return!!e&&e.enumerable}:m,b={f:Z},p=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},y={}.toString,I=function(t){return y.call(t).slice(8,-1)},X="".split,G=d((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==I(t)?X.call(t,""):Object(t)}:Object,g=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},f=function(t){return G(g(t))},V=function(t){return"function"==typeof t},W=function(t){return"object"===o(t)?null!==t:V(t)},v=function(t){return V(t)?t:void 0},S=function(t,e){return arguments.length<2?v(u[t]):u[t]&&u[t][e]},C=S("navigator","userAgent")||"",Y=u.process,R=u.Deno,K=Y&&Y.versions||R&&R.version,L=K&&K.v8;L?c=(r=L.split("."))[0]<4?1:r[0]+r[1]:C&&(!(r=C.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=C.match(/Chrome\/(\d+)/))&&(c=r[1]);var J=c&&+c,x=!!Object.getOwnPropertySymbols&&!d((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&J&&J<41})),N=x&&!Symbol.sham&&"symbol"==o(Symbol.iterator),H=N?function(t){return"symbol"==o(t)}:function(t){var e=S("Symbol");return V(e)&&Object(t)instanceof e},k=function(t){try{return String(t)}catch(t){return"Object"}},U=function(t){if(V(t))return t;throw TypeError(k(t)+" is not a function")},T=function(t,e){var n=t[e];return null==n?void 0:U(n)},w=function(t,e){var n,i;if("string"===e&&V(n=t.toString)&&!W(i=n.call(t)))return i;if(V(n=t.valueOf)&&!W(i=n.call(t)))return i;if("string"!==e&&V(n=t.toString)&&!W(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")},F=function(t,e){try{Object.defineProperty(u,t,{value:e,configurable:!0,writable:!0})}catch(n){u[t]=e}return e},z="__core-js_shared__",j=u[z]||F(z,{}),B=i((function(t){(t.exports=function(t,e){return j[t]||(j[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.18.1",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})})),M=function(t){return Object(g(t))},A={}.hasOwnProperty,P=Object.hasOwn||function(t,e){return A.call(M(t),e)},Q=0,D=Math.random(),E=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++Q+D).toString(36)},O=B("wks"),_=u.Symbol,q=N?_:_&&_.withoutSetter||E,$=function(t){return P(O,t)&&(x||"string"==typeof O[t])||(x&&P(_,t)?O[t]=_[t]:O[t]=q("Symbol."+t)),O[t]},tt=$("toPrimitive"),et=function(t,e){if(!W(t)||H(t))return t;var n,i=T(t,tt);if(i){if(void 0===e&&(e="default"),n=i.call(t,e),!W(n)||H(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),w(t,e)},nt=function(t){var e=et(t,"string");return H(e)?e:String(e)},it=u.document,rt=W(it)&&W(it.createElement),ct=function(t){return rt?it.createElement(t):{}},lt=!s&&!d((function(){return 7!=Object.defineProperty(ct("div"),"a",{get:function(){return 7}}).a})),ot=Object.getOwnPropertyDescriptor,at=s?ot:function(t,e){if(t=f(t),e=nt(e),lt)try{return ot(t,e)}catch(t){}if(P(t,e))return p(!b.f.call(t,e),t[e])},ut={f:at},dt=function(t){if(W(t))return t;throw TypeError(String(t)+" is not an object")},st=Object.defineProperty,mt=s?st:function(t,e,n){if(dt(t),e=nt(e),dt(n),lt)try{return st(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t},ht={f:mt},Zt=s?function(t,e,n){return ht.f(t,e,p(1,n))}:function(t,e,n){return t[e]=n,t},bt=Function.toString;V(j.inspectSource)||(j.inspectSource=function(t){return bt.call(t)});var pt,yt,It,Xt=j.inspectSource,Gt=u.WeakMap,gt=V(Gt)&&/native code/.test(Xt(Gt)),ft=B("keys"),Vt=function(t){return ft[t]||(ft[t]=E(t))},Wt={},vt="Object already initialized",St=u.WeakMap;if(gt||j.state){var Ct=j.state||(j.state=new St),Yt=Ct.get,Rt=Ct.has,Kt=Ct.set;pt=function(t,e){if(Rt.call(Ct,t))throw new TypeError(vt);return e.facade=t,Kt.call(Ct,t,e),e},yt=function(t){return Yt.call(Ct,t)||{}},It=function(t){return Rt.call(Ct,t)}}else{var Lt=Vt("state");Wt[Lt]=!0,pt=function(t,e){if(P(t,Lt))throw new TypeError(vt);return e.facade=t,Zt(t,Lt,e),e},yt=function(t){return P(t,Lt)?t[Lt]:{}},It=function(t){return P(t,Lt)}}var Jt={set:pt,get:yt,has:It,enforce:function(t){return It(t)?yt(t):pt(t,{})},getterFor:function(t){return function(e){var n;if(!W(e)||(n=yt(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}},xt=Function.prototype,Nt=s&&Object.getOwnPropertyDescriptor,Ht=P(xt,"name"),kt={EXISTS:Ht,PROPER:Ht&&"something"===function(){}.name,CONFIGURABLE:Ht&&(!s||s&&Nt(xt,"name").configurable)},Ut=i((function(t){var e=kt.CONFIGURABLE,n=Jt.get,i=Jt.enforce,r=String(String).split("String");(t.exports=function(t,n,c,l){var o,a=!!l&&!!l.unsafe,d=!!l&&!!l.enumerable,s=!!l&&!!l.noTargetGet,m=l&&void 0!==l.name?l.name:n;V(c)&&("Symbol("===String(m).slice(0,7)&&(m="["+String(m).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!P(c,"name")||e&&c.name!==m)&&Zt(c,"name",m),(o=i(c)).source||(o.source=r.join("string"==typeof m?m:""))),t!==u?(a?!s&&t[n]&&(d=!0):delete t[n],d?t[n]=c:Zt(t,n,c)):d?t[n]=c:F(n,c)})(Function.prototype,"toString",(function(){return V(this)&&n(this).source||Xt(this)}))})),Tt=Math.ceil,wt=Math.floor,Ft=function(t){return isNaN(t=+t)?0:(t>0?wt:Tt)(t)},zt=Math.min,jt=function(t){return t>0?zt(Ft(t),9007199254740991):0},Bt=Math.max,Mt=Math.min,At=function(t,e){var n=Ft(t);return n<0?Bt(n+e,0):Mt(n,e)},Pt=function(t){return function(e,n,i){var r,c=f(e),l=jt(c.length),o=At(i,l);if(t&&n!=n){for(;l>o;)if((r=c[o++])!=r)return!0}else for(;l>o;o++)if((t||o in c)&&c[o]===n)return t||o||0;return!t&&-1}},Qt={includes:Pt(!0),indexOf:Pt(!1)},Dt=Qt.indexOf,Et=function(t,e){var n,i=f(t),r=0,c=[];for(n in i)!P(Wt,n)&&P(i,n)&&c.push(n);for(;e.length>r;)P(i,n=e[r++])&&(~Dt(c,n)||c.push(n));return c},Ot=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],_t=Ot.concat("length","prototype"),qt=Object.getOwnPropertyNames||function(t){return Et(t,_t)},$t={f:qt},te={f:Object.getOwnPropertySymbols},ee=S("Reflect","ownKeys")||function(t){var e=$t.f(dt(t)),n=te.f;return n?e.concat(n(t)):e},ne=function(t,e){for(var n=ee(e),i=ht.f,r=ut.f,c=0;c<n.length;c++){var l=n[c];P(t,l)||i(t,l,r(e,l))}},ie=/#|\.prototype\./,re=function(t,e){var n=le[ce(t)];return n==ae||n!=oe&&(V(e)?d(e):!!e)},ce=re.normalize=function(t){return String(t).replace(ie,".").toLowerCase()},le=re.data={},oe=re.NATIVE="N",ae=re.POLYFILL="P",ue=re,de=ut.f,se=function(t,e){var n,i,r,c,l,a=t.target,d=t.global,s=t.stat;if(n=d?u:s?u[a]||F(a,{}):(u[a]||{}).prototype)for(i in e){if(c=e[i],r=t.noTargetGet?(l=de(n,i))&&l.value:n[i],!ue(d?i:a+(s?".":"#")+i,t.forced)&&void 0!==r){if(o(c)===o(r))continue;ne(c,r)}(t.sham||r&&r.sham)&&Zt(c,"sham",!0),Ut(n,i,c,t)}},me=Array.isArray||function(t){return"Array"==I(t)},he={};he[$("toStringTag")]="z";var Ze,be="[object z]"===String(he),pe=$("toStringTag"),ye="Arguments"==I(function(){return arguments}()),Ie=be?I:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),pe))?n:ye?I(e):"Object"==(i=I(e))&&V(e.callee)?"Arguments":i},Xe=function(t){if("Symbol"===Ie(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)},Ge=Object.keys||function(t){return Et(t,Ot)},ge=s?Object.defineProperties:function(t,e){dt(t);for(var n,i=Ge(e),r=i.length,c=0;r>c;)ht.f(t,n=i[c++],e[n]);return t},fe=S("document","documentElement"),Ve=Vt("IE_PROTO"),We=function(){},ve=function(t){return"<script>"+t+"</"+"script>"},Se=function(t){t.write(ve("")),t.close();var e=t.parentWindow.Object;return t=null,e},Ce=function(){try{Ze=new ActiveXObject("htmlfile")}catch(t){}var t,e;Ce="undefined"!=typeof document?document.domain&&Ze?Se(Ze):((e=ct("iframe")).style.display="none",fe.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(ve("document.F=Object")),t.close(),t.F):Se(Ze);for(var n=Ot.length;n--;)delete Ce.prototype[Ot[n]];return Ce()};Wt[Ve]=!0;var Ye=Object.create||function(t,e){var n;return null!==t?(We.prototype=dt(t),n=new We,We.prototype=null,n[Ve]=t):n=Ce(),void 0===e?n:ge(n,e)},Re=$t.f,Ke={}.toString,Le="object"==("undefined"==typeof window?"undefined":o(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Je={f:function(t){return Le&&"[object Window]"==Ke.call(t)?function(t){try{return Re(t)}catch(t){return Le.slice()}}(t):Re(f(t))}},xe={f:$},Ne=u,He=ht.f,ke=function(t){var e=Ne.Symbol||(Ne.Symbol={});P(e,t)||He(e,t,{value:xe.f(t)})},Ue=ht.f,Te=$("toStringTag"),we=function(t,e,n){t&&!P(t=n?t:t.prototype,Te)&&Ue(t,Te,{configurable:!0,value:e})},Fe=function(t,e,n){if(U(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}},ze=[],je=S("Reflect","construct"),Be=/^\s*(?:class|function)\b/,Me=Be.exec,Ae=!Be.exec((function(){})),Pe=function(t){if(!V(t))return!1;try{return je(Object,ze,t),!0}catch(t){return!1}},Qe=!je||d((function(){var t;return Pe(Pe.call)||!Pe(Object)||!Pe((function(){t=!0}))||t}))?function(t){if(!V(t))return!1;switch(Ie(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Ae||!!Me.call(Be,Xt(t))}:Pe,De=$("species"),Ee=function(t,e){return new(function(t){var e;return me(t)&&(e=t.constructor,(Qe(e)&&(e===Array||me(e.prototype))||W(e)&&null===(e=e[De]))&&(e=void 0)),void 0===e?Array:e}(t))(0===e?0:e)},Oe=[].push,_e=function(t){var e=1==t,n=2==t,i=3==t,r=4==t,c=6==t,l=7==t,o=5==t||c;return function(a,u,d,s){for(var m,h,Z=M(a),b=G(Z),p=Fe(u,d,3),y=jt(b.length),I=0,X=s||Ee,g=e?X(a,y):n||l?X(a,0):void 0;y>I;I++)if((o||I in b)&&(h=p(m=b[I],I,Z),t))if(e)g[I]=h;else if(h)switch(t){case 3:return!0;case 5:return m;case 6:return I;case 2:Oe.call(g,m)}else switch(t){case 4:return!1;case 7:Oe.call(g,m)}return c?-1:i||r?r:g}},qe={forEach:_e(0),map:_e(1),filter:_e(2),some:_e(3),every:_e(4),find:_e(5),findIndex:_e(6),filterReject:_e(7)},$e=qe.forEach,tn=Vt("hidden"),en="Symbol",nn=$("toPrimitive"),rn=Jt.set,cn=Jt.getterFor(en),ln=Object.prototype,on=u.Symbol,an=S("JSON","stringify"),un=ut.f,dn=ht.f,sn=Je.f,mn=b.f,hn=B("symbols"),Zn=B("op-symbols"),bn=B("string-to-symbol-registry"),pn=B("symbol-to-string-registry"),yn=B("wks"),In=u.QObject,Xn=!In||!In.prototype||!In.prototype.findChild,Gn=s&&d((function(){return 7!=Ye(dn({},"a",{get:function(){return dn(this,"a",{value:7}).a}})).a}))?function(t,e,n){var i=un(ln,e);i&&delete ln[e],dn(t,e,n),i&&t!==ln&&dn(ln,e,i)}:dn,gn=function(t,e){var n=hn[t]=Ye(on.prototype);return rn(n,{type:en,tag:t,description:e}),s||(n.description=e),n},fn=function(t,e,n){t===ln&&fn(Zn,e,n),dt(t);var i=nt(e);return dt(n),P(hn,i)?(n.enumerable?(P(t,tn)&&t[tn][i]&&(t[tn][i]=!1),n=Ye(n,{enumerable:p(0,!1)})):(P(t,tn)||dn(t,tn,p(1,{})),t[tn][i]=!0),Gn(t,i,n)):dn(t,i,n)},Vn=function(t,e){dt(t);var n=f(e),i=Ge(n).concat(Cn(n));return $e(i,(function(e){s&&!Wn.call(n,e)||fn(t,e,n[e])})),t},Wn=function(t){var e=nt(t),n=mn.call(this,e);return!(this===ln&&P(hn,e)&&!P(Zn,e))&&(!(n||!P(this,e)||!P(hn,e)||P(this,tn)&&this[tn][e])||n)},vn=function(t,e){var n=f(t),i=nt(e);if(n!==ln||!P(hn,i)||P(Zn,i)){var r=un(n,i);return!r||!P(hn,i)||P(n,tn)&&n[tn][i]||(r.enumerable=!0),r}},Sn=function(t){var e=sn(f(t)),n=[];return $e(e,(function(t){P(hn,t)||P(Wt,t)||n.push(t)})),n},Cn=function(t){var e=t===ln,n=sn(e?Zn:f(t)),i=[];return $e(n,(function(t){!P(hn,t)||e&&!P(ln,t)||i.push(hn[t])})),i};if(x||(on=function(){if(this instanceof on)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?Xe(arguments[0]):void 0,e=E(t),n=function t(n){this===ln&&t.call(Zn,n),P(this,tn)&&P(this[tn],e)&&(this[tn][e]=!1),Gn(this,e,p(1,n))};return s&&Xn&&Gn(ln,e,{configurable:!0,set:n}),gn(e,t)},Ut(on.prototype,"toString",(function(){return cn(this).tag})),Ut(on,"withoutSetter",(function(t){return gn(E(t),t)})),b.f=Wn,ht.f=fn,ut.f=vn,$t.f=Je.f=Sn,te.f=Cn,xe.f=function(t){return gn($(t),t)},s&&(dn(on.prototype,"description",{configurable:!0,get:function(){return cn(this).description}}),Ut(ln,"propertyIsEnumerable",Wn,{unsafe:!0}))),se({global:!0,wrap:!0,forced:!x,sham:!x},{Symbol:on}),$e(Ge(yn),(function(t){ke(t)})),se({target:en,stat:!0,forced:!x},{for:function(t){var e=Xe(t);if(P(bn,e))return bn[e];var n=on(e);return bn[e]=n,pn[n]=e,n},keyFor:function(t){if(!H(t))throw TypeError(t+" is not a symbol");if(P(pn,t))return pn[t]},useSetter:function(){Xn=!0},useSimple:function(){Xn=!1}}),se({target:"Object",stat:!0,forced:!x,sham:!s},{create:function(t,e){return void 0===e?Ye(t):Vn(Ye(t),e)},defineProperty:fn,defineProperties:Vn,getOwnPropertyDescriptor:vn}),se({target:"Object",stat:!0,forced:!x},{getOwnPropertyNames:Sn,getOwnPropertySymbols:Cn}),se({target:"Object",stat:!0,forced:d((function(){te.f(1)}))},{getOwnPropertySymbols:function(t){return te.f(M(t))}}),an){var Yn=!x||d((function(){var t=on();return"[null]"!=an([t])||"{}"!=an({a:t})||"{}"!=an(Object(t))}));se({target:"JSON",stat:!0,forced:Yn},{stringify:function(t,e,n){for(var i,r=[t],c=1;arguments.length>c;)r.push(arguments[c++]);if(i=e,(W(e)||void 0!==t)&&!H(t))return me(e)||(e=function(t,e){if(V(i)&&(e=i.call(this,t,e)),!H(e))return e}),r[1]=e,an.apply(null,r)}})}if(!on.prototype[nn]){var Rn=on.prototype.valueOf;Ut(on.prototype,nn,(function(){return Rn.apply(this,arguments)}))}we(on,en),Wt[tn]=!0;var Kn=ht.f,Ln=u.Symbol;if(s&&V(Ln)&&(!("description"in Ln.prototype)||void 0!==Ln().description)){var Jn={},xn=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof xn?new Ln(t):void 0===t?Ln():Ln(t);return""===t&&(Jn[e]=!0),e};ne(xn,Ln);var Nn=xn.prototype=Ln.prototype;Nn.constructor=xn;var Hn=Nn.toString,kn="Symbol(test)"==String(Ln("test")),Un=/^Symbol\((.*)\)[^)]+$/;Kn(Nn,"description",{configurable:!0,get:function(){var t=W(this)?this.valueOf():this,e=Hn.call(t);if(P(Jn,t))return"";var n=kn?e.slice(7,-1):e.replace(Un,"$1");return""===n?void 0:n}}),se({global:!0,forced:!0},{Symbol:xn})}ke("asyncIterator"),ke("hasInstance"),ke("isConcatSpreadable"),ke("iterator"),ke("match"),ke("matchAll"),ke("replace"),ke("search"),ke("species"),ke("split"),ke("toPrimitive"),ke("toStringTag"),ke("unscopables");var Tn=function(t,e,n){var i=nt(e);i in t?ht.f(t,i,p(0,n)):t[i]=n},wn=$("species"),Fn=function(t){return J>=51||!d((function(){var e=[];return(e.constructor={})[wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},zn=$("isConcatSpreadable"),jn=9007199254740991,Bn="Maximum allowed index exceeded",Mn=J>=51||!d((function(){var t=[];return t[zn]=!1,t.concat()[0]!==t})),An=Fn("concat"),Pn=function(t){if(!W(t))return!1;var e=t[zn];return void 0!==e?!!e:me(t)};se({target:"Array",proto:!0,forced:!Mn||!An},{concat:function(t){var e,n,i,r,c,l=M(this),o=Ee(l,0),a=0;for(e=-1,i=arguments.length;e<i;e++)if(Pn(c=-1===e?l:arguments[e])){if(a+(r=jt(c.length))>jn)throw TypeError(Bn);for(n=0;n<r;n++,a++)n in c&&Tn(o,a,c[n])}else{if(a>=jn)throw TypeError(Bn);Tn(o,a++,c)}return o.length=a,o}});var Qn=Math.min,Dn=[].copyWithin||function(t,e){var n=M(this),i=jt(n.length),r=At(t,i),c=At(e,i),l=arguments.length>2?arguments[2]:void 0,o=Qn((void 0===l?i:At(l,i))-c,i-r),a=1;for(c<r&&r<c+o&&(a=-1,c+=o-1,r+=o-1);o-- >0;)c in n?n[r]=n[c]:delete n[r],r+=a,c+=a;return n},En=$("unscopables"),On=Array.prototype;null==On[En]&&ht.f(On,En,{configurable:!0,value:Ye(null)});var _n=function(t){On[En][t]=!0};se({target:"Array",proto:!0},{copyWithin:Dn}),_n("copyWithin");var qn=function(t){for(var e=M(this),n=jt(e.length),i=arguments.length,r=At(i>1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,l=void 0===c?n:At(c,n);l>r;)e[r++]=t;return e};se({target:"Array",proto:!0},{fill:qn}),_n("fill");var $n=qe.filter,ti=Fn("filter");se({target:"Array",proto:!0,forced:!ti},{filter:function(t){return $n(this,t,arguments.length>1?arguments[1]:void 0)}});var ei=qe.find,ni="find",ii=!0;ni in[]&&Array(1).find((function(){ii=!1})),se({target:"Array",proto:!0,forced:ii},{find:function(t){return ei(this,t,arguments.length>1?arguments[1]:void 0)}}),_n(ni);var ri=qe.findIndex,ci="findIndex",li=!0;ci in[]&&Array(1).findIndex((function(){li=!1})),se({target:"Array",proto:!0,forced:li},{findIndex:function(t){return ri(this,t,arguments.length>1?arguments[1]:void 0)}}),_n(ci);var oi=function t(e,n,i,r,c,l,o,a){for(var u,d=c,s=0,m=!!o&&Fe(o,a,3);s<r;){if(s in i){if(u=m?m(i[s],s,n):i[s],l>0&&me(u))d=t(e,n,u,jt(u.length),d,l-1)-1;else{if(d>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[d]=u}d++}s++}return d};se({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=M(this),n=jt(e.length),i=Ee(e,0);return i.length=oi(i,e,e,n,0,void 0===t?1:Ft(t)),i}}),se({target:"Array",proto:!0},{flatMap:function(t){var e,n=M(this),i=jt(n.length);return U(t),(e=Ee(n,0)).length=oi(e,n,n,i,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var ai=function(t,e,n){var i,r;dt(t);try{if(!(i=T(t,"return"))){if("throw"===e)throw n;return n}i=i.call(t)}catch(t){r=!0,i=t}if("throw"===e)throw n;if(r)throw i;return dt(i),n},ui=function(t,e,n,i){try{return i?e(dt(n)[0],n[1]):e(n)}catch(e){ai(t,"throw",e)}},di={},si=$("iterator"),mi=Array.prototype,hi=function(t){return void 0!==t&&(di.Array===t||mi[si]===t)},Zi=$("iterator"),bi=function(t){if(null!=t)return T(t,Zi)||T(t,"@@iterator")||di[Ie(t)]},pi=function(t,e){var n=arguments.length<2?bi(t):e;if(U(n))return dt(n.call(t));throw TypeError(String(t)+" is not iterable")},yi=function(t){var e=M(t),n=Qe(this),i=arguments.length,r=i>1?arguments[1]:void 0,c=void 0!==r;c&&(r=Fe(r,i>2?arguments[2]:void 0,2));var l,o,a,u,d,s,m=bi(e),h=0;if(!m||this==Array&&hi(m))for(l=jt(e.length),o=n?new this(l):Array(l);l>h;h++)s=c?r(e[h],h):e[h],Tn(o,h,s);else for(d=(u=pi(e,m)).next,o=n?new this:[];!(a=d.call(u)).done;h++)s=c?ui(u,r,[a.value,h],!0):a.value,Tn(o,h,s);return o.length=h,o},Ii=$("iterator"),Xi=!1;try{var Gi=0,gi={next:function(){return{done:!!Gi++}},return:function(){Xi=!0}};gi[Ii]=function(){return this},Array.from(gi,(function(){throw 2}))}catch(t){}var fi=function(t,e){if(!e&&!Xi)return!1;var n=!1;try{var i={};i[Ii]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n},Vi=!fi((function(t){Array.from(t)}));se({target:"Array",stat:!0,forced:Vi},{from:yi});var Wi=Qt.includes;se({target:"Array",proto:!0},{includes:function(t){return Wi(this,t,arguments.length>1?arguments[1]:void 0)}}),_n("includes");var vi=function(t,e){var n=[][t];return!!n&&d((function(){n.call(null,e||function(){throw 1},1)}))},Si=Qt.indexOf,Ci=[].indexOf,Yi=!!Ci&&1/[1].indexOf(1,-0)<0,Ri=vi("indexOf");se({target:"Array",proto:!0,forced:Yi||!Ri},{indexOf:function(t){return Yi?Ci.apply(this,arguments)||0:Si(this,t,arguments.length>1?arguments[1]:void 0)}});var Ki,Li,Ji,xi=!d((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),Ni=Vt("IE_PROTO"),Hi=Object.prototype,ki=xi?Object.getPrototypeOf:function(t){var e=M(t);if(P(e,Ni))return e[Ni];var n=e.constructor;return V(n)&&e instanceof n?n.prototype:e instanceof Object?Hi:null},Ui=$("iterator"),Ti=!1;[].keys&&("next"in(Ji=[].keys())?(Li=ki(ki(Ji)))!==Object.prototype&&(Ki=Li):Ti=!0);var wi=null==Ki||d((function(){var t={};return Ki[Ui].call(t)!==t}));wi&&(Ki={}),V(Ki[Ui])||Ut(Ki,Ui,(function(){return this}));var Fi={IteratorPrototype:Ki,BUGGY_SAFARI_ITERATORS:Ti},zi=Fi.IteratorPrototype,ji=function(){return this},Bi=function(t,e,n){var i=e+" Iterator";return t.prototype=Ye(zi,{next:p(1,n)}),we(t,i,!1),di[i]=ji,t},Mi=function(t){if("object"===o(t)||V(t))return t;throw TypeError("Can't set "+String(t)+" as a prototype")},Ai=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,i){return dt(n),Mi(i),e?t.call(n,i):n.__proto__=i,n}}():void 0),Pi=kt.PROPER,Qi=kt.CONFIGURABLE,Di=Fi.IteratorPrototype,Ei=Fi.BUGGY_SAFARI_ITERATORS,Oi=$("iterator"),_i="keys",qi="values",$i="entries",tr=function(){return this},er=function(t,e,n,i,r,c,l){Bi(n,e,i);var o,a,u,d=function(t){if(t===r&&b)return b;if(!Ei&&t in h)return h[t];switch(t){case _i:case qi:case $i:return function(){return new n(this,t)}}return function(){return new n(this)}},s=e+" Iterator",m=!1,h=t.prototype,Z=h[Oi]||h["@@iterator"]||r&&h[r],b=!Ei&&Z||d(r),p="Array"==e&&h.entries||Z;if(p&&(o=ki(p.call(new t)))!==Object.prototype&&o.next&&(ki(o)!==Di&&(Ai?Ai(o,Di):V(o[Oi])||Ut(o,Oi,tr)),we(o,s,!0)),Pi&&r==qi&&Z&&Z.name!==qi&&(Qi?Zt(h,"name",qi):(m=!0,b=function(){return Z.call(this)})),r)if(a={values:d(qi),keys:c?b:d(_i),entries:d($i)},l)for(u in a)(Ei||m||!(u in h))&&Ut(h,u,a[u]);else se({target:e,proto:!0,forced:Ei||m},a);return h[Oi]!==b&&Ut(h,Oi,b,{name:r}),di[e]=b,a},nr="Array Iterator",ir=Jt.set,rr=Jt.getterFor(nr),cr=er(Array,"Array",(function(t,e){ir(this,{type:nr,target:f(t),index:0,kind:e})}),(function(){var t=rr(this),e=t.target,n=t.kind,i=t.index++;return!e||i>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:e[i],done:!1}:{value:[i,e[i]],done:!1}}),"values");di.Arguments=di.Array,_n("keys"),_n("values"),_n("entries");var lr=[].join,or=G!=Object,ar=vi("join",",");se({target:"Array",proto:!0,forced:or||!ar},{join:function(t){return lr.call(f(this),void 0===t?",":t)}});var ur=Math.min,dr=[].lastIndexOf,sr=!!dr&&1/[1].lastIndexOf(1,-0)<0,mr=vi("lastIndexOf"),hr=sr||!mr?function(t){if(sr)return dr.apply(this,arguments)||0;var e=f(this),n=jt(e.length),i=n-1;for(arguments.length>1&&(i=ur(i,Ft(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in e&&e[i]===t)return i||0;return-1}:dr;se({target:"Array",proto:!0,forced:hr!==[].lastIndexOf},{lastIndexOf:hr});var Zr=qe.map,br=Fn("map");se({target:"Array",proto:!0,forced:!br},{map:function(t){return Zr(this,t,arguments.length>1?arguments[1]:void 0)}});var pr=d((function(){function t(){}return!(Array.of.call(t)instanceof t)}));se({target:"Array",stat:!0,forced:pr},{of:function(){for(var t=0,e=arguments.length,n=new(Qe(this)?this:Array)(e);e>t;)Tn(n,t,arguments[t++]);return n.length=e,n}});var yr=function(t){return function(e,n,i,r){U(n);var c=M(e),l=G(c),o=jt(c.length),a=t?o-1:0,u=t?-1:1;if(i<2)for(;;){if(a in l){r=l[a],a+=u;break}if(a+=u,t?a<0:o<=a)throw TypeError("Reduce of empty array with no initial value")}for(;t?a>=0:o>a;a+=u)a in l&&(r=n(r,l[a],a,c));return r}},Ir={left:yr(!1),right:yr(!0)},Xr="process"==I(u.process),Gr=Ir.left,gr=vi("reduce");se({target:"Array",proto:!0,forced:!gr||!Xr&&J>79&&J<83},{reduce:function(t){return Gr(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var fr=Ir.right,Vr=vi("reduceRight");se({target:"Array",proto:!0,forced:!Vr||!Xr&&J>79&&J<83},{reduceRight:function(t){return fr(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Wr=Fn("slice"),vr=$("species"),Sr=[].slice,Cr=Math.max;se({target:"Array",proto:!0,forced:!Wr},{slice:function(t,e){var n,i,r,c=f(this),l=jt(c.length),o=At(t,l),a=At(void 0===e?l:e,l);if(me(c)&&(n=c.constructor,(Qe(n)&&(n===Array||me(n.prototype))||W(n)&&null===(n=n[vr]))&&(n=void 0),n===Array||void 0===n))return Sr.call(c,o,a);for(i=new(void 0===n?Array:n)(Cr(a-o,0)),r=0;o<a;o++,r++)o in c&&Tn(i,r,c[o]);return i.length=r,i}});var Yr=Math.floor,Rr=function(t,e){for(var n,i,r=t.length,c=1;c<r;){for(i=c,n=t[c];i&&e(t[i-1],n)>0;)t[i]=t[--i];i!==c++&&(t[i]=n)}return t},Kr=function(t,e,n){for(var i=t.length,r=e.length,c=0,l=0,o=[];c<i||l<r;)c<i&&l<r?o.push(n(t[c],e[l])<=0?t[c++]:e[l++]):o.push(c<i?t[c++]:e[l++]);return o},Lr=function t(e,n){var i=e.length,r=Yr(i/2);return i<8?Rr(e,n):Kr(t(e.slice(0,r),n),t(e.slice(r),n),n)},Jr=C.match(/firefox\/(\d+)/i),xr=!!Jr&&+Jr[1],Nr=/MSIE|Trident/.test(C),Hr=C.match(/AppleWebKit\/(\d+)\./),kr=!!Hr&&+Hr[1],Ur=[],Tr=Ur.sort,wr=d((function(){Ur.sort(void 0)})),Fr=d((function(){Ur.sort(null)})),zr=vi("sort"),jr=!d((function(){if(J)return J<70;if(!(xr&&xr>3)){if(Nr)return!0;if(kr)return kr<603;var t,e,n,i,r="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(i=0;i<47;i++)Ur.push({k:e+i,v:n})}for(Ur.sort((function(t,e){return e.v-t.v})),i=0;i<Ur.length;i++)e=Ur[i].k.charAt(0),r.charAt(r.length-1)!==e&&(r+=e);return"DGBEFHACIJK"!==r}}));se({target:"Array",proto:!0,forced:wr||!Fr||!zr||!jr},{sort:function(t){void 0!==t&&U(t);var e=M(this);if(jr)return void 0===t?Tr.call(e):Tr.call(e,t);var n,i,r=[],c=jt(e.length);for(i=0;i<c;i++)i in e&&r.push(e[i]);for(r=Lr(r,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:Xe(e)>Xe(n)?1:-1}}(t)),n=r.length,i=0;i<n;)e[i]=r[i++];for(;i<c;)delete e[i++];return e}});var Br=$("species"),Mr=function(t){var e=S(t),n=ht.f;s&&e&&!e[Br]&&n(e,Br,{configurable:!0,get:function(){return this}})};Mr("Array");var Ar=Fn("splice"),Pr=Math.max,Qr=Math.min,Dr=9007199254740991,Er="Maximum allowed length exceeded";se({target:"Array",proto:!0,forced:!Ar},{splice:function(t,e){var n,i,r,c,l,o,a=M(this),u=jt(a.length),d=At(t,u),s=arguments.length;if(0===s?n=i=0:1===s?(n=0,i=u-d):(n=s-2,i=Qr(Pr(Ft(e),0),u-d)),u+n-i>Dr)throw TypeError(Er);for(r=Ee(a,i),c=0;c<i;c++)(l=d+c)in a&&Tn(r,c,a[l]);if(r.length=i,n<i){for(c=d;c<u-i;c++)o=c+n,(l=c+i)in a?a[o]=a[l]:delete a[o];for(c=u;c>u-i+n;c--)delete a[c-1]}else if(n>i)for(c=u-i;c>d;c--)o=c+n-1,(l=c+i-1)in a?a[o]=a[l]:delete a[o];for(c=0;c<n;c++)a[c+d]=arguments[c+2];return a.length=u-i+n,r}}),_n("flat"),_n("flatMap");var Or="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,_r=function(t,e,n){for(var i in e)Ut(t,i,e[i],n);return t},qr=function(t,e,n){if(t instanceof e)return t;throw TypeError("Incorrect "+(n?n+" ":"")+"invocation")},$r=function(t){if(void 0===t)return 0;var e=Ft(t),n=jt(e);if(e!==n)throw RangeError("Wrong length or index");return n},tc=Math.abs,ec=Math.pow,nc=Math.floor,ic=Math.log,rc=Math.LN2,cc=function(t,e,n){var i,r,c,l=new Array(n),o=8*n-e-1,a=(1<<o)-1,u=a>>1,d=23===e?ec(2,-24)-ec(2,-77):0,s=t<0||0===t&&1/t<0?1:0,m=0;for((t=tc(t))!=t||t===1/0?(r=t!=t?1:0,i=a):(i=nc(ic(t)/rc),t*(c=ec(2,-i))<1&&(i--,c*=2),(t+=i+u>=1?d/c:d*ec(2,1-u))*c>=2&&(i++,c/=2),i+u>=a?(r=0,i=a):i+u>=1?(r=(t*c-1)*ec(2,e),i+=u):(r=t*ec(2,u-1)*ec(2,e),i=0));e>=8;l[m++]=255&r,r/=256,e-=8);for(i=i<<e|r,o+=e;o>0;l[m++]=255&i,i/=256,o-=8);return l[--m]|=128*s,l},lc=function(t,e){var n,i=t.length,r=8*i-e-1,c=(1<<r)-1,l=c>>1,o=r-7,a=i-1,u=t[a--],d=127&u;for(u>>=7;o>0;d=256*d+t[a],a--,o-=8);for(n=d&(1<<-o)-1,d>>=-o,o+=e;o>0;n=256*n+t[a],a--,o-=8);if(0===d)d=1-l;else{if(d===c)return n?NaN:u?-1/0:1/0;n+=ec(2,e),d-=l}return(u?-1:1)*n*ec(2,d-e)},oc=$t.f,ac=ht.f,uc=kt.PROPER,dc=kt.CONFIGURABLE,sc=Jt.get,mc=Jt.set,hc="ArrayBuffer",Zc="DataView",bc="Wrong index",pc=u.ArrayBuffer,yc=pc,Ic=u.DataView,Xc=Ic&&Ic.prototype,Gc=Object.prototype,gc=u.RangeError,fc=cc,Vc=lc,Wc=function(t){return[255&t]},vc=function(t){return[255&t,t>>8&255]},Sc=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},Cc=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Yc=function(t){return fc(t,23,4)},Rc=function(t){return fc(t,52,8)},Kc=function(t,e){ac(t.prototype,e,{get:function(){return sc(this)[e]}})},Lc=function(t,e,n,i){var r=$r(n),c=sc(t);if(r+e>c.byteLength)throw gc(bc);var l=sc(c.buffer).bytes,o=r+c.byteOffset,a=l.slice(o,o+e);return i?a:a.reverse()},Jc=function(t,e,n,i,r,c){var l=$r(n),o=sc(t);if(l+e>o.byteLength)throw gc(bc);for(var a=sc(o.buffer).bytes,u=l+o.byteOffset,d=i(+r),s=0;s<e;s++)a[u+s]=d[c?s:e-s-1]};if(Or){var xc=uc&&pc.name!==hc;if(d((function(){pc(1)}))&&d((function(){new pc(-1)}))&&!d((function(){return new pc,new pc(1.5),new pc(NaN),xc&&!dc})))xc&&dc&&Zt(pc,"name",hc);else{for(var Nc,Hc=(yc=function(t){return qr(this,yc),new pc($r(t))}).prototype=pc.prototype,kc=oc(pc),Uc=0;kc.length>Uc;)(Nc=kc[Uc++])in yc||Zt(yc,Nc,pc[Nc]);Hc.constructor=yc}Ai&&ki(Xc)!==Gc&&Ai(Xc,Gc);var Tc=new Ic(new yc(2)),wc=Xc.setInt8;Tc.setInt8(0,2147483648),Tc.setInt8(1,2147483649),!Tc.getInt8(0)&&Tc.getInt8(1)||_r(Xc,{setInt8:function(t,e){wc.call(this,t,e<<24>>24)},setUint8:function(t,e){wc.call(this,t,e<<24>>24)}},{unsafe:!0})}else yc=function(t){qr(this,yc,hc);var e=$r(t);mc(this,{bytes:qn.call(new Array(e),0),byteLength:e}),s||(this.byteLength=e)},Ic=function(t,e,n){qr(this,Ic,Zc),qr(t,yc,Zc);var i=sc(t).byteLength,r=Ft(e);if(r<0||r>i)throw gc("Wrong offset");if(r+(n=void 0===n?i-r:jt(n))>i)throw gc("Wrong length");mc(this,{buffer:t,byteLength:n,byteOffset:r}),s||(this.buffer=t,this.byteLength=n,this.byteOffset=r)},s&&(Kc(yc,"byteLength"),Kc(Ic,"buffer"),Kc(Ic,"byteLength"),Kc(Ic,"byteOffset")),_r(Ic.prototype,{getInt8:function(t){return Lc(this,1,t)[0]<<24>>24},getUint8:function(t){return Lc(this,1,t)[0]},getInt16:function(t){var e=Lc(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=Lc(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return Cc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return Cc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Vc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Vc(Lc(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Jc(this,1,t,Wc,e)},setUint8:function(t,e){Jc(this,1,t,Wc,e)},setInt16:function(t,e){Jc(this,2,t,vc,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Jc(this,2,t,vc,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Jc(this,4,t,Sc,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Jc(this,4,t,Sc,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Jc(this,4,t,Yc,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Jc(this,8,t,Rc,e,arguments.length>2?arguments[2]:void 0)}});we(yc,hc),we(Ic,Zc);var Fc={ArrayBuffer:yc,DataView:Ic},zc="ArrayBuffer",jc=Fc.ArrayBuffer,Bc=u.ArrayBuffer;se({global:!0,forced:Bc!==jc},{ArrayBuffer:jc}),Mr(zc);var Mc=$("toPrimitive"),Ac=Date.prototype;Mc in Ac||Ut(Ac,Mc,(function(t){if(dt(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return w(this,t)}));var Pc=$("hasInstance"),Qc=Function.prototype;Pc in Qc||ht.f(Qc,Pc,{value:function(t){if(!V(this)||!W(t))return!1;if(!W(this.prototype))return t instanceof this;for(;t=ki(t);)if(this.prototype===t)return!0;return!1}});var Dc=kt.EXISTS,Ec=ht.f,Oc=Function.prototype,_c=Oc.toString,qc=/^\s*function ([^ (]*)/;s&&!Dc&&Ec(Oc,"name",{configurable:!0,get:function(){try{return _c.call(this).match(qc)[1]}catch(t){return""}}}),se({global:!0},{globalThis:u});var $c=S("JSON","stringify"),tl=/[\uD800-\uDFFF]/g,el=/^[\uD800-\uDBFF]$/,nl=/^[\uDC00-\uDFFF]$/,il=function(t,e,n){var i=n.charAt(e-1),r=n.charAt(e+1);return el.test(t)&&!nl.test(r)||nl.test(t)&&!el.test(i)?"\\u"+t.charCodeAt(0).toString(16):t},rl=d((function(){return'"\\udf06\\ud834"'!==$c("\udf06\ud834")||'"\\udead"'!==$c("\udead")}));$c&&se({target:"JSON",stat:!0,forced:rl},{stringify:function(t,e,n){var i=$c.apply(null,arguments);return"string"==typeof i?i.replace(tl,il):i}}),we(u.JSON,"JSON",!0);var cl=!d((function(){return Object.isExtensible(Object.preventExtensions({}))})),ll=i((function(t){var e=ht.f,n=!1,i=E("meta"),r=0,c=Object.isExtensible||function(){return!0},l=function(t){e(t,i,{value:{objectID:"O"+r++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},n=!0;var t=$t.f,e=[].splice,r={};r[i]=1,t(r).length&&($t.f=function(n){for(var r=t(n),c=0,l=r.length;c<l;c++)if(r[c]===i){e.call(r,c,1);break}return r},se({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:Je.f}))},fastKey:function(t,e){if(!W(t))return"symbol"==o(t)?t:("string"==typeof t?"S":"P")+t;if(!P(t,i)){if(!c(t))return"F";if(!e)return"E";l(t)}return t[i].objectID},getWeakData:function(t,e){if(!P(t,i)){if(!c(t))return!0;if(!e)return!1;l(t)}return t[i].weakData},onFreeze:function(t){return cl&&n&&c(t)&&!P(t,i)&&l(t),t}};Wt[i]=!0})),ol=function(t,e){this.stopped=t,this.result=e},al=function(t,e,n){var i,r,c,l,a,u,d,s=n&&n.that,m=!(!n||!n.AS_ENTRIES),h=!(!n||!n.IS_ITERATOR),Z=!(!n||!n.INTERRUPTED),b=Fe(e,s,1+m+Z),p=function(t){return i&&ai(i,"normal",t),new ol(!0,t)},y=function(t){return m?(dt(t),Z?b(t[0],t[1],p):b(t[0],t[1])):Z?b(t,p):b(t)};if(h)i=t;else{if(!(r=bi(t)))throw TypeError(String(t)+" is not iterable");if(hi(r)){for(c=0,l=jt(t.length);l>c;c++)if((a=y(t[c]))&&a instanceof ol)return a;return new ol(!1)}i=pi(t,r)}for(u=i.next;!(d=u.call(i)).done;){try{a=y(d.value)}catch(t){ai(i,"throw",t)}if("object"==o(a)&&a&&a instanceof ol)return a}return new ol(!1)},ul=function(t,e,n){var i,r;return Ai&&V(i=e.constructor)&&i!==n&&W(r=i.prototype)&&r!==n.prototype&&Ai(t,r),t},dl=function(t,e,n){var i=-1!==t.indexOf("Map"),r=-1!==t.indexOf("Weak"),c=i?"set":"add",l=u[t],o=l&&l.prototype,a=l,s={},m=function(t){var e=o[t];Ut(o,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(r&&!W(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return r&&!W(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(r&&!W(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(ue(t,!V(l)||!(r||o.forEach&&!d((function(){(new l).entries().next()})))))a=n.getConstructor(e,t,i,c),ll.enable();else if(ue(t,!0)){var h=new a,Z=h[c](r?{}:-0,1)!=h,b=d((function(){h.has(1)})),p=fi((function(t){new l(t)})),y=!r&&d((function(){for(var t=new l,e=5;e--;)t[c](e,e);return!t.has(-0)}));p||((a=e((function(e,n){qr(e,a,t);var r=ul(new l,e,a);return null!=n&&al(n,r[c],{that:r,AS_ENTRIES:i}),r}))).prototype=o,o.constructor=a),(b||y)&&(m("delete"),m("has"),i&&m("get")),(y||Z)&&m(c),r&&o.clear&&delete o.clear}return s[t]=a,se({global:!0,forced:a!=l},s),we(a,t),r||n.setStrong(a,t,i),a},sl=ht.f,ml=ll.fastKey,hl=Jt.set,Zl=Jt.getterFor,bl={getConstructor:function(t,e,n,i){var r=t((function(t,c){qr(t,r,e),hl(t,{type:e,index:Ye(null),first:void 0,last:void 0,size:0}),s||(t.size=0),null!=c&&al(c,t[i],{that:t,AS_ENTRIES:n})})),c=Zl(e),l=function(t,e,n){var i,r,l=c(t),a=o(t,e);return a?a.value=n:(l.last=a={index:r=ml(e,!0),key:e,value:n,previous:i=l.last,next:void 0,removed:!1},l.first||(l.first=a),i&&(i.next=a),s?l.size++:t.size++,"F"!==r&&(l.index[r]=a)),t},o=function(t,e){var n,i=c(t),r=ml(e);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==e)return n};return _r(r.prototype,{clear:function(){for(var t=c(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,s?t.size=0:this.size=0},delete:function(t){var e=this,n=c(e),i=o(e,t);if(i){var r=i.next,l=i.previous;delete n.index[i.index],i.removed=!0,l&&(l.next=r),r&&(r.previous=l),n.first==i&&(n.first=r),n.last==i&&(n.last=l),s?n.size--:e.size--}return!!i},forEach:function(t){for(var e,n=c(this),i=Fe(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:n.first;)for(i(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!o(this,t)}}),_r(r.prototype,n?{get:function(t){var e=o(this,t);return e&&e.value},set:function(t,e){return l(this,0===t?0:t,e)}}:{add:function(t){return l(this,t=0===t?0:t,t)}}),s&&sl(r.prototype,"size",{get:function(){return c(this).size}}),r},setStrong:function(t,e,n){var i=e+" Iterator",r=Zl(e),c=Zl(i);er(t,e,(function(t,e){hl(this,{type:i,target:t,state:r(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),Mr(e)}};dl("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),bl);var pl=Math.log,yl=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:pl(1+t)},Il=Math.acosh,Xl=Math.log,Gl=Math.sqrt,gl=Math.LN2,fl=!Il||710!=Math.floor(Il(Number.MAX_VALUE))||Il(1/0)!=1/0;se({target:"Math",stat:!0,forced:fl},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Xl(t)+gl:yl(t-1+Gl(t-1)*Gl(t+1))}});var Vl=Math.asinh,Wl=Math.log,vl=Math.sqrt;se({target:"Math",stat:!0,forced:!(Vl&&1/Vl(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Wl(e+vl(e*e+1)):e}});var Sl=Math.atanh,Cl=Math.log;se({target:"Math",stat:!0,forced:!(Sl&&1/Sl(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:Cl((1+t)/(1-t))/2}});var Yl=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1},Rl=Math.abs,Kl=Math.pow;se({target:"Math",stat:!0},{cbrt:function(t){return Yl(t=+t)*Kl(Rl(t),1/3)}});var Ll=Math.floor,Jl=Math.log,xl=Math.LOG2E;se({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-Ll(Jl(t+.5)*xl):32}});var Nl=Math.expm1,Hl=Math.exp,kl=!Nl||Nl(10)>22025.465794806718||Nl(10)<22025.465794806718||-2e-17!=Nl(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Hl(t)-1}:Nl,Ul=Math.cosh,Tl=Math.abs,wl=Math.E;se({target:"Math",stat:!0,forced:!Ul||Ul(710)===1/0},{cosh:function(t){var e=kl(Tl(t)-1)+1;return(e+1/(e*wl*wl))*(wl/2)}}),se({target:"Math",stat:!0,forced:kl!=Math.expm1},{expm1:kl});var Fl=Math.abs,zl=Math.pow,jl=zl(2,-52),Bl=zl(2,-23),Ml=zl(2,127)*(2-Bl),Al=zl(2,-126),Pl=Math.fround||function(t){var e,n,i=Fl(t),r=Yl(t);return i<Al?r*function(t){return t+1/jl-1/jl}(i/Al/Bl)*Al*Bl:(n=(e=(1+Bl/jl)*i)-(e-i))>Ml||n!=n?r*(1/0):r*n};se({target:"Math",stat:!0},{fround:Pl});var Ql=Math.hypot,Dl=Math.abs,El=Math.sqrt,Ol=!!Ql&&Ql(1/0,NaN)!==1/0;se({target:"Math",stat:!0,forced:Ol},{hypot:function(t,e){for(var n,i,r=0,c=0,l=arguments.length,o=0;c<l;)o<(n=Dl(arguments[c++]))?(r=r*(i=o/n)*i+1,o=n):r+=n>0?(i=n/o)*i:n;return o===1/0?1/0:o*El(r)}});var _l=Math.imul,ql=d((function(){return-5!=_l(4294967295,5)||2!=_l.length}));se({target:"Math",stat:!0,forced:ql},{imul:function(t,e){var n=65535,i=+t,r=+e,c=n&i,l=n&r;return 0|c*l+((n&i>>>16)*l+c*(n&r>>>16)<<16>>>0)}});var $l=Math.log,to=Math.LOG10E;se({target:"Math",stat:!0},{log10:function(t){return $l(t)*to}}),se({target:"Math",stat:!0},{log1p:yl});var eo=Math.log,no=Math.LN2;se({target:"Math",stat:!0},{log2:function(t){return eo(t)/no}}),se({target:"Math",stat:!0},{sign:Yl});var io=Math.abs,ro=Math.exp,co=Math.E,lo=d((function(){return-2e-17!=Math.sinh(-2e-17)}));se({target:"Math",stat:!0,forced:lo},{sinh:function(t){return io(t=+t)<1?(kl(t)-kl(-t))/2:(ro(t-1)-ro(-t-1))*(co/2)}});var oo=Math.exp;se({target:"Math",stat:!0},{tanh:function(t){var e=kl(t=+t),n=kl(-t);return e==1/0?1:n==1/0?-1:(e-n)/(oo(t)+oo(-t))}}),we(Math,"Math",!0);var ao=Math.ceil,uo=Math.floor;se({target:"Math",stat:!0},{trunc:function(t){return(t>0?uo:ao)(t)}});var so="\t\n\v\f\r                 \u2028\u2029\ufeff",mo="["+so+"]",ho=RegExp("^"+mo+mo+"*"),Zo=RegExp(mo+mo+"*$"),bo=function(t){return function(e){var n=Xe(g(e));return 1&t&&(n=n.replace(ho,"")),2&t&&(n=n.replace(Zo,"")),n}},po={start:bo(1),end:bo(2),trim:bo(3)},yo=$t.f,Io=ut.f,Xo=ht.f,Go=po.trim,go="Number",fo=u.Number,Vo=fo.prototype,Wo=I(Ye(Vo))==go,vo=function(t){if(H(t))throw TypeError("Cannot convert a Symbol value to a number");var e,n,i,r,c,l,o,a,u=et(t,"number");if("string"==typeof u&&u.length>2)if(43===(e=(u=Go(u)).charCodeAt(0))||45===e){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+u}for(l=(c=u.slice(2)).length,o=0;o<l;o++)if((a=c.charCodeAt(o))<48||a>r)return NaN;return parseInt(c,i)}return+u};if(ue(go,!fo(" 0o1")||!fo("0b1")||fo("+0x1"))){for(var So,Co=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof Co&&(Wo?d((function(){Vo.valueOf.call(n)})):I(n)!=go)?ul(new fo(vo(e)),n,Co):vo(e)},Yo=s?yo(fo):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),Ro=0;Yo.length>Ro;Ro++)P(fo,So=Yo[Ro])&&!P(Co,So)&&Xo(Co,So,Io(fo,So));Co.prototype=Vo,Vo.constructor=Co,Ut(u,go,Co)}se({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var Ko=u.isFinite,Lo=Number.isFinite||function(t){return"number"==typeof t&&Ko(t)};se({target:"Number",stat:!0},{isFinite:Lo});var Jo=Math.floor,xo=function(t){return!W(t)&&isFinite(t)&&Jo(t)===t};se({target:"Number",stat:!0},{isInteger:xo}),se({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var No=Math.abs;se({target:"Number",stat:!0},{isSafeInteger:function(t){return xo(t)&&No(t)<=9007199254740991}}),se({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),se({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var Ho=po.trim,ko=u.parseFloat,Uo=u.Symbol,To=Uo&&Uo.iterator,wo=1/ko(so+"-0")!=-1/0||To&&!d((function(){ko(Object(To))}))?function(t){var e=Ho(Xe(t)),n=ko(e);return 0===n&&"-"==e.charAt(0)?-0:n}:ko;se({target:"Number",stat:!0,forced:Number.parseFloat!=wo},{parseFloat:wo});var Fo=po.trim,zo=u.parseInt,jo=u.Symbol,Bo=jo&&jo.iterator,Mo=/^[+-]?0[Xx]/,Ao=8!==zo(so+"08")||22!==zo(so+"0x16")||Bo&&!d((function(){zo(Object(Bo))}))?function(t,e){var n=Fo(Xe(t));return zo(n,e>>>0||(Mo.test(n)?16:10))}:zo;se({target:"Number",stat:!0,forced:Number.parseInt!=Ao},{parseInt:Ao});var Po=1..valueOf,Qo=function(t){var e=Xe(g(this)),n="",i=Ft(t);if(i<0||i==1/0)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n},Do=1..toFixed,Eo=Math.floor,Oo=function t(e,n,i){return 0===n?i:n%2==1?t(e,n-1,i*e):t(e*e,n/2,i)},_o=function(t,e,n){for(var i=-1,r=n;++i<6;)r+=e*t[i],t[i]=r%1e7,r=Eo(r/1e7)},qo=function(t,e){for(var n=6,i=0;--n>=0;)i+=t[n],t[n]=Eo(i/e),i=i%e*1e7},$o=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var i=String(t[e]);n=""===n?i:n+Qo.call("0",7-i.length)+i}return n},ta=Do&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){Do.call({})}));se({target:"Number",proto:!0,forced:ta},{toFixed:function(t){var e,n,i,r,c,l=(e=this,Po.call(e)),o=Ft(t),a=[0,0,0,0,0,0],u="",d="0";if(o<0||o>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(u="-",l=-l),l>1e-21)if(n=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(l*Oo(2,69,1))-69,i=n<0?l*Oo(2,-n,1):l/Oo(2,n,1),i*=4503599627370496,(n=52-n)>0){for(_o(a,0,i),r=o;r>=7;)_o(a,1e7,0),r-=7;for(_o(a,Oo(10,r,1),0),r=n-1;r>=23;)qo(a,1<<23),r-=23;qo(a,1<<r),_o(a,1,1),qo(a,2),d=$o(a)}else _o(a,0,i),_o(a,1<<-n,0),d=$o(a)+Qo.call("0",o);return d=o>0?u+((c=d.length)<=o?"0."+Qo.call("0",o-c)+d:d.slice(0,c-o)+"."+d.slice(c-o)):u+d}});var ea=Object.assign,na=Object.defineProperty,ia=!ea||d((function(){if(s&&1!==ea({b:1},ea(na({},"a",{enumerable:!0,get:function(){na(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=ea({},t)[n]||Ge(ea({},e)).join("")!=i}))?function(t,e){for(var n=M(t),i=arguments.length,r=1,c=te.f,l=b.f;i>r;)for(var o,a=G(arguments[r++]),u=c?Ge(a).concat(c(a)):Ge(a),d=u.length,m=0;d>m;)o=u[m++],s&&!l.call(a,o)||(n[o]=a[o]);return n}:ea;se({target:"Object",stat:!0,forced:Object.assign!==ia},{assign:ia});var ra=!d((function(){if(!(kr&&kr<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete u[t]}}));s&&se({target:"Object",proto:!0,forced:ra},{__defineGetter__:function(t,e){ht.f(M(this),t,{get:U(e),enumerable:!0,configurable:!0})}}),s&&se({target:"Object",proto:!0,forced:ra},{__defineSetter__:function(t,e){ht.f(M(this),t,{set:U(e),enumerable:!0,configurable:!0})}});var ca=b.f,la=function(t){return function(e){for(var n,i=f(e),r=Ge(i),c=r.length,l=0,o=[];c>l;)n=r[l++],s&&!ca.call(i,n)||o.push(t?[n,i[n]]:i[n]);return o}},oa={entries:la(!0),values:la(!1)},aa=oa.entries;se({target:"Object",stat:!0},{entries:function(t){return aa(t)}});var ua=ll.onFreeze,da=Object.freeze,sa=d((function(){da(1)}));se({target:"Object",stat:!0,forced:sa,sham:!cl},{freeze:function(t){return da&&W(t)?da(ua(t)):t}}),se({target:"Object",stat:!0},{fromEntries:function(t){var e={};return al(t,(function(t,n){Tn(e,t,n)}),{AS_ENTRIES:!0}),e}});var ma=ut.f,ha=d((function(){ma(1)}));se({target:"Object",stat:!0,forced:!s||ha,sham:!s},{getOwnPropertyDescriptor:function(t,e){return ma(f(t),e)}}),se({target:"Object",stat:!0,sham:!s},{getOwnPropertyDescriptors:function(t){for(var e,n,i=f(t),r=ut.f,c=ee(i),l={},o=0;c.length>o;)void 0!==(n=r(i,e=c[o++]))&&Tn(l,e,n);return l}});var Za=Je.f,ba=d((function(){return!Object.getOwnPropertyNames(1)}));se({target:"Object",stat:!0,forced:ba},{getOwnPropertyNames:Za});var pa=d((function(){ki(1)}));se({target:"Object",stat:!0,forced:pa,sham:!xi},{getPrototypeOf:function(t){return ki(M(t))}});var ya=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};se({target:"Object",stat:!0},{is:ya});var Ia=Object.isExtensible,Xa=d((function(){Ia(1)}));se({target:"Object",stat:!0,forced:Xa},{isExtensible:function(t){return!!W(t)&&(!Ia||Ia(t))}});var Ga=Object.isFrozen,ga=d((function(){Ga(1)}));se({target:"Object",stat:!0,forced:ga},{isFrozen:function(t){return!W(t)||!!Ga&&Ga(t)}});var fa=Object.isSealed,Va=d((function(){fa(1)}));se({target:"Object",stat:!0,forced:Va},{isSealed:function(t){return!W(t)||!!fa&&fa(t)}});var Wa=d((function(){Ge(1)}));se({target:"Object",stat:!0,forced:Wa},{keys:function(t){return Ge(M(t))}});var va=ut.f;s&&se({target:"Object",proto:!0,forced:ra},{__lookupGetter__:function(t){var e,n=M(this),i=nt(t);do{if(e=va(n,i))return e.get}while(n=ki(n))}});var Sa=ut.f;s&&se({target:"Object",proto:!0,forced:ra},{__lookupSetter__:function(t){var e,n=M(this),i=nt(t);do{if(e=Sa(n,i))return e.set}while(n=ki(n))}});var Ca=ll.onFreeze,Ya=Object.preventExtensions,Ra=d((function(){Ya(1)}));se({target:"Object",stat:!0,forced:Ra,sham:!cl},{preventExtensions:function(t){return Ya&&W(t)?Ya(Ca(t)):t}});var Ka=ll.onFreeze,La=Object.seal,Ja=d((function(){La(1)}));se({target:"Object",stat:!0,forced:Ja,sham:!cl},{seal:function(t){return La&&W(t)?La(Ka(t)):t}}),se({target:"Object",stat:!0},{setPrototypeOf:Ai});var xa=be?{}.toString:function(){return"[object "+Ie(this)+"]"};be||Ut(Object.prototype,"toString",xa,{unsafe:!0});var Na=oa.values;se({target:"Object",stat:!0},{values:function(t){return Na(t)}}),se({global:!0,forced:parseFloat!=wo},{parseFloat:wo}),se({global:!0,forced:parseInt!=Ao},{parseInt:Ao});var Ha,ka,Ua,Ta,wa=u.Promise,Fa=function(t){if(Qe(t))return t;throw TypeError(k(t)+" is not a constructor")},za=$("species"),ja=function(t,e){var n,i=dt(t).constructor;return void 0===i||null==(n=dt(i)[za])?e:Fa(n)},Ba=/(?:ipad|iphone|ipod).*applewebkit/i.test(C),Ma=u.setImmediate,Aa=u.clearImmediate,Pa=u.process,Qa=u.MessageChannel,Da=u.Dispatch,Ea=0,Oa={},_a="onreadystatechange";try{Ha=u.location}catch(t){}var qa=function(t){if(Oa.hasOwnProperty(t)){var e=Oa[t];delete Oa[t],e()}},$a=function(t){return function(){qa(t)}},tu=function(t){qa(t.data)},eu=function(t){u.postMessage(String(t),Ha.protocol+"//"+Ha.host)};Ma&&Aa||(Ma=function(t){for(var e=[],n=arguments.length,i=1;n>i;)e.push(arguments[i++]);return Oa[++Ea]=function(){(V(t)?t:Function(t)).apply(void 0,e)},ka(Ea),Ea},Aa=function(t){delete Oa[t]},Xr?ka=function(t){Pa.nextTick($a(t))}:Da&&Da.now?ka=function(t){Da.now($a(t))}:Qa&&!Ba?(Ta=(Ua=new Qa).port2,Ua.port1.onmessage=tu,ka=Fe(Ta.postMessage,Ta,1)):u.addEventListener&&V(u.postMessage)&&!u.importScripts&&Ha&&"file:"!==Ha.protocol&&!d(eu)?(ka=eu,u.addEventListener("message",tu,!1)):ka=_a in ct("script")?function(t){fe.appendChild(ct("script")).onreadystatechange=function(){fe.removeChild(this),qa(t)}}:function(t){setTimeout($a(t),0)});var nu,iu,ru,cu,lu,ou,au,uu,du={set:Ma,clear:Aa},su=/ipad|iphone|ipod/i.test(C)&&void 0!==u.Pebble,mu=/web0s(?!.*chrome)/i.test(C),hu=ut.f,Zu=du.set,bu=u.MutationObserver||u.WebKitMutationObserver,pu=u.document,yu=u.process,Iu=u.Promise,Xu=hu(u,"queueMicrotask"),Gu=Xu&&Xu.value;Gu||(nu=function(){var t,e;for(Xr&&(t=yu.domain)&&t.exit();iu;){e=iu.fn,iu=iu.next;try{e()}catch(t){throw iu?cu():ru=void 0,t}}ru=void 0,t&&t.enter()},Ba||Xr||mu||!bu||!pu?!su&&Iu&&Iu.resolve?((au=Iu.resolve(void 0)).constructor=Iu,uu=au.then,cu=function(){uu.call(au,nu)}):cu=Xr?function(){yu.nextTick(nu)}:function(){Zu.call(u,nu)}:(lu=!0,ou=pu.createTextNode(""),new bu(nu).observe(ou,{characterData:!0}),cu=function(){ou.data=lu=!lu}));var gu,fu,Vu,Wu,vu=Gu||function(t){var e={fn:t,next:void 0};ru&&(ru.next=e),iu||(iu=e,cu()),ru=e},Su=function(t){var e,n;this.promise=new t((function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i})),this.resolve=U(e),this.reject=U(n)},Cu={f:function(t){return new Su(t)}},Yu=function(t,e){if(dt(t),W(e)&&e.constructor===t)return e;var n=Cu.f(t);return(0,n.resolve)(e),n.promise},Ru=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},Ku="object"==("undefined"==typeof window?"undefined":o(window)),Lu=du.set,Ju=$("species"),xu="Promise",Nu=Jt.get,Hu=Jt.set,ku=Jt.getterFor(xu),Uu=wa&&wa.prototype,Tu=wa,wu=Uu,Fu=u.TypeError,zu=u.document,ju=u.process,Bu=Cu.f,Mu=Bu,Au=!!(zu&&zu.createEvent&&u.dispatchEvent),Pu=V(u.PromiseRejectionEvent),Qu="unhandledrejection",Du=!1,Eu=ue(xu,(function(){var t=Xt(Tu),e=t!==String(Tu);if(!e&&66===J)return!0;if(J>=51&&/native code/.test(t))return!1;var n=new Tu((function(t){t(1)})),i=function(t){t((function(){}),(function(){}))};return(n.constructor={})[Ju]=i,!(Du=n.then((function(){}))instanceof i)||!e&&Ku&&!Pu})),Ou=Eu||!fi((function(t){Tu.all(t).catch((function(){}))})),_u=function(t){var e;return!(!W(t)||!V(e=t.then))&&e},qu=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;vu((function(){for(var i=t.value,r=1==t.state,c=0;n.length>c;){var l,o,a,u=n[c++],d=r?u.ok:u.fail,s=u.resolve,m=u.reject,h=u.domain;try{d?(r||(2===t.rejection&&nd(t),t.rejection=1),!0===d?l=i:(h&&h.enter(),l=d(i),h&&(h.exit(),a=!0)),l===u.promise?m(Fu("Promise-chain cycle")):(o=_u(l))?o.call(l,s,m):s(l)):m(i)}catch(t){h&&!a&&h.exit(),m(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&td(t)}))}},$u=function(t,e,n){var i,r;Au?((i=zu.createEvent("Event")).promise=e,i.reason=n,i.initEvent(t,!1,!0),u.dispatchEvent(i)):i={promise:e,reason:n},!Pu&&(r=u["on"+t])?r(i):t===Qu&&function(t,e){var n=u.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}("Unhandled promise rejection",n)},td=function(t){Lu.call(u,(function(){var e,n=t.facade,i=t.value;if(ed(t)&&(e=Ru((function(){Xr?ju.emit("unhandledRejection",i,n):$u(Qu,n,i)})),t.rejection=Xr||ed(t)?2:1,e.error))throw e.value}))},ed=function(t){return 1!==t.rejection&&!t.parent},nd=function(t){Lu.call(u,(function(){var e=t.facade;Xr?ju.emit("rejectionHandled",e):$u("rejectionhandled",e,t.value)}))},id=function(t,e,n){return function(i){t(e,i,n)}},rd=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,qu(t,!0))},cd=function t(e,n,i){if(!e.done){e.done=!0,i&&(e=i);try{if(e.facade===n)throw Fu("Promise can't be resolved itself");var r=_u(n);r?vu((function(){var i={done:!1};try{r.call(n,id(t,i,e),id(rd,i,e))}catch(t){rd(i,t,e)}})):(e.value=n,e.state=1,qu(e,!1))}catch(t){rd({done:!1},t,e)}}};if(Eu&&(wu=(Tu=function(t){qr(this,Tu,xu),U(t),gu.call(this);var e=Nu(this);try{t(id(cd,e),id(rd,e))}catch(t){rd(e,t)}}).prototype,(gu=function(t){Hu(this,{type:xu,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=_r(wu,{then:function(t,e){var n=ku(this),i=Bu(ja(this,Tu));return i.ok=!V(t)||t,i.fail=V(e)&&e,i.domain=Xr?ju.domain:void 0,n.parent=!0,n.reactions.push(i),0!=n.state&&qu(n,!1),i.promise},catch:function(t){return this.then(void 0,t)}}),fu=function(){var t=new gu,e=Nu(t);this.promise=t,this.resolve=id(cd,e),this.reject=id(rd,e)},Cu.f=Bu=function(t){return t===Tu||t===Vu?new fu(t):Mu(t)},V(wa)&&Uu!==Object.prototype)){Wu=Uu.then,Du||(Ut(Uu,"then",(function(t,e){var n=this;return new Tu((function(t,e){Wu.call(n,t,e)})).then(t,e)}),{unsafe:!0}),Ut(Uu,"catch",wu.catch,{unsafe:!0}));try{delete Uu.constructor}catch(t){}Ai&&Ai(Uu,wu)}se({global:!0,wrap:!0,forced:Eu},{Promise:Tu}),we(Tu,xu,!1),Mr(xu),Vu=S(xu),se({target:xu,stat:!0,forced:Eu},{reject:function(t){var e=Bu(this);return e.reject.call(void 0,t),e.promise}}),se({target:xu,stat:!0,forced:Eu},{resolve:function(t){return Yu(this,t)}}),se({target:xu,stat:!0,forced:Ou},{all:function(t){var e=this,n=Bu(e),i=n.resolve,r=n.reject,c=Ru((function(){var n=U(e.resolve),c=[],l=0,o=1;al(t,(function(t){var a=l++,u=!1;c.push(void 0),o++,n.call(e,t).then((function(t){u||(u=!0,c[a]=t,--o||i(c))}),r)})),--o||i(c)}));return c.error&&r(c.value),n.promise},race:function(t){var e=this,n=Bu(e),i=n.reject,r=Ru((function(){var r=U(e.resolve);al(t,(function(t){r.call(e,t).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}}),se({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=Cu.f(e),i=n.resolve,r=n.reject,c=Ru((function(){var n=U(e.resolve),r=[],c=0,l=1;al(t,(function(t){var o=c++,a=!1;r.push(void 0),l++,n.call(e,t).then((function(t){a||(a=!0,r[o]={status:"fulfilled",value:t},--l||i(r))}),(function(t){a||(a=!0,r[o]={status:"rejected",reason:t},--l||i(r))}))})),--l||i(r)}));return c.error&&r(c.value),n.promise}});var ld=!!wa&&d((function(){wa.prototype.finally.call({then:function(){}},(function(){}))}));if(se({target:"Promise",proto:!0,real:!0,forced:ld},{finally:function(t){var e=ja(this,S("Promise")),n=V(t);return this.then(n?function(n){return Yu(e,t()).then((function(){return n}))}:t,n?function(n){return Yu(e,t()).then((function(){throw n}))}:t)}}),V(wa)){var od=S("Promise").prototype.finally;wa.prototype.finally!==od&&Ut(wa.prototype,"finally",od,{unsafe:!0})}var ad=S("Reflect","apply"),ud=Function.apply,dd=!d((function(){ad((function(){}))}));se({target:"Reflect",stat:!0,forced:dd},{apply:function(t,e,n){return U(t),dt(n),ad?ad(t,e,n):ud.call(t,e,n)}});var sd=[].slice,md={},hd=function(t,e,n){if(!(e in md)){for(var i=[],r=0;r<e;r++)i[r]="a["+r+"]";md[e]=Function("C,a","return new C("+i.join(",")+")")}return md[e](t,n)},Zd=Function.bind||function(t){var e=U(this),n=sd.call(arguments,1),i=function(){var r=n.concat(sd.call(arguments));return this instanceof i?hd(e,r.length,r):e.apply(t,r)};return W(e.prototype)&&(i.prototype=e.prototype),i},bd=S("Reflect","construct"),pd=d((function(){function t(){}return!(bd((function(){}),[],t)instanceof t)})),yd=!d((function(){bd((function(){}))})),Id=pd||yd;se({target:"Reflect",stat:!0,forced:Id,sham:Id},{construct:function(t,e){Fa(t),dt(e);var n=arguments.length<3?t:Fa(arguments[2]);if(yd&&!pd)return bd(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var i=[null];return i.push.apply(i,e),new(Zd.apply(t,i))}var r=n.prototype,c=Ye(W(r)?r:Object.prototype),l=Function.apply.call(t,c,e);return W(l)?l:c}});var Xd=d((function(){Reflect.defineProperty(ht.f({},1,{value:1}),1,{value:2})}));se({target:"Reflect",stat:!0,forced:Xd,sham:!s},{defineProperty:function(t,e,n){dt(t);var i=nt(e);dt(n);try{return ht.f(t,i,n),!0}catch(t){return!1}}});var Gd=ut.f;se({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=Gd(dt(t),e);return!(n&&!n.configurable)&&delete t[e]}});var gd=function(t){return void 0!==t&&(P(t,"value")||P(t,"writable"))};se({target:"Reflect",stat:!0},{get:function t(e,n){var i,r,c=arguments.length<3?e:arguments[2];return dt(e)===c?e[n]:(i=ut.f(e,n))?gd(i)?i.value:void 0===i.get?void 0:i.get.call(c):W(r=ki(e))?t(r,n,c):void 0}}),se({target:"Reflect",stat:!0,sham:!s},{getOwnPropertyDescriptor:function(t,e){return ut.f(dt(t),e)}}),se({target:"Reflect",stat:!0,sham:!xi},{getPrototypeOf:function(t){return ki(dt(t))}}),se({target:"Reflect",stat:!0},{has:function(t,e){return e in t}});var fd=Object.isExtensible;se({target:"Reflect",stat:!0},{isExtensible:function(t){return dt(t),!fd||fd(t)}}),se({target:"Reflect",stat:!0},{ownKeys:ee}),se({target:"Reflect",stat:!0,sham:!cl},{preventExtensions:function(t){dt(t);try{var e=S("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}});var Vd=d((function(){var t=function(){},e=ht.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}));se({target:"Reflect",stat:!0,forced:Vd},{set:function t(e,n,i){var r,c,l,o=arguments.length<4?e:arguments[3],a=ut.f(dt(e),n);if(!a){if(W(c=ki(e)))return t(c,n,i,o);a=p(0)}if(gd(a)){if(!1===a.writable||!W(o))return!1;if(r=ut.f(o,n)){if(r.get||r.set||!1===r.writable)return!1;r.value=i,ht.f(o,n,r)}else ht.f(o,n,p(0,i))}else{if(void 0===(l=a.set))return!1;l.call(o,i)}return!0}}),Ai&&se({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){dt(t),Mi(e);try{return Ai(t,e),!0}catch(t){return!1}}});var Wd=$("match"),vd=function(t){var e;return W(t)&&(void 0!==(e=t[Wd])?!!e:"RegExp"==I(t))},Sd=function(){var t=dt(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e},Cd=u.RegExp,Yd=d((function(){var t=Cd("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),Rd=d((function(){var t=Cd("^r","gy");return t.lastIndex=2,null!=t.exec("str")})),Kd={UNSUPPORTED_Y:Yd,BROKEN_CARET:Rd},Ld=u.RegExp,Jd=d((function(){var t=Ld(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)})),xd=u.RegExp,Nd=d((function(){var t=xd("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")})),Hd=ht.f,kd=$t.f,Ud=Jt.enforce,Td=$("match"),wd=u.RegExp,Fd=wd.prototype,zd=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,jd=/a/g,Bd=/a/g,Md=new wd(jd)!==jd,Ad=Kd.UNSUPPORTED_Y,Pd=s&&(!Md||Ad||Jd||Nd||d((function(){return Bd[Td]=!1,wd(jd)!=jd||wd(Bd)==Bd||"/a/i"!=wd(jd,"i")})));if(ue("RegExp",Pd)){for(var Qd=function(t,e){var n,i,r,c,l,o,a=this instanceof Qd,u=vd(t),d=void 0===e,s=[],m=t;if(!a&&u&&d&&t.constructor===Qd)return t;if((u||t instanceof Qd)&&(t=t.source,d&&(e="flags"in m?m.flags:Sd.call(m))),t=void 0===t?"":Xe(t),e=void 0===e?"":Xe(e),m=t,Jd&&"dotAll"in jd&&(i=!!e&&e.indexOf("s")>-1)&&(e=e.replace(/s/g,"")),n=e,Ad&&"sticky"in jd&&(r=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,"")),Nd&&(c=function(t){for(var e,n=t.length,i=0,r="",c=[],l={},o=!1,a=!1,u=0,d="";i<=n;i++){if("\\"===(e=t.charAt(i)))e+=t.charAt(++i);else if("]"===e)o=!1;else if(!o)switch(!0){case"["===e:o=!0;break;case"("===e:zd.test(t.slice(i+1))&&(i+=2,a=!0),r+=e,u++;continue;case">"===e&&a:if(""===d||P(l,d))throw new SyntaxError("Invalid capture group name");l[d]=!0,c.push([d,u]),a=!1,d="";continue}a?d+=e:r+=e}return[r,c]}(t),t=c[0],s=c[1]),l=ul(wd(t,e),a?this:Fd,Qd),(i||r||s.length)&&(o=Ud(l),i&&(o.dotAll=!0,o.raw=Qd(function(t){for(var e,n=t.length,i=0,r="",c=!1;i<=n;i++)"\\"!==(e=t.charAt(i))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),r+=e):r+="[\\s\\S]":r+=e+t.charAt(++i);return r}(t),n)),r&&(o.sticky=!0),s.length&&(o.groups=s)),t!==m)try{Zt(l,"source",""===m?"(?:)":m)}catch(t){}return l},Dd=function(t){t in Qd||Hd(Qd,t,{configurable:!0,get:function(){return wd[t]},set:function(e){wd[t]=e}})},Ed=kd(wd),Od=0;Ed.length>Od;)Dd(Ed[Od++]);Fd.constructor=Qd,Qd.prototype=Fd,Ut(u,"RegExp",Qd)}Mr("RegExp");var _d=Jt.get,qd=RegExp.prototype.exec,$d=B("native-string-replace",String.prototype.replace),ts=qd,es=function(){var t=/a/,e=/b*/g;return qd.call(t,"a"),qd.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),ns=Kd.UNSUPPORTED_Y||Kd.BROKEN_CARET,is=void 0!==/()??/.exec("")[1];(es||is||ns||Jd||Nd)&&(ts=function(t){var e,n,i,r,c,l,o,a=this,u=_d(a),d=Xe(t),s=u.raw;if(s)return s.lastIndex=a.lastIndex,e=ts.call(s,d),a.lastIndex=s.lastIndex,e;var m=u.groups,h=ns&&a.sticky,Z=Sd.call(a),b=a.source,p=0,y=d;if(h&&(-1===(Z=Z.replace("y","")).indexOf("g")&&(Z+="g"),y=d.slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==d.charAt(a.lastIndex-1))&&(b="(?: "+b+")",y=" "+y,p++),n=new RegExp("^(?:"+b+")",Z)),is&&(n=new RegExp("^"+b+"$(?!\\s)",Z)),es&&(i=a.lastIndex),r=qd.call(h?n:a,y),h?r?(r.input=r.input.slice(p),r[0]=r[0].slice(p),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:es&&r&&(a.lastIndex=a.global?r.index+r[0].length:i),is&&r&&r.length>1&&$d.call(r[0],n,(function(){for(c=1;c<arguments.length-2;c++)void 0===arguments[c]&&(r[c]=void 0)})),r&&m)for(r.groups=l=Ye(null),c=0;c<m.length;c++)l[(o=m[c])[0]]=r[o[1]];return r});var rs=ts;se({target:"RegExp",proto:!0,forced:/./.exec!==rs},{exec:rs}),s&&d((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&ht.f(RegExp.prototype,"flags",{configurable:!0,get:Sd});var cs=Kd.UNSUPPORTED_Y,ls=ht.f,os=Jt.get,as=RegExp.prototype;s&&cs&&ls(as,"sticky",{configurable:!0,get:function(){if(this!==as){if(this instanceof RegExp)return!!os(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}});var us=function(){var t=!1,e=/[ac]/;return e.exec=function(){return t=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&t}(),ds=/./.test;se({target:"RegExp",proto:!0,forced:!us},{test:function(t){var e=this.exec;if(!V(e))return ds.call(this,t);var n=e.call(this,t);if(null!==n&&!W(n))throw new Error("RegExp exec method returned something other than an Object or null");return!!n}});var ss=kt.PROPER,ms="toString",hs=RegExp.prototype,Zs=hs.toString,bs=d((function(){return"/a/b"!=Zs.call({source:"a",flags:"b"})})),ps=ss&&Zs.name!=ms;(bs||ps)&&Ut(RegExp.prototype,ms,(function(){var t=dt(this),e=Xe(t.source),n=t.flags;return"/"+e+"/"+Xe(void 0===n&&t instanceof RegExp&&!("flags"in hs)?Sd.call(t):n)}),{unsafe:!0}),dl("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),bl);var ys=function(t){return function(e,n){var i,r,c=Xe(g(e)),l=Ft(n),o=c.length;return l<0||l>=o?t?"":void 0:(i=c.charCodeAt(l))<55296||i>56319||l+1===o||(r=c.charCodeAt(l+1))<56320||r>57343?t?c.charAt(l):i:t?c.slice(l,l+2):r-56320+(i-55296<<10)+65536}},Is={codeAt:ys(!1),charAt:ys(!0)},Xs=Is.codeAt;se({target:"String",proto:!0},{codePointAt:function(t){return Xs(this,t)}});var Gs,gs=function(t){if(vd(t))throw TypeError("The method doesn't accept regular expressions");return t},fs=$("match"),Vs=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[fs]=!1,"/./"[t](e)}catch(t){}}return!1},Ws=ut.f,vs="".endsWith,Ss=Math.min,Cs=Vs("endsWith"),Ys=!(Cs||(Gs=Ws(String.prototype,"endsWith"),!Gs||Gs.writable));se({target:"String",proto:!0,forced:!Ys&&!Cs},{endsWith:function(t){var e=Xe(g(this));gs(t);var n=arguments.length>1?arguments[1]:void 0,i=jt(e.length),r=void 0===n?i:Ss(jt(n),i),c=Xe(t);return vs?vs.call(e,c,r):e.slice(r-c.length,r)===c}});var Rs=String.fromCharCode,Ks=String.fromCodePoint,Ls=!!Ks&&1!=Ks.length;se({target:"String",stat:!0,forced:Ls},{fromCodePoint:function(t){for(var e,n=[],i=arguments.length,r=0;i>r;){if(e=+arguments[r++],At(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?Rs(e):Rs(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}}),se({target:"String",proto:!0,forced:!Vs("includes")},{includes:function(t){return!!~Xe(g(this)).indexOf(Xe(gs(t)),arguments.length>1?arguments[1]:void 0)}});var Js=Is.charAt,xs="String Iterator",Ns=Jt.set,Hs=Jt.getterFor(xs);er(String,"String",(function(t){Ns(this,{type:xs,string:Xe(t),index:0})}),(function(){var t,e=Hs(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=Js(n,i),e.index+=t.length,{value:t,done:!1})}));var ks=$("species"),Us=RegExp.prototype,Ts=function(t,e,n,i){var r=$(t),c=!d((function(){var e={};return e[r]=function(){return 7},7!=""[t](e)})),l=c&&!d((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[ks]=function(){return n},n.flags="",n[r]=/./[r]),n.exec=function(){return e=!0,null},n[r](""),!e}));if(!c||!l||n){var o=/./[r],a=e(r,""[t],(function(t,e,n,i,r){var l=e.exec;return l===rs||l===Us.exec?c&&!r?{done:!0,value:o.call(e,n,i)}:{done:!0,value:t.call(n,e,i)}:{done:!1}}));Ut(String.prototype,t,a[0]),Ut(Us,r,a[1])}i&&Zt(Us[r],"sham",!0)},ws=Is.charAt,Fs=function(t,e,n){return e+(n?ws(t,e).length:1)},zs=function(t,e){var n=t.exec;if(V(n)){var i=n.call(t,e);return null!==i&&dt(i),i}if("RegExp"===I(t))return rs.call(t,e);throw TypeError("RegExp#exec called on incompatible receiver")};Ts("match",(function(t,e,n){return[function(e){var n=g(this),i=null==e?void 0:T(e,t);return i?i.call(e,n):new RegExp(e)[t](Xe(n))},function(t){var i=dt(this),r=Xe(t),c=n(e,i,r);if(c.done)return c.value;if(!i.global)return zs(i,r);var l=i.unicode;i.lastIndex=0;for(var o,a=[],u=0;null!==(o=zs(i,r));){var d=Xe(o[0]);a[u]=d,""===d&&(i.lastIndex=Fs(r,jt(i.lastIndex),l)),u++}return 0===u?null:a}]}));var js=$("matchAll"),Bs="RegExp String",Ms="RegExp String Iterator",As=Jt.set,Ps=Jt.getterFor(Ms),Qs=RegExp.prototype,Ds="".matchAll,Es=!!Ds&&!d((function(){"a".matchAll(/./)})),Os=Bi((function(t,e,n,i){As(this,{type:Ms,regexp:t,string:e,global:n,unicode:i,done:!1})}),Bs,(function(){var t=Ps(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,i=zs(e,n);return null===i?{value:void 0,done:t.done=!0}:t.global?(""===Xe(i[0])&&(e.lastIndex=Fs(n,jt(e.lastIndex),t.unicode)),{value:i,done:!1}):(t.done=!0,{value:i,done:!1})})),_s=function(t){var e,n,i,r,c,l,o=dt(this),a=Xe(t);return e=ja(o,RegExp),void 0===(n=o.flags)&&o instanceof RegExp&&!("flags"in Qs)&&(n=Sd.call(o)),i=void 0===n?"":Xe(n),r=new e(e===RegExp?o.source:o,i),c=!!~i.indexOf("g"),l=!!~i.indexOf("u"),r.lastIndex=jt(o.lastIndex),new Os(r,a,c,l)};se({target:"String",proto:!0,forced:Es},{matchAll:function(t){var e,n,i=g(this);if(null!=t){if(vd(t)&&!~Xe(g("flags"in Qs?t.flags:Sd.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(Es)return Ds.apply(i,arguments);if(n=T(t,js))return n.call(t,i)}else if(Es)return Ds.apply(i,arguments);return e=Xe(i),new RegExp(t,"g")[js](e)}}),js in Qs||Ut(Qs,js,_s);var qs=Math.ceil,$s=function(t){return function(e,n,i){var r,c,l=Xe(g(e)),o=l.length,a=void 0===i?" ":Xe(i),u=jt(n);return u<=o||""==a?l:((c=Qo.call(a,qs((r=u-o)/a.length))).length>r&&(c=c.slice(0,r)),t?l+c:c+l)}},tm={start:$s(!1),end:$s(!0)},em=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(C),nm=tm.end;se({target:"String",proto:!0,forced:em},{padEnd:function(t){return nm(this,t,arguments.length>1?arguments[1]:void 0)}});var im=tm.start;se({target:"String",proto:!0,forced:em},{padStart:function(t){return im(this,t,arguments.length>1?arguments[1]:void 0)}});var rm=Array.prototype,cm=rm.push,lm=rm.join;se({target:"String",stat:!0},{raw:function(t){for(var e=f(M(t).raw),n=jt(e.length),i=arguments.length,r=[],c=0;n>c;)cm.call(r,Xe(e[c++])),c<i&&cm.call(r,Xe(arguments[c]));return lm.call(r,"")}}),se({target:"String",proto:!0},{repeat:Qo});var om=Math.floor,am="".replace,um=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,dm=/\$([$&'`]|\d{1,2})/g,sm=function(t,e,n,i,r,c){var l=n+t.length,o=i.length,a=dm;return void 0!==r&&(r=M(r),a=um),am.call(c,a,(function(c,a){var u;switch(a.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(l);case"<":u=r[a.slice(1,-1)];break;default:var d=+a;if(0===d)return c;if(d>o){var s=om(d/10);return 0===s?c:s<=o?void 0===i[s-1]?a.charAt(1):i[s-1]+a.charAt(1):c}u=i[d-1]}return void 0===u?"":u}))},mm=$("replace"),hm=Math.max,Zm=Math.min,bm=function(t){return void 0===t?t:String(t)},pm="$0"==="a".replace(/./,"$0"),ym=!!/./[mm]&&""===/./[mm]("a","$0"),Im=!d((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}));Ts("replace",(function(t,e,n){var i=ym?"$":"$0";return[function(t,n){var i=g(this),r=null==t?void 0:T(t,mm);return r?r.call(t,i,n):e.call(Xe(i),t,n)},function(t,r){var c=dt(this),l=Xe(t);if("string"==typeof r&&-1===r.indexOf(i)&&-1===r.indexOf("$<")){var o=n(e,c,l,r);if(o.done)return o.value}var a=V(r);a||(r=Xe(r));var u=c.global;if(u){var d=c.unicode;c.lastIndex=0}for(var s=[];;){var m=zs(c,l);if(null===m)break;if(s.push(m),!u)break;""===Xe(m[0])&&(c.lastIndex=Fs(l,jt(c.lastIndex),d))}for(var h="",Z=0,b=0;b<s.length;b++){m=s[b];for(var p=Xe(m[0]),y=hm(Zm(Ft(m.index),l.length),0),I=[],X=1;X<m.length;X++)I.push(bm(m[X]));var G=m.groups;if(a){var g=[p].concat(I,y,l);void 0!==G&&g.push(G);var f=Xe(r.apply(void 0,g))}else f=sm(p,l,y,I,G,r);y>=Z&&(h+=l.slice(Z,y)+f,Z=y+p.length)}return h+l.slice(Z)}]}),!Im||!pm||ym),Ts("search",(function(t,e,n){return[function(e){var n=g(this),i=null==e?void 0:T(e,t);return i?i.call(e,n):new RegExp(e)[t](Xe(n))},function(t){var i=dt(this),r=Xe(t),c=n(e,i,r);if(c.done)return c.value;var l=i.lastIndex;ya(l,0)||(i.lastIndex=0);var o=zs(i,r);return ya(i.lastIndex,l)||(i.lastIndex=l),null===o?-1:o.index}]}));var Xm=Kd.UNSUPPORTED_Y,Gm=[].push,gm=Math.min,fm=4294967295,Vm=!d((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]}));Ts("split",(function(t,e,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var i=Xe(g(this)),r=void 0===n?fm:n>>>0;if(0===r)return[];if(void 0===t)return[i];if(!vd(t))return e.call(i,t,r);for(var c,l,o,a=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),d=0,s=new RegExp(t.source,u+"g");(c=rs.call(s,i))&&!((l=s.lastIndex)>d&&(a.push(i.slice(d,c.index)),c.length>1&&c.index<i.length&&Gm.apply(a,c.slice(1)),o=c[0].length,d=l,a.length>=r));)s.lastIndex===c.index&&s.lastIndex++;return d===i.length?!o&&s.test("")||a.push(""):a.push(i.slice(d)),a.length>r?a.slice(0,r):a}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var r=g(this),c=null==e?void 0:T(e,t);return c?c.call(e,r,n):i.call(Xe(r),e,n)},function(t,r){var c=dt(this),l=Xe(t),o=n(i,c,l,r,i!==e);if(o.done)return o.value;var a=ja(c,RegExp),u=c.unicode,d=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(Xm?"g":"y"),s=new a(Xm?"^(?:"+c.source+")":c,d),m=void 0===r?fm:r>>>0;if(0===m)return[];if(0===l.length)return null===zs(s,l)?[l]:[];for(var h=0,Z=0,b=[];Z<l.length;){s.lastIndex=Xm?0:Z;var p,y=zs(s,Xm?l.slice(Z):l);if(null===y||(p=gm(jt(s.lastIndex+(Xm?Z:0)),l.length))===h)Z=Fs(l,Z,u);else{if(b.push(l.slice(h,Z)),b.length===m)return b;for(var I=1;I<=y.length-1;I++)if(b.push(y[I]),b.length===m)return b;Z=h=p}}return b.push(l.slice(h)),b}]}),!Vm,Xm);var Wm=ut.f,vm="".startsWith,Sm=Math.min,Cm=Vs("startsWith"),Ym=!Cm&&!!function(){var t=Wm(String.prototype,"startsWith");return t&&!t.writable}();se({target:"String",proto:!0,forced:!Ym&&!Cm},{startsWith:function(t){var e=Xe(g(this));gs(t);var n=jt(Sm(arguments.length>1?arguments[1]:void 0,e.length)),i=Xe(t);return vm?vm.call(e,i,n):e.slice(n,n+i.length)===i}});var Rm=kt.PROPER,Km=function(t){return d((function(){return!!so[t]()||"​…᠎"!=="​…᠎"[t]()||Rm&&so[t].name!==t}))},Lm=po.trim;se({target:"String",proto:!0,forced:Km("trim")},{trim:function(){return Lm(this)}});var Jm=po.end,xm=Km("trimEnd"),Nm=xm?function(){return Jm(this)}:"".trimEnd;se({target:"String",proto:!0,name:"trimEnd",forced:xm},{trimEnd:Nm,trimRight:Nm});var Hm=po.start,km=Km("trimStart"),Um=km?function(){return Hm(this)}:"".trimStart;se({target:"String",proto:!0,name:"trimStart",forced:km},{trimStart:Um,trimLeft:Um});var Tm=/"/g,wm=function(t,e,n,i){var r=Xe(g(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+Xe(i).replace(Tm,"&quot;")+'"'),c+">"+r+"</"+e+">"},Fm=function(t){return d((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))};se({target:"String",proto:!0,forced:Fm("anchor")},{anchor:function(t){return wm(this,"a","name",t)}}),se({target:"String",proto:!0,forced:Fm("big")},{big:function(){return wm(this,"big","","")}}),se({target:"String",proto:!0,forced:Fm("blink")},{blink:function(){return wm(this,"blink","","")}}),se({target:"String",proto:!0,forced:Fm("bold")},{bold:function(){return wm(this,"b","","")}}),se({target:"String",proto:!0,forced:Fm("fixed")},{fixed:function(){return wm(this,"tt","","")}}),se({target:"String",proto:!0,forced:Fm("fontcolor")},{fontcolor:function(t){return wm(this,"font","color",t)}}),se({target:"String",proto:!0,forced:Fm("fontsize")},{fontsize:function(t){return wm(this,"font","size",t)}}),se({target:"String",proto:!0,forced:Fm("italics")},{italics:function(){return wm(this,"i","","")}}),se({target:"String",proto:!0,forced:Fm("link")},{link:function(t){return wm(this,"a","href",t)}}),se({target:"String",proto:!0,forced:Fm("small")},{small:function(){return wm(this,"small","","")}}),se({target:"String",proto:!0,forced:Fm("strike")},{strike:function(){return wm(this,"strike","","")}}),se({target:"String",proto:!0,forced:Fm("sub")},{sub:function(){return wm(this,"sub","","")}}),se({target:"String",proto:!0,forced:Fm("sup")},{sup:function(){return wm(this,"sup","","")}});var zm,jm,Bm,Mm=ht.f,Am=u.Int8Array,Pm=Am&&Am.prototype,Qm=u.Uint8ClampedArray,Dm=Qm&&Qm.prototype,Em=Am&&ki(Am),Om=Pm&&ki(Pm),_m=Object.prototype,qm=_m.isPrototypeOf,$m=$("toStringTag"),th=E("TYPED_ARRAY_TAG"),eh=E("TYPED_ARRAY_CONSTRUCTOR"),nh=Or&&!!Ai&&"Opera"!==Ie(u.opera),ih=!1,rh={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},ch={BigInt64Array:8,BigUint64Array:8},lh=function(t){if(!W(t))return!1;var e=Ie(t);return P(rh,e)||P(ch,e)};for(zm in rh)(Bm=(jm=u[zm])&&jm.prototype)?Zt(Bm,eh,jm):nh=!1;for(zm in ch)(Bm=(jm=u[zm])&&jm.prototype)&&Zt(Bm,eh,jm);if((!nh||!V(Em)||Em===Function.prototype)&&(Em=function(){throw TypeError("Incorrect invocation")},nh))for(zm in rh)u[zm]&&Ai(u[zm],Em);if((!nh||!Om||Om===_m)&&(Om=Em.prototype,nh))for(zm in rh)u[zm]&&Ai(u[zm].prototype,Om);if(nh&&ki(Dm)!==Om&&Ai(Dm,Om),s&&!P(Om,$m))for(zm in ih=!0,Mm(Om,$m,{get:function(){return W(this)?this[th]:void 0}}),rh)u[zm]&&Zt(u[zm],th,zm);var oh={NATIVE_ARRAY_BUFFER_VIEWS:nh,TYPED_ARRAY_CONSTRUCTOR:eh,TYPED_ARRAY_TAG:ih&&th,aTypedArray:function(t){if(lh(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(V(t)&&(!Ai||qm.call(Em,t)))return t;throw TypeError(k(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n){if(s){if(n)for(var i in rh){var r=u[i];if(r&&P(r.prototype,t))try{delete r.prototype[t]}catch(t){}}Om[t]&&!n||Ut(Om,t,n?e:nh&&Pm[t]||e)}},exportTypedArrayStaticMethod:function(t,e,n){var i,r;if(s){if(Ai){if(n)for(i in rh)if((r=u[i])&&P(r,t))try{delete r[t]}catch(t){}if(Em[t]&&!n)return;try{return Ut(Em,t,n?e:nh&&Em[t]||e)}catch(t){}}for(i in rh)!(r=u[i])||r[t]&&!n||Ut(r,t,e)}},isView:function(t){if(!W(t))return!1;var e=Ie(t);return"DataView"===e||P(rh,e)||P(ch,e)},isTypedArray:lh,TypedArray:Em,TypedArrayPrototype:Om},ah=oh.NATIVE_ARRAY_BUFFER_VIEWS,uh=u.ArrayBuffer,dh=u.Int8Array,sh=!ah||!d((function(){dh(1)}))||!d((function(){new dh(-1)}))||!fi((function(t){new dh,new dh(null),new dh(1.5),new dh(t)}),!0)||d((function(){return 1!==new dh(new uh(2),1,void 0).length})),mh=function(t,e){var n=function(t){var e=Ft(t);if(e<0)throw RangeError("The argument can't be less than 0");return e}(t);if(n%e)throw RangeError("Wrong offset");return n},hh=oh.aTypedArrayConstructor,Zh=function(t){var e,n,i,r,c,l,o=Fa(this),a=M(t),u=arguments.length,d=u>1?arguments[1]:void 0,s=void 0!==d,m=bi(a);if(m&&!hi(m))for(l=(c=pi(a,m)).next,a=[];!(r=l.call(c)).done;)a.push(r.value);for(s&&u>2&&(d=Fe(d,arguments[2],2)),n=jt(a.length),i=new(hh(o))(n),e=0;n>e;e++)i[e]=s?d(a[e],e):a[e];return i},bh=i((function(t){var e=$t.f,n=qe.forEach,i=Jt.get,r=Jt.set,c=ht.f,l=ut.f,o=Math.round,a=u.RangeError,d=Fc.ArrayBuffer,m=Fc.DataView,h=oh.NATIVE_ARRAY_BUFFER_VIEWS,Z=oh.TYPED_ARRAY_CONSTRUCTOR,b=oh.TYPED_ARRAY_TAG,y=oh.TypedArray,I=oh.TypedArrayPrototype,X=oh.aTypedArrayConstructor,G=oh.isTypedArray,g="BYTES_PER_ELEMENT",f="Wrong length",V=function(t,e){for(var n=0,i=e.length,r=new(X(t))(i);i>n;)r[n]=e[n++];return r},v=function(t,e){c(t,e,{get:function(){return i(this)[e]}})},S=function(t){var e;return t instanceof d||"ArrayBuffer"==(e=Ie(t))||"SharedArrayBuffer"==e},C=function(t,e){return G(t)&&!H(e)&&e in t&&xo(+e)&&e>=0},Y=function(t,e){return e=nt(e),C(t,e)?p(2,t[e]):l(t,e)},R=function(t,e,n){return e=nt(e),!(C(t,e)&&W(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?c(t,e,n):(t[e]=n.value,t)};s?(h||(ut.f=Y,ht.f=R,v(I,"buffer"),v(I,"byteOffset"),v(I,"byteLength"),v(I,"length")),se({target:"Object",stat:!0,forced:!h},{getOwnPropertyDescriptor:Y,defineProperty:R}),t.exports=function(t,l,s){var p=t.match(/\d+$/)[0]/8,X=t+(s?"Clamped":"")+"Array",v="get"+t,C="set"+t,Y=u[X],R=Y,K=R&&R.prototype,L={},J=function(t,e){c(t,e,{get:function(){return function(t,e){var n=i(t);return n.view[v](e*p+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,n){var r=i(t);s&&(n=(n=o(n))<0?0:n>255?255:255&n),r.view[C](e*p+r.byteOffset,n,!0)}(this,e,t)},enumerable:!0})};h?sh&&(R=l((function(t,e,n,i){return qr(t,R,X),ul(W(e)?S(e)?void 0!==i?new Y(e,mh(n,p),i):void 0!==n?new Y(e,mh(n,p)):new Y(e):G(e)?V(R,e):Zh.call(R,e):new Y($r(e)),t,R)})),Ai&&Ai(R,y),n(e(Y),(function(t){t in R||Zt(R,t,Y[t])})),R.prototype=K):(R=l((function(t,e,n,i){qr(t,R,X);var c,l,o,u=0,s=0;if(W(e)){if(!S(e))return G(e)?V(R,e):Zh.call(R,e);c=e,s=mh(n,p);var h=e.byteLength;if(void 0===i){if(h%p)throw a(f);if((l=h-s)<0)throw a(f)}else if((l=jt(i)*p)+s>h)throw a(f);o=l/p}else o=$r(e),c=new d(l=o*p);for(r(t,{buffer:c,byteOffset:s,byteLength:l,length:o,view:new m(c)});u<o;)J(t,u++)})),Ai&&Ai(R,y),K=R.prototype=Ye(I)),K.constructor!==R&&Zt(K,"constructor",R),Zt(K,Z,R),b&&Zt(K,b,X),L[X]=R,se({global:!0,forced:R!=Y,sham:!h},L),g in R||Zt(R,g,p),g in K||Zt(K,g,p),Mr(X)}):t.exports=function(){}}));bh("Float32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Float64",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}}),!0),bh("Uint16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint32",(function(t){return function(e,n,i){return t(this,e,n,i)}}));var ph=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("copyWithin",(function(t,e){return Dn.call(ph(this),t,e,arguments.length>2?arguments[2]:void 0)}));var yh=qe.every,Ih=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("every",(function(t){return yh(Ih(this),t,arguments.length>1?arguments[1]:void 0)}));var Xh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("fill",(function(t){return qn.apply(Xh(this),arguments)}));var Gh=oh.TYPED_ARRAY_CONSTRUCTOR,gh=oh.aTypedArrayConstructor,fh=function(t){return gh(ja(t,t[Gh]))},Vh=function(t,e){return function(t,e){for(var n=0,i=e.length,r=new t(i);i>n;)r[n]=e[n++];return r}(fh(t),e)},Wh=qe.filter,vh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("filter",(function(t){var e=Wh(vh(this),t,arguments.length>1?arguments[1]:void 0);return Vh(this,e)}));var Sh=qe.find,Ch=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("find",(function(t){return Sh(Ch(this),t,arguments.length>1?arguments[1]:void 0)}));var Yh=qe.findIndex,Rh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("findIndex",(function(t){return Yh(Rh(this),t,arguments.length>1?arguments[1]:void 0)}));var Kh=qe.forEach,Lh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("forEach",(function(t){Kh(Lh(this),t,arguments.length>1?arguments[1]:void 0)})),(0,oh.exportTypedArrayStaticMethod)("from",Zh,sh);var Jh=Qt.includes,xh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("includes",(function(t){return Jh(xh(this),t,arguments.length>1?arguments[1]:void 0)}));var Nh=Qt.indexOf,Hh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("indexOf",(function(t){return Nh(Hh(this),t,arguments.length>1?arguments[1]:void 0)}));var kh=kt.PROPER,Uh=$("iterator"),Th=u.Uint8Array,wh=cr.values,Fh=cr.keys,zh=cr.entries,jh=oh.aTypedArray,Bh=oh.exportTypedArrayMethod,Mh=Th&&Th.prototype[Uh],Ah=!!Mh&&"values"===Mh.name,Ph=function(){return wh.call(jh(this))};Bh("entries",(function(){return zh.call(jh(this))})),Bh("keys",(function(){return Fh.call(jh(this))})),Bh("values",Ph,kh&&!Ah),Bh(Uh,Ph,kh&&!Ah);var Qh=oh.aTypedArray,Dh=[].join;(0,oh.exportTypedArrayMethod)("join",(function(t){return Dh.apply(Qh(this),arguments)}));var Eh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("lastIndexOf",(function(t){return hr.apply(Eh(this),arguments)}));var Oh=qe.map,_h=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("map",(function(t){return Oh(_h(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(fh(t))(e)}))}));var qh=oh.aTypedArrayConstructor;(0,oh.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(qh(this))(e);e>t;)n[t]=arguments[t++];return n}),sh);var $h=Ir.left,tZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("reduce",(function(t){return $h(tZ(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}));var eZ=Ir.right,nZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("reduceRight",(function(t){return eZ(nZ(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}));var iZ=oh.aTypedArray,rZ=oh.exportTypedArrayMethod,cZ=Math.floor;rZ("reverse",(function(){for(var t,e=this,n=iZ(e).length,i=cZ(n/2),r=0;r<i;)t=e[r],e[r++]=e[--n],e[n]=t;return e}));var lZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("set",(function(t){lZ(this);var e=mh(arguments.length>1?arguments[1]:void 0,1),n=this.length,i=M(t),r=jt(i.length),c=0;if(r+e>n)throw RangeError("Wrong length");for(;c<r;)this[e+c]=i[c++]}),d((function(){new Int8Array(1).set({})})));var oZ=oh.aTypedArray,aZ=[].slice;(0,oh.exportTypedArrayMethod)("slice",(function(t,e){for(var n=aZ.call(oZ(this),t,e),i=fh(this),r=0,c=n.length,l=new i(c);c>r;)l[r]=n[r++];return l}),d((function(){new Int8Array(1).slice()})));var uZ=qe.some,dZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("some",(function(t){return uZ(dZ(this),t,arguments.length>1?arguments[1]:void 0)}));var sZ=oh.aTypedArray,mZ=oh.exportTypedArrayMethod,hZ=u.Uint16Array,ZZ=hZ&&hZ.prototype.sort,bZ=!!ZZ&&!d((function(){var t=new hZ(2);t.sort(null),t.sort({})})),pZ=!!ZZ&&!d((function(){if(J)return J<74;if(xr)return xr<67;if(Nr)return!0;if(kr)return kr<602;var t,e,n=new hZ(516),i=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,i[t]=t-2*e+3;for(n.sort((function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==i[t])return!0}));mZ("sort",(function(t){var e=this;if(void 0!==t&&U(t),pZ)return ZZ.call(e,t);sZ(e);var n,i=jt(e.length),r=Array(i);for(n=0;n<i;n++)r[n]=e[n];for(r=Lr(e,function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t)),n=0;n<i;n++)e[n]=r[n];return e}),!pZ||bZ);var yZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("subarray",(function(t,e){var n=yZ(this),i=n.length,r=At(t,i);return new(fh(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,jt((void 0===e?i:At(e,i))-r))}));var IZ=u.Int8Array,XZ=oh.aTypedArray,GZ=oh.exportTypedArrayMethod,gZ=[].toLocaleString,fZ=[].slice,VZ=!!IZ&&d((function(){gZ.call(new IZ(1))}));GZ("toLocaleString",(function(){return gZ.apply(VZ?fZ.call(XZ(this)):XZ(this),arguments)}),d((function(){return[1,2].toLocaleString()!=new IZ([1,2]).toLocaleString()}))||!d((function(){IZ.prototype.toLocaleString.call([1,2])})));var WZ=oh.exportTypedArrayMethod,vZ=u.Uint8Array,SZ=vZ&&vZ.prototype||{},CZ=[].toString,YZ=[].join;d((function(){CZ.call({})}))&&(CZ=function(){return YZ.call(this)});var RZ=SZ.toString!=CZ;WZ("toString",CZ,RZ);var KZ=ll.getWeakData,LZ=Jt.set,JZ=Jt.getterFor,xZ=qe.find,NZ=qe.findIndex,HZ=0,kZ=function(t){return t.frozen||(t.frozen=new UZ)},UZ=function(){this.entries=[]},TZ=function(t,e){return xZ(t.entries,(function(t){return t[0]===e}))};UZ.prototype={get:function(t){var e=TZ(this,t);if(e)return e[1]},has:function(t){return!!TZ(this,t)},set:function(t,e){var n=TZ(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=NZ(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var wZ={getConstructor:function(t,e,n,i){var r=t((function(t,c){qr(t,r,e),LZ(t,{type:e,id:HZ++,frozen:void 0}),null!=c&&al(c,t[i],{that:t,AS_ENTRIES:n})})),c=JZ(e),l=function(t,e,n){var i=c(t),r=KZ(dt(e),!0);return!0===r?kZ(i).set(e,n):r[i.id]=n,t};return _r(r.prototype,{delete:function(t){var e=c(this);if(!W(t))return!1;var n=KZ(t);return!0===n?kZ(e).delete(t):n&&P(n,e.id)&&delete n[e.id]},has:function(t){var e=c(this);if(!W(t))return!1;var n=KZ(t);return!0===n?kZ(e).has(t):n&&P(n,e.id)}}),_r(r.prototype,n?{get:function(t){var e=c(this);if(W(t)){var n=KZ(t);return!0===n?kZ(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return l(this,t,e)}}:{add:function(t){return l(this,t,!0)}}),r}};i((function(t){var e,n=Jt.enforce,i=!u.ActiveXObject&&"ActiveXObject"in u,r=Object.isExtensible,c=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},l=t.exports=dl("WeakMap",c,wZ);if(gt&&i){e=wZ.getConstructor(c,"WeakMap",!0),ll.enable();var o=l.prototype,a=o.delete,d=o.has,s=o.get,m=o.set;_r(o,{delete:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),a.call(this,t)||i.frozen.delete(t)}return a.call(this,t)},has:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),d.call(this,t)||i.frozen.has(t)}return d.call(this,t)},get:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),d.call(this,t)?s.call(this,t):i.frozen.get(t)}return s.call(this,t)},set:function(t,i){if(W(t)&&!r(t)){var c=n(this);c.frozen||(c.frozen=new e),d.call(this,t)?m.call(this,t,i):c.frozen.set(t,i)}else m.call(this,t,i);return this}})}})),dl("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),wZ);var FZ={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},zZ=ct("span").classList,jZ=zZ&&zZ.constructor&&zZ.constructor.prototype,BZ=jZ===Object.prototype?void 0:jZ,MZ=qe.forEach,AZ=vi("forEach")?[].forEach:function(t){return MZ(this,t,arguments.length>1?arguments[1]:void 0)},PZ=function(t){if(t&&t.forEach!==AZ)try{Zt(t,"forEach",AZ)}catch(e){t.forEach=AZ}};for(var QZ in FZ)FZ[QZ]&&PZ(u[QZ]&&u[QZ].prototype);PZ(BZ);var DZ=$("iterator"),EZ=$("toStringTag"),OZ=cr.values,_Z=function(t,e){if(t){if(t[DZ]!==OZ)try{Zt(t,DZ,OZ)}catch(e){t[DZ]=OZ}if(t[EZ]||Zt(t,EZ,e),FZ[e])for(var n in cr)if(t[n]!==cr[n])try{Zt(t,n,cr[n])}catch(e){t[n]=cr[n]}}};for(var qZ in FZ)_Z(u[qZ]&&u[qZ].prototype,qZ);_Z(BZ,"DOMTokenList");var $Z=!u.setImmediate||!u.clearImmediate;se({global:!0,bind:!0,enumerable:!0,forced:$Z},{setImmediate:du.set,clearImmediate:du.clear});var tb=u.process;se({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var e=Xr&&tb.domain;vu(e?e.bind(t):t)}});var eb=$("iterator"),nb=!d((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,i){e.delete("b"),n+=i+t})),!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[eb]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host})),ib=2147483647,rb=/[^\0-\u007E]/,cb=/[.\u3002\uFF0E\uFF61]/g,lb="Overflow: input needs wider integers to process",ob=Math.floor,ab=String.fromCharCode,ub=function(t){return t+22+75*(t<26)},db=function(t,e,n){var i=0;for(t=n?ob(t/700):t>>1,t+=ob(t/e);t>455;i+=36)t=ob(t/35);return ob(i+36*t/(t+38))},sb=function(t){var e=[];t=function(t){for(var e=[],n=0,i=t.length;n<i;){var r=t.charCodeAt(n++);if(r>=55296&&r<=56319&&n<i){var c=t.charCodeAt(n++);56320==(64512&c)?e.push(((1023&r)<<10)+(1023&c)+65536):(e.push(r),n--)}else e.push(r)}return e}(t);var n,i,r=t.length,c=128,l=0,o=72;for(n=0;n<t.length;n++)(i=t[n])<128&&e.push(ab(i));var a=e.length,u=a;for(a&&e.push("-");u<r;){var d=ib;for(n=0;n<t.length;n++)(i=t[n])>=c&&i<d&&(d=i);var s=u+1;if(d-c>ob((ib-l)/s))throw RangeError(lb);for(l+=(d-c)*s,c=d,n=0;n<t.length;n++){if((i=t[n])<c&&++l>ib)throw RangeError(lb);if(i==c){for(var m=l,h=36;;h+=36){var Z=h<=o?1:h>=o+26?26:h-o;if(m<Z)break;var b=m-Z,p=36-Z;e.push(ab(ub(Z+b%p))),m=ob(b/p)}e.push(ab(ub(m))),o=db(l,s,u==a),l=0,++u}}++l,++c}return e.join("")},mb=S("fetch"),hb=S("Request"),Zb=hb&&hb.prototype,bb=S("Headers"),pb=$("iterator"),yb="URLSearchParams",Ib="URLSearchParamsIterator",Xb=Jt.set,Gb=Jt.getterFor(yb),gb=Jt.getterFor(Ib),fb=/\+/g,Vb=Array(4),Wb=function(t){return Vb[t-1]||(Vb[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},vb=function(t){try{return decodeURIComponent(t)}catch(e){return t}},Sb=function(t){var e=t.replace(fb," "),n=4;try{return decodeURIComponent(e)}catch(t){for(;n;)e=e.replace(Wb(n--),vb);return e}},Cb=/[!'()~]|%20/g,Yb={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Rb=function(t){return Yb[t]},Kb=function(t){return encodeURIComponent(t).replace(Cb,Rb)},Lb=function(t,e){if(e)for(var n,i,r=e.split("&"),c=0;c<r.length;)(n=r[c++]).length&&(i=n.split("="),t.push({key:Sb(i.shift()),value:Sb(i.join("="))}))},Jb=function(t){this.entries.length=0,Lb(this.entries,t)},xb=function(t,e){if(t<e)throw TypeError("Not enough arguments")},Nb=Bi((function(t,e){Xb(this,{type:Ib,iterator:pi(Gb(t).entries),kind:e})}),"Iterator",(function(){var t=gb(this),e=t.kind,n=t.iterator.next(),i=n.value;return n.done||(n.value="keys"===e?i.key:"values"===e?i.value:[i.key,i.value]),n})),Hb=function(){qr(this,Hb,yb);var t,e,n,i,r,c,l,o,a,u=arguments.length>0?arguments[0]:void 0,d=this,s=[];if(Xb(d,{type:yb,entries:s,updateURL:function(){},updateSearchParams:Jb}),void 0!==u)if(W(u))if(t=bi(u))for(n=(e=pi(u,t)).next;!(i=n.call(e)).done;){if((l=(c=(r=pi(dt(i.value))).next).call(r)).done||(o=c.call(r)).done||!c.call(r).done)throw TypeError("Expected sequence with length 2");s.push({key:Xe(l.value),value:Xe(o.value)})}else for(a in u)P(u,a)&&s.push({key:a,value:Xe(u[a])});else Lb(s,"string"==typeof u?"?"===u.charAt(0)?u.slice(1):u:Xe(u))},kb=Hb.prototype;if(_r(kb,{append:function(t,e){xb(arguments.length,2);var n=Gb(this);n.entries.push({key:Xe(t),value:Xe(e)}),n.updateURL()},delete:function(t){xb(arguments.length,1);for(var e=Gb(this),n=e.entries,i=Xe(t),r=0;r<n.length;)n[r].key===i?n.splice(r,1):r++;e.updateURL()},get:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=0;i<e.length;i++)if(e[i].key===n)return e[i].value;return null},getAll:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=[],r=0;r<e.length;r++)e[r].key===n&&i.push(e[r].value);return i},has:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=0;i<e.length;)if(e[i++].key===n)return!0;return!1},set:function(t,e){xb(arguments.length,1);for(var n,i=Gb(this),r=i.entries,c=!1,l=Xe(t),o=Xe(e),a=0;a<r.length;a++)(n=r[a]).key===l&&(c?r.splice(a--,1):(c=!0,n.value=o));c||r.push({key:l,value:o}),i.updateURL()},sort:function(){var t,e,n,i=Gb(this),r=i.entries,c=r.slice();for(r.length=0,n=0;n<c.length;n++){for(t=c[n],e=0;e<n;e++)if(r[e].key>t.key){r.splice(e,0,t);break}e===n&&r.push(t)}i.updateURL()},forEach:function(t){for(var e,n=Gb(this).entries,i=Fe(t,arguments.length>1?arguments[1]:void 0,3),r=0;r<n.length;)i((e=n[r++]).value,e.key,this)},keys:function(){return new Nb(this,"keys")},values:function(){return new Nb(this,"values")},entries:function(){return new Nb(this,"entries")}},{enumerable:!0}),Ut(kb,pb,kb.entries,{name:"entries"}),Ut(kb,"toString",(function(){for(var t,e=Gb(this).entries,n=[],i=0;i<e.length;)t=e[i++],n.push(Kb(t.key)+"="+Kb(t.value));return n.join("&")}),{enumerable:!0}),we(Hb,yb),se({global:!0,forced:!nb},{URLSearchParams:Hb}),!nb&&V(bb)){var Ub=function(t){if(W(t)){var e,n=t.body;if(Ie(n)===yb)return(e=t.headers?new bb(t.headers):new bb).has("content-type")||e.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),Ye(t,{body:p(0,String(n)),headers:p(0,e)})}return t};if(V(mb)&&se({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return mb(t,arguments.length>1?Ub(arguments[1]):{})}}),V(hb)){var Tb=function(t){return qr(this,Tb,"Request"),new hb(t,arguments.length>1?Ub(arguments[1]):{})};Zb.constructor=Tb,Tb.prototype=Zb,se({global:!0,forced:!0},{Request:Tb})}}var wb,Fb={URLSearchParams:Hb,getState:Gb},zb=Is.codeAt,jb=u.URL,Bb=Fb.URLSearchParams,Mb=Fb.getState,Ab=Jt.set,Pb=Jt.getterFor("URL"),Qb=Math.floor,Db=Math.pow,Eb="Invalid scheme",Ob="Invalid host",_b="Invalid port",qb=/[A-Za-z]/,$b=/[\d+-.A-Za-z]/,tp=/\d/,ep=/^0x/i,np=/^[0-7]+$/,ip=/^\d+$/,rp=/^[\dA-Fa-f]+$/,cp=/[\0\t\n\r #%/:<>?@[\\\]^|]/,lp=/[\0\t\n\r #/:<>?@[\\\]^|]/,op=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,ap=/[\t\n\r]/g,up=function(t,e){var n,i,r;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return Ob;if(!(n=sp(e.slice(1,-1))))return Ob;t.host=n}else if(Xp(t)){if(e=function(t){var e,n,i=[],r=t.toLowerCase().replace(cb,".").split(".");for(e=0;e<r.length;e++)n=r[e],i.push(rb.test(n)?"xn--"+sb(n):n);return i.join(".")}(e),cp.test(e))return Ob;if(null===(n=dp(e)))return Ob;t.host=n}else{if(lp.test(e))return Ob;for(n="",i=yi(e),r=0;r<i.length;r++)n+=yp(i[r],hp);t.host=n}},dp=function(t){var e,n,i,r,c,l,o,a=t.split(".");if(a.length&&""==a[a.length-1]&&a.pop(),(e=a.length)>4)return t;for(n=[],i=0;i<e;i++){if(""==(r=a[i]))return t;if(c=10,r.length>1&&"0"==r.charAt(0)&&(c=ep.test(r)?16:8,r=r.slice(8==c?1:2)),""===r)l=0;else{if(!(10==c?ip:8==c?np:rp).test(r))return t;l=parseInt(r,c)}n.push(l)}for(i=0;i<e;i++)if(l=n[i],i==e-1){if(l>=Db(256,5-e))return null}else if(l>255)return null;for(o=n.pop(),i=0;i<n.length;i++)o+=n[i]*Db(256,3-i);return o},sp=function(t){var e,n,i,r,c,l,o,a=[0,0,0,0,0,0,0,0],u=0,d=null,s=0,m=function(){return t.charAt(s)};if(":"==m()){if(":"!=t.charAt(1))return;s+=2,d=++u}for(;m();){if(8==u)return;if(":"!=m()){for(e=n=0;n<4&&rp.test(m());)e=16*e+parseInt(m(),16),s++,n++;if("."==m()){if(0==n)return;if(s-=n,u>6)return;for(i=0;m();){if(r=null,i>0){if(!("."==m()&&i<4))return;s++}if(!tp.test(m()))return;for(;tp.test(m());){if(c=parseInt(m(),10),null===r)r=c;else{if(0==r)return;r=10*r+c}if(r>255)return;s++}a[u]=256*a[u]+r,2!=++i&&4!=i||u++}if(4!=i)return;break}if(":"==m()){if(s++,!m())return}else if(m())return;a[u++]=e}else{if(null!==d)return;s++,d=++u}}if(null!==d)for(l=u-d,u=7;0!=u&&l>0;)o=a[u],a[u--]=a[d+l-1],a[d+--l]=o;else if(8!=u)return;return a},mp=function(t){var e,n,i,r;if("number"==typeof t){for(e=[],n=0;n<4;n++)e.unshift(t%256),t=Qb(t/256);return e.join(".")}if("object"==o(t)){for(e="",i=function(t){for(var e=null,n=1,i=null,r=0,c=0;c<8;c++)0!==t[c]?(r>n&&(e=i,n=r),i=null,r=0):(null===i&&(i=c),++r);return r>n&&(e=i,n=r),e}(t),n=0;n<8;n++)r&&0===t[n]||(r&&(r=!1),i===n?(e+=n?":":"::",r=!0):(e+=t[n].toString(16),n<7&&(e+=":")));return"["+e+"]"}return t},hp={},Zp=ia({},hp,{" ":1,'"':1,"<":1,">":1,"`":1}),bp=ia({},Zp,{"#":1,"?":1,"{":1,"}":1}),pp=ia({},bp,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),yp=function(t,e){var n=zb(t,0);return n>32&&n<127&&!P(e,t)?t:encodeURIComponent(t)},Ip={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Xp=function(t){return P(Ip,t.scheme)},Gp=function(t){return""!=t.username||""!=t.password},gp=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},fp=function(t,e){var n;return 2==t.length&&qb.test(t.charAt(0))&&(":"==(n=t.charAt(1))||!e&&"|"==n)},Vp=function(t){var e;return t.length>1&&fp(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},Wp=function(t){var e=t.path,n=e.length;!n||"file"==t.scheme&&1==n&&fp(e[0],!0)||e.pop()},vp=function(t){return"."===t||"%2e"===t.toLowerCase()},Sp={},Cp={},Yp={},Rp={},Kp={},Lp={},Jp={},xp={},Np={},Hp={},kp={},Up={},Tp={},wp={},Fp={},zp={},jp={},Bp={},Mp={},Ap={},Pp={},Qp=function(t,e,n,i){var r,c,l,o,a,u=n||Sp,d=0,s="",m=!1,h=!1,Z=!1;for(n||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(op,"")),e=e.replace(ap,""),r=yi(e);d<=r.length;){switch(c=r[d],u){case Sp:if(!c||!qb.test(c)){if(n)return Eb;u=Yp;continue}s+=c.toLowerCase(),u=Cp;break;case Cp:if(c&&($b.test(c)||"+"==c||"-"==c||"."==c))s+=c.toLowerCase();else{if(":"!=c){if(n)return Eb;s="",u=Yp,d=0;continue}if(n&&(Xp(t)!=P(Ip,s)||"file"==s&&(Gp(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=s,n)return void(Xp(t)&&Ip[t.scheme]==t.port&&(t.port=null));s="","file"==t.scheme?u=wp:Xp(t)&&i&&i.scheme==t.scheme?u=Rp:Xp(t)?u=xp:"/"==r[d+1]?(u=Kp,d++):(t.cannotBeABaseURL=!0,t.path.push(""),u=Mp)}break;case Yp:if(!i||i.cannotBeABaseURL&&"#"!=c)return Eb;if(i.cannotBeABaseURL&&"#"==c){t.scheme=i.scheme,t.path=i.path.slice(),t.query=i.query,t.fragment="",t.cannotBeABaseURL=!0,u=Pp;break}u="file"==i.scheme?wp:Lp;continue;case Rp:if("/"!=c||"/"!=r[d+1]){u=Lp;continue}u=Np,d++;break;case Kp:if("/"==c){u=Hp;break}u=Bp;continue;case Lp:if(t.scheme=i.scheme,c==wb)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query;else if("/"==c||"\\"==c&&Xp(t))u=Jp;else if("?"==c)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query="",u=Ap;else{if("#"!=c){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.path.pop(),u=Bp;continue}t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Pp}break;case Jp:if(!Xp(t)||"/"!=c&&"\\"!=c){if("/"!=c){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,u=Bp;continue}u=Hp}else u=Np;break;case xp:if(u=Np,"/"!=c||"/"!=s.charAt(d+1))continue;d++;break;case Np:if("/"!=c&&"\\"!=c){u=Hp;continue}break;case Hp:if("@"==c){m&&(s="%40"+s),m=!0,l=yi(s);for(var b=0;b<l.length;b++){var p=l[b];if(":"!=p||Z){var y=yp(p,pp);Z?t.password+=y:t.username+=y}else Z=!0}s=""}else if(c==wb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)){if(m&&""==s)return"Invalid authority";d-=yi(s).length+1,s="",u=kp}else s+=c;break;case kp:case Up:if(n&&"file"==t.scheme){u=zp;continue}if(":"!=c||h){if(c==wb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)){if(Xp(t)&&""==s)return Ob;if(n&&""==s&&(Gp(t)||null!==t.port))return;if(o=up(t,s))return o;if(s="",u=jp,n)return;continue}"["==c?h=!0:"]"==c&&(h=!1),s+=c}else{if(""==s)return Ob;if(o=up(t,s))return o;if(s="",u=Tp,n==Up)return}break;case Tp:if(!tp.test(c)){if(c==wb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)||n){if(""!=s){var I=parseInt(s,10);if(I>65535)return _b;t.port=Xp(t)&&I===Ip[t.scheme]?null:I,s=""}if(n)return;u=jp;continue}return _b}s+=c;break;case wp:if(t.scheme="file","/"==c||"\\"==c)u=Fp;else{if(!i||"file"!=i.scheme){u=Bp;continue}if(c==wb)t.host=i.host,t.path=i.path.slice(),t.query=i.query;else if("?"==c)t.host=i.host,t.path=i.path.slice(),t.query="",u=Ap;else{if("#"!=c){Vp(r.slice(d).join(""))||(t.host=i.host,t.path=i.path.slice(),Wp(t)),u=Bp;continue}t.host=i.host,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Pp}}break;case Fp:if("/"==c||"\\"==c){u=zp;break}i&&"file"==i.scheme&&!Vp(r.slice(d).join(""))&&(fp(i.path[0],!0)?t.path.push(i.path[0]):t.host=i.host),u=Bp;continue;case zp:if(c==wb||"/"==c||"\\"==c||"?"==c||"#"==c){if(!n&&fp(s))u=Bp;else if(""==s){if(t.host="",n)return;u=jp}else{if(o=up(t,s))return o;if("localhost"==t.host&&(t.host=""),n)return;s="",u=jp}continue}s+=c;break;case jp:if(Xp(t)){if(u=Bp,"/"!=c&&"\\"!=c)continue}else if(n||"?"!=c)if(n||"#"!=c){if(c!=wb&&(u=Bp,"/"!=c))continue}else t.fragment="",u=Pp;else t.query="",u=Ap;break;case Bp:if(c==wb||"/"==c||"\\"==c&&Xp(t)||!n&&("?"==c||"#"==c)){if(".."===(a=(a=s).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?(Wp(t),"/"==c||"\\"==c&&Xp(t)||t.path.push("")):vp(s)?"/"==c||"\\"==c&&Xp(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&fp(s)&&(t.host&&(t.host=""),s=s.charAt(0)+":"),t.path.push(s)),s="","file"==t.scheme&&(c==wb||"?"==c||"#"==c))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==c?(t.query="",u=Ap):"#"==c&&(t.fragment="",u=Pp)}else s+=yp(c,bp);break;case Mp:"?"==c?(t.query="",u=Ap):"#"==c?(t.fragment="",u=Pp):c!=wb&&(t.path[0]+=yp(c,hp));break;case Ap:n||"#"!=c?c!=wb&&("'"==c&&Xp(t)?t.query+="%27":t.query+="#"==c?"%23":yp(c,hp)):(t.fragment="",u=Pp);break;case Pp:c!=wb&&(t.fragment+=yp(c,Zp))}d++}},Dp=function(t){var e,n,i=qr(this,Dp,"URL"),r=arguments.length>1?arguments[1]:void 0,c=Xe(t),l=Ab(i,{type:"URL"});if(void 0!==r)if(r instanceof Dp)e=Pb(r);else if(n=Qp(e={},Xe(r)))throw TypeError(n);if(n=Qp(l,c,null,e))throw TypeError(n);var o=l.searchParams=new Bb,a=Mb(o);a.updateSearchParams(l.query),a.updateURL=function(){l.query=String(o)||null},s||(i.href=Op.call(i),i.origin=_p.call(i),i.protocol=qp.call(i),i.username=$p.call(i),i.password=ty.call(i),i.host=ey.call(i),i.hostname=ny.call(i),i.port=iy.call(i),i.pathname=ry.call(i),i.search=cy.call(i),i.searchParams=ly.call(i),i.hash=oy.call(i))},Ep=Dp.prototype,Op=function(){var t=Pb(this),e=t.scheme,n=t.username,i=t.password,r=t.host,c=t.port,l=t.path,o=t.query,a=t.fragment,u=e+":";return null!==r?(u+="//",Gp(t)&&(u+=n+(i?":"+i:"")+"@"),u+=mp(r),null!==c&&(u+=":"+c)):"file"==e&&(u+="//"),u+=t.cannotBeABaseURL?l[0]:l.length?"/"+l.join("/"):"",null!==o&&(u+="?"+o),null!==a&&(u+="#"+a),u},_p=function(){var t=Pb(this),e=t.scheme,n=t.port;if("blob"==e)try{return new Dp(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&Xp(t)?e+"://"+mp(t.host)+(null!==n?":"+n:""):"null"},qp=function(){return Pb(this).scheme+":"},$p=function(){return Pb(this).username},ty=function(){return Pb(this).password},ey=function(){var t=Pb(this),e=t.host,n=t.port;return null===e?"":null===n?mp(e):mp(e)+":"+n},ny=function(){var t=Pb(this).host;return null===t?"":mp(t)},iy=function(){var t=Pb(this).port;return null===t?"":String(t)},ry=function(){var t=Pb(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},cy=function(){var t=Pb(this).query;return t?"?"+t:""},ly=function(){return Pb(this).searchParams},oy=function(){var t=Pb(this).fragment;return t?"#"+t:""},ay=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(s&&ge(Ep,{href:ay(Op,(function(t){var e=Pb(this),n=Xe(t),i=Qp(e,n);if(i)throw TypeError(i);Mb(e.searchParams).updateSearchParams(e.query)})),origin:ay(_p),protocol:ay(qp,(function(t){var e=Pb(this);Qp(e,Xe(t)+":",Sp)})),username:ay($p,(function(t){var e=Pb(this),n=yi(Xe(t));if(!gp(e)){e.username="";for(var i=0;i<n.length;i++)e.username+=yp(n[i],pp)}})),password:ay(ty,(function(t){var e=Pb(this),n=yi(Xe(t));if(!gp(e)){e.password="";for(var i=0;i<n.length;i++)e.password+=yp(n[i],pp)}})),host:ay(ey,(function(t){var e=Pb(this);e.cannotBeABaseURL||Qp(e,Xe(t),kp)})),hostname:ay(ny,(function(t){var e=Pb(this);e.cannotBeABaseURL||Qp(e,Xe(t),Up)})),port:ay(iy,(function(t){var e=Pb(this);gp(e)||(""==(t=Xe(t))?e.port=null:Qp(e,t,Tp))})),pathname:ay(ry,(function(t){var e=Pb(this);e.cannotBeABaseURL||(e.path=[],Qp(e,Xe(t),jp))})),search:ay(cy,(function(t){var e=Pb(this);""==(t=Xe(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",Qp(e,t,Ap)),Mb(e.searchParams).updateSearchParams(e.query)})),searchParams:ay(ly),hash:ay(oy,(function(t){var e=Pb(this);""!=(t=Xe(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",Qp(e,t,Pp)):e.fragment=null}))}),Ut(Ep,"toJSON",(function(){return Op.call(this)}),{enumerable:!0}),Ut(Ep,"toString",(function(){return Op.call(this)}),{enumerable:!0}),jb){var uy=jb.createObjectURL,dy=jb.revokeObjectURL;uy&&Ut(Dp,"createObjectURL",(function(t){return uy.apply(jb,arguments)})),dy&&Ut(Dp,"revokeObjectURL",(function(t){return dy.apply(jb,arguments)}))}we(Dp,"URL"),se({global:!0,forced:!nb,sham:!s},{URL:Dp}),se({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}});var sy=i((function(t){var e=function(t){var e,n=Object.prototype,i=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,n){return t[e]=n}}function d(t,e,n,i){var r=e&&e.prototype instanceof y?e:y,c=Object.create(r.prototype),l=new R(i||[]);return c._invoke=function(t,e,n){var i=m;return function(r,c){if(i===Z)throw new Error("Generator is already running");if(i===b){if("throw"===r)throw c;return L()}for(n.method=r,n.arg=c;;){var l=n.delegate;if(l){var o=S(l,n);if(o){if(o===p)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===m)throw i=b,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=Z;var a=s(t,e,n);if("normal"===a.type){if(i=n.done?b:h,a.arg===p)continue;return{value:a.arg,done:n.done}}"throw"===a.type&&(i=b,n.method="throw",n.arg=a.arg)}}}(t,n,l),c}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=d;var m="suspendedStart",h="suspendedYield",Z="executing",b="completed",p={};function y(){}function I(){}function X(){}var G={};u(G,c,(function(){return this}));var g=Object.getPrototypeOf,f=g&&g(g(K([])));f&&f!==n&&i.call(f,c)&&(G=f);var V=X.prototype=y.prototype=Object.create(G);function W(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function v(t,e){function n(r,c,l,a){var u=s(t[r],t,c);if("throw"!==u.type){var d=u.arg,m=d.value;return m&&"object"===o(m)&&i.call(m,"__await")?e.resolve(m.__await).then((function(t){n("next",t,l,a)}),(function(t){n("throw",t,l,a)})):e.resolve(m).then((function(t){d.value=t,l(d)}),(function(t){return n("throw",t,l,a)}))}a(u.arg)}var r;this._invoke=function(t,i){function c(){return new e((function(e,r){n(t,i,e,r)}))}return r=r?r.then(c,c):c()}}function S(t,n){var i=t.iterator[n.method];if(i===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method))return p;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=s(i,t.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,p;var c=r.arg;return c?c.done?(n[t.resultName]=c.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,p):c:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,p)}function C(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 Y(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function R(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function K(t){if(t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,l=function n(){for(;++r<t.length;)if(i.call(t,r))return n.value=t[r],n.done=!1,n;return n.value=e,n.done=!0,n};return l.next=l}}return{next:L}}function L(){return{value:e,done:!0}}return I.prototype=X,u(V,"constructor",X),u(X,"constructor",I),I.displayName=u(X,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===I||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,X):(t.__proto__=X,u(t,a,"GeneratorFunction")),t.prototype=Object.create(V),t},t.awrap=function(t){return{__await:t}},W(v.prototype),u(v.prototype,l,(function(){return this})),t.AsyncIterator=v,t.async=function(e,n,i,r,c){void 0===c&&(c=Promise);var l=new v(d(e,n,i,r),c);return t.isGeneratorFunction(n)?l:l.next().then((function(t){return t.done?t.value:l.next()}))},W(V),u(V,a,"Generator"),u(V,c,(function(){return this})),u(V,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var i=e.pop();if(i in t)return n.value=i,n.done=!1,n}return n.done=!0,n}},t.values=K,R.prototype={constructor:R,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(Y),!t)for(var n in this)"t"===n.charAt(0)&&i.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(i,r){return o.type="throw",o.arg=t,n.next=i,r&&(n.method="next",n.arg=e),!!r}for(var c=this.tryEntries.length-1;c>=0;--c){var l=this.tryEntries[c],o=l.completion;if("root"===l.tryLoc)return r("end");if(l.tryLoc<=this.prev){var a=i.call(l,"catchLoc"),u=i.call(l,"finallyLoc");if(a&&u){if(this.prev<l.catchLoc)return r(l.catchLoc,!0);if(this.prev<l.finallyLoc)return r(l.finallyLoc)}else if(a){if(this.prev<l.catchLoc)return r(l.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<l.finallyLoc)return r(l.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var c=r;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var l=c?c.completion:{};return l.type=t,l.arg=e,c?(this.method="next",this.next=c.finallyLoc,p):this.complete(l)},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),p},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),Y(n),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;Y(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,i){return this.delegate={iterator:K(t),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=e}catch(t){"object"===("undefined"==typeof globalThis?"undefined":o(globalThis))?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}})),my=i((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.default=t.exports,t.exports.__esModule=!0})),hy=n(my),Zy=i((function(t){function e(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}t.exports=function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t},t.exports.default=t.exports,t.exports.__esModule=!0})),by=n(Zy),py=sy;function yy(t,e,n,i){return new(n||(n=Promise))((function(r,c){function l(t){try{a(i.next(t))}catch(t){c(t)}}function o(t){try{a(i.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}a((i=i.apply(t,e||[])).next())}))}var Iy=i((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i},t.exports.default=t.exports,t.exports.__esModule=!0})),Xy=i((function(t){t.exports=function(t){if(Array.isArray(t))return Iy(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),Gy=i((function(t){t.exports=function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),gy=i((function(t){t.exports=function(t,e){if(t){if("string"==typeof t)return Iy(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)?Iy(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0})),fy=i((function(t){t.exports=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.")},t.exports.default=t.exports,t.exports.__esModule=!0})),Vy=n(i((function(t){t.exports=function(t){return Xy(t)||Gy(t)||gy(t)||fy()},t.exports.default=t.exports,t.exports.__esModule=!0}))),Wy=i((function(t){t.exports=function(t){if(Array.isArray(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0})),vy=i((function(t){t.exports=function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,r,c=[],l=!0,o=!1;try{for(n=n.call(t);!(l=(i=n.next()).done)&&(c.push(i.value),!e||c.length!==e);l=!0);}catch(t){o=!0,r=t}finally{try{l||null==n.return||n.return()}finally{if(o)throw r}}return c}},t.exports.default=t.exports,t.exports.__esModule=!0})),Sy=i((function(t){t.exports=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.")},t.exports.default=t.exports,t.exports.__esModule=!0})),Cy=i((function(t){t.exports=function(t,e){return Wy(t)||vy(t,e)||gy(t,e)||Sy()},t.exports.default=t.exports,t.exports.__esModule=!0})),Yy=n(Cy),Ry=i((function(t){t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},t.exports.default=t.exports,t.exports.__esModule=!0})),Ky=n(Ry),Ly=i((function(t){function e(t,e,n,i,r,c,l){try{var o=t[c](l),a=o.value}catch(t){return void n(t)}o.done?e(a):Promise.resolve(a).then(i,r)}t.exports=function(t){return function(){var n=this,i=arguments;return new Promise((function(r,c){var l=t.apply(n,i);function o(t){e(l,r,c,o,a,"next",t)}function a(t){e(l,r,c,o,a,"throw",t)}o(void 0)}))}},t.exports.default=t.exports,t.exports.__esModule=!0})),Jy=n(Ly),xy=i((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Ny=n(xy),Hy=i((function(t){function e(n,i){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),ky=n(i((function(t){t.exports=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Hy(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Uy=i((function(t){var e=l.default;t.exports=function(t,n){if(n&&("object"===e(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return xy(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),Ty=n(Uy),wy=i((function(t){function e(n){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Fy=n(wy),zy=i((function(t){t.exports=function(t){return-1!==Function.toString.call(t).indexOf("[native code]")},t.exports.default=t.exports,t.exports.__esModule=!0})),jy=i((function(t){t.exports=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}},t.exports.default=t.exports,t.exports.__esModule=!0})),By=i((function(t){function e(n,i,r){return jy()?(t.exports=e=Reflect.construct,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,n){var i=[null];i.push.apply(i,e);var r=new(Function.bind.apply(t,i));return n&&Hy(r,n.prototype),r},t.exports.default=t.exports,t.exports.__esModule=!0),e.apply(null,arguments)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),My=i((function(t){function e(n){var i="function"==typeof Map?new Map:void 0;return t.exports=e=function(t){if(null===t||!zy(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==i){if(i.has(t))return i.get(t);i.set(t,e)}function e(){return By(t,arguments,wy(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),Hy(e,t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ay=n(My),Py="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Qy=[],Dy=[],Ey="undefined"!=typeof Uint8Array?Uint8Array:Array,Oy=!1;function _y(){Oy=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)Qy[e]=t[e],Dy[t.charCodeAt(e)]=e;Dy["-".charCodeAt(0)]=62,Dy["_".charCodeAt(0)]=63}function qy(t,e,n){for(var i,r,c=[],l=e;l<n;l+=3)i=(t[l]<<16)+(t[l+1]<<8)+t[l+2],c.push(Qy[(r=i)>>18&63]+Qy[r>>12&63]+Qy[r>>6&63]+Qy[63&r]);return c.join("")}function $y(t){var e;Oy||_y();for(var n=t.length,i=n%3,r="",c=[],l=16383,o=0,a=n-i;o<a;o+=l)c.push(qy(t,o,o+l>a?a:o+l));return 1===i?(e=t[n-1],r+=Qy[e>>2],r+=Qy[e<<4&63],r+="=="):2===i&&(e=(t[n-2]<<8)+t[n-1],r+=Qy[e>>10],r+=Qy[e>>4&63],r+=Qy[e<<2&63],r+="="),c.push(r),c.join("")}function tI(t,e,n,i,r){var c,l,o=8*r-i-1,a=(1<<o)-1,u=a>>1,d=-7,s=n?r-1:0,m=n?-1:1,h=t[e+s];for(s+=m,c=h&(1<<-d)-1,h>>=-d,d+=o;d>0;c=256*c+t[e+s],s+=m,d-=8);for(l=c&(1<<-d)-1,c>>=-d,d+=i;d>0;l=256*l+t[e+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===a)return l?NaN:1/0*(h?-1:1);l+=Math.pow(2,i),c-=u}return(h?-1:1)*l*Math.pow(2,c-i)}function eI(t,e,n,i,r,c){var l,o,a,u=8*c-r-1,d=(1<<u)-1,s=d>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:c-1,Z=i?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,l=d):(l=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-l))<1&&(l--,a*=2),(e+=l+s>=1?m/a:m*Math.pow(2,1-s))*a>=2&&(l++,a/=2),l+s>=d?(o=0,l=d):l+s>=1?(o=(e*a-1)*Math.pow(2,r),l+=s):(o=e*Math.pow(2,s-1)*Math.pow(2,r),l=0));r>=8;t[n+h]=255&o,h+=Z,o/=256,r-=8);for(l=l<<r|o,u+=r;u>0;t[n+h]=255&l,h+=Z,l/=256,u-=8);t[n+h-Z]|=128*b}var nI={}.toString,iI=Array.isArray||function(t){return"[object Array]"==nI.call(t)};function rI(){return lI.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function cI(t,e){if(rI()<e)throw new RangeError("Invalid typed array length");return lI.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=lI.prototype:(null===t&&(t=new lI(e)),t.length=e),t}function lI(t,e,n){if(!(lI.TYPED_ARRAY_SUPPORT||this instanceof lI))return new lI(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return uI(this,t)}return oI(this,t,e,n)}function oI(t,e,n,i){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,i){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===i?new Uint8Array(e):void 0===i?new Uint8Array(e,n):new Uint8Array(e,n,i);lI.TYPED_ARRAY_SUPPORT?(t=e).__proto__=lI.prototype:t=dI(t,e);return t}(t,e,n,i):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!lI.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|hI(e,n),r=(t=cI(t,i)).write(e,n);r!==i&&(t=t.slice(0,r));return t}(t,e,n):function(t,e){if(mI(e)){var n=0|sI(e.length);return 0===(t=cI(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(i=e.length)!=i?cI(t,0):dI(t,e);if("Buffer"===e.type&&iI(e.data))return dI(t,e.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function aI(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function uI(t,e){if(aI(e),t=cI(t,e<0?0:0|sI(e)),!lI.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function dI(t,e){var n=e.length<0?0:0|sI(e.length);t=cI(t,n);for(var i=0;i<n;i+=1)t[i]=255&e[i];return t}function sI(t){if(t>=rI())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+rI().toString(16)+" bytes");return 0|t}function mI(t){return!(null==t||!t._isBuffer)}function hI(t,e){if(mI(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return FI(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return zI(t).length;default:if(i)return FI(t).length;e=(""+e).toLowerCase(),i=!0}}function ZI(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return RI(this,e,n);case"utf8":case"utf-8":return vI(this,e,n);case"ascii":return CI(this,e,n);case"latin1":case"binary":return YI(this,e,n);case"base64":return WI(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return KI(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function bI(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function pI(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=lI.from(e,i)),mI(e))return 0===e.length?-1:yI(t,e,n,i,r);if("number"==typeof e)return e&=255,lI.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):yI(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function yI(t,e,n,i,r){var c,l=1,o=t.length,a=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;l=2,o/=2,a/=2,n/=2}function u(t,e){return 1===l?t[e]:t.readUInt16BE(e*l)}if(r){var d=-1;for(c=n;c<o;c++)if(u(t,c)===u(e,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===a)return d*l}else-1!==d&&(c-=c-d),d=-1}else for(n+a>o&&(n=o-a),c=n;c>=0;c--){for(var s=!0,m=0;m<a;m++)if(u(t,c+m)!==u(e,m)){s=!1;break}if(s)return c}return-1}function II(t,e,n,i){n=Number(n)||0;var r=t.length-n;i?(i=Number(i))>r&&(i=r):i=r;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var l=0;l<i;++l){var o=parseInt(e.substr(2*l,2),16);if(isNaN(o))return l;t[n+l]=o}return l}function XI(t,e,n,i){return jI(FI(e,t.length-n),t,n,i)}function GI(t,e,n,i){return jI(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,i)}function gI(t,e,n,i){return GI(t,e,n,i)}function fI(t,e,n,i){return jI(zI(e),t,n,i)}function VI(t,e,n,i){return jI(function(t,e){for(var n,i,r,c=[],l=0;l<t.length&&!((e-=2)<0);++l)i=(n=t.charCodeAt(l))>>8,r=n%256,c.push(r),c.push(i);return c}(e,t.length-n),t,n,i)}function WI(t,e,n){return 0===e&&n===t.length?$y(t):$y(t.slice(e,n))}function vI(t,e,n){n=Math.min(t.length,n);for(var i=[],r=e;r<n;){var c,l,o,a,u=t[r],d=null,s=u>239?4:u>223?3:u>191?2:1;if(r+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=t[r+1]))&&(a=(31&u)<<6|63&c)>127&&(d=a);break;case 3:c=t[r+1],l=t[r+2],128==(192&c)&&128==(192&l)&&(a=(15&u)<<12|(63&c)<<6|63&l)>2047&&(a<55296||a>57343)&&(d=a);break;case 4:c=t[r+1],l=t[r+2],o=t[r+3],128==(192&c)&&128==(192&l)&&128==(192&o)&&(a=(15&u)<<18|(63&c)<<12|(63&l)<<6|63&o)>65535&&a<1114112&&(d=a)}null===d?(d=65533,s=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),r+=s}return function(t){var e=t.length;if(e<=SI)return String.fromCharCode.apply(String,t);var n="",i=0;for(;i<e;)n+=String.fromCharCode.apply(String,t.slice(i,i+=SI));return n}(i)}lI.TYPED_ARRAY_SUPPORT=void 0===Py.TYPED_ARRAY_SUPPORT||Py.TYPED_ARRAY_SUPPORT,lI.poolSize=8192,lI._augment=function(t){return t.__proto__=lI.prototype,t},lI.from=function(t,e,n){return oI(null,t,e,n)},lI.TYPED_ARRAY_SUPPORT&&(lI.prototype.__proto__=Uint8Array.prototype,lI.__proto__=Uint8Array),lI.alloc=function(t,e,n){return function(t,e,n,i){return aI(e),e<=0?cI(t,e):void 0!==n?"string"==typeof i?cI(t,e).fill(n,i):cI(t,e).fill(n):cI(t,e)}(null,t,e,n)},lI.allocUnsafe=function(t){return uI(null,t)},lI.allocUnsafeSlow=function(t){return uI(null,t)},lI.isBuffer=function(t){return null!=t&&(!!t._isBuffer||BI(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&BI(t.slice(0,0))}(t))},lI.compare=function(t,e){if(!mI(t)||!mI(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,i=e.length,r=0,c=Math.min(n,i);r<c;++r)if(t[r]!==e[r]){n=t[r],i=e[r];break}return n<i?-1:i<n?1:0},lI.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},lI.concat=function(t,e){if(!iI(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return lI.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var i=lI.allocUnsafe(e),r=0;for(n=0;n<t.length;++n){var c=t[n];if(!mI(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,r),r+=c.length}return i},lI.byteLength=hI,lI.prototype._isBuffer=!0,lI.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)bI(this,e,e+1);return this},lI.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)bI(this,e,e+3),bI(this,e+1,e+2);return this},lI.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)bI(this,e,e+7),bI(this,e+1,e+6),bI(this,e+2,e+5),bI(this,e+3,e+4);return this},lI.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?vI(this,0,t):ZI.apply(this,arguments)},lI.prototype.equals=function(t){if(!mI(t))throw new TypeError("Argument must be a Buffer");return this===t||0===lI.compare(this,t)},lI.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},lI.prototype.compare=function(t,e,n,i,r){if(!mI(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(r>>>=0)-(i>>>=0),l=(n>>>=0)-(e>>>=0),o=Math.min(c,l),a=this.slice(i,r),u=t.slice(e,n),d=0;d<o;++d)if(a[d]!==u[d]){c=a[d],l=u[d];break}return c<l?-1:l<c?1:0},lI.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},lI.prototype.indexOf=function(t,e,n){return pI(this,t,e,n,!0)},lI.prototype.lastIndexOf=function(t,e,n){return pI(this,t,e,n,!1)},lI.prototype.write=function(t,e,n,i){if(void 0===e)i="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)i=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return II(this,t,e,n);case"utf8":case"utf-8":return XI(this,t,e,n);case"ascii":return GI(this,t,e,n);case"latin1":case"binary":return gI(this,t,e,n);case"base64":return fI(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return VI(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},lI.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var SI=4096;function CI(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(127&t[r]);return i}function YI(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(t[r]);return i}function RI(t,e,n){var i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var r="",c=e;c<n;++c)r+=wI(t[c]);return r}function KI(t,e,n){for(var i=t.slice(e,n),r="",c=0;c<i.length;c+=2)r+=String.fromCharCode(i[c]+256*i[c+1]);return r}function LI(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function JI(t,e,n,i,r,c){if(!mI(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<c)throw new RangeError('"value" argument is out of bounds');if(n+i>t.length)throw new RangeError("Index out of range")}function xI(t,e,n,i){e<0&&(e=65535+e+1);for(var r=0,c=Math.min(t.length-n,2);r<c;++r)t[n+r]=(e&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function NI(t,e,n,i){e<0&&(e=4294967295+e+1);for(var r=0,c=Math.min(t.length-n,4);r<c;++r)t[n+r]=e>>>8*(i?r:3-r)&255}function HI(t,e,n,i,r,c){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function kI(t,e,n,i,r){return r||HI(t,0,n,4),eI(t,e,n,i,23,4),n+4}function UI(t,e,n,i,r){return r||HI(t,0,n,8),eI(t,e,n,i,52,8),n+8}lI.prototype.slice=function(t,e){var n,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e<t&&(e=t),lI.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=lI.prototype;else{var r=e-t;n=new lI(r,void 0);for(var c=0;c<r;++c)n[c]=this[c+t]}return n},lI.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i},lI.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t+--e],r=1;e>0&&(r*=256);)i+=this[t+--e]*r;return i},lI.prototype.readUInt8=function(t,e){return e||LI(t,1,this.length),this[t]},lI.prototype.readUInt16LE=function(t,e){return e||LI(t,2,this.length),this[t]|this[t+1]<<8},lI.prototype.readUInt16BE=function(t,e){return e||LI(t,2,this.length),this[t]<<8|this[t+1]},lI.prototype.readUInt32LE=function(t,e){return e||LI(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},lI.prototype.readUInt32BE=function(t,e){return e||LI(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},lI.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*e)),i},lI.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=e,r=1,c=this[t+--i];i>0&&(r*=256);)c+=this[t+--i]*r;return c>=(r*=128)&&(c-=Math.pow(2,8*e)),c},lI.prototype.readInt8=function(t,e){return e||LI(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},lI.prototype.readInt16LE=function(t,e){e||LI(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},lI.prototype.readInt16BE=function(t,e){e||LI(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},lI.prototype.readInt32LE=function(t,e){return e||LI(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},lI.prototype.readInt32BE=function(t,e){return e||LI(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},lI.prototype.readFloatLE=function(t,e){return e||LI(t,4,this.length),tI(this,t,!0,23,4)},lI.prototype.readFloatBE=function(t,e){return e||LI(t,4,this.length),tI(this,t,!1,23,4)},lI.prototype.readDoubleLE=function(t,e){return e||LI(t,8,this.length),tI(this,t,!0,52,8)},lI.prototype.readDoubleBE=function(t,e){return e||LI(t,8,this.length),tI(this,t,!1,52,8)},lI.prototype.writeUIntLE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||JI(this,t,e,n,Math.pow(2,8*n)-1,0);var r=1,c=0;for(this[e]=255&t;++c<n&&(r*=256);)this[e+c]=t/r&255;return e+n},lI.prototype.writeUIntBE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||JI(this,t,e,n,Math.pow(2,8*n)-1,0);var r=n-1,c=1;for(this[e+r]=255&t;--r>=0&&(c*=256);)this[e+r]=t/c&255;return e+n},lI.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,1,255,0),lI.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},lI.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,65535,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):xI(this,t,e,!0),e+2},lI.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,65535,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):xI(this,t,e,!1),e+2},lI.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,4294967295,0),lI.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):NI(this,t,e,!0),e+4},lI.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,4294967295,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):NI(this,t,e,!1),e+4},lI.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);JI(this,t,e,n,r-1,-r)}var c=0,l=1,o=0;for(this[e]=255&t;++c<n&&(l*=256);)t<0&&0===o&&0!==this[e+c-1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},lI.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);JI(this,t,e,n,r-1,-r)}var c=n-1,l=1,o=0;for(this[e+c]=255&t;--c>=0&&(l*=256);)t<0&&0===o&&0!==this[e+c+1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},lI.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,1,127,-128),lI.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},lI.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,32767,-32768),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):xI(this,t,e,!0),e+2},lI.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,32767,-32768),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):xI(this,t,e,!1),e+2},lI.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,2147483647,-2147483648),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):NI(this,t,e,!0),e+4},lI.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):NI(this,t,e,!1),e+4},lI.prototype.writeFloatLE=function(t,e,n){return kI(this,t,e,!0,n)},lI.prototype.writeFloatBE=function(t,e,n){return kI(this,t,e,!1,n)},lI.prototype.writeDoubleLE=function(t,e,n){return UI(this,t,e,!0,n)},lI.prototype.writeDoubleBE=function(t,e,n){return UI(this,t,e,!1,n)},lI.prototype.copy=function(t,e,n,i){if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e<i-n&&(i=t.length-e+n);var r,c=i-n;if(this===t&&n<e&&e<i)for(r=c-1;r>=0;--r)t[r+e]=this[r+n];else if(c<1e3||!lI.TYPED_ARRAY_SUPPORT)for(r=0;r<c;++r)t[r+e]=this[r+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},lI.prototype.fill=function(t,e,n,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===t.length){var r=t.charCodeAt(0);r<256&&(t=r)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!lI.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var l=mI(t)?t:FI(new lI(t,i).toString()),o=l.length;for(c=0;c<n-e;++c)this[c+e]=l[c%o]}return this};var TI=/[^+\/0-9A-Za-z-_]/g;function wI(t){return t<16?"0"+t.toString(16):t.toString(16)}function FI(t,e){var n;e=e||1/0;for(var i=t.length,r=null,c=[],l=0;l<i;++l){if((n=t.charCodeAt(l))>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(l+1===i){(e-=3)>-1&&c.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&c.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function zI(t){return function(t){var e,n,i,r,c,l;Oy||_y();var o=t.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[o-2]?2:"="===t[o-1]?1:0,l=new Ey(3*o/4-c),i=c>0?o-4:o;var a=0;for(e=0,n=0;e<i;e+=4,n+=3)r=Dy[t.charCodeAt(e)]<<18|Dy[t.charCodeAt(e+1)]<<12|Dy[t.charCodeAt(e+2)]<<6|Dy[t.charCodeAt(e+3)],l[a++]=r>>16&255,l[a++]=r>>8&255,l[a++]=255&r;return 2===c?(r=Dy[t.charCodeAt(e)]<<2|Dy[t.charCodeAt(e+1)]>>4,l[a++]=255&r):1===c&&(r=Dy[t.charCodeAt(e)]<<10|Dy[t.charCodeAt(e+1)]<<4|Dy[t.charCodeAt(e+2)]>>2,l[a++]=r>>8&255,l[a++]=255&r),l}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(TI,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function jI(t,e,n,i){for(var r=0;r<i&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function BI(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var MI=function(t,e){return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];return t.apply(e,n)}},AI=Object.prototype.toString;function PI(t){return"[object Array]"===AI.call(t)}function QI(t){return void 0===t}function DI(t){return null!==t&&"object"===o(t)}function EI(t){if("[object Object]"!==AI.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function OI(t){return"[object Function]"===AI.call(t)}function _I(t,e){if(null!=t)if("object"!==o(t)&&(t=[t]),PI(t))for(var n=0,i=t.length;n<i;n++)e.call(null,t[n],n,t);else for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.call(null,t[r],r,t)}var qI={isArray:PI,isArrayBuffer:function(t){return"[object ArrayBuffer]"===AI.call(t)},isBuffer:function(t){return null!==t&&!QI(t)&&null!==t.constructor&&!QI(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:DI,isPlainObject:EI,isUndefined:QI,isDate:function(t){return"[object Date]"===AI.call(t)},isFile:function(t){return"[object File]"===AI.call(t)},isBlob:function(t){return"[object Blob]"===AI.call(t)},isFunction:OI,isStream:function(t){return DI(t)&&OI(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:_I,merge:function t(){var e={};function n(n,i){EI(e[i])&&EI(n)?e[i]=t(e[i],n):EI(n)?e[i]=t({},n):PI(n)?e[i]=n.slice():e[i]=n}for(var i=0,r=arguments.length;i<r;i++)_I(arguments[i],n);return e},extend:function(t,e,n){return _I(e,(function(e,i){t[i]=n&&"function"==typeof e?MI(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}};function $I(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var tX=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(qI.isURLSearchParams(e))i=e.toString();else{var r=[];qI.forEach(e,(function(t,e){null!=t&&(qI.isArray(t)?e+="[]":t=[t],qI.forEach(t,(function(t){qI.isDate(t)?t=t.toISOString():qI.isObject(t)&&(t=JSON.stringify(t)),r.push($I(e)+"="+$I(t))})))})),i=r.join("&")}if(i){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t};function eX(){this.handlers=[]}eX.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},eX.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},eX.prototype.forEach=function(t){qI.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var nX=eX;function iX(){throw new Error("setTimeout has not been defined")}function rX(){throw new Error("clearTimeout has not been defined")}var cX=iX,lX=rX;function oX(t){if(cX===setTimeout)return setTimeout(t,0);if((cX===iX||!cX)&&setTimeout)return cX=setTimeout,setTimeout(t,0);try{return cX(t,0)}catch(e){try{return cX.call(null,t,0)}catch(e){return cX.call(this,t,0)}}}"function"==typeof Py.setTimeout&&(cX=setTimeout),"function"==typeof Py.clearTimeout&&(lX=clearTimeout);var aX,uX=[],dX=!1,sX=-1;function mX(){dX&&aX&&(dX=!1,aX.length?uX=aX.concat(uX):sX=-1,uX.length&&hX())}function hX(){if(!dX){var t=oX(mX);dX=!0;for(var e=uX.length;e;){for(aX=uX,uX=[];++sX<e;)aX&&aX[sX].run();sX=-1,e=uX.length}aX=null,dX=!1,function(t){if(lX===clearTimeout)return clearTimeout(t);if((lX===rX||!lX)&&clearTimeout)return lX=clearTimeout,clearTimeout(t);try{lX(t)}catch(e){try{return lX.call(null,t)}catch(e){return lX.call(this,t)}}}(t)}}function ZX(t,e){this.fun=t,this.array=e}ZX.prototype.run=function(){this.fun.apply(null,this.array)};function bX(){}var pX=bX,yX=bX,IX=bX,XX=bX,GX=bX,gX=bX,fX=bX;var VX=Py.performance||{},WX=VX.now||VX.mozNow||VX.msNow||VX.oNow||VX.webkitNow||function(){return(new Date).getTime()};var vX=new Date;var SX={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];uX.push(new ZX(t,e)),1!==uX.length||dX||oX(hX)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:pX,addListener:yX,once:IX,off:XX,removeListener:GX,removeAllListeners:gX,emit:fX,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*WX.call(VX),n=Math.floor(e),i=Math.floor(e%1*1e9);return t&&(n-=t[0],(i-=t[1])<0&&(n--,i+=1e9)),[n,i]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-vX)/1e3}},CX=SX,YX=function(t,e){qI.forEach(t,(function(n,i){i!==e&&i.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[i])}))},RX=function(t,e,n,i,r){return t.config=e,n&&(t.code=n),t.request=i,t.response=r,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t},KX=function(t,e,n,i,r){var c=new Error(t);return RX(c,e,n,i,r)},LX=qI.isStandardBrowserEnv()?{write:function(t,e,n,i,r,c){var l=[];l.push(t+"="+encodeURIComponent(e)),qI.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),qI.isString(i)&&l.push("path="+i),qI.isString(r)&&l.push("domain="+r),!0===c&&l.push("secure"),document.cookie=l.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},JX=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],xX=qI.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var i=t;return e&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=qI.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0},NX=function(t){return new Promise((function(e,n){var i=t.data,r=t.headers,c=t.responseType;qI.isFormData(i)&&delete r["Content-Type"];var l=new XMLHttpRequest;if(t.auth){var o=t.auth.username||"",a=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";r.Authorization="Basic "+btoa(o+":"+a)}var u,d,s=(u=t.baseURL,d=t.url,u&&!/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(d)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(u,d):d);function m(){if(l){var i="getAllResponseHeaders"in l?function(t){var e,n,i,r={};return t?(qI.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=qI.trim(t.substr(0,i)).toLowerCase(),n=qI.trim(t.substr(i+1)),e){if(r[e]&&JX.indexOf(e)>=0)return;r[e]="set-cookie"===e?(r[e]?r[e]:[]).concat([n]):r[e]?r[e]+", "+n:n}})),r):r}(l.getAllResponseHeaders()):null,r={data:c&&"text"!==c&&"json"!==c?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:i,config:t,request:l};!function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(KX("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}(e,n,r),l=null}}if(l.open(t.method.toUpperCase(),tX(s,t.params,t.paramsSerializer),!0),l.timeout=t.timeout,"onloadend"in l?l.onloadend=m:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(m)},l.onabort=function(){l&&(n(KX("Request aborted",t,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(KX("Network Error",t,null,l)),l=null},l.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(KX(e,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},qI.isStandardBrowserEnv()){var h=(t.withCredentials||xX(s))&&t.xsrfCookieName?LX.read(t.xsrfCookieName):void 0;h&&(r[t.xsrfHeaderName]=h)}"setRequestHeader"in l&&qI.forEach(r,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete r[e]:l.setRequestHeader(e,t)})),qI.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),c&&"json"!==c&&(l.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&l.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){l&&(l.abort(),n(t),l=null)})),i||(i=null),l.send(i)}))},HX={"Content-Type":"application/x-www-form-urlencoded"};function kX(t,e){!qI.isUndefined(t)&&qI.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var UX,TX={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==CX&&"[object process]"===Object.prototype.toString.call(CX))&&(UX=NX),UX),transformRequest:[function(t,e){return YX(e,"Accept"),YX(e,"Content-Type"),qI.isFormData(t)||qI.isArrayBuffer(t)||qI.isBuffer(t)||qI.isStream(t)||qI.isFile(t)||qI.isBlob(t)?t:qI.isArrayBufferView(t)?t.buffer:qI.isURLSearchParams(t)?(kX(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):qI.isObject(t)||e&&"application/json"===e["Content-Type"]?(kX(e,"application/json"),function(t,e,n){if(qI.isString(t))try{return(e||JSON.parse)(t),qI.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,r=!n&&"json"===this.responseType;if(r||i&&qI.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw RX(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};TX.headers={common:{Accept:"application/json, text/plain, */*"}},qI.forEach(["delete","get","head"],(function(t){TX.headers[t]={}})),qI.forEach(["post","put","patch"],(function(t){TX.headers[t]=qI.merge(HX)}));var wX=TX,FX=function(t,e,n){var i=this||wX;return qI.forEach(n,(function(n){t=n.call(i,t,e)})),t},zX=function(t){return!(!t||!t.__CANCEL__)};function jX(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var BX=function(t){return jX(t),t.headers=t.headers||{},t.data=FX.call(t,t.data,t.headers,t.transformRequest),t.headers=qI.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),qI.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||wX.adapter)(t).then((function(e){return jX(t),e.data=FX.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return zX(e)||(jX(t),e&&e.response&&(e.response.data=FX.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},MX=function(t,e){e=e||{};var n={},i=["url","method","data"],r=["headers","auth","proxy","params"],c=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],l=["validateStatus"];function o(t,e){return qI.isPlainObject(t)&&qI.isPlainObject(e)?qI.merge(t,e):qI.isPlainObject(e)?qI.merge({},e):qI.isArray(e)?e.slice():e}function a(i){qI.isUndefined(e[i])?qI.isUndefined(t[i])||(n[i]=o(void 0,t[i])):n[i]=o(t[i],e[i])}qI.forEach(i,(function(t){qI.isUndefined(e[t])||(n[t]=o(void 0,e[t]))})),qI.forEach(r,a),qI.forEach(c,(function(i){qI.isUndefined(e[i])?qI.isUndefined(t[i])||(n[i]=o(void 0,t[i])):n[i]=o(void 0,e[i])})),qI.forEach(l,(function(i){i in e?n[i]=o(t[i],e[i]):i in t&&(n[i]=o(void 0,t[i]))}));var u=i.concat(r).concat(c).concat(l),d=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===u.indexOf(t)}));return qI.forEach(d,a),n},AX={name:"axios",version:"0.21.4",description:"Promise based HTTP client for the browser and node.js",main:"index.js",scripts:{test:"grunt test",start:"node ./sandbox/server.js",build:"NODE_ENV=production grunt build",preversion:"npm test",version:"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json",postversion:"git push && git push --tags",examples:"node ./examples/server.js",coveralls:"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",fix:"eslint --fix lib/**/*.js"},repository:{type:"git",url:"https://github.com/axios/axios.git"},keywords:["xhr","http","ajax","promise","node"],author:"Matt Zabriskie",license:"MIT",bugs:{url:"https://github.com/axios/axios/issues"},homepage:"https://axios-http.com",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"},browser:{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},jsdelivr:"dist/axios.min.js",unpkg:"dist/axios.min.js",typings:"./index.d.ts",dependencies:{"follow-redirects":"^1.14.0"},bundlesize:[{path:"./dist/axios.min.js",threshold:"5kB"}],_resolved:"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",_integrity:"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",_from:"axios@0.21.4"},PX={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){PX[t]=function(n){return o(n)===t||"a"+(e<1?"n ":" ")+t}}));var QX={},DX=AX.version.split(".");function EX(t,e){for(var n=e?e.split("."):DX,i=t.split("."),r=0;r<3;r++){if(n[r]>i[r])return!0;if(n[r]<i[r])return!1}return!1}PX.transitional=function(t,e,n){var i=e&&EX(e);function r(t,e){return"[Axios v"+AX.version+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,c,l){if(!1===t)throw new Error(r(c," has been removed in "+e));return i&&!QX[c]&&(QX[c]=!0,console.warn(r(c," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,c,l)}};var OX={isOlderVersion:EX,assertOptions:function(t,e,n){if("object"!==o(t))throw new TypeError("options must be an object");for(var i=Object.keys(t),r=i.length;r-- >0;){var c=i[r],l=e[c];if(l){var a=t[c],u=void 0===a||l(a,c,t);if(!0!==u)throw new TypeError("option "+c+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:PX},_X=OX.validators;function qX(t){this.defaults=t,this.interceptors={request:new nX,response:new nX}}qX.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=MX(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&OX.assertOptions(e,{silentJSONParsing:_X.transitional(_X.boolean,"1.0.0"),forcedJSONParsing:_X.transitional(_X.boolean,"1.0.0"),clarifyTimeoutError:_X.transitional(_X.boolean,"1.0.0")},!1);var n=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var r,c=[];if(this.interceptors.response.forEach((function(t){c.push(t.fulfilled,t.rejected)})),!i){var l=[BX,void 0];for(Array.prototype.unshift.apply(l,n),l=l.concat(c),r=Promise.resolve(t);l.length;)r=r.then(l.shift(),l.shift());return r}for(var o=t;n.length;){var a=n.shift(),u=n.shift();try{o=a(o)}catch(t){u(t);break}}try{r=BX(o)}catch(t){return Promise.reject(t)}for(;c.length;)r=r.then(c.shift(),c.shift());return r},qX.prototype.getUri=function(t){return t=MX(this.defaults,t),tX(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},qI.forEach(["delete","get","head","options"],(function(t){qX.prototype[t]=function(e,n){return this.request(MX(n||{},{method:t,url:e,data:(n||{}).data}))}})),qI.forEach(["post","put","patch"],(function(t){qX.prototype[t]=function(e,n,i){return this.request(MX(i||{},{method:t,url:e,data:n}))}}));var $X=qX;function tG(t){this.message=t}tG.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},tG.prototype.__CANCEL__=!0;var eG=tG;function nG(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new eG(t),e(n.reason))}))}nG.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},nG.source=function(){var t,e=new nG((function(e){t=e}));return{token:e,cancel:t}};var iG=nG;function rG(t){var e=new $X(t),n=MI($X.prototype.request,e);return qI.extend(n,$X.prototype,e),qI.extend(n,e),n}var cG=rG(wX);cG.Axios=$X,cG.create=function(t){return rG(MX(cG.defaults,t))},cG.Cancel=eG,cG.CancelToken=iG,cG.isCancel=zX,cG.all=function(t){return Promise.all(t)},cG.spread=function(t){return function(e){return t.apply(null,e)}},cG.isAxiosError=function(t){return"object"===o(t)&&!0===t.isAxiosError};var lG=cG,oG=cG;lG.default=oG;var aG,uG=lG;function dG(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return sG(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sG(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}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 c,l=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){o=!0,c=t},f:function(){try{l||null==n.return||n.return()}finally{if(o)throw c}}}}function sG(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function mG(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function hG(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mG(Object(n),!0).forEach((function(e){Ky(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mG(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ZG(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).AsgardeoAuth={})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function i(t,e,n){return n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},t(n,n.exports),n.exports}var r,c,l=i((function(t){function e(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),o=n(l),a=function(t){return t&&t.Math==Math&&t},u=a("object"==("undefined"==typeof globalThis?"undefined":o(globalThis))&&globalThis)||a("object"==("undefined"==typeof window?"undefined":o(window))&&window)||a("object"==("undefined"==typeof self?"undefined":o(self))&&self)||a("object"==o(e)&&e)||function(){return this}()||Function("return this")(),d=function(t){try{return!!t()}catch(t){return!0}},s=!d((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),m={}.propertyIsEnumerable,h=Object.getOwnPropertyDescriptor,Z=h&&!m.call({1:2},1)?function(t){var e=h(this,t);return!!e&&e.enumerable}:m,b={f:Z},p=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},y={}.toString,I=function(t){return y.call(t).slice(8,-1)},X="".split,G=d((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==I(t)?X.call(t,""):Object(t)}:Object,g=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},f=function(t){return G(g(t))},V=function(t){return"function"==typeof t},W=function(t){return"object"===o(t)?null!==t:V(t)},v=function(t){return V(t)?t:void 0},S=function(t,e){return arguments.length<2?v(u[t]):u[t]&&u[t][e]},C=S("navigator","userAgent")||"",Y=u.process,R=u.Deno,K=Y&&Y.versions||R&&R.version,L=K&&K.v8;L?c=(r=L.split("."))[0]<4?1:r[0]+r[1]:C&&(!(r=C.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=C.match(/Chrome\/(\d+)/))&&(c=r[1]);var J=c&&+c,x=!!Object.getOwnPropertySymbols&&!d((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&J&&J<41})),N=x&&!Symbol.sham&&"symbol"==o(Symbol.iterator),H=N?function(t){return"symbol"==o(t)}:function(t){var e=S("Symbol");return V(e)&&Object(t)instanceof e},k=function(t){try{return String(t)}catch(t){return"Object"}},U=function(t){if(V(t))return t;throw TypeError(k(t)+" is not a function")},w=function(t,e){var n=t[e];return null==n?void 0:U(n)},T=function(t,e){var n,i;if("string"===e&&V(n=t.toString)&&!W(i=n.call(t)))return i;if(V(n=t.valueOf)&&!W(i=n.call(t)))return i;if("string"!==e&&V(n=t.toString)&&!W(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")},F=function(t,e){try{Object.defineProperty(u,t,{value:e,configurable:!0,writable:!0})}catch(n){u[t]=e}return e},z="__core-js_shared__",j=u[z]||F(z,{}),B=i((function(t){(t.exports=function(t,e){return j[t]||(j[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.18.1",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})})),M=function(t){return Object(g(t))},A={}.hasOwnProperty,P=Object.hasOwn||function(t,e){return A.call(M(t),e)},Q=0,D=Math.random(),E=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++Q+D).toString(36)},O=B("wks"),_=u.Symbol,q=N?_:_&&_.withoutSetter||E,$=function(t){return P(O,t)&&(x||"string"==typeof O[t])||(x&&P(_,t)?O[t]=_[t]:O[t]=q("Symbol."+t)),O[t]},tt=$("toPrimitive"),et=function(t,e){if(!W(t)||H(t))return t;var n,i=w(t,tt);if(i){if(void 0===e&&(e="default"),n=i.call(t,e),!W(n)||H(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),T(t,e)},nt=function(t){var e=et(t,"string");return H(e)?e:String(e)},it=u.document,rt=W(it)&&W(it.createElement),ct=function(t){return rt?it.createElement(t):{}},lt=!s&&!d((function(){return 7!=Object.defineProperty(ct("div"),"a",{get:function(){return 7}}).a})),ot=Object.getOwnPropertyDescriptor,at=s?ot:function(t,e){if(t=f(t),e=nt(e),lt)try{return ot(t,e)}catch(t){}if(P(t,e))return p(!b.f.call(t,e),t[e])},ut={f:at},dt=function(t){if(W(t))return t;throw TypeError(String(t)+" is not an object")},st=Object.defineProperty,mt=s?st:function(t,e,n){if(dt(t),e=nt(e),dt(n),lt)try{return st(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t},ht={f:mt},Zt=s?function(t,e,n){return ht.f(t,e,p(1,n))}:function(t,e,n){return t[e]=n,t},bt=Function.toString;V(j.inspectSource)||(j.inspectSource=function(t){return bt.call(t)});var pt,yt,It,Xt=j.inspectSource,Gt=u.WeakMap,gt=V(Gt)&&/native code/.test(Xt(Gt)),ft=B("keys"),Vt=function(t){return ft[t]||(ft[t]=E(t))},Wt={},vt="Object already initialized",St=u.WeakMap;if(gt||j.state){var Ct=j.state||(j.state=new St),Yt=Ct.get,Rt=Ct.has,Kt=Ct.set;pt=function(t,e){if(Rt.call(Ct,t))throw new TypeError(vt);return e.facade=t,Kt.call(Ct,t,e),e},yt=function(t){return Yt.call(Ct,t)||{}},It=function(t){return Rt.call(Ct,t)}}else{var Lt=Vt("state");Wt[Lt]=!0,pt=function(t,e){if(P(t,Lt))throw new TypeError(vt);return e.facade=t,Zt(t,Lt,e),e},yt=function(t){return P(t,Lt)?t[Lt]:{}},It=function(t){return P(t,Lt)}}var Jt={set:pt,get:yt,has:It,enforce:function(t){return It(t)?yt(t):pt(t,{})},getterFor:function(t){return function(e){var n;if(!W(e)||(n=yt(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}},xt=Function.prototype,Nt=s&&Object.getOwnPropertyDescriptor,Ht=P(xt,"name"),kt={EXISTS:Ht,PROPER:Ht&&"something"===function(){}.name,CONFIGURABLE:Ht&&(!s||s&&Nt(xt,"name").configurable)},Ut=i((function(t){var e=kt.CONFIGURABLE,n=Jt.get,i=Jt.enforce,r=String(String).split("String");(t.exports=function(t,n,c,l){var o,a=!!l&&!!l.unsafe,d=!!l&&!!l.enumerable,s=!!l&&!!l.noTargetGet,m=l&&void 0!==l.name?l.name:n;V(c)&&("Symbol("===String(m).slice(0,7)&&(m="["+String(m).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!P(c,"name")||e&&c.name!==m)&&Zt(c,"name",m),(o=i(c)).source||(o.source=r.join("string"==typeof m?m:""))),t!==u?(a?!s&&t[n]&&(d=!0):delete t[n],d?t[n]=c:Zt(t,n,c)):d?t[n]=c:F(n,c)})(Function.prototype,"toString",(function(){return V(this)&&n(this).source||Xt(this)}))})),wt=Math.ceil,Tt=Math.floor,Ft=function(t){return isNaN(t=+t)?0:(t>0?Tt:wt)(t)},zt=Math.min,jt=function(t){return t>0?zt(Ft(t),9007199254740991):0},Bt=Math.max,Mt=Math.min,At=function(t,e){var n=Ft(t);return n<0?Bt(n+e,0):Mt(n,e)},Pt=function(t){return function(e,n,i){var r,c=f(e),l=jt(c.length),o=At(i,l);if(t&&n!=n){for(;l>o;)if((r=c[o++])!=r)return!0}else for(;l>o;o++)if((t||o in c)&&c[o]===n)return t||o||0;return!t&&-1}},Qt={includes:Pt(!0),indexOf:Pt(!1)},Dt=Qt.indexOf,Et=function(t,e){var n,i=f(t),r=0,c=[];for(n in i)!P(Wt,n)&&P(i,n)&&c.push(n);for(;e.length>r;)P(i,n=e[r++])&&(~Dt(c,n)||c.push(n));return c},Ot=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],_t=Ot.concat("length","prototype"),qt=Object.getOwnPropertyNames||function(t){return Et(t,_t)},$t={f:qt},te={f:Object.getOwnPropertySymbols},ee=S("Reflect","ownKeys")||function(t){var e=$t.f(dt(t)),n=te.f;return n?e.concat(n(t)):e},ne=function(t,e){for(var n=ee(e),i=ht.f,r=ut.f,c=0;c<n.length;c++){var l=n[c];P(t,l)||i(t,l,r(e,l))}},ie=/#|\.prototype\./,re=function(t,e){var n=le[ce(t)];return n==ae||n!=oe&&(V(e)?d(e):!!e)},ce=re.normalize=function(t){return String(t).replace(ie,".").toLowerCase()},le=re.data={},oe=re.NATIVE="N",ae=re.POLYFILL="P",ue=re,de=ut.f,se=function(t,e){var n,i,r,c,l,a=t.target,d=t.global,s=t.stat;if(n=d?u:s?u[a]||F(a,{}):(u[a]||{}).prototype)for(i in e){if(c=e[i],r=t.noTargetGet?(l=de(n,i))&&l.value:n[i],!ue(d?i:a+(s?".":"#")+i,t.forced)&&void 0!==r){if(o(c)===o(r))continue;ne(c,r)}(t.sham||r&&r.sham)&&Zt(c,"sham",!0),Ut(n,i,c,t)}},me=Array.isArray||function(t){return"Array"==I(t)},he={};he[$("toStringTag")]="z";var Ze,be="[object z]"===String(he),pe=$("toStringTag"),ye="Arguments"==I(function(){return arguments}()),Ie=be?I:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),pe))?n:ye?I(e):"Object"==(i=I(e))&&V(e.callee)?"Arguments":i},Xe=function(t){if("Symbol"===Ie(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)},Ge=Object.keys||function(t){return Et(t,Ot)},ge=s?Object.defineProperties:function(t,e){dt(t);for(var n,i=Ge(e),r=i.length,c=0;r>c;)ht.f(t,n=i[c++],e[n]);return t},fe=S("document","documentElement"),Ve=Vt("IE_PROTO"),We=function(){},ve=function(t){return"<script>"+t+"</"+"script>"},Se=function(t){t.write(ve("")),t.close();var e=t.parentWindow.Object;return t=null,e},Ce=function(){try{Ze=new ActiveXObject("htmlfile")}catch(t){}var t,e;Ce="undefined"!=typeof document?document.domain&&Ze?Se(Ze):((e=ct("iframe")).style.display="none",fe.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(ve("document.F=Object")),t.close(),t.F):Se(Ze);for(var n=Ot.length;n--;)delete Ce.prototype[Ot[n]];return Ce()};Wt[Ve]=!0;var Ye=Object.create||function(t,e){var n;return null!==t?(We.prototype=dt(t),n=new We,We.prototype=null,n[Ve]=t):n=Ce(),void 0===e?n:ge(n,e)},Re=$t.f,Ke={}.toString,Le="object"==("undefined"==typeof window?"undefined":o(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Je={f:function(t){return Le&&"[object Window]"==Ke.call(t)?function(t){try{return Re(t)}catch(t){return Le.slice()}}(t):Re(f(t))}},xe={f:$},Ne=u,He=ht.f,ke=function(t){var e=Ne.Symbol||(Ne.Symbol={});P(e,t)||He(e,t,{value:xe.f(t)})},Ue=ht.f,we=$("toStringTag"),Te=function(t,e,n){t&&!P(t=n?t:t.prototype,we)&&Ue(t,we,{configurable:!0,value:e})},Fe=function(t,e,n){if(U(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}},ze=[],je=S("Reflect","construct"),Be=/^\s*(?:class|function)\b/,Me=Be.exec,Ae=!Be.exec((function(){})),Pe=function(t){if(!V(t))return!1;try{return je(Object,ze,t),!0}catch(t){return!1}},Qe=!je||d((function(){var t;return Pe(Pe.call)||!Pe(Object)||!Pe((function(){t=!0}))||t}))?function(t){if(!V(t))return!1;switch(Ie(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Ae||!!Me.call(Be,Xt(t))}:Pe,De=$("species"),Ee=function(t,e){return new(function(t){var e;return me(t)&&(e=t.constructor,(Qe(e)&&(e===Array||me(e.prototype))||W(e)&&null===(e=e[De]))&&(e=void 0)),void 0===e?Array:e}(t))(0===e?0:e)},Oe=[].push,_e=function(t){var e=1==t,n=2==t,i=3==t,r=4==t,c=6==t,l=7==t,o=5==t||c;return function(a,u,d,s){for(var m,h,Z=M(a),b=G(Z),p=Fe(u,d,3),y=jt(b.length),I=0,X=s||Ee,g=e?X(a,y):n||l?X(a,0):void 0;y>I;I++)if((o||I in b)&&(h=p(m=b[I],I,Z),t))if(e)g[I]=h;else if(h)switch(t){case 3:return!0;case 5:return m;case 6:return I;case 2:Oe.call(g,m)}else switch(t){case 4:return!1;case 7:Oe.call(g,m)}return c?-1:i||r?r:g}},qe={forEach:_e(0),map:_e(1),filter:_e(2),some:_e(3),every:_e(4),find:_e(5),findIndex:_e(6),filterReject:_e(7)},$e=qe.forEach,tn=Vt("hidden"),en="Symbol",nn=$("toPrimitive"),rn=Jt.set,cn=Jt.getterFor(en),ln=Object.prototype,on=u.Symbol,an=S("JSON","stringify"),un=ut.f,dn=ht.f,sn=Je.f,mn=b.f,hn=B("symbols"),Zn=B("op-symbols"),bn=B("string-to-symbol-registry"),pn=B("symbol-to-string-registry"),yn=B("wks"),In=u.QObject,Xn=!In||!In.prototype||!In.prototype.findChild,Gn=s&&d((function(){return 7!=Ye(dn({},"a",{get:function(){return dn(this,"a",{value:7}).a}})).a}))?function(t,e,n){var i=un(ln,e);i&&delete ln[e],dn(t,e,n),i&&t!==ln&&dn(ln,e,i)}:dn,gn=function(t,e){var n=hn[t]=Ye(on.prototype);return rn(n,{type:en,tag:t,description:e}),s||(n.description=e),n},fn=function(t,e,n){t===ln&&fn(Zn,e,n),dt(t);var i=nt(e);return dt(n),P(hn,i)?(n.enumerable?(P(t,tn)&&t[tn][i]&&(t[tn][i]=!1),n=Ye(n,{enumerable:p(0,!1)})):(P(t,tn)||dn(t,tn,p(1,{})),t[tn][i]=!0),Gn(t,i,n)):dn(t,i,n)},Vn=function(t,e){dt(t);var n=f(e),i=Ge(n).concat(Cn(n));return $e(i,(function(e){s&&!Wn.call(n,e)||fn(t,e,n[e])})),t},Wn=function(t){var e=nt(t),n=mn.call(this,e);return!(this===ln&&P(hn,e)&&!P(Zn,e))&&(!(n||!P(this,e)||!P(hn,e)||P(this,tn)&&this[tn][e])||n)},vn=function(t,e){var n=f(t),i=nt(e);if(n!==ln||!P(hn,i)||P(Zn,i)){var r=un(n,i);return!r||!P(hn,i)||P(n,tn)&&n[tn][i]||(r.enumerable=!0),r}},Sn=function(t){var e=sn(f(t)),n=[];return $e(e,(function(t){P(hn,t)||P(Wt,t)||n.push(t)})),n},Cn=function(t){var e=t===ln,n=sn(e?Zn:f(t)),i=[];return $e(n,(function(t){!P(hn,t)||e&&!P(ln,t)||i.push(hn[t])})),i};if(x||(on=function(){if(this instanceof on)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?Xe(arguments[0]):void 0,e=E(t),n=function t(n){this===ln&&t.call(Zn,n),P(this,tn)&&P(this[tn],e)&&(this[tn][e]=!1),Gn(this,e,p(1,n))};return s&&Xn&&Gn(ln,e,{configurable:!0,set:n}),gn(e,t)},Ut(on.prototype,"toString",(function(){return cn(this).tag})),Ut(on,"withoutSetter",(function(t){return gn(E(t),t)})),b.f=Wn,ht.f=fn,ut.f=vn,$t.f=Je.f=Sn,te.f=Cn,xe.f=function(t){return gn($(t),t)},s&&(dn(on.prototype,"description",{configurable:!0,get:function(){return cn(this).description}}),Ut(ln,"propertyIsEnumerable",Wn,{unsafe:!0}))),se({global:!0,wrap:!0,forced:!x,sham:!x},{Symbol:on}),$e(Ge(yn),(function(t){ke(t)})),se({target:en,stat:!0,forced:!x},{for:function(t){var e=Xe(t);if(P(bn,e))return bn[e];var n=on(e);return bn[e]=n,pn[n]=e,n},keyFor:function(t){if(!H(t))throw TypeError(t+" is not a symbol");if(P(pn,t))return pn[t]},useSetter:function(){Xn=!0},useSimple:function(){Xn=!1}}),se({target:"Object",stat:!0,forced:!x,sham:!s},{create:function(t,e){return void 0===e?Ye(t):Vn(Ye(t),e)},defineProperty:fn,defineProperties:Vn,getOwnPropertyDescriptor:vn}),se({target:"Object",stat:!0,forced:!x},{getOwnPropertyNames:Sn,getOwnPropertySymbols:Cn}),se({target:"Object",stat:!0,forced:d((function(){te.f(1)}))},{getOwnPropertySymbols:function(t){return te.f(M(t))}}),an){var Yn=!x||d((function(){var t=on();return"[null]"!=an([t])||"{}"!=an({a:t})||"{}"!=an(Object(t))}));se({target:"JSON",stat:!0,forced:Yn},{stringify:function(t,e,n){for(var i,r=[t],c=1;arguments.length>c;)r.push(arguments[c++]);if(i=e,(W(e)||void 0!==t)&&!H(t))return me(e)||(e=function(t,e){if(V(i)&&(e=i.call(this,t,e)),!H(e))return e}),r[1]=e,an.apply(null,r)}})}if(!on.prototype[nn]){var Rn=on.prototype.valueOf;Ut(on.prototype,nn,(function(){return Rn.apply(this,arguments)}))}Te(on,en),Wt[tn]=!0;var Kn=ht.f,Ln=u.Symbol;if(s&&V(Ln)&&(!("description"in Ln.prototype)||void 0!==Ln().description)){var Jn={},xn=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof xn?new Ln(t):void 0===t?Ln():Ln(t);return""===t&&(Jn[e]=!0),e};ne(xn,Ln);var Nn=xn.prototype=Ln.prototype;Nn.constructor=xn;var Hn=Nn.toString,kn="Symbol(test)"==String(Ln("test")),Un=/^Symbol\((.*)\)[^)]+$/;Kn(Nn,"description",{configurable:!0,get:function(){var t=W(this)?this.valueOf():this,e=Hn.call(t);if(P(Jn,t))return"";var n=kn?e.slice(7,-1):e.replace(Un,"$1");return""===n?void 0:n}}),se({global:!0,forced:!0},{Symbol:xn})}ke("asyncIterator"),ke("hasInstance"),ke("isConcatSpreadable"),ke("iterator"),ke("match"),ke("matchAll"),ke("replace"),ke("search"),ke("species"),ke("split"),ke("toPrimitive"),ke("toStringTag"),ke("unscopables");var wn=function(t,e,n){var i=nt(e);i in t?ht.f(t,i,p(0,n)):t[i]=n},Tn=$("species"),Fn=function(t){return J>=51||!d((function(){var e=[];return(e.constructor={})[Tn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},zn=$("isConcatSpreadable"),jn=9007199254740991,Bn="Maximum allowed index exceeded",Mn=J>=51||!d((function(){var t=[];return t[zn]=!1,t.concat()[0]!==t})),An=Fn("concat"),Pn=function(t){if(!W(t))return!1;var e=t[zn];return void 0!==e?!!e:me(t)};se({target:"Array",proto:!0,forced:!Mn||!An},{concat:function(t){var e,n,i,r,c,l=M(this),o=Ee(l,0),a=0;for(e=-1,i=arguments.length;e<i;e++)if(Pn(c=-1===e?l:arguments[e])){if(a+(r=jt(c.length))>jn)throw TypeError(Bn);for(n=0;n<r;n++,a++)n in c&&wn(o,a,c[n])}else{if(a>=jn)throw TypeError(Bn);wn(o,a++,c)}return o.length=a,o}});var Qn=Math.min,Dn=[].copyWithin||function(t,e){var n=M(this),i=jt(n.length),r=At(t,i),c=At(e,i),l=arguments.length>2?arguments[2]:void 0,o=Qn((void 0===l?i:At(l,i))-c,i-r),a=1;for(c<r&&r<c+o&&(a=-1,c+=o-1,r+=o-1);o-- >0;)c in n?n[r]=n[c]:delete n[r],r+=a,c+=a;return n},En=$("unscopables"),On=Array.prototype;null==On[En]&&ht.f(On,En,{configurable:!0,value:Ye(null)});var _n=function(t){On[En][t]=!0};se({target:"Array",proto:!0},{copyWithin:Dn}),_n("copyWithin");var qn=function(t){for(var e=M(this),n=jt(e.length),i=arguments.length,r=At(i>1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,l=void 0===c?n:At(c,n);l>r;)e[r++]=t;return e};se({target:"Array",proto:!0},{fill:qn}),_n("fill");var $n=qe.filter,ti=Fn("filter");se({target:"Array",proto:!0,forced:!ti},{filter:function(t){return $n(this,t,arguments.length>1?arguments[1]:void 0)}});var ei=qe.find,ni="find",ii=!0;ni in[]&&Array(1).find((function(){ii=!1})),se({target:"Array",proto:!0,forced:ii},{find:function(t){return ei(this,t,arguments.length>1?arguments[1]:void 0)}}),_n(ni);var ri=qe.findIndex,ci="findIndex",li=!0;ci in[]&&Array(1).findIndex((function(){li=!1})),se({target:"Array",proto:!0,forced:li},{findIndex:function(t){return ri(this,t,arguments.length>1?arguments[1]:void 0)}}),_n(ci);var oi=function t(e,n,i,r,c,l,o,a){for(var u,d=c,s=0,m=!!o&&Fe(o,a,3);s<r;){if(s in i){if(u=m?m(i[s],s,n):i[s],l>0&&me(u))d=t(e,n,u,jt(u.length),d,l-1)-1;else{if(d>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[d]=u}d++}s++}return d};se({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=M(this),n=jt(e.length),i=Ee(e,0);return i.length=oi(i,e,e,n,0,void 0===t?1:Ft(t)),i}}),se({target:"Array",proto:!0},{flatMap:function(t){var e,n=M(this),i=jt(n.length);return U(t),(e=Ee(n,0)).length=oi(e,n,n,i,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var ai=function(t,e,n){var i,r;dt(t);try{if(!(i=w(t,"return"))){if("throw"===e)throw n;return n}i=i.call(t)}catch(t){r=!0,i=t}if("throw"===e)throw n;if(r)throw i;return dt(i),n},ui=function(t,e,n,i){try{return i?e(dt(n)[0],n[1]):e(n)}catch(e){ai(t,"throw",e)}},di={},si=$("iterator"),mi=Array.prototype,hi=function(t){return void 0!==t&&(di.Array===t||mi[si]===t)},Zi=$("iterator"),bi=function(t){if(null!=t)return w(t,Zi)||w(t,"@@iterator")||di[Ie(t)]},pi=function(t,e){var n=arguments.length<2?bi(t):e;if(U(n))return dt(n.call(t));throw TypeError(String(t)+" is not iterable")},yi=function(t){var e=M(t),n=Qe(this),i=arguments.length,r=i>1?arguments[1]:void 0,c=void 0!==r;c&&(r=Fe(r,i>2?arguments[2]:void 0,2));var l,o,a,u,d,s,m=bi(e),h=0;if(!m||this==Array&&hi(m))for(l=jt(e.length),o=n?new this(l):Array(l);l>h;h++)s=c?r(e[h],h):e[h],wn(o,h,s);else for(d=(u=pi(e,m)).next,o=n?new this:[];!(a=d.call(u)).done;h++)s=c?ui(u,r,[a.value,h],!0):a.value,wn(o,h,s);return o.length=h,o},Ii=$("iterator"),Xi=!1;try{var Gi=0,gi={next:function(){return{done:!!Gi++}},return:function(){Xi=!0}};gi[Ii]=function(){return this},Array.from(gi,(function(){throw 2}))}catch(t){}var fi=function(t,e){if(!e&&!Xi)return!1;var n=!1;try{var i={};i[Ii]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n},Vi=!fi((function(t){Array.from(t)}));se({target:"Array",stat:!0,forced:Vi},{from:yi});var Wi=Qt.includes;se({target:"Array",proto:!0},{includes:function(t){return Wi(this,t,arguments.length>1?arguments[1]:void 0)}}),_n("includes");var vi=function(t,e){var n=[][t];return!!n&&d((function(){n.call(null,e||function(){throw 1},1)}))},Si=Qt.indexOf,Ci=[].indexOf,Yi=!!Ci&&1/[1].indexOf(1,-0)<0,Ri=vi("indexOf");se({target:"Array",proto:!0,forced:Yi||!Ri},{indexOf:function(t){return Yi?Ci.apply(this,arguments)||0:Si(this,t,arguments.length>1?arguments[1]:void 0)}});var Ki,Li,Ji,xi=!d((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),Ni=Vt("IE_PROTO"),Hi=Object.prototype,ki=xi?Object.getPrototypeOf:function(t){var e=M(t);if(P(e,Ni))return e[Ni];var n=e.constructor;return V(n)&&e instanceof n?n.prototype:e instanceof Object?Hi:null},Ui=$("iterator"),wi=!1;[].keys&&("next"in(Ji=[].keys())?(Li=ki(ki(Ji)))!==Object.prototype&&(Ki=Li):wi=!0);var Ti=null==Ki||d((function(){var t={};return Ki[Ui].call(t)!==t}));Ti&&(Ki={}),V(Ki[Ui])||Ut(Ki,Ui,(function(){return this}));var Fi={IteratorPrototype:Ki,BUGGY_SAFARI_ITERATORS:wi},zi=Fi.IteratorPrototype,ji=function(){return this},Bi=function(t,e,n){var i=e+" Iterator";return t.prototype=Ye(zi,{next:p(1,n)}),Te(t,i,!1),di[i]=ji,t},Mi=function(t){if("object"===o(t)||V(t))return t;throw TypeError("Can't set "+String(t)+" as a prototype")},Ai=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,i){return dt(n),Mi(i),e?t.call(n,i):n.__proto__=i,n}}():void 0),Pi=kt.PROPER,Qi=kt.CONFIGURABLE,Di=Fi.IteratorPrototype,Ei=Fi.BUGGY_SAFARI_ITERATORS,Oi=$("iterator"),_i="keys",qi="values",$i="entries",tr=function(){return this},er=function(t,e,n,i,r,c,l){Bi(n,e,i);var o,a,u,d=function(t){if(t===r&&b)return b;if(!Ei&&t in h)return h[t];switch(t){case _i:case qi:case $i:return function(){return new n(this,t)}}return function(){return new n(this)}},s=e+" Iterator",m=!1,h=t.prototype,Z=h[Oi]||h["@@iterator"]||r&&h[r],b=!Ei&&Z||d(r),p="Array"==e&&h.entries||Z;if(p&&(o=ki(p.call(new t)))!==Object.prototype&&o.next&&(ki(o)!==Di&&(Ai?Ai(o,Di):V(o[Oi])||Ut(o,Oi,tr)),Te(o,s,!0)),Pi&&r==qi&&Z&&Z.name!==qi&&(Qi?Zt(h,"name",qi):(m=!0,b=function(){return Z.call(this)})),r)if(a={values:d(qi),keys:c?b:d(_i),entries:d($i)},l)for(u in a)(Ei||m||!(u in h))&&Ut(h,u,a[u]);else se({target:e,proto:!0,forced:Ei||m},a);return h[Oi]!==b&&Ut(h,Oi,b,{name:r}),di[e]=b,a},nr="Array Iterator",ir=Jt.set,rr=Jt.getterFor(nr),cr=er(Array,"Array",(function(t,e){ir(this,{type:nr,target:f(t),index:0,kind:e})}),(function(){var t=rr(this),e=t.target,n=t.kind,i=t.index++;return!e||i>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:e[i],done:!1}:{value:[i,e[i]],done:!1}}),"values");di.Arguments=di.Array,_n("keys"),_n("values"),_n("entries");var lr=[].join,or=G!=Object,ar=vi("join",",");se({target:"Array",proto:!0,forced:or||!ar},{join:function(t){return lr.call(f(this),void 0===t?",":t)}});var ur=Math.min,dr=[].lastIndexOf,sr=!!dr&&1/[1].lastIndexOf(1,-0)<0,mr=vi("lastIndexOf"),hr=sr||!mr?function(t){if(sr)return dr.apply(this,arguments)||0;var e=f(this),n=jt(e.length),i=n-1;for(arguments.length>1&&(i=ur(i,Ft(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in e&&e[i]===t)return i||0;return-1}:dr;se({target:"Array",proto:!0,forced:hr!==[].lastIndexOf},{lastIndexOf:hr});var Zr=qe.map,br=Fn("map");se({target:"Array",proto:!0,forced:!br},{map:function(t){return Zr(this,t,arguments.length>1?arguments[1]:void 0)}});var pr=d((function(){function t(){}return!(Array.of.call(t)instanceof t)}));se({target:"Array",stat:!0,forced:pr},{of:function(){for(var t=0,e=arguments.length,n=new(Qe(this)?this:Array)(e);e>t;)wn(n,t,arguments[t++]);return n.length=e,n}});var yr=function(t){return function(e,n,i,r){U(n);var c=M(e),l=G(c),o=jt(c.length),a=t?o-1:0,u=t?-1:1;if(i<2)for(;;){if(a in l){r=l[a],a+=u;break}if(a+=u,t?a<0:o<=a)throw TypeError("Reduce of empty array with no initial value")}for(;t?a>=0:o>a;a+=u)a in l&&(r=n(r,l[a],a,c));return r}},Ir={left:yr(!1),right:yr(!0)},Xr="process"==I(u.process),Gr=Ir.left,gr=vi("reduce");se({target:"Array",proto:!0,forced:!gr||!Xr&&J>79&&J<83},{reduce:function(t){return Gr(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var fr=Ir.right,Vr=vi("reduceRight");se({target:"Array",proto:!0,forced:!Vr||!Xr&&J>79&&J<83},{reduceRight:function(t){return fr(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Wr=Fn("slice"),vr=$("species"),Sr=[].slice,Cr=Math.max;se({target:"Array",proto:!0,forced:!Wr},{slice:function(t,e){var n,i,r,c=f(this),l=jt(c.length),o=At(t,l),a=At(void 0===e?l:e,l);if(me(c)&&(n=c.constructor,(Qe(n)&&(n===Array||me(n.prototype))||W(n)&&null===(n=n[vr]))&&(n=void 0),n===Array||void 0===n))return Sr.call(c,o,a);for(i=new(void 0===n?Array:n)(Cr(a-o,0)),r=0;o<a;o++,r++)o in c&&wn(i,r,c[o]);return i.length=r,i}});var Yr=Math.floor,Rr=function(t,e){for(var n,i,r=t.length,c=1;c<r;){for(i=c,n=t[c];i&&e(t[i-1],n)>0;)t[i]=t[--i];i!==c++&&(t[i]=n)}return t},Kr=function(t,e,n){for(var i=t.length,r=e.length,c=0,l=0,o=[];c<i||l<r;)c<i&&l<r?o.push(n(t[c],e[l])<=0?t[c++]:e[l++]):o.push(c<i?t[c++]:e[l++]);return o},Lr=function t(e,n){var i=e.length,r=Yr(i/2);return i<8?Rr(e,n):Kr(t(e.slice(0,r),n),t(e.slice(r),n),n)},Jr=C.match(/firefox\/(\d+)/i),xr=!!Jr&&+Jr[1],Nr=/MSIE|Trident/.test(C),Hr=C.match(/AppleWebKit\/(\d+)\./),kr=!!Hr&&+Hr[1],Ur=[],wr=Ur.sort,Tr=d((function(){Ur.sort(void 0)})),Fr=d((function(){Ur.sort(null)})),zr=vi("sort"),jr=!d((function(){if(J)return J<70;if(!(xr&&xr>3)){if(Nr)return!0;if(kr)return kr<603;var t,e,n,i,r="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(i=0;i<47;i++)Ur.push({k:e+i,v:n})}for(Ur.sort((function(t,e){return e.v-t.v})),i=0;i<Ur.length;i++)e=Ur[i].k.charAt(0),r.charAt(r.length-1)!==e&&(r+=e);return"DGBEFHACIJK"!==r}}));se({target:"Array",proto:!0,forced:Tr||!Fr||!zr||!jr},{sort:function(t){void 0!==t&&U(t);var e=M(this);if(jr)return void 0===t?wr.call(e):wr.call(e,t);var n,i,r=[],c=jt(e.length);for(i=0;i<c;i++)i in e&&r.push(e[i]);for(r=Lr(r,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:Xe(e)>Xe(n)?1:-1}}(t)),n=r.length,i=0;i<n;)e[i]=r[i++];for(;i<c;)delete e[i++];return e}});var Br=$("species"),Mr=function(t){var e=S(t),n=ht.f;s&&e&&!e[Br]&&n(e,Br,{configurable:!0,get:function(){return this}})};Mr("Array");var Ar=Fn("splice"),Pr=Math.max,Qr=Math.min,Dr=9007199254740991,Er="Maximum allowed length exceeded";se({target:"Array",proto:!0,forced:!Ar},{splice:function(t,e){var n,i,r,c,l,o,a=M(this),u=jt(a.length),d=At(t,u),s=arguments.length;if(0===s?n=i=0:1===s?(n=0,i=u-d):(n=s-2,i=Qr(Pr(Ft(e),0),u-d)),u+n-i>Dr)throw TypeError(Er);for(r=Ee(a,i),c=0;c<i;c++)(l=d+c)in a&&wn(r,c,a[l]);if(r.length=i,n<i){for(c=d;c<u-i;c++)o=c+n,(l=c+i)in a?a[o]=a[l]:delete a[o];for(c=u;c>u-i+n;c--)delete a[c-1]}else if(n>i)for(c=u-i;c>d;c--)o=c+n-1,(l=c+i-1)in a?a[o]=a[l]:delete a[o];for(c=0;c<n;c++)a[c+d]=arguments[c+2];return a.length=u-i+n,r}}),_n("flat"),_n("flatMap");var Or="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,_r=function(t,e,n){for(var i in e)Ut(t,i,e[i],n);return t},qr=function(t,e,n){if(t instanceof e)return t;throw TypeError("Incorrect "+(n?n+" ":"")+"invocation")},$r=function(t){if(void 0===t)return 0;var e=Ft(t),n=jt(e);if(e!==n)throw RangeError("Wrong length or index");return n},tc=Math.abs,ec=Math.pow,nc=Math.floor,ic=Math.log,rc=Math.LN2,cc=function(t,e,n){var i,r,c,l=new Array(n),o=8*n-e-1,a=(1<<o)-1,u=a>>1,d=23===e?ec(2,-24)-ec(2,-77):0,s=t<0||0===t&&1/t<0?1:0,m=0;for((t=tc(t))!=t||t===1/0?(r=t!=t?1:0,i=a):(i=nc(ic(t)/rc),t*(c=ec(2,-i))<1&&(i--,c*=2),(t+=i+u>=1?d/c:d*ec(2,1-u))*c>=2&&(i++,c/=2),i+u>=a?(r=0,i=a):i+u>=1?(r=(t*c-1)*ec(2,e),i+=u):(r=t*ec(2,u-1)*ec(2,e),i=0));e>=8;l[m++]=255&r,r/=256,e-=8);for(i=i<<e|r,o+=e;o>0;l[m++]=255&i,i/=256,o-=8);return l[--m]|=128*s,l},lc=function(t,e){var n,i=t.length,r=8*i-e-1,c=(1<<r)-1,l=c>>1,o=r-7,a=i-1,u=t[a--],d=127&u;for(u>>=7;o>0;d=256*d+t[a],a--,o-=8);for(n=d&(1<<-o)-1,d>>=-o,o+=e;o>0;n=256*n+t[a],a--,o-=8);if(0===d)d=1-l;else{if(d===c)return n?NaN:u?-1/0:1/0;n+=ec(2,e),d-=l}return(u?-1:1)*n*ec(2,d-e)},oc=$t.f,ac=ht.f,uc=kt.PROPER,dc=kt.CONFIGURABLE,sc=Jt.get,mc=Jt.set,hc="ArrayBuffer",Zc="DataView",bc="Wrong index",pc=u.ArrayBuffer,yc=pc,Ic=u.DataView,Xc=Ic&&Ic.prototype,Gc=Object.prototype,gc=u.RangeError,fc=cc,Vc=lc,Wc=function(t){return[255&t]},vc=function(t){return[255&t,t>>8&255]},Sc=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},Cc=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Yc=function(t){return fc(t,23,4)},Rc=function(t){return fc(t,52,8)},Kc=function(t,e){ac(t.prototype,e,{get:function(){return sc(this)[e]}})},Lc=function(t,e,n,i){var r=$r(n),c=sc(t);if(r+e>c.byteLength)throw gc(bc);var l=sc(c.buffer).bytes,o=r+c.byteOffset,a=l.slice(o,o+e);return i?a:a.reverse()},Jc=function(t,e,n,i,r,c){var l=$r(n),o=sc(t);if(l+e>o.byteLength)throw gc(bc);for(var a=sc(o.buffer).bytes,u=l+o.byteOffset,d=i(+r),s=0;s<e;s++)a[u+s]=d[c?s:e-s-1]};if(Or){var xc=uc&&pc.name!==hc;if(d((function(){pc(1)}))&&d((function(){new pc(-1)}))&&!d((function(){return new pc,new pc(1.5),new pc(NaN),xc&&!dc})))xc&&dc&&Zt(pc,"name",hc);else{for(var Nc,Hc=(yc=function(t){return qr(this,yc),new pc($r(t))}).prototype=pc.prototype,kc=oc(pc),Uc=0;kc.length>Uc;)(Nc=kc[Uc++])in yc||Zt(yc,Nc,pc[Nc]);Hc.constructor=yc}Ai&&ki(Xc)!==Gc&&Ai(Xc,Gc);var wc=new Ic(new yc(2)),Tc=Xc.setInt8;wc.setInt8(0,2147483648),wc.setInt8(1,2147483649),!wc.getInt8(0)&&wc.getInt8(1)||_r(Xc,{setInt8:function(t,e){Tc.call(this,t,e<<24>>24)},setUint8:function(t,e){Tc.call(this,t,e<<24>>24)}},{unsafe:!0})}else yc=function(t){qr(this,yc,hc);var e=$r(t);mc(this,{bytes:qn.call(new Array(e),0),byteLength:e}),s||(this.byteLength=e)},Ic=function(t,e,n){qr(this,Ic,Zc),qr(t,yc,Zc);var i=sc(t).byteLength,r=Ft(e);if(r<0||r>i)throw gc("Wrong offset");if(r+(n=void 0===n?i-r:jt(n))>i)throw gc("Wrong length");mc(this,{buffer:t,byteLength:n,byteOffset:r}),s||(this.buffer=t,this.byteLength=n,this.byteOffset=r)},s&&(Kc(yc,"byteLength"),Kc(Ic,"buffer"),Kc(Ic,"byteLength"),Kc(Ic,"byteOffset")),_r(Ic.prototype,{getInt8:function(t){return Lc(this,1,t)[0]<<24>>24},getUint8:function(t){return Lc(this,1,t)[0]},getInt16:function(t){var e=Lc(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=Lc(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return Cc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return Cc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Vc(Lc(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Vc(Lc(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Jc(this,1,t,Wc,e)},setUint8:function(t,e){Jc(this,1,t,Wc,e)},setInt16:function(t,e){Jc(this,2,t,vc,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Jc(this,2,t,vc,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Jc(this,4,t,Sc,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Jc(this,4,t,Sc,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Jc(this,4,t,Yc,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Jc(this,8,t,Rc,e,arguments.length>2?arguments[2]:void 0)}});Te(yc,hc),Te(Ic,Zc);var Fc={ArrayBuffer:yc,DataView:Ic},zc="ArrayBuffer",jc=Fc.ArrayBuffer,Bc=u.ArrayBuffer;se({global:!0,forced:Bc!==jc},{ArrayBuffer:jc}),Mr(zc);var Mc=$("toPrimitive"),Ac=Date.prototype;Mc in Ac||Ut(Ac,Mc,(function(t){if(dt(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return T(this,t)}));var Pc=$("hasInstance"),Qc=Function.prototype;Pc in Qc||ht.f(Qc,Pc,{value:function(t){if(!V(this)||!W(t))return!1;if(!W(this.prototype))return t instanceof this;for(;t=ki(t);)if(this.prototype===t)return!0;return!1}});var Dc=kt.EXISTS,Ec=ht.f,Oc=Function.prototype,_c=Oc.toString,qc=/^\s*function ([^ (]*)/;s&&!Dc&&Ec(Oc,"name",{configurable:!0,get:function(){try{return _c.call(this).match(qc)[1]}catch(t){return""}}}),se({global:!0},{globalThis:u});var $c=S("JSON","stringify"),tl=/[\uD800-\uDFFF]/g,el=/^[\uD800-\uDBFF]$/,nl=/^[\uDC00-\uDFFF]$/,il=function(t,e,n){var i=n.charAt(e-1),r=n.charAt(e+1);return el.test(t)&&!nl.test(r)||nl.test(t)&&!el.test(i)?"\\u"+t.charCodeAt(0).toString(16):t},rl=d((function(){return'"\\udf06\\ud834"'!==$c("\udf06\ud834")||'"\\udead"'!==$c("\udead")}));$c&&se({target:"JSON",stat:!0,forced:rl},{stringify:function(t,e,n){var i=$c.apply(null,arguments);return"string"==typeof i?i.replace(tl,il):i}}),Te(u.JSON,"JSON",!0);var cl=!d((function(){return Object.isExtensible(Object.preventExtensions({}))})),ll=i((function(t){var e=ht.f,n=!1,i=E("meta"),r=0,c=Object.isExtensible||function(){return!0},l=function(t){e(t,i,{value:{objectID:"O"+r++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},n=!0;var t=$t.f,e=[].splice,r={};r[i]=1,t(r).length&&($t.f=function(n){for(var r=t(n),c=0,l=r.length;c<l;c++)if(r[c]===i){e.call(r,c,1);break}return r},se({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:Je.f}))},fastKey:function(t,e){if(!W(t))return"symbol"==o(t)?t:("string"==typeof t?"S":"P")+t;if(!P(t,i)){if(!c(t))return"F";if(!e)return"E";l(t)}return t[i].objectID},getWeakData:function(t,e){if(!P(t,i)){if(!c(t))return!0;if(!e)return!1;l(t)}return t[i].weakData},onFreeze:function(t){return cl&&n&&c(t)&&!P(t,i)&&l(t),t}};Wt[i]=!0})),ol=function(t,e){this.stopped=t,this.result=e},al=function(t,e,n){var i,r,c,l,a,u,d,s=n&&n.that,m=!(!n||!n.AS_ENTRIES),h=!(!n||!n.IS_ITERATOR),Z=!(!n||!n.INTERRUPTED),b=Fe(e,s,1+m+Z),p=function(t){return i&&ai(i,"normal",t),new ol(!0,t)},y=function(t){return m?(dt(t),Z?b(t[0],t[1],p):b(t[0],t[1])):Z?b(t,p):b(t)};if(h)i=t;else{if(!(r=bi(t)))throw TypeError(String(t)+" is not iterable");if(hi(r)){for(c=0,l=jt(t.length);l>c;c++)if((a=y(t[c]))&&a instanceof ol)return a;return new ol(!1)}i=pi(t,r)}for(u=i.next;!(d=u.call(i)).done;){try{a=y(d.value)}catch(t){ai(i,"throw",t)}if("object"==o(a)&&a&&a instanceof ol)return a}return new ol(!1)},ul=function(t,e,n){var i,r;return Ai&&V(i=e.constructor)&&i!==n&&W(r=i.prototype)&&r!==n.prototype&&Ai(t,r),t},dl=function(t,e,n){var i=-1!==t.indexOf("Map"),r=-1!==t.indexOf("Weak"),c=i?"set":"add",l=u[t],o=l&&l.prototype,a=l,s={},m=function(t){var e=o[t];Ut(o,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(r&&!W(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return r&&!W(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(r&&!W(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(ue(t,!V(l)||!(r||o.forEach&&!d((function(){(new l).entries().next()})))))a=n.getConstructor(e,t,i,c),ll.enable();else if(ue(t,!0)){var h=new a,Z=h[c](r?{}:-0,1)!=h,b=d((function(){h.has(1)})),p=fi((function(t){new l(t)})),y=!r&&d((function(){for(var t=new l,e=5;e--;)t[c](e,e);return!t.has(-0)}));p||((a=e((function(e,n){qr(e,a,t);var r=ul(new l,e,a);return null!=n&&al(n,r[c],{that:r,AS_ENTRIES:i}),r}))).prototype=o,o.constructor=a),(b||y)&&(m("delete"),m("has"),i&&m("get")),(y||Z)&&m(c),r&&o.clear&&delete o.clear}return s[t]=a,se({global:!0,forced:a!=l},s),Te(a,t),r||n.setStrong(a,t,i),a},sl=ht.f,ml=ll.fastKey,hl=Jt.set,Zl=Jt.getterFor,bl={getConstructor:function(t,e,n,i){var r=t((function(t,c){qr(t,r,e),hl(t,{type:e,index:Ye(null),first:void 0,last:void 0,size:0}),s||(t.size=0),null!=c&&al(c,t[i],{that:t,AS_ENTRIES:n})})),c=Zl(e),l=function(t,e,n){var i,r,l=c(t),a=o(t,e);return a?a.value=n:(l.last=a={index:r=ml(e,!0),key:e,value:n,previous:i=l.last,next:void 0,removed:!1},l.first||(l.first=a),i&&(i.next=a),s?l.size++:t.size++,"F"!==r&&(l.index[r]=a)),t},o=function(t,e){var n,i=c(t),r=ml(e);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==e)return n};return _r(r.prototype,{clear:function(){for(var t=c(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,s?t.size=0:this.size=0},delete:function(t){var e=this,n=c(e),i=o(e,t);if(i){var r=i.next,l=i.previous;delete n.index[i.index],i.removed=!0,l&&(l.next=r),r&&(r.previous=l),n.first==i&&(n.first=r),n.last==i&&(n.last=l),s?n.size--:e.size--}return!!i},forEach:function(t){for(var e,n=c(this),i=Fe(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:n.first;)for(i(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!o(this,t)}}),_r(r.prototype,n?{get:function(t){var e=o(this,t);return e&&e.value},set:function(t,e){return l(this,0===t?0:t,e)}}:{add:function(t){return l(this,t=0===t?0:t,t)}}),s&&sl(r.prototype,"size",{get:function(){return c(this).size}}),r},setStrong:function(t,e,n){var i=e+" Iterator",r=Zl(e),c=Zl(i);er(t,e,(function(t,e){hl(this,{type:i,target:t,state:r(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),Mr(e)}};dl("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),bl);var pl=Math.log,yl=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:pl(1+t)},Il=Math.acosh,Xl=Math.log,Gl=Math.sqrt,gl=Math.LN2,fl=!Il||710!=Math.floor(Il(Number.MAX_VALUE))||Il(1/0)!=1/0;se({target:"Math",stat:!0,forced:fl},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Xl(t)+gl:yl(t-1+Gl(t-1)*Gl(t+1))}});var Vl=Math.asinh,Wl=Math.log,vl=Math.sqrt;se({target:"Math",stat:!0,forced:!(Vl&&1/Vl(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Wl(e+vl(e*e+1)):e}});var Sl=Math.atanh,Cl=Math.log;se({target:"Math",stat:!0,forced:!(Sl&&1/Sl(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:Cl((1+t)/(1-t))/2}});var Yl=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1},Rl=Math.abs,Kl=Math.pow;se({target:"Math",stat:!0},{cbrt:function(t){return Yl(t=+t)*Kl(Rl(t),1/3)}});var Ll=Math.floor,Jl=Math.log,xl=Math.LOG2E;se({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-Ll(Jl(t+.5)*xl):32}});var Nl=Math.expm1,Hl=Math.exp,kl=!Nl||Nl(10)>22025.465794806718||Nl(10)<22025.465794806718||-2e-17!=Nl(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Hl(t)-1}:Nl,Ul=Math.cosh,wl=Math.abs,Tl=Math.E;se({target:"Math",stat:!0,forced:!Ul||Ul(710)===1/0},{cosh:function(t){var e=kl(wl(t)-1)+1;return(e+1/(e*Tl*Tl))*(Tl/2)}}),se({target:"Math",stat:!0,forced:kl!=Math.expm1},{expm1:kl});var Fl=Math.abs,zl=Math.pow,jl=zl(2,-52),Bl=zl(2,-23),Ml=zl(2,127)*(2-Bl),Al=zl(2,-126),Pl=Math.fround||function(t){var e,n,i=Fl(t),r=Yl(t);return i<Al?r*function(t){return t+1/jl-1/jl}(i/Al/Bl)*Al*Bl:(n=(e=(1+Bl/jl)*i)-(e-i))>Ml||n!=n?r*(1/0):r*n};se({target:"Math",stat:!0},{fround:Pl});var Ql=Math.hypot,Dl=Math.abs,El=Math.sqrt,Ol=!!Ql&&Ql(1/0,NaN)!==1/0;se({target:"Math",stat:!0,forced:Ol},{hypot:function(t,e){for(var n,i,r=0,c=0,l=arguments.length,o=0;c<l;)o<(n=Dl(arguments[c++]))?(r=r*(i=o/n)*i+1,o=n):r+=n>0?(i=n/o)*i:n;return o===1/0?1/0:o*El(r)}});var _l=Math.imul,ql=d((function(){return-5!=_l(4294967295,5)||2!=_l.length}));se({target:"Math",stat:!0,forced:ql},{imul:function(t,e){var n=65535,i=+t,r=+e,c=n&i,l=n&r;return 0|c*l+((n&i>>>16)*l+c*(n&r>>>16)<<16>>>0)}});var $l=Math.log,to=Math.LOG10E;se({target:"Math",stat:!0},{log10:function(t){return $l(t)*to}}),se({target:"Math",stat:!0},{log1p:yl});var eo=Math.log,no=Math.LN2;se({target:"Math",stat:!0},{log2:function(t){return eo(t)/no}}),se({target:"Math",stat:!0},{sign:Yl});var io=Math.abs,ro=Math.exp,co=Math.E,lo=d((function(){return-2e-17!=Math.sinh(-2e-17)}));se({target:"Math",stat:!0,forced:lo},{sinh:function(t){return io(t=+t)<1?(kl(t)-kl(-t))/2:(ro(t-1)-ro(-t-1))*(co/2)}});var oo=Math.exp;se({target:"Math",stat:!0},{tanh:function(t){var e=kl(t=+t),n=kl(-t);return e==1/0?1:n==1/0?-1:(e-n)/(oo(t)+oo(-t))}}),Te(Math,"Math",!0);var ao=Math.ceil,uo=Math.floor;se({target:"Math",stat:!0},{trunc:function(t){return(t>0?uo:ao)(t)}});var so="\t\n\v\f\r                 \u2028\u2029\ufeff",mo="["+so+"]",ho=RegExp("^"+mo+mo+"*"),Zo=RegExp(mo+mo+"*$"),bo=function(t){return function(e){var n=Xe(g(e));return 1&t&&(n=n.replace(ho,"")),2&t&&(n=n.replace(Zo,"")),n}},po={start:bo(1),end:bo(2),trim:bo(3)},yo=$t.f,Io=ut.f,Xo=ht.f,Go=po.trim,go="Number",fo=u.Number,Vo=fo.prototype,Wo=I(Ye(Vo))==go,vo=function(t){if(H(t))throw TypeError("Cannot convert a Symbol value to a number");var e,n,i,r,c,l,o,a,u=et(t,"number");if("string"==typeof u&&u.length>2)if(43===(e=(u=Go(u)).charCodeAt(0))||45===e){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===e){switch(u.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+u}for(l=(c=u.slice(2)).length,o=0;o<l;o++)if((a=c.charCodeAt(o))<48||a>r)return NaN;return parseInt(c,i)}return+u};if(ue(go,!fo(" 0o1")||!fo("0b1")||fo("+0x1"))){for(var So,Co=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof Co&&(Wo?d((function(){Vo.valueOf.call(n)})):I(n)!=go)?ul(new fo(vo(e)),n,Co):vo(e)},Yo=s?yo(fo):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),Ro=0;Yo.length>Ro;Ro++)P(fo,So=Yo[Ro])&&!P(Co,So)&&Xo(Co,So,Io(fo,So));Co.prototype=Vo,Vo.constructor=Co,Ut(u,go,Co)}se({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var Ko=u.isFinite,Lo=Number.isFinite||function(t){return"number"==typeof t&&Ko(t)};se({target:"Number",stat:!0},{isFinite:Lo});var Jo=Math.floor,xo=function(t){return!W(t)&&isFinite(t)&&Jo(t)===t};se({target:"Number",stat:!0},{isInteger:xo}),se({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var No=Math.abs;se({target:"Number",stat:!0},{isSafeInteger:function(t){return xo(t)&&No(t)<=9007199254740991}}),se({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),se({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var Ho=po.trim,ko=u.parseFloat,Uo=u.Symbol,wo=Uo&&Uo.iterator,To=1/ko(so+"-0")!=-1/0||wo&&!d((function(){ko(Object(wo))}))?function(t){var e=Ho(Xe(t)),n=ko(e);return 0===n&&"-"==e.charAt(0)?-0:n}:ko;se({target:"Number",stat:!0,forced:Number.parseFloat!=To},{parseFloat:To});var Fo=po.trim,zo=u.parseInt,jo=u.Symbol,Bo=jo&&jo.iterator,Mo=/^[+-]?0[Xx]/,Ao=8!==zo(so+"08")||22!==zo(so+"0x16")||Bo&&!d((function(){zo(Object(Bo))}))?function(t,e){var n=Fo(Xe(t));return zo(n,e>>>0||(Mo.test(n)?16:10))}:zo;se({target:"Number",stat:!0,forced:Number.parseInt!=Ao},{parseInt:Ao});var Po=1..valueOf,Qo=function(t){var e=Xe(g(this)),n="",i=Ft(t);if(i<0||i==1/0)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n},Do=1..toFixed,Eo=Math.floor,Oo=function t(e,n,i){return 0===n?i:n%2==1?t(e,n-1,i*e):t(e*e,n/2,i)},_o=function(t,e,n){for(var i=-1,r=n;++i<6;)r+=e*t[i],t[i]=r%1e7,r=Eo(r/1e7)},qo=function(t,e){for(var n=6,i=0;--n>=0;)i+=t[n],t[n]=Eo(i/e),i=i%e*1e7},$o=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var i=String(t[e]);n=""===n?i:n+Qo.call("0",7-i.length)+i}return n},ta=Do&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){Do.call({})}));se({target:"Number",proto:!0,forced:ta},{toFixed:function(t){var e,n,i,r,c,l=(e=this,Po.call(e)),o=Ft(t),a=[0,0,0,0,0,0],u="",d="0";if(o<0||o>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(u="-",l=-l),l>1e-21)if(n=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(l*Oo(2,69,1))-69,i=n<0?l*Oo(2,-n,1):l/Oo(2,n,1),i*=4503599627370496,(n=52-n)>0){for(_o(a,0,i),r=o;r>=7;)_o(a,1e7,0),r-=7;for(_o(a,Oo(10,r,1),0),r=n-1;r>=23;)qo(a,1<<23),r-=23;qo(a,1<<r),_o(a,1,1),qo(a,2),d=$o(a)}else _o(a,0,i),_o(a,1<<-n,0),d=$o(a)+Qo.call("0",o);return d=o>0?u+((c=d.length)<=o?"0."+Qo.call("0",o-c)+d:d.slice(0,c-o)+"."+d.slice(c-o)):u+d}});var ea=Object.assign,na=Object.defineProperty,ia=!ea||d((function(){if(s&&1!==ea({b:1},ea(na({},"a",{enumerable:!0,get:function(){na(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=ea({},t)[n]||Ge(ea({},e)).join("")!=i}))?function(t,e){for(var n=M(t),i=arguments.length,r=1,c=te.f,l=b.f;i>r;)for(var o,a=G(arguments[r++]),u=c?Ge(a).concat(c(a)):Ge(a),d=u.length,m=0;d>m;)o=u[m++],s&&!l.call(a,o)||(n[o]=a[o]);return n}:ea;se({target:"Object",stat:!0,forced:Object.assign!==ia},{assign:ia});var ra=!d((function(){if(!(kr&&kr<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete u[t]}}));s&&se({target:"Object",proto:!0,forced:ra},{__defineGetter__:function(t,e){ht.f(M(this),t,{get:U(e),enumerable:!0,configurable:!0})}}),s&&se({target:"Object",proto:!0,forced:ra},{__defineSetter__:function(t,e){ht.f(M(this),t,{set:U(e),enumerable:!0,configurable:!0})}});var ca=b.f,la=function(t){return function(e){for(var n,i=f(e),r=Ge(i),c=r.length,l=0,o=[];c>l;)n=r[l++],s&&!ca.call(i,n)||o.push(t?[n,i[n]]:i[n]);return o}},oa={entries:la(!0),values:la(!1)},aa=oa.entries;se({target:"Object",stat:!0},{entries:function(t){return aa(t)}});var ua=ll.onFreeze,da=Object.freeze,sa=d((function(){da(1)}));se({target:"Object",stat:!0,forced:sa,sham:!cl},{freeze:function(t){return da&&W(t)?da(ua(t)):t}}),se({target:"Object",stat:!0},{fromEntries:function(t){var e={};return al(t,(function(t,n){wn(e,t,n)}),{AS_ENTRIES:!0}),e}});var ma=ut.f,ha=d((function(){ma(1)}));se({target:"Object",stat:!0,forced:!s||ha,sham:!s},{getOwnPropertyDescriptor:function(t,e){return ma(f(t),e)}}),se({target:"Object",stat:!0,sham:!s},{getOwnPropertyDescriptors:function(t){for(var e,n,i=f(t),r=ut.f,c=ee(i),l={},o=0;c.length>o;)void 0!==(n=r(i,e=c[o++]))&&wn(l,e,n);return l}});var Za=Je.f,ba=d((function(){return!Object.getOwnPropertyNames(1)}));se({target:"Object",stat:!0,forced:ba},{getOwnPropertyNames:Za});var pa=d((function(){ki(1)}));se({target:"Object",stat:!0,forced:pa,sham:!xi},{getPrototypeOf:function(t){return ki(M(t))}});var ya=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};se({target:"Object",stat:!0},{is:ya});var Ia=Object.isExtensible,Xa=d((function(){Ia(1)}));se({target:"Object",stat:!0,forced:Xa},{isExtensible:function(t){return!!W(t)&&(!Ia||Ia(t))}});var Ga=Object.isFrozen,ga=d((function(){Ga(1)}));se({target:"Object",stat:!0,forced:ga},{isFrozen:function(t){return!W(t)||!!Ga&&Ga(t)}});var fa=Object.isSealed,Va=d((function(){fa(1)}));se({target:"Object",stat:!0,forced:Va},{isSealed:function(t){return!W(t)||!!fa&&fa(t)}});var Wa=d((function(){Ge(1)}));se({target:"Object",stat:!0,forced:Wa},{keys:function(t){return Ge(M(t))}});var va=ut.f;s&&se({target:"Object",proto:!0,forced:ra},{__lookupGetter__:function(t){var e,n=M(this),i=nt(t);do{if(e=va(n,i))return e.get}while(n=ki(n))}});var Sa=ut.f;s&&se({target:"Object",proto:!0,forced:ra},{__lookupSetter__:function(t){var e,n=M(this),i=nt(t);do{if(e=Sa(n,i))return e.set}while(n=ki(n))}});var Ca=ll.onFreeze,Ya=Object.preventExtensions,Ra=d((function(){Ya(1)}));se({target:"Object",stat:!0,forced:Ra,sham:!cl},{preventExtensions:function(t){return Ya&&W(t)?Ya(Ca(t)):t}});var Ka=ll.onFreeze,La=Object.seal,Ja=d((function(){La(1)}));se({target:"Object",stat:!0,forced:Ja,sham:!cl},{seal:function(t){return La&&W(t)?La(Ka(t)):t}}),se({target:"Object",stat:!0},{setPrototypeOf:Ai});var xa=be?{}.toString:function(){return"[object "+Ie(this)+"]"};be||Ut(Object.prototype,"toString",xa,{unsafe:!0});var Na=oa.values;se({target:"Object",stat:!0},{values:function(t){return Na(t)}}),se({global:!0,forced:parseFloat!=To},{parseFloat:To}),se({global:!0,forced:parseInt!=Ao},{parseInt:Ao});var Ha,ka,Ua,wa,Ta=u.Promise,Fa=function(t){if(Qe(t))return t;throw TypeError(k(t)+" is not a constructor")},za=$("species"),ja=function(t,e){var n,i=dt(t).constructor;return void 0===i||null==(n=dt(i)[za])?e:Fa(n)},Ba=/(?:ipad|iphone|ipod).*applewebkit/i.test(C),Ma=u.setImmediate,Aa=u.clearImmediate,Pa=u.process,Qa=u.MessageChannel,Da=u.Dispatch,Ea=0,Oa={},_a="onreadystatechange";try{Ha=u.location}catch(t){}var qa=function(t){if(Oa.hasOwnProperty(t)){var e=Oa[t];delete Oa[t],e()}},$a=function(t){return function(){qa(t)}},tu=function(t){qa(t.data)},eu=function(t){u.postMessage(String(t),Ha.protocol+"//"+Ha.host)};Ma&&Aa||(Ma=function(t){for(var e=[],n=arguments.length,i=1;n>i;)e.push(arguments[i++]);return Oa[++Ea]=function(){(V(t)?t:Function(t)).apply(void 0,e)},ka(Ea),Ea},Aa=function(t){delete Oa[t]},Xr?ka=function(t){Pa.nextTick($a(t))}:Da&&Da.now?ka=function(t){Da.now($a(t))}:Qa&&!Ba?(wa=(Ua=new Qa).port2,Ua.port1.onmessage=tu,ka=Fe(wa.postMessage,wa,1)):u.addEventListener&&V(u.postMessage)&&!u.importScripts&&Ha&&"file:"!==Ha.protocol&&!d(eu)?(ka=eu,u.addEventListener("message",tu,!1)):ka=_a in ct("script")?function(t){fe.appendChild(ct("script")).onreadystatechange=function(){fe.removeChild(this),qa(t)}}:function(t){setTimeout($a(t),0)});var nu,iu,ru,cu,lu,ou,au,uu,du={set:Ma,clear:Aa},su=/ipad|iphone|ipod/i.test(C)&&void 0!==u.Pebble,mu=/web0s(?!.*chrome)/i.test(C),hu=ut.f,Zu=du.set,bu=u.MutationObserver||u.WebKitMutationObserver,pu=u.document,yu=u.process,Iu=u.Promise,Xu=hu(u,"queueMicrotask"),Gu=Xu&&Xu.value;Gu||(nu=function(){var t,e;for(Xr&&(t=yu.domain)&&t.exit();iu;){e=iu.fn,iu=iu.next;try{e()}catch(t){throw iu?cu():ru=void 0,t}}ru=void 0,t&&t.enter()},Ba||Xr||mu||!bu||!pu?!su&&Iu&&Iu.resolve?((au=Iu.resolve(void 0)).constructor=Iu,uu=au.then,cu=function(){uu.call(au,nu)}):cu=Xr?function(){yu.nextTick(nu)}:function(){Zu.call(u,nu)}:(lu=!0,ou=pu.createTextNode(""),new bu(nu).observe(ou,{characterData:!0}),cu=function(){ou.data=lu=!lu}));var gu,fu,Vu,Wu,vu=Gu||function(t){var e={fn:t,next:void 0};ru&&(ru.next=e),iu||(iu=e,cu()),ru=e},Su=function(t){var e,n;this.promise=new t((function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i})),this.resolve=U(e),this.reject=U(n)},Cu={f:function(t){return new Su(t)}},Yu=function(t,e){if(dt(t),W(e)&&e.constructor===t)return e;var n=Cu.f(t);return(0,n.resolve)(e),n.promise},Ru=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},Ku="object"==("undefined"==typeof window?"undefined":o(window)),Lu=du.set,Ju=$("species"),xu="Promise",Nu=Jt.get,Hu=Jt.set,ku=Jt.getterFor(xu),Uu=Ta&&Ta.prototype,wu=Ta,Tu=Uu,Fu=u.TypeError,zu=u.document,ju=u.process,Bu=Cu.f,Mu=Bu,Au=!!(zu&&zu.createEvent&&u.dispatchEvent),Pu=V(u.PromiseRejectionEvent),Qu="unhandledrejection",Du=!1,Eu=ue(xu,(function(){var t=Xt(wu),e=t!==String(wu);if(!e&&66===J)return!0;if(J>=51&&/native code/.test(t))return!1;var n=new wu((function(t){t(1)})),i=function(t){t((function(){}),(function(){}))};return(n.constructor={})[Ju]=i,!(Du=n.then((function(){}))instanceof i)||!e&&Ku&&!Pu})),Ou=Eu||!fi((function(t){wu.all(t).catch((function(){}))})),_u=function(t){var e;return!(!W(t)||!V(e=t.then))&&e},qu=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;vu((function(){for(var i=t.value,r=1==t.state,c=0;n.length>c;){var l,o,a,u=n[c++],d=r?u.ok:u.fail,s=u.resolve,m=u.reject,h=u.domain;try{d?(r||(2===t.rejection&&nd(t),t.rejection=1),!0===d?l=i:(h&&h.enter(),l=d(i),h&&(h.exit(),a=!0)),l===u.promise?m(Fu("Promise-chain cycle")):(o=_u(l))?o.call(l,s,m):s(l)):m(i)}catch(t){h&&!a&&h.exit(),m(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&td(t)}))}},$u=function(t,e,n){var i,r;Au?((i=zu.createEvent("Event")).promise=e,i.reason=n,i.initEvent(t,!1,!0),u.dispatchEvent(i)):i={promise:e,reason:n},!Pu&&(r=u["on"+t])?r(i):t===Qu&&function(t,e){var n=u.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}("Unhandled promise rejection",n)},td=function(t){Lu.call(u,(function(){var e,n=t.facade,i=t.value;if(ed(t)&&(e=Ru((function(){Xr?ju.emit("unhandledRejection",i,n):$u(Qu,n,i)})),t.rejection=Xr||ed(t)?2:1,e.error))throw e.value}))},ed=function(t){return 1!==t.rejection&&!t.parent},nd=function(t){Lu.call(u,(function(){var e=t.facade;Xr?ju.emit("rejectionHandled",e):$u("rejectionhandled",e,t.value)}))},id=function(t,e,n){return function(i){t(e,i,n)}},rd=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,qu(t,!0))},cd=function t(e,n,i){if(!e.done){e.done=!0,i&&(e=i);try{if(e.facade===n)throw Fu("Promise can't be resolved itself");var r=_u(n);r?vu((function(){var i={done:!1};try{r.call(n,id(t,i,e),id(rd,i,e))}catch(t){rd(i,t,e)}})):(e.value=n,e.state=1,qu(e,!1))}catch(t){rd({done:!1},t,e)}}};if(Eu&&(Tu=(wu=function(t){qr(this,wu,xu),U(t),gu.call(this);var e=Nu(this);try{t(id(cd,e),id(rd,e))}catch(t){rd(e,t)}}).prototype,(gu=function(t){Hu(this,{type:xu,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=_r(Tu,{then:function(t,e){var n=ku(this),i=Bu(ja(this,wu));return i.ok=!V(t)||t,i.fail=V(e)&&e,i.domain=Xr?ju.domain:void 0,n.parent=!0,n.reactions.push(i),0!=n.state&&qu(n,!1),i.promise},catch:function(t){return this.then(void 0,t)}}),fu=function(){var t=new gu,e=Nu(t);this.promise=t,this.resolve=id(cd,e),this.reject=id(rd,e)},Cu.f=Bu=function(t){return t===wu||t===Vu?new fu(t):Mu(t)},V(Ta)&&Uu!==Object.prototype)){Wu=Uu.then,Du||(Ut(Uu,"then",(function(t,e){var n=this;return new wu((function(t,e){Wu.call(n,t,e)})).then(t,e)}),{unsafe:!0}),Ut(Uu,"catch",Tu.catch,{unsafe:!0}));try{delete Uu.constructor}catch(t){}Ai&&Ai(Uu,Tu)}se({global:!0,wrap:!0,forced:Eu},{Promise:wu}),Te(wu,xu,!1),Mr(xu),Vu=S(xu),se({target:xu,stat:!0,forced:Eu},{reject:function(t){var e=Bu(this);return e.reject.call(void 0,t),e.promise}}),se({target:xu,stat:!0,forced:Eu},{resolve:function(t){return Yu(this,t)}}),se({target:xu,stat:!0,forced:Ou},{all:function(t){var e=this,n=Bu(e),i=n.resolve,r=n.reject,c=Ru((function(){var n=U(e.resolve),c=[],l=0,o=1;al(t,(function(t){var a=l++,u=!1;c.push(void 0),o++,n.call(e,t).then((function(t){u||(u=!0,c[a]=t,--o||i(c))}),r)})),--o||i(c)}));return c.error&&r(c.value),n.promise},race:function(t){var e=this,n=Bu(e),i=n.reject,r=Ru((function(){var r=U(e.resolve);al(t,(function(t){r.call(e,t).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}}),se({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=Cu.f(e),i=n.resolve,r=n.reject,c=Ru((function(){var n=U(e.resolve),r=[],c=0,l=1;al(t,(function(t){var o=c++,a=!1;r.push(void 0),l++,n.call(e,t).then((function(t){a||(a=!0,r[o]={status:"fulfilled",value:t},--l||i(r))}),(function(t){a||(a=!0,r[o]={status:"rejected",reason:t},--l||i(r))}))})),--l||i(r)}));return c.error&&r(c.value),n.promise}});var ld=!!Ta&&d((function(){Ta.prototype.finally.call({then:function(){}},(function(){}))}));if(se({target:"Promise",proto:!0,real:!0,forced:ld},{finally:function(t){var e=ja(this,S("Promise")),n=V(t);return this.then(n?function(n){return Yu(e,t()).then((function(){return n}))}:t,n?function(n){return Yu(e,t()).then((function(){throw n}))}:t)}}),V(Ta)){var od=S("Promise").prototype.finally;Ta.prototype.finally!==od&&Ut(Ta.prototype,"finally",od,{unsafe:!0})}var ad=S("Reflect","apply"),ud=Function.apply,dd=!d((function(){ad((function(){}))}));se({target:"Reflect",stat:!0,forced:dd},{apply:function(t,e,n){return U(t),dt(n),ad?ad(t,e,n):ud.call(t,e,n)}});var sd=[].slice,md={},hd=function(t,e,n){if(!(e in md)){for(var i=[],r=0;r<e;r++)i[r]="a["+r+"]";md[e]=Function("C,a","return new C("+i.join(",")+")")}return md[e](t,n)},Zd=Function.bind||function(t){var e=U(this),n=sd.call(arguments,1),i=function(){var r=n.concat(sd.call(arguments));return this instanceof i?hd(e,r.length,r):e.apply(t,r)};return W(e.prototype)&&(i.prototype=e.prototype),i},bd=S("Reflect","construct"),pd=d((function(){function t(){}return!(bd((function(){}),[],t)instanceof t)})),yd=!d((function(){bd((function(){}))})),Id=pd||yd;se({target:"Reflect",stat:!0,forced:Id,sham:Id},{construct:function(t,e){Fa(t),dt(e);var n=arguments.length<3?t:Fa(arguments[2]);if(yd&&!pd)return bd(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var i=[null];return i.push.apply(i,e),new(Zd.apply(t,i))}var r=n.prototype,c=Ye(W(r)?r:Object.prototype),l=Function.apply.call(t,c,e);return W(l)?l:c}});var Xd=d((function(){Reflect.defineProperty(ht.f({},1,{value:1}),1,{value:2})}));se({target:"Reflect",stat:!0,forced:Xd,sham:!s},{defineProperty:function(t,e,n){dt(t);var i=nt(e);dt(n);try{return ht.f(t,i,n),!0}catch(t){return!1}}});var Gd=ut.f;se({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=Gd(dt(t),e);return!(n&&!n.configurable)&&delete t[e]}});var gd=function(t){return void 0!==t&&(P(t,"value")||P(t,"writable"))};se({target:"Reflect",stat:!0},{get:function t(e,n){var i,r,c=arguments.length<3?e:arguments[2];return dt(e)===c?e[n]:(i=ut.f(e,n))?gd(i)?i.value:void 0===i.get?void 0:i.get.call(c):W(r=ki(e))?t(r,n,c):void 0}}),se({target:"Reflect",stat:!0,sham:!s},{getOwnPropertyDescriptor:function(t,e){return ut.f(dt(t),e)}}),se({target:"Reflect",stat:!0,sham:!xi},{getPrototypeOf:function(t){return ki(dt(t))}}),se({target:"Reflect",stat:!0},{has:function(t,e){return e in t}});var fd=Object.isExtensible;se({target:"Reflect",stat:!0},{isExtensible:function(t){return dt(t),!fd||fd(t)}}),se({target:"Reflect",stat:!0},{ownKeys:ee}),se({target:"Reflect",stat:!0,sham:!cl},{preventExtensions:function(t){dt(t);try{var e=S("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}});var Vd=d((function(){var t=function(){},e=ht.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}));se({target:"Reflect",stat:!0,forced:Vd},{set:function t(e,n,i){var r,c,l,o=arguments.length<4?e:arguments[3],a=ut.f(dt(e),n);if(!a){if(W(c=ki(e)))return t(c,n,i,o);a=p(0)}if(gd(a)){if(!1===a.writable||!W(o))return!1;if(r=ut.f(o,n)){if(r.get||r.set||!1===r.writable)return!1;r.value=i,ht.f(o,n,r)}else ht.f(o,n,p(0,i))}else{if(void 0===(l=a.set))return!1;l.call(o,i)}return!0}}),Ai&&se({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){dt(t),Mi(e);try{return Ai(t,e),!0}catch(t){return!1}}});var Wd=$("match"),vd=function(t){var e;return W(t)&&(void 0!==(e=t[Wd])?!!e:"RegExp"==I(t))},Sd=function(){var t=dt(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e},Cd=u.RegExp,Yd=d((function(){var t=Cd("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),Rd=d((function(){var t=Cd("^r","gy");return t.lastIndex=2,null!=t.exec("str")})),Kd={UNSUPPORTED_Y:Yd,BROKEN_CARET:Rd},Ld=u.RegExp,Jd=d((function(){var t=Ld(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)})),xd=u.RegExp,Nd=d((function(){var t=xd("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")})),Hd=ht.f,kd=$t.f,Ud=Jt.enforce,wd=$("match"),Td=u.RegExp,Fd=Td.prototype,zd=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,jd=/a/g,Bd=/a/g,Md=new Td(jd)!==jd,Ad=Kd.UNSUPPORTED_Y,Pd=s&&(!Md||Ad||Jd||Nd||d((function(){return Bd[wd]=!1,Td(jd)!=jd||Td(Bd)==Bd||"/a/i"!=Td(jd,"i")})));if(ue("RegExp",Pd)){for(var Qd=function(t,e){var n,i,r,c,l,o,a=this instanceof Qd,u=vd(t),d=void 0===e,s=[],m=t;if(!a&&u&&d&&t.constructor===Qd)return t;if((u||t instanceof Qd)&&(t=t.source,d&&(e="flags"in m?m.flags:Sd.call(m))),t=void 0===t?"":Xe(t),e=void 0===e?"":Xe(e),m=t,Jd&&"dotAll"in jd&&(i=!!e&&e.indexOf("s")>-1)&&(e=e.replace(/s/g,"")),n=e,Ad&&"sticky"in jd&&(r=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,"")),Nd&&(c=function(t){for(var e,n=t.length,i=0,r="",c=[],l={},o=!1,a=!1,u=0,d="";i<=n;i++){if("\\"===(e=t.charAt(i)))e+=t.charAt(++i);else if("]"===e)o=!1;else if(!o)switch(!0){case"["===e:o=!0;break;case"("===e:zd.test(t.slice(i+1))&&(i+=2,a=!0),r+=e,u++;continue;case">"===e&&a:if(""===d||P(l,d))throw new SyntaxError("Invalid capture group name");l[d]=!0,c.push([d,u]),a=!1,d="";continue}a?d+=e:r+=e}return[r,c]}(t),t=c[0],s=c[1]),l=ul(Td(t,e),a?this:Fd,Qd),(i||r||s.length)&&(o=Ud(l),i&&(o.dotAll=!0,o.raw=Qd(function(t){for(var e,n=t.length,i=0,r="",c=!1;i<=n;i++)"\\"!==(e=t.charAt(i))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),r+=e):r+="[\\s\\S]":r+=e+t.charAt(++i);return r}(t),n)),r&&(o.sticky=!0),s.length&&(o.groups=s)),t!==m)try{Zt(l,"source",""===m?"(?:)":m)}catch(t){}return l},Dd=function(t){t in Qd||Hd(Qd,t,{configurable:!0,get:function(){return Td[t]},set:function(e){Td[t]=e}})},Ed=kd(Td),Od=0;Ed.length>Od;)Dd(Ed[Od++]);Fd.constructor=Qd,Qd.prototype=Fd,Ut(u,"RegExp",Qd)}Mr("RegExp");var _d=Jt.get,qd=RegExp.prototype.exec,$d=B("native-string-replace",String.prototype.replace),ts=qd,es=function(){var t=/a/,e=/b*/g;return qd.call(t,"a"),qd.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),ns=Kd.UNSUPPORTED_Y||Kd.BROKEN_CARET,is=void 0!==/()??/.exec("")[1];(es||is||ns||Jd||Nd)&&(ts=function(t){var e,n,i,r,c,l,o,a=this,u=_d(a),d=Xe(t),s=u.raw;if(s)return s.lastIndex=a.lastIndex,e=ts.call(s,d),a.lastIndex=s.lastIndex,e;var m=u.groups,h=ns&&a.sticky,Z=Sd.call(a),b=a.source,p=0,y=d;if(h&&(-1===(Z=Z.replace("y","")).indexOf("g")&&(Z+="g"),y=d.slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==d.charAt(a.lastIndex-1))&&(b="(?: "+b+")",y=" "+y,p++),n=new RegExp("^(?:"+b+")",Z)),is&&(n=new RegExp("^"+b+"$(?!\\s)",Z)),es&&(i=a.lastIndex),r=qd.call(h?n:a,y),h?r?(r.input=r.input.slice(p),r[0]=r[0].slice(p),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:es&&r&&(a.lastIndex=a.global?r.index+r[0].length:i),is&&r&&r.length>1&&$d.call(r[0],n,(function(){for(c=1;c<arguments.length-2;c++)void 0===arguments[c]&&(r[c]=void 0)})),r&&m)for(r.groups=l=Ye(null),c=0;c<m.length;c++)l[(o=m[c])[0]]=r[o[1]];return r});var rs=ts;se({target:"RegExp",proto:!0,forced:/./.exec!==rs},{exec:rs}),s&&d((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&ht.f(RegExp.prototype,"flags",{configurable:!0,get:Sd});var cs=Kd.UNSUPPORTED_Y,ls=ht.f,os=Jt.get,as=RegExp.prototype;s&&cs&&ls(as,"sticky",{configurable:!0,get:function(){if(this!==as){if(this instanceof RegExp)return!!os(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}});var us=function(){var t=!1,e=/[ac]/;return e.exec=function(){return t=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&t}(),ds=/./.test;se({target:"RegExp",proto:!0,forced:!us},{test:function(t){var e=this.exec;if(!V(e))return ds.call(this,t);var n=e.call(this,t);if(null!==n&&!W(n))throw new Error("RegExp exec method returned something other than an Object or null");return!!n}});var ss=kt.PROPER,ms="toString",hs=RegExp.prototype,Zs=hs.toString,bs=d((function(){return"/a/b"!=Zs.call({source:"a",flags:"b"})})),ps=ss&&Zs.name!=ms;(bs||ps)&&Ut(RegExp.prototype,ms,(function(){var t=dt(this),e=Xe(t.source),n=t.flags;return"/"+e+"/"+Xe(void 0===n&&t instanceof RegExp&&!("flags"in hs)?Sd.call(t):n)}),{unsafe:!0}),dl("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),bl);var ys=function(t){return function(e,n){var i,r,c=Xe(g(e)),l=Ft(n),o=c.length;return l<0||l>=o?t?"":void 0:(i=c.charCodeAt(l))<55296||i>56319||l+1===o||(r=c.charCodeAt(l+1))<56320||r>57343?t?c.charAt(l):i:t?c.slice(l,l+2):r-56320+(i-55296<<10)+65536}},Is={codeAt:ys(!1),charAt:ys(!0)},Xs=Is.codeAt;se({target:"String",proto:!0},{codePointAt:function(t){return Xs(this,t)}});var Gs,gs=function(t){if(vd(t))throw TypeError("The method doesn't accept regular expressions");return t},fs=$("match"),Vs=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[fs]=!1,"/./"[t](e)}catch(t){}}return!1},Ws=ut.f,vs="".endsWith,Ss=Math.min,Cs=Vs("endsWith"),Ys=!(Cs||(Gs=Ws(String.prototype,"endsWith"),!Gs||Gs.writable));se({target:"String",proto:!0,forced:!Ys&&!Cs},{endsWith:function(t){var e=Xe(g(this));gs(t);var n=arguments.length>1?arguments[1]:void 0,i=jt(e.length),r=void 0===n?i:Ss(jt(n),i),c=Xe(t);return vs?vs.call(e,c,r):e.slice(r-c.length,r)===c}});var Rs=String.fromCharCode,Ks=String.fromCodePoint,Ls=!!Ks&&1!=Ks.length;se({target:"String",stat:!0,forced:Ls},{fromCodePoint:function(t){for(var e,n=[],i=arguments.length,r=0;i>r;){if(e=+arguments[r++],At(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?Rs(e):Rs(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}}),se({target:"String",proto:!0,forced:!Vs("includes")},{includes:function(t){return!!~Xe(g(this)).indexOf(Xe(gs(t)),arguments.length>1?arguments[1]:void 0)}});var Js=Is.charAt,xs="String Iterator",Ns=Jt.set,Hs=Jt.getterFor(xs);er(String,"String",(function(t){Ns(this,{type:xs,string:Xe(t),index:0})}),(function(){var t,e=Hs(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=Js(n,i),e.index+=t.length,{value:t,done:!1})}));var ks=$("species"),Us=RegExp.prototype,ws=function(t,e,n,i){var r=$(t),c=!d((function(){var e={};return e[r]=function(){return 7},7!=""[t](e)})),l=c&&!d((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[ks]=function(){return n},n.flags="",n[r]=/./[r]),n.exec=function(){return e=!0,null},n[r](""),!e}));if(!c||!l||n){var o=/./[r],a=e(r,""[t],(function(t,e,n,i,r){var l=e.exec;return l===rs||l===Us.exec?c&&!r?{done:!0,value:o.call(e,n,i)}:{done:!0,value:t.call(n,e,i)}:{done:!1}}));Ut(String.prototype,t,a[0]),Ut(Us,r,a[1])}i&&Zt(Us[r],"sham",!0)},Ts=Is.charAt,Fs=function(t,e,n){return e+(n?Ts(t,e).length:1)},zs=function(t,e){var n=t.exec;if(V(n)){var i=n.call(t,e);return null!==i&&dt(i),i}if("RegExp"===I(t))return rs.call(t,e);throw TypeError("RegExp#exec called on incompatible receiver")};ws("match",(function(t,e,n){return[function(e){var n=g(this),i=null==e?void 0:w(e,t);return i?i.call(e,n):new RegExp(e)[t](Xe(n))},function(t){var i=dt(this),r=Xe(t),c=n(e,i,r);if(c.done)return c.value;if(!i.global)return zs(i,r);var l=i.unicode;i.lastIndex=0;for(var o,a=[],u=0;null!==(o=zs(i,r));){var d=Xe(o[0]);a[u]=d,""===d&&(i.lastIndex=Fs(r,jt(i.lastIndex),l)),u++}return 0===u?null:a}]}));var js=$("matchAll"),Bs="RegExp String",Ms="RegExp String Iterator",As=Jt.set,Ps=Jt.getterFor(Ms),Qs=RegExp.prototype,Ds="".matchAll,Es=!!Ds&&!d((function(){"a".matchAll(/./)})),Os=Bi((function(t,e,n,i){As(this,{type:Ms,regexp:t,string:e,global:n,unicode:i,done:!1})}),Bs,(function(){var t=Ps(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,i=zs(e,n);return null===i?{value:void 0,done:t.done=!0}:t.global?(""===Xe(i[0])&&(e.lastIndex=Fs(n,jt(e.lastIndex),t.unicode)),{value:i,done:!1}):(t.done=!0,{value:i,done:!1})})),_s=function(t){var e,n,i,r,c,l,o=dt(this),a=Xe(t);return e=ja(o,RegExp),void 0===(n=o.flags)&&o instanceof RegExp&&!("flags"in Qs)&&(n=Sd.call(o)),i=void 0===n?"":Xe(n),r=new e(e===RegExp?o.source:o,i),c=!!~i.indexOf("g"),l=!!~i.indexOf("u"),r.lastIndex=jt(o.lastIndex),new Os(r,a,c,l)};se({target:"String",proto:!0,forced:Es},{matchAll:function(t){var e,n,i=g(this);if(null!=t){if(vd(t)&&!~Xe(g("flags"in Qs?t.flags:Sd.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(Es)return Ds.apply(i,arguments);if(n=w(t,js))return n.call(t,i)}else if(Es)return Ds.apply(i,arguments);return e=Xe(i),new RegExp(t,"g")[js](e)}}),js in Qs||Ut(Qs,js,_s);var qs=Math.ceil,$s=function(t){return function(e,n,i){var r,c,l=Xe(g(e)),o=l.length,a=void 0===i?" ":Xe(i),u=jt(n);return u<=o||""==a?l:((c=Qo.call(a,qs((r=u-o)/a.length))).length>r&&(c=c.slice(0,r)),t?l+c:c+l)}},tm={start:$s(!1),end:$s(!0)},em=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(C),nm=tm.end;se({target:"String",proto:!0,forced:em},{padEnd:function(t){return nm(this,t,arguments.length>1?arguments[1]:void 0)}});var im=tm.start;se({target:"String",proto:!0,forced:em},{padStart:function(t){return im(this,t,arguments.length>1?arguments[1]:void 0)}});var rm=Array.prototype,cm=rm.push,lm=rm.join;se({target:"String",stat:!0},{raw:function(t){for(var e=f(M(t).raw),n=jt(e.length),i=arguments.length,r=[],c=0;n>c;)cm.call(r,Xe(e[c++])),c<i&&cm.call(r,Xe(arguments[c]));return lm.call(r,"")}}),se({target:"String",proto:!0},{repeat:Qo});var om=Math.floor,am="".replace,um=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,dm=/\$([$&'`]|\d{1,2})/g,sm=function(t,e,n,i,r,c){var l=n+t.length,o=i.length,a=dm;return void 0!==r&&(r=M(r),a=um),am.call(c,a,(function(c,a){var u;switch(a.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(l);case"<":u=r[a.slice(1,-1)];break;default:var d=+a;if(0===d)return c;if(d>o){var s=om(d/10);return 0===s?c:s<=o?void 0===i[s-1]?a.charAt(1):i[s-1]+a.charAt(1):c}u=i[d-1]}return void 0===u?"":u}))},mm=$("replace"),hm=Math.max,Zm=Math.min,bm=function(t){return void 0===t?t:String(t)},pm="$0"==="a".replace(/./,"$0"),ym=!!/./[mm]&&""===/./[mm]("a","$0"),Im=!d((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}));ws("replace",(function(t,e,n){var i=ym?"$":"$0";return[function(t,n){var i=g(this),r=null==t?void 0:w(t,mm);return r?r.call(t,i,n):e.call(Xe(i),t,n)},function(t,r){var c=dt(this),l=Xe(t);if("string"==typeof r&&-1===r.indexOf(i)&&-1===r.indexOf("$<")){var o=n(e,c,l,r);if(o.done)return o.value}var a=V(r);a||(r=Xe(r));var u=c.global;if(u){var d=c.unicode;c.lastIndex=0}for(var s=[];;){var m=zs(c,l);if(null===m)break;if(s.push(m),!u)break;""===Xe(m[0])&&(c.lastIndex=Fs(l,jt(c.lastIndex),d))}for(var h="",Z=0,b=0;b<s.length;b++){m=s[b];for(var p=Xe(m[0]),y=hm(Zm(Ft(m.index),l.length),0),I=[],X=1;X<m.length;X++)I.push(bm(m[X]));var G=m.groups;if(a){var g=[p].concat(I,y,l);void 0!==G&&g.push(G);var f=Xe(r.apply(void 0,g))}else f=sm(p,l,y,I,G,r);y>=Z&&(h+=l.slice(Z,y)+f,Z=y+p.length)}return h+l.slice(Z)}]}),!Im||!pm||ym),ws("search",(function(t,e,n){return[function(e){var n=g(this),i=null==e?void 0:w(e,t);return i?i.call(e,n):new RegExp(e)[t](Xe(n))},function(t){var i=dt(this),r=Xe(t),c=n(e,i,r);if(c.done)return c.value;var l=i.lastIndex;ya(l,0)||(i.lastIndex=0);var o=zs(i,r);return ya(i.lastIndex,l)||(i.lastIndex=l),null===o?-1:o.index}]}));var Xm=Kd.UNSUPPORTED_Y,Gm=[].push,gm=Math.min,fm=4294967295,Vm=!d((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]}));ws("split",(function(t,e,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var i=Xe(g(this)),r=void 0===n?fm:n>>>0;if(0===r)return[];if(void 0===t)return[i];if(!vd(t))return e.call(i,t,r);for(var c,l,o,a=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),d=0,s=new RegExp(t.source,u+"g");(c=rs.call(s,i))&&!((l=s.lastIndex)>d&&(a.push(i.slice(d,c.index)),c.length>1&&c.index<i.length&&Gm.apply(a,c.slice(1)),o=c[0].length,d=l,a.length>=r));)s.lastIndex===c.index&&s.lastIndex++;return d===i.length?!o&&s.test("")||a.push(""):a.push(i.slice(d)),a.length>r?a.slice(0,r):a}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var r=g(this),c=null==e?void 0:w(e,t);return c?c.call(e,r,n):i.call(Xe(r),e,n)},function(t,r){var c=dt(this),l=Xe(t),o=n(i,c,l,r,i!==e);if(o.done)return o.value;var a=ja(c,RegExp),u=c.unicode,d=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(Xm?"g":"y"),s=new a(Xm?"^(?:"+c.source+")":c,d),m=void 0===r?fm:r>>>0;if(0===m)return[];if(0===l.length)return null===zs(s,l)?[l]:[];for(var h=0,Z=0,b=[];Z<l.length;){s.lastIndex=Xm?0:Z;var p,y=zs(s,Xm?l.slice(Z):l);if(null===y||(p=gm(jt(s.lastIndex+(Xm?Z:0)),l.length))===h)Z=Fs(l,Z,u);else{if(b.push(l.slice(h,Z)),b.length===m)return b;for(var I=1;I<=y.length-1;I++)if(b.push(y[I]),b.length===m)return b;Z=h=p}}return b.push(l.slice(h)),b}]}),!Vm,Xm);var Wm=ut.f,vm="".startsWith,Sm=Math.min,Cm=Vs("startsWith"),Ym=!Cm&&!!function(){var t=Wm(String.prototype,"startsWith");return t&&!t.writable}();se({target:"String",proto:!0,forced:!Ym&&!Cm},{startsWith:function(t){var e=Xe(g(this));gs(t);var n=jt(Sm(arguments.length>1?arguments[1]:void 0,e.length)),i=Xe(t);return vm?vm.call(e,i,n):e.slice(n,n+i.length)===i}});var Rm=kt.PROPER,Km=function(t){return d((function(){return!!so[t]()||"​…᠎"!=="​…᠎"[t]()||Rm&&so[t].name!==t}))},Lm=po.trim;se({target:"String",proto:!0,forced:Km("trim")},{trim:function(){return Lm(this)}});var Jm=po.end,xm=Km("trimEnd"),Nm=xm?function(){return Jm(this)}:"".trimEnd;se({target:"String",proto:!0,name:"trimEnd",forced:xm},{trimEnd:Nm,trimRight:Nm});var Hm=po.start,km=Km("trimStart"),Um=km?function(){return Hm(this)}:"".trimStart;se({target:"String",proto:!0,name:"trimStart",forced:km},{trimStart:Um,trimLeft:Um});var wm=/"/g,Tm=function(t,e,n,i){var r=Xe(g(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+Xe(i).replace(wm,"&quot;")+'"'),c+">"+r+"</"+e+">"},Fm=function(t){return d((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))};se({target:"String",proto:!0,forced:Fm("anchor")},{anchor:function(t){return Tm(this,"a","name",t)}}),se({target:"String",proto:!0,forced:Fm("big")},{big:function(){return Tm(this,"big","","")}}),se({target:"String",proto:!0,forced:Fm("blink")},{blink:function(){return Tm(this,"blink","","")}}),se({target:"String",proto:!0,forced:Fm("bold")},{bold:function(){return Tm(this,"b","","")}}),se({target:"String",proto:!0,forced:Fm("fixed")},{fixed:function(){return Tm(this,"tt","","")}}),se({target:"String",proto:!0,forced:Fm("fontcolor")},{fontcolor:function(t){return Tm(this,"font","color",t)}}),se({target:"String",proto:!0,forced:Fm("fontsize")},{fontsize:function(t){return Tm(this,"font","size",t)}}),se({target:"String",proto:!0,forced:Fm("italics")},{italics:function(){return Tm(this,"i","","")}}),se({target:"String",proto:!0,forced:Fm("link")},{link:function(t){return Tm(this,"a","href",t)}}),se({target:"String",proto:!0,forced:Fm("small")},{small:function(){return Tm(this,"small","","")}}),se({target:"String",proto:!0,forced:Fm("strike")},{strike:function(){return Tm(this,"strike","","")}}),se({target:"String",proto:!0,forced:Fm("sub")},{sub:function(){return Tm(this,"sub","","")}}),se({target:"String",proto:!0,forced:Fm("sup")},{sup:function(){return Tm(this,"sup","","")}});var zm,jm,Bm,Mm=ht.f,Am=u.Int8Array,Pm=Am&&Am.prototype,Qm=u.Uint8ClampedArray,Dm=Qm&&Qm.prototype,Em=Am&&ki(Am),Om=Pm&&ki(Pm),_m=Object.prototype,qm=_m.isPrototypeOf,$m=$("toStringTag"),th=E("TYPED_ARRAY_TAG"),eh=E("TYPED_ARRAY_CONSTRUCTOR"),nh=Or&&!!Ai&&"Opera"!==Ie(u.opera),ih=!1,rh={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},ch={BigInt64Array:8,BigUint64Array:8},lh=function(t){if(!W(t))return!1;var e=Ie(t);return P(rh,e)||P(ch,e)};for(zm in rh)(Bm=(jm=u[zm])&&jm.prototype)?Zt(Bm,eh,jm):nh=!1;for(zm in ch)(Bm=(jm=u[zm])&&jm.prototype)&&Zt(Bm,eh,jm);if((!nh||!V(Em)||Em===Function.prototype)&&(Em=function(){throw TypeError("Incorrect invocation")},nh))for(zm in rh)u[zm]&&Ai(u[zm],Em);if((!nh||!Om||Om===_m)&&(Om=Em.prototype,nh))for(zm in rh)u[zm]&&Ai(u[zm].prototype,Om);if(nh&&ki(Dm)!==Om&&Ai(Dm,Om),s&&!P(Om,$m))for(zm in ih=!0,Mm(Om,$m,{get:function(){return W(this)?this[th]:void 0}}),rh)u[zm]&&Zt(u[zm],th,zm);var oh={NATIVE_ARRAY_BUFFER_VIEWS:nh,TYPED_ARRAY_CONSTRUCTOR:eh,TYPED_ARRAY_TAG:ih&&th,aTypedArray:function(t){if(lh(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(V(t)&&(!Ai||qm.call(Em,t)))return t;throw TypeError(k(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n){if(s){if(n)for(var i in rh){var r=u[i];if(r&&P(r.prototype,t))try{delete r.prototype[t]}catch(t){}}Om[t]&&!n||Ut(Om,t,n?e:nh&&Pm[t]||e)}},exportTypedArrayStaticMethod:function(t,e,n){var i,r;if(s){if(Ai){if(n)for(i in rh)if((r=u[i])&&P(r,t))try{delete r[t]}catch(t){}if(Em[t]&&!n)return;try{return Ut(Em,t,n?e:nh&&Em[t]||e)}catch(t){}}for(i in rh)!(r=u[i])||r[t]&&!n||Ut(r,t,e)}},isView:function(t){if(!W(t))return!1;var e=Ie(t);return"DataView"===e||P(rh,e)||P(ch,e)},isTypedArray:lh,TypedArray:Em,TypedArrayPrototype:Om},ah=oh.NATIVE_ARRAY_BUFFER_VIEWS,uh=u.ArrayBuffer,dh=u.Int8Array,sh=!ah||!d((function(){dh(1)}))||!d((function(){new dh(-1)}))||!fi((function(t){new dh,new dh(null),new dh(1.5),new dh(t)}),!0)||d((function(){return 1!==new dh(new uh(2),1,void 0).length})),mh=function(t,e){var n=function(t){var e=Ft(t);if(e<0)throw RangeError("The argument can't be less than 0");return e}(t);if(n%e)throw RangeError("Wrong offset");return n},hh=oh.aTypedArrayConstructor,Zh=function(t){var e,n,i,r,c,l,o=Fa(this),a=M(t),u=arguments.length,d=u>1?arguments[1]:void 0,s=void 0!==d,m=bi(a);if(m&&!hi(m))for(l=(c=pi(a,m)).next,a=[];!(r=l.call(c)).done;)a.push(r.value);for(s&&u>2&&(d=Fe(d,arguments[2],2)),n=jt(a.length),i=new(hh(o))(n),e=0;n>e;e++)i[e]=s?d(a[e],e):a[e];return i},bh=i((function(t){var e=$t.f,n=qe.forEach,i=Jt.get,r=Jt.set,c=ht.f,l=ut.f,o=Math.round,a=u.RangeError,d=Fc.ArrayBuffer,m=Fc.DataView,h=oh.NATIVE_ARRAY_BUFFER_VIEWS,Z=oh.TYPED_ARRAY_CONSTRUCTOR,b=oh.TYPED_ARRAY_TAG,y=oh.TypedArray,I=oh.TypedArrayPrototype,X=oh.aTypedArrayConstructor,G=oh.isTypedArray,g="BYTES_PER_ELEMENT",f="Wrong length",V=function(t,e){for(var n=0,i=e.length,r=new(X(t))(i);i>n;)r[n]=e[n++];return r},v=function(t,e){c(t,e,{get:function(){return i(this)[e]}})},S=function(t){var e;return t instanceof d||"ArrayBuffer"==(e=Ie(t))||"SharedArrayBuffer"==e},C=function(t,e){return G(t)&&!H(e)&&e in t&&xo(+e)&&e>=0},Y=function(t,e){return e=nt(e),C(t,e)?p(2,t[e]):l(t,e)},R=function(t,e,n){return e=nt(e),!(C(t,e)&&W(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?c(t,e,n):(t[e]=n.value,t)};s?(h||(ut.f=Y,ht.f=R,v(I,"buffer"),v(I,"byteOffset"),v(I,"byteLength"),v(I,"length")),se({target:"Object",stat:!0,forced:!h},{getOwnPropertyDescriptor:Y,defineProperty:R}),t.exports=function(t,l,s){var p=t.match(/\d+$/)[0]/8,X=t+(s?"Clamped":"")+"Array",v="get"+t,C="set"+t,Y=u[X],R=Y,K=R&&R.prototype,L={},J=function(t,e){c(t,e,{get:function(){return function(t,e){var n=i(t);return n.view[v](e*p+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,n){var r=i(t);s&&(n=(n=o(n))<0?0:n>255?255:255&n),r.view[C](e*p+r.byteOffset,n,!0)}(this,e,t)},enumerable:!0})};h?sh&&(R=l((function(t,e,n,i){return qr(t,R,X),ul(W(e)?S(e)?void 0!==i?new Y(e,mh(n,p),i):void 0!==n?new Y(e,mh(n,p)):new Y(e):G(e)?V(R,e):Zh.call(R,e):new Y($r(e)),t,R)})),Ai&&Ai(R,y),n(e(Y),(function(t){t in R||Zt(R,t,Y[t])})),R.prototype=K):(R=l((function(t,e,n,i){qr(t,R,X);var c,l,o,u=0,s=0;if(W(e)){if(!S(e))return G(e)?V(R,e):Zh.call(R,e);c=e,s=mh(n,p);var h=e.byteLength;if(void 0===i){if(h%p)throw a(f);if((l=h-s)<0)throw a(f)}else if((l=jt(i)*p)+s>h)throw a(f);o=l/p}else o=$r(e),c=new d(l=o*p);for(r(t,{buffer:c,byteOffset:s,byteLength:l,length:o,view:new m(c)});u<o;)J(t,u++)})),Ai&&Ai(R,y),K=R.prototype=Ye(I)),K.constructor!==R&&Zt(K,"constructor",R),Zt(K,Z,R),b&&Zt(K,b,X),L[X]=R,se({global:!0,forced:R!=Y,sham:!h},L),g in R||Zt(R,g,p),g in K||Zt(K,g,p),Mr(X)}):t.exports=function(){}}));bh("Float32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Float64",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Int32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}}),!0),bh("Uint16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),bh("Uint32",(function(t){return function(e,n,i){return t(this,e,n,i)}}));var ph=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("copyWithin",(function(t,e){return Dn.call(ph(this),t,e,arguments.length>2?arguments[2]:void 0)}));var yh=qe.every,Ih=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("every",(function(t){return yh(Ih(this),t,arguments.length>1?arguments[1]:void 0)}));var Xh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("fill",(function(t){return qn.apply(Xh(this),arguments)}));var Gh=oh.TYPED_ARRAY_CONSTRUCTOR,gh=oh.aTypedArrayConstructor,fh=function(t){return gh(ja(t,t[Gh]))},Vh=function(t,e){return function(t,e){for(var n=0,i=e.length,r=new t(i);i>n;)r[n]=e[n++];return r}(fh(t),e)},Wh=qe.filter,vh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("filter",(function(t){var e=Wh(vh(this),t,arguments.length>1?arguments[1]:void 0);return Vh(this,e)}));var Sh=qe.find,Ch=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("find",(function(t){return Sh(Ch(this),t,arguments.length>1?arguments[1]:void 0)}));var Yh=qe.findIndex,Rh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("findIndex",(function(t){return Yh(Rh(this),t,arguments.length>1?arguments[1]:void 0)}));var Kh=qe.forEach,Lh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("forEach",(function(t){Kh(Lh(this),t,arguments.length>1?arguments[1]:void 0)})),(0,oh.exportTypedArrayStaticMethod)("from",Zh,sh);var Jh=Qt.includes,xh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("includes",(function(t){return Jh(xh(this),t,arguments.length>1?arguments[1]:void 0)}));var Nh=Qt.indexOf,Hh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("indexOf",(function(t){return Nh(Hh(this),t,arguments.length>1?arguments[1]:void 0)}));var kh=kt.PROPER,Uh=$("iterator"),wh=u.Uint8Array,Th=cr.values,Fh=cr.keys,zh=cr.entries,jh=oh.aTypedArray,Bh=oh.exportTypedArrayMethod,Mh=wh&&wh.prototype[Uh],Ah=!!Mh&&"values"===Mh.name,Ph=function(){return Th.call(jh(this))};Bh("entries",(function(){return zh.call(jh(this))})),Bh("keys",(function(){return Fh.call(jh(this))})),Bh("values",Ph,kh&&!Ah),Bh(Uh,Ph,kh&&!Ah);var Qh=oh.aTypedArray,Dh=[].join;(0,oh.exportTypedArrayMethod)("join",(function(t){return Dh.apply(Qh(this),arguments)}));var Eh=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("lastIndexOf",(function(t){return hr.apply(Eh(this),arguments)}));var Oh=qe.map,_h=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("map",(function(t){return Oh(_h(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(fh(t))(e)}))}));var qh=oh.aTypedArrayConstructor;(0,oh.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(qh(this))(e);e>t;)n[t]=arguments[t++];return n}),sh);var $h=Ir.left,tZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("reduce",(function(t){return $h(tZ(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}));var eZ=Ir.right,nZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("reduceRight",(function(t){return eZ(nZ(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}));var iZ=oh.aTypedArray,rZ=oh.exportTypedArrayMethod,cZ=Math.floor;rZ("reverse",(function(){for(var t,e=this,n=iZ(e).length,i=cZ(n/2),r=0;r<i;)t=e[r],e[r++]=e[--n],e[n]=t;return e}));var lZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("set",(function(t){lZ(this);var e=mh(arguments.length>1?arguments[1]:void 0,1),n=this.length,i=M(t),r=jt(i.length),c=0;if(r+e>n)throw RangeError("Wrong length");for(;c<r;)this[e+c]=i[c++]}),d((function(){new Int8Array(1).set({})})));var oZ=oh.aTypedArray,aZ=[].slice;(0,oh.exportTypedArrayMethod)("slice",(function(t,e){for(var n=aZ.call(oZ(this),t,e),i=fh(this),r=0,c=n.length,l=new i(c);c>r;)l[r]=n[r++];return l}),d((function(){new Int8Array(1).slice()})));var uZ=qe.some,dZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("some",(function(t){return uZ(dZ(this),t,arguments.length>1?arguments[1]:void 0)}));var sZ=oh.aTypedArray,mZ=oh.exportTypedArrayMethod,hZ=u.Uint16Array,ZZ=hZ&&hZ.prototype.sort,bZ=!!ZZ&&!d((function(){var t=new hZ(2);t.sort(null),t.sort({})})),pZ=!!ZZ&&!d((function(){if(J)return J<74;if(xr)return xr<67;if(Nr)return!0;if(kr)return kr<602;var t,e,n=new hZ(516),i=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,i[t]=t-2*e+3;for(n.sort((function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==i[t])return!0}));mZ("sort",(function(t){var e=this;if(void 0!==t&&U(t),pZ)return ZZ.call(e,t);sZ(e);var n,i=jt(e.length),r=Array(i);for(n=0;n<i;n++)r[n]=e[n];for(r=Lr(e,function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t)),n=0;n<i;n++)e[n]=r[n];return e}),!pZ||bZ);var yZ=oh.aTypedArray;(0,oh.exportTypedArrayMethod)("subarray",(function(t,e){var n=yZ(this),i=n.length,r=At(t,i);return new(fh(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,jt((void 0===e?i:At(e,i))-r))}));var IZ=u.Int8Array,XZ=oh.aTypedArray,GZ=oh.exportTypedArrayMethod,gZ=[].toLocaleString,fZ=[].slice,VZ=!!IZ&&d((function(){gZ.call(new IZ(1))}));GZ("toLocaleString",(function(){return gZ.apply(VZ?fZ.call(XZ(this)):XZ(this),arguments)}),d((function(){return[1,2].toLocaleString()!=new IZ([1,2]).toLocaleString()}))||!d((function(){IZ.prototype.toLocaleString.call([1,2])})));var WZ=oh.exportTypedArrayMethod,vZ=u.Uint8Array,SZ=vZ&&vZ.prototype||{},CZ=[].toString,YZ=[].join;d((function(){CZ.call({})}))&&(CZ=function(){return YZ.call(this)});var RZ=SZ.toString!=CZ;WZ("toString",CZ,RZ);var KZ=ll.getWeakData,LZ=Jt.set,JZ=Jt.getterFor,xZ=qe.find,NZ=qe.findIndex,HZ=0,kZ=function(t){return t.frozen||(t.frozen=new UZ)},UZ=function(){this.entries=[]},wZ=function(t,e){return xZ(t.entries,(function(t){return t[0]===e}))};UZ.prototype={get:function(t){var e=wZ(this,t);if(e)return e[1]},has:function(t){return!!wZ(this,t)},set:function(t,e){var n=wZ(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=NZ(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var TZ={getConstructor:function(t,e,n,i){var r=t((function(t,c){qr(t,r,e),LZ(t,{type:e,id:HZ++,frozen:void 0}),null!=c&&al(c,t[i],{that:t,AS_ENTRIES:n})})),c=JZ(e),l=function(t,e,n){var i=c(t),r=KZ(dt(e),!0);return!0===r?kZ(i).set(e,n):r[i.id]=n,t};return _r(r.prototype,{delete:function(t){var e=c(this);if(!W(t))return!1;var n=KZ(t);return!0===n?kZ(e).delete(t):n&&P(n,e.id)&&delete n[e.id]},has:function(t){var e=c(this);if(!W(t))return!1;var n=KZ(t);return!0===n?kZ(e).has(t):n&&P(n,e.id)}}),_r(r.prototype,n?{get:function(t){var e=c(this);if(W(t)){var n=KZ(t);return!0===n?kZ(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return l(this,t,e)}}:{add:function(t){return l(this,t,!0)}}),r}};i((function(t){var e,n=Jt.enforce,i=!u.ActiveXObject&&"ActiveXObject"in u,r=Object.isExtensible,c=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},l=t.exports=dl("WeakMap",c,TZ);if(gt&&i){e=TZ.getConstructor(c,"WeakMap",!0),ll.enable();var o=l.prototype,a=o.delete,d=o.has,s=o.get,m=o.set;_r(o,{delete:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),a.call(this,t)||i.frozen.delete(t)}return a.call(this,t)},has:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),d.call(this,t)||i.frozen.has(t)}return d.call(this,t)},get:function(t){if(W(t)&&!r(t)){var i=n(this);return i.frozen||(i.frozen=new e),d.call(this,t)?s.call(this,t):i.frozen.get(t)}return s.call(this,t)},set:function(t,i){if(W(t)&&!r(t)){var c=n(this);c.frozen||(c.frozen=new e),d.call(this,t)?m.call(this,t,i):c.frozen.set(t,i)}else m.call(this,t,i);return this}})}})),dl("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),TZ);var FZ={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},zZ=ct("span").classList,jZ=zZ&&zZ.constructor&&zZ.constructor.prototype,BZ=jZ===Object.prototype?void 0:jZ,MZ=qe.forEach,AZ=vi("forEach")?[].forEach:function(t){return MZ(this,t,arguments.length>1?arguments[1]:void 0)},PZ=function(t){if(t&&t.forEach!==AZ)try{Zt(t,"forEach",AZ)}catch(e){t.forEach=AZ}};for(var QZ in FZ)FZ[QZ]&&PZ(u[QZ]&&u[QZ].prototype);PZ(BZ);var DZ=$("iterator"),EZ=$("toStringTag"),OZ=cr.values,_Z=function(t,e){if(t){if(t[DZ]!==OZ)try{Zt(t,DZ,OZ)}catch(e){t[DZ]=OZ}if(t[EZ]||Zt(t,EZ,e),FZ[e])for(var n in cr)if(t[n]!==cr[n])try{Zt(t,n,cr[n])}catch(e){t[n]=cr[n]}}};for(var qZ in FZ)_Z(u[qZ]&&u[qZ].prototype,qZ);_Z(BZ,"DOMTokenList");var $Z=!u.setImmediate||!u.clearImmediate;se({global:!0,bind:!0,enumerable:!0,forced:$Z},{setImmediate:du.set,clearImmediate:du.clear});var tb=u.process;se({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var e=Xr&&tb.domain;vu(e?e.bind(t):t)}});var eb=$("iterator"),nb=!d((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,i){e.delete("b"),n+=i+t})),!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[eb]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host})),ib=2147483647,rb=/[^\0-\u007E]/,cb=/[.\u3002\uFF0E\uFF61]/g,lb="Overflow: input needs wider integers to process",ob=Math.floor,ab=String.fromCharCode,ub=function(t){return t+22+75*(t<26)},db=function(t,e,n){var i=0;for(t=n?ob(t/700):t>>1,t+=ob(t/e);t>455;i+=36)t=ob(t/35);return ob(i+36*t/(t+38))},sb=function(t){var e=[];t=function(t){for(var e=[],n=0,i=t.length;n<i;){var r=t.charCodeAt(n++);if(r>=55296&&r<=56319&&n<i){var c=t.charCodeAt(n++);56320==(64512&c)?e.push(((1023&r)<<10)+(1023&c)+65536):(e.push(r),n--)}else e.push(r)}return e}(t);var n,i,r=t.length,c=128,l=0,o=72;for(n=0;n<t.length;n++)(i=t[n])<128&&e.push(ab(i));var a=e.length,u=a;for(a&&e.push("-");u<r;){var d=ib;for(n=0;n<t.length;n++)(i=t[n])>=c&&i<d&&(d=i);var s=u+1;if(d-c>ob((ib-l)/s))throw RangeError(lb);for(l+=(d-c)*s,c=d,n=0;n<t.length;n++){if((i=t[n])<c&&++l>ib)throw RangeError(lb);if(i==c){for(var m=l,h=36;;h+=36){var Z=h<=o?1:h>=o+26?26:h-o;if(m<Z)break;var b=m-Z,p=36-Z;e.push(ab(ub(Z+b%p))),m=ob(b/p)}e.push(ab(ub(m))),o=db(l,s,u==a),l=0,++u}}++l,++c}return e.join("")},mb=S("fetch"),hb=S("Request"),Zb=hb&&hb.prototype,bb=S("Headers"),pb=$("iterator"),yb="URLSearchParams",Ib="URLSearchParamsIterator",Xb=Jt.set,Gb=Jt.getterFor(yb),gb=Jt.getterFor(Ib),fb=/\+/g,Vb=Array(4),Wb=function(t){return Vb[t-1]||(Vb[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},vb=function(t){try{return decodeURIComponent(t)}catch(e){return t}},Sb=function(t){var e=t.replace(fb," "),n=4;try{return decodeURIComponent(e)}catch(t){for(;n;)e=e.replace(Wb(n--),vb);return e}},Cb=/[!'()~]|%20/g,Yb={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Rb=function(t){return Yb[t]},Kb=function(t){return encodeURIComponent(t).replace(Cb,Rb)},Lb=function(t,e){if(e)for(var n,i,r=e.split("&"),c=0;c<r.length;)(n=r[c++]).length&&(i=n.split("="),t.push({key:Sb(i.shift()),value:Sb(i.join("="))}))},Jb=function(t){this.entries.length=0,Lb(this.entries,t)},xb=function(t,e){if(t<e)throw TypeError("Not enough arguments")},Nb=Bi((function(t,e){Xb(this,{type:Ib,iterator:pi(Gb(t).entries),kind:e})}),"Iterator",(function(){var t=gb(this),e=t.kind,n=t.iterator.next(),i=n.value;return n.done||(n.value="keys"===e?i.key:"values"===e?i.value:[i.key,i.value]),n})),Hb=function(){qr(this,Hb,yb);var t,e,n,i,r,c,l,o,a,u=arguments.length>0?arguments[0]:void 0,d=this,s=[];if(Xb(d,{type:yb,entries:s,updateURL:function(){},updateSearchParams:Jb}),void 0!==u)if(W(u))if(t=bi(u))for(n=(e=pi(u,t)).next;!(i=n.call(e)).done;){if((l=(c=(r=pi(dt(i.value))).next).call(r)).done||(o=c.call(r)).done||!c.call(r).done)throw TypeError("Expected sequence with length 2");s.push({key:Xe(l.value),value:Xe(o.value)})}else for(a in u)P(u,a)&&s.push({key:a,value:Xe(u[a])});else Lb(s,"string"==typeof u?"?"===u.charAt(0)?u.slice(1):u:Xe(u))},kb=Hb.prototype;if(_r(kb,{append:function(t,e){xb(arguments.length,2);var n=Gb(this);n.entries.push({key:Xe(t),value:Xe(e)}),n.updateURL()},delete:function(t){xb(arguments.length,1);for(var e=Gb(this),n=e.entries,i=Xe(t),r=0;r<n.length;)n[r].key===i?n.splice(r,1):r++;e.updateURL()},get:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=0;i<e.length;i++)if(e[i].key===n)return e[i].value;return null},getAll:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=[],r=0;r<e.length;r++)e[r].key===n&&i.push(e[r].value);return i},has:function(t){xb(arguments.length,1);for(var e=Gb(this).entries,n=Xe(t),i=0;i<e.length;)if(e[i++].key===n)return!0;return!1},set:function(t,e){xb(arguments.length,1);for(var n,i=Gb(this),r=i.entries,c=!1,l=Xe(t),o=Xe(e),a=0;a<r.length;a++)(n=r[a]).key===l&&(c?r.splice(a--,1):(c=!0,n.value=o));c||r.push({key:l,value:o}),i.updateURL()},sort:function(){var t,e,n,i=Gb(this),r=i.entries,c=r.slice();for(r.length=0,n=0;n<c.length;n++){for(t=c[n],e=0;e<n;e++)if(r[e].key>t.key){r.splice(e,0,t);break}e===n&&r.push(t)}i.updateURL()},forEach:function(t){for(var e,n=Gb(this).entries,i=Fe(t,arguments.length>1?arguments[1]:void 0,3),r=0;r<n.length;)i((e=n[r++]).value,e.key,this)},keys:function(){return new Nb(this,"keys")},values:function(){return new Nb(this,"values")},entries:function(){return new Nb(this,"entries")}},{enumerable:!0}),Ut(kb,pb,kb.entries,{name:"entries"}),Ut(kb,"toString",(function(){for(var t,e=Gb(this).entries,n=[],i=0;i<e.length;)t=e[i++],n.push(Kb(t.key)+"="+Kb(t.value));return n.join("&")}),{enumerable:!0}),Te(Hb,yb),se({global:!0,forced:!nb},{URLSearchParams:Hb}),!nb&&V(bb)){var Ub=function(t){if(W(t)){var e,n=t.body;if(Ie(n)===yb)return(e=t.headers?new bb(t.headers):new bb).has("content-type")||e.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),Ye(t,{body:p(0,String(n)),headers:p(0,e)})}return t};if(V(mb)&&se({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return mb(t,arguments.length>1?Ub(arguments[1]):{})}}),V(hb)){var wb=function(t){return qr(this,wb,"Request"),new hb(t,arguments.length>1?Ub(arguments[1]):{})};Zb.constructor=wb,wb.prototype=Zb,se({global:!0,forced:!0},{Request:wb})}}var Tb,Fb={URLSearchParams:Hb,getState:Gb},zb=Is.codeAt,jb=u.URL,Bb=Fb.URLSearchParams,Mb=Fb.getState,Ab=Jt.set,Pb=Jt.getterFor("URL"),Qb=Math.floor,Db=Math.pow,Eb="Invalid scheme",Ob="Invalid host",_b="Invalid port",qb=/[A-Za-z]/,$b=/[\d+-.A-Za-z]/,tp=/\d/,ep=/^0x/i,np=/^[0-7]+$/,ip=/^\d+$/,rp=/^[\dA-Fa-f]+$/,cp=/[\0\t\n\r #%/:<>?@[\\\]^|]/,lp=/[\0\t\n\r #/:<>?@[\\\]^|]/,op=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,ap=/[\t\n\r]/g,up=function(t,e){var n,i,r;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return Ob;if(!(n=sp(e.slice(1,-1))))return Ob;t.host=n}else if(Xp(t)){if(e=function(t){var e,n,i=[],r=t.toLowerCase().replace(cb,".").split(".");for(e=0;e<r.length;e++)n=r[e],i.push(rb.test(n)?"xn--"+sb(n):n);return i.join(".")}(e),cp.test(e))return Ob;if(null===(n=dp(e)))return Ob;t.host=n}else{if(lp.test(e))return Ob;for(n="",i=yi(e),r=0;r<i.length;r++)n+=yp(i[r],hp);t.host=n}},dp=function(t){var e,n,i,r,c,l,o,a=t.split(".");if(a.length&&""==a[a.length-1]&&a.pop(),(e=a.length)>4)return t;for(n=[],i=0;i<e;i++){if(""==(r=a[i]))return t;if(c=10,r.length>1&&"0"==r.charAt(0)&&(c=ep.test(r)?16:8,r=r.slice(8==c?1:2)),""===r)l=0;else{if(!(10==c?ip:8==c?np:rp).test(r))return t;l=parseInt(r,c)}n.push(l)}for(i=0;i<e;i++)if(l=n[i],i==e-1){if(l>=Db(256,5-e))return null}else if(l>255)return null;for(o=n.pop(),i=0;i<n.length;i++)o+=n[i]*Db(256,3-i);return o},sp=function(t){var e,n,i,r,c,l,o,a=[0,0,0,0,0,0,0,0],u=0,d=null,s=0,m=function(){return t.charAt(s)};if(":"==m()){if(":"!=t.charAt(1))return;s+=2,d=++u}for(;m();){if(8==u)return;if(":"!=m()){for(e=n=0;n<4&&rp.test(m());)e=16*e+parseInt(m(),16),s++,n++;if("."==m()){if(0==n)return;if(s-=n,u>6)return;for(i=0;m();){if(r=null,i>0){if(!("."==m()&&i<4))return;s++}if(!tp.test(m()))return;for(;tp.test(m());){if(c=parseInt(m(),10),null===r)r=c;else{if(0==r)return;r=10*r+c}if(r>255)return;s++}a[u]=256*a[u]+r,2!=++i&&4!=i||u++}if(4!=i)return;break}if(":"==m()){if(s++,!m())return}else if(m())return;a[u++]=e}else{if(null!==d)return;s++,d=++u}}if(null!==d)for(l=u-d,u=7;0!=u&&l>0;)o=a[u],a[u--]=a[d+l-1],a[d+--l]=o;else if(8!=u)return;return a},mp=function(t){var e,n,i,r;if("number"==typeof t){for(e=[],n=0;n<4;n++)e.unshift(t%256),t=Qb(t/256);return e.join(".")}if("object"==o(t)){for(e="",i=function(t){for(var e=null,n=1,i=null,r=0,c=0;c<8;c++)0!==t[c]?(r>n&&(e=i,n=r),i=null,r=0):(null===i&&(i=c),++r);return r>n&&(e=i,n=r),e}(t),n=0;n<8;n++)r&&0===t[n]||(r&&(r=!1),i===n?(e+=n?":":"::",r=!0):(e+=t[n].toString(16),n<7&&(e+=":")));return"["+e+"]"}return t},hp={},Zp=ia({},hp,{" ":1,'"':1,"<":1,">":1,"`":1}),bp=ia({},Zp,{"#":1,"?":1,"{":1,"}":1}),pp=ia({},bp,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),yp=function(t,e){var n=zb(t,0);return n>32&&n<127&&!P(e,t)?t:encodeURIComponent(t)},Ip={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Xp=function(t){return P(Ip,t.scheme)},Gp=function(t){return""!=t.username||""!=t.password},gp=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},fp=function(t,e){var n;return 2==t.length&&qb.test(t.charAt(0))&&(":"==(n=t.charAt(1))||!e&&"|"==n)},Vp=function(t){var e;return t.length>1&&fp(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},Wp=function(t){var e=t.path,n=e.length;!n||"file"==t.scheme&&1==n&&fp(e[0],!0)||e.pop()},vp=function(t){return"."===t||"%2e"===t.toLowerCase()},Sp={},Cp={},Yp={},Rp={},Kp={},Lp={},Jp={},xp={},Np={},Hp={},kp={},Up={},wp={},Tp={},Fp={},zp={},jp={},Bp={},Mp={},Ap={},Pp={},Qp=function(t,e,n,i){var r,c,l,o,a,u=n||Sp,d=0,s="",m=!1,h=!1,Z=!1;for(n||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(op,"")),e=e.replace(ap,""),r=yi(e);d<=r.length;){switch(c=r[d],u){case Sp:if(!c||!qb.test(c)){if(n)return Eb;u=Yp;continue}s+=c.toLowerCase(),u=Cp;break;case Cp:if(c&&($b.test(c)||"+"==c||"-"==c||"."==c))s+=c.toLowerCase();else{if(":"!=c){if(n)return Eb;s="",u=Yp,d=0;continue}if(n&&(Xp(t)!=P(Ip,s)||"file"==s&&(Gp(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=s,n)return void(Xp(t)&&Ip[t.scheme]==t.port&&(t.port=null));s="","file"==t.scheme?u=Tp:Xp(t)&&i&&i.scheme==t.scheme?u=Rp:Xp(t)?u=xp:"/"==r[d+1]?(u=Kp,d++):(t.cannotBeABaseURL=!0,t.path.push(""),u=Mp)}break;case Yp:if(!i||i.cannotBeABaseURL&&"#"!=c)return Eb;if(i.cannotBeABaseURL&&"#"==c){t.scheme=i.scheme,t.path=i.path.slice(),t.query=i.query,t.fragment="",t.cannotBeABaseURL=!0,u=Pp;break}u="file"==i.scheme?Tp:Lp;continue;case Rp:if("/"!=c||"/"!=r[d+1]){u=Lp;continue}u=Np,d++;break;case Kp:if("/"==c){u=Hp;break}u=Bp;continue;case Lp:if(t.scheme=i.scheme,c==Tb)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query;else if("/"==c||"\\"==c&&Xp(t))u=Jp;else if("?"==c)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query="",u=Ap;else{if("#"!=c){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.path.pop(),u=Bp;continue}t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Pp}break;case Jp:if(!Xp(t)||"/"!=c&&"\\"!=c){if("/"!=c){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,u=Bp;continue}u=Hp}else u=Np;break;case xp:if(u=Np,"/"!=c||"/"!=s.charAt(d+1))continue;d++;break;case Np:if("/"!=c&&"\\"!=c){u=Hp;continue}break;case Hp:if("@"==c){m&&(s="%40"+s),m=!0,l=yi(s);for(var b=0;b<l.length;b++){var p=l[b];if(":"!=p||Z){var y=yp(p,pp);Z?t.password+=y:t.username+=y}else Z=!0}s=""}else if(c==Tb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)){if(m&&""==s)return"Invalid authority";d-=yi(s).length+1,s="",u=kp}else s+=c;break;case kp:case Up:if(n&&"file"==t.scheme){u=zp;continue}if(":"!=c||h){if(c==Tb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)){if(Xp(t)&&""==s)return Ob;if(n&&""==s&&(Gp(t)||null!==t.port))return;if(o=up(t,s))return o;if(s="",u=jp,n)return;continue}"["==c?h=!0:"]"==c&&(h=!1),s+=c}else{if(""==s)return Ob;if(o=up(t,s))return o;if(s="",u=wp,n==Up)return}break;case wp:if(!tp.test(c)){if(c==Tb||"/"==c||"?"==c||"#"==c||"\\"==c&&Xp(t)||n){if(""!=s){var I=parseInt(s,10);if(I>65535)return _b;t.port=Xp(t)&&I===Ip[t.scheme]?null:I,s=""}if(n)return;u=jp;continue}return _b}s+=c;break;case Tp:if(t.scheme="file","/"==c||"\\"==c)u=Fp;else{if(!i||"file"!=i.scheme){u=Bp;continue}if(c==Tb)t.host=i.host,t.path=i.path.slice(),t.query=i.query;else if("?"==c)t.host=i.host,t.path=i.path.slice(),t.query="",u=Ap;else{if("#"!=c){Vp(r.slice(d).join(""))||(t.host=i.host,t.path=i.path.slice(),Wp(t)),u=Bp;continue}t.host=i.host,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Pp}}break;case Fp:if("/"==c||"\\"==c){u=zp;break}i&&"file"==i.scheme&&!Vp(r.slice(d).join(""))&&(fp(i.path[0],!0)?t.path.push(i.path[0]):t.host=i.host),u=Bp;continue;case zp:if(c==Tb||"/"==c||"\\"==c||"?"==c||"#"==c){if(!n&&fp(s))u=Bp;else if(""==s){if(t.host="",n)return;u=jp}else{if(o=up(t,s))return o;if("localhost"==t.host&&(t.host=""),n)return;s="",u=jp}continue}s+=c;break;case jp:if(Xp(t)){if(u=Bp,"/"!=c&&"\\"!=c)continue}else if(n||"?"!=c)if(n||"#"!=c){if(c!=Tb&&(u=Bp,"/"!=c))continue}else t.fragment="",u=Pp;else t.query="",u=Ap;break;case Bp:if(c==Tb||"/"==c||"\\"==c&&Xp(t)||!n&&("?"==c||"#"==c)){if(".."===(a=(a=s).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?(Wp(t),"/"==c||"\\"==c&&Xp(t)||t.path.push("")):vp(s)?"/"==c||"\\"==c&&Xp(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&fp(s)&&(t.host&&(t.host=""),s=s.charAt(0)+":"),t.path.push(s)),s="","file"==t.scheme&&(c==Tb||"?"==c||"#"==c))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==c?(t.query="",u=Ap):"#"==c&&(t.fragment="",u=Pp)}else s+=yp(c,bp);break;case Mp:"?"==c?(t.query="",u=Ap):"#"==c?(t.fragment="",u=Pp):c!=Tb&&(t.path[0]+=yp(c,hp));break;case Ap:n||"#"!=c?c!=Tb&&("'"==c&&Xp(t)?t.query+="%27":t.query+="#"==c?"%23":yp(c,hp)):(t.fragment="",u=Pp);break;case Pp:c!=Tb&&(t.fragment+=yp(c,Zp))}d++}},Dp=function(t){var e,n,i=qr(this,Dp,"URL"),r=arguments.length>1?arguments[1]:void 0,c=Xe(t),l=Ab(i,{type:"URL"});if(void 0!==r)if(r instanceof Dp)e=Pb(r);else if(n=Qp(e={},Xe(r)))throw TypeError(n);if(n=Qp(l,c,null,e))throw TypeError(n);var o=l.searchParams=new Bb,a=Mb(o);a.updateSearchParams(l.query),a.updateURL=function(){l.query=String(o)||null},s||(i.href=Op.call(i),i.origin=_p.call(i),i.protocol=qp.call(i),i.username=$p.call(i),i.password=ty.call(i),i.host=ey.call(i),i.hostname=ny.call(i),i.port=iy.call(i),i.pathname=ry.call(i),i.search=cy.call(i),i.searchParams=ly.call(i),i.hash=oy.call(i))},Ep=Dp.prototype,Op=function(){var t=Pb(this),e=t.scheme,n=t.username,i=t.password,r=t.host,c=t.port,l=t.path,o=t.query,a=t.fragment,u=e+":";return null!==r?(u+="//",Gp(t)&&(u+=n+(i?":"+i:"")+"@"),u+=mp(r),null!==c&&(u+=":"+c)):"file"==e&&(u+="//"),u+=t.cannotBeABaseURL?l[0]:l.length?"/"+l.join("/"):"",null!==o&&(u+="?"+o),null!==a&&(u+="#"+a),u},_p=function(){var t=Pb(this),e=t.scheme,n=t.port;if("blob"==e)try{return new Dp(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&Xp(t)?e+"://"+mp(t.host)+(null!==n?":"+n:""):"null"},qp=function(){return Pb(this).scheme+":"},$p=function(){return Pb(this).username},ty=function(){return Pb(this).password},ey=function(){var t=Pb(this),e=t.host,n=t.port;return null===e?"":null===n?mp(e):mp(e)+":"+n},ny=function(){var t=Pb(this).host;return null===t?"":mp(t)},iy=function(){var t=Pb(this).port;return null===t?"":String(t)},ry=function(){var t=Pb(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},cy=function(){var t=Pb(this).query;return t?"?"+t:""},ly=function(){return Pb(this).searchParams},oy=function(){var t=Pb(this).fragment;return t?"#"+t:""},ay=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(s&&ge(Ep,{href:ay(Op,(function(t){var e=Pb(this),n=Xe(t),i=Qp(e,n);if(i)throw TypeError(i);Mb(e.searchParams).updateSearchParams(e.query)})),origin:ay(_p),protocol:ay(qp,(function(t){var e=Pb(this);Qp(e,Xe(t)+":",Sp)})),username:ay($p,(function(t){var e=Pb(this),n=yi(Xe(t));if(!gp(e)){e.username="";for(var i=0;i<n.length;i++)e.username+=yp(n[i],pp)}})),password:ay(ty,(function(t){var e=Pb(this),n=yi(Xe(t));if(!gp(e)){e.password="";for(var i=0;i<n.length;i++)e.password+=yp(n[i],pp)}})),host:ay(ey,(function(t){var e=Pb(this);e.cannotBeABaseURL||Qp(e,Xe(t),kp)})),hostname:ay(ny,(function(t){var e=Pb(this);e.cannotBeABaseURL||Qp(e,Xe(t),Up)})),port:ay(iy,(function(t){var e=Pb(this);gp(e)||(""==(t=Xe(t))?e.port=null:Qp(e,t,wp))})),pathname:ay(ry,(function(t){var e=Pb(this);e.cannotBeABaseURL||(e.path=[],Qp(e,Xe(t),jp))})),search:ay(cy,(function(t){var e=Pb(this);""==(t=Xe(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",Qp(e,t,Ap)),Mb(e.searchParams).updateSearchParams(e.query)})),searchParams:ay(ly),hash:ay(oy,(function(t){var e=Pb(this);""!=(t=Xe(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",Qp(e,t,Pp)):e.fragment=null}))}),Ut(Ep,"toJSON",(function(){return Op.call(this)}),{enumerable:!0}),Ut(Ep,"toString",(function(){return Op.call(this)}),{enumerable:!0}),jb){var uy=jb.createObjectURL,dy=jb.revokeObjectURL;uy&&Ut(Dp,"createObjectURL",(function(t){return uy.apply(jb,arguments)})),dy&&Ut(Dp,"revokeObjectURL",(function(t){return dy.apply(jb,arguments)}))}Te(Dp,"URL"),se({global:!0,forced:!nb,sham:!s},{URL:Dp}),se({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}});var sy=i((function(t){var e=function(t){var e,n=Object.prototype,i=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,n){return t[e]=n}}function d(t,e,n,i){var r=e&&e.prototype instanceof y?e:y,c=Object.create(r.prototype),l=new R(i||[]);return c._invoke=function(t,e,n){var i=m;return function(r,c){if(i===Z)throw new Error("Generator is already running");if(i===b){if("throw"===r)throw c;return L()}for(n.method=r,n.arg=c;;){var l=n.delegate;if(l){var o=S(l,n);if(o){if(o===p)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===m)throw i=b,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=Z;var a=s(t,e,n);if("normal"===a.type){if(i=n.done?b:h,a.arg===p)continue;return{value:a.arg,done:n.done}}"throw"===a.type&&(i=b,n.method="throw",n.arg=a.arg)}}}(t,n,l),c}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=d;var m="suspendedStart",h="suspendedYield",Z="executing",b="completed",p={};function y(){}function I(){}function X(){}var G={};u(G,c,(function(){return this}));var g=Object.getPrototypeOf,f=g&&g(g(K([])));f&&f!==n&&i.call(f,c)&&(G=f);var V=X.prototype=y.prototype=Object.create(G);function W(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function v(t,e){function n(r,c,l,a){var u=s(t[r],t,c);if("throw"!==u.type){var d=u.arg,m=d.value;return m&&"object"===o(m)&&i.call(m,"__await")?e.resolve(m.__await).then((function(t){n("next",t,l,a)}),(function(t){n("throw",t,l,a)})):e.resolve(m).then((function(t){d.value=t,l(d)}),(function(t){return n("throw",t,l,a)}))}a(u.arg)}var r;this._invoke=function(t,i){function c(){return new e((function(e,r){n(t,i,e,r)}))}return r=r?r.then(c,c):c()}}function S(t,n){var i=t.iterator[n.method];if(i===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method))return p;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=s(i,t.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,p;var c=r.arg;return c?c.done?(n[t.resultName]=c.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,p):c:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,p)}function C(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 Y(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function R(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function K(t){if(t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,l=function n(){for(;++r<t.length;)if(i.call(t,r))return n.value=t[r],n.done=!1,n;return n.value=e,n.done=!0,n};return l.next=l}}return{next:L}}function L(){return{value:e,done:!0}}return I.prototype=X,u(V,"constructor",X),u(X,"constructor",I),I.displayName=u(X,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===I||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,X):(t.__proto__=X,u(t,a,"GeneratorFunction")),t.prototype=Object.create(V),t},t.awrap=function(t){return{__await:t}},W(v.prototype),u(v.prototype,l,(function(){return this})),t.AsyncIterator=v,t.async=function(e,n,i,r,c){void 0===c&&(c=Promise);var l=new v(d(e,n,i,r),c);return t.isGeneratorFunction(n)?l:l.next().then((function(t){return t.done?t.value:l.next()}))},W(V),u(V,a,"Generator"),u(V,c,(function(){return this})),u(V,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var i=e.pop();if(i in t)return n.value=i,n.done=!1,n}return n.done=!0,n}},t.values=K,R.prototype={constructor:R,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(Y),!t)for(var n in this)"t"===n.charAt(0)&&i.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(i,r){return o.type="throw",o.arg=t,n.next=i,r&&(n.method="next",n.arg=e),!!r}for(var c=this.tryEntries.length-1;c>=0;--c){var l=this.tryEntries[c],o=l.completion;if("root"===l.tryLoc)return r("end");if(l.tryLoc<=this.prev){var a=i.call(l,"catchLoc"),u=i.call(l,"finallyLoc");if(a&&u){if(this.prev<l.catchLoc)return r(l.catchLoc,!0);if(this.prev<l.finallyLoc)return r(l.finallyLoc)}else if(a){if(this.prev<l.catchLoc)return r(l.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<l.finallyLoc)return r(l.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var c=r;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var l=c?c.completion:{};return l.type=t,l.arg=e,c?(this.method="next",this.next=c.finallyLoc,p):this.complete(l)},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),p},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),Y(n),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;Y(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,i){return this.delegate={iterator:K(t),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=e}catch(t){"object"===("undefined"==typeof globalThis?"undefined":o(globalThis))?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}})),my=i((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.default=t.exports,t.exports.__esModule=!0})),hy=n(my),Zy=i((function(t){function e(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}t.exports=function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t},t.exports.default=t.exports,t.exports.__esModule=!0})),by=n(Zy),py=sy;function yy(t,e,n,i){return new(n||(n=Promise))((function(r,c){function l(t){try{a(i.next(t))}catch(t){c(t)}}function o(t){try{a(i.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}a((i=i.apply(t,e||[])).next())}))}var Iy=i((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i},t.exports.default=t.exports,t.exports.__esModule=!0})),Xy=i((function(t){t.exports=function(t){if(Array.isArray(t))return Iy(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),Gy=i((function(t){t.exports=function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),gy=i((function(t){t.exports=function(t,e){if(t){if("string"==typeof t)return Iy(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)?Iy(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0})),fy=i((function(t){t.exports=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.")},t.exports.default=t.exports,t.exports.__esModule=!0})),Vy=n(i((function(t){t.exports=function(t){return Xy(t)||Gy(t)||gy(t)||fy()},t.exports.default=t.exports,t.exports.__esModule=!0}))),Wy=i((function(t){t.exports=function(t){if(Array.isArray(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0})),vy=i((function(t){t.exports=function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,r,c=[],l=!0,o=!1;try{for(n=n.call(t);!(l=(i=n.next()).done)&&(c.push(i.value),!e||c.length!==e);l=!0);}catch(t){o=!0,r=t}finally{try{l||null==n.return||n.return()}finally{if(o)throw r}}return c}},t.exports.default=t.exports,t.exports.__esModule=!0})),Sy=i((function(t){t.exports=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.")},t.exports.default=t.exports,t.exports.__esModule=!0})),Cy=i((function(t){t.exports=function(t,e){return Wy(t)||vy(t,e)||gy(t,e)||Sy()},t.exports.default=t.exports,t.exports.__esModule=!0})),Yy=n(Cy),Ry=i((function(t){t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},t.exports.default=t.exports,t.exports.__esModule=!0})),Ky=n(Ry),Ly=i((function(t){function e(t,e,n,i,r,c,l){try{var o=t[c](l),a=o.value}catch(t){return void n(t)}o.done?e(a):Promise.resolve(a).then(i,r)}t.exports=function(t){return function(){var n=this,i=arguments;return new Promise((function(r,c){var l=t.apply(n,i);function o(t){e(l,r,c,o,a,"next",t)}function a(t){e(l,r,c,o,a,"throw",t)}o(void 0)}))}},t.exports.default=t.exports,t.exports.__esModule=!0})),Jy=n(Ly),xy=i((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Ny=n(xy),Hy=i((function(t){function e(n,i){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),ky=n(i((function(t){t.exports=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Hy(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Uy=i((function(t){var e=l.default;t.exports=function(t,n){if(n&&("object"===e(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return xy(t)},t.exports.default=t.exports,t.exports.__esModule=!0})),wy=n(Uy),Ty=i((function(t){function e(n){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Fy=n(Ty),zy=i((function(t){t.exports=function(t){return-1!==Function.toString.call(t).indexOf("[native code]")},t.exports.default=t.exports,t.exports.__esModule=!0})),jy=i((function(t){t.exports=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}},t.exports.default=t.exports,t.exports.__esModule=!0})),By=i((function(t){function e(n,i,r){return jy()?(t.exports=e=Reflect.construct,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,n){var i=[null];i.push.apply(i,e);var r=new(Function.bind.apply(t,i));return n&&Hy(r,n.prototype),r},t.exports.default=t.exports,t.exports.__esModule=!0),e.apply(null,arguments)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),My=i((function(t){function e(n){var i="function"==typeof Map?new Map:void 0;return t.exports=e=function(t){if(null===t||!zy(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==i){if(i.has(t))return i.get(t);i.set(t,e)}function e(){return By(t,arguments,Ty(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),Hy(e,t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ay=n(My),Py="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Qy=[],Dy=[],Ey="undefined"!=typeof Uint8Array?Uint8Array:Array,Oy=!1;function _y(){Oy=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)Qy[e]=t[e],Dy[t.charCodeAt(e)]=e;Dy["-".charCodeAt(0)]=62,Dy["_".charCodeAt(0)]=63}function qy(t,e,n){for(var i,r,c=[],l=e;l<n;l+=3)i=(t[l]<<16)+(t[l+1]<<8)+t[l+2],c.push(Qy[(r=i)>>18&63]+Qy[r>>12&63]+Qy[r>>6&63]+Qy[63&r]);return c.join("")}function $y(t){var e;Oy||_y();for(var n=t.length,i=n%3,r="",c=[],l=16383,o=0,a=n-i;o<a;o+=l)c.push(qy(t,o,o+l>a?a:o+l));return 1===i?(e=t[n-1],r+=Qy[e>>2],r+=Qy[e<<4&63],r+="=="):2===i&&(e=(t[n-2]<<8)+t[n-1],r+=Qy[e>>10],r+=Qy[e>>4&63],r+=Qy[e<<2&63],r+="="),c.push(r),c.join("")}function tI(t,e,n,i,r){var c,l,o=8*r-i-1,a=(1<<o)-1,u=a>>1,d=-7,s=n?r-1:0,m=n?-1:1,h=t[e+s];for(s+=m,c=h&(1<<-d)-1,h>>=-d,d+=o;d>0;c=256*c+t[e+s],s+=m,d-=8);for(l=c&(1<<-d)-1,c>>=-d,d+=i;d>0;l=256*l+t[e+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===a)return l?NaN:1/0*(h?-1:1);l+=Math.pow(2,i),c-=u}return(h?-1:1)*l*Math.pow(2,c-i)}function eI(t,e,n,i,r,c){var l,o,a,u=8*c-r-1,d=(1<<u)-1,s=d>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:c-1,Z=i?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,l=d):(l=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-l))<1&&(l--,a*=2),(e+=l+s>=1?m/a:m*Math.pow(2,1-s))*a>=2&&(l++,a/=2),l+s>=d?(o=0,l=d):l+s>=1?(o=(e*a-1)*Math.pow(2,r),l+=s):(o=e*Math.pow(2,s-1)*Math.pow(2,r),l=0));r>=8;t[n+h]=255&o,h+=Z,o/=256,r-=8);for(l=l<<r|o,u+=r;u>0;t[n+h]=255&l,h+=Z,l/=256,u-=8);t[n+h-Z]|=128*b}var nI={}.toString,iI=Array.isArray||function(t){return"[object Array]"==nI.call(t)};function rI(){return lI.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function cI(t,e){if(rI()<e)throw new RangeError("Invalid typed array length");return lI.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=lI.prototype:(null===t&&(t=new lI(e)),t.length=e),t}function lI(t,e,n){if(!(lI.TYPED_ARRAY_SUPPORT||this instanceof lI))return new lI(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return uI(this,t)}return oI(this,t,e,n)}function oI(t,e,n,i){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,i){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===i?new Uint8Array(e):void 0===i?new Uint8Array(e,n):new Uint8Array(e,n,i);lI.TYPED_ARRAY_SUPPORT?(t=e).__proto__=lI.prototype:t=dI(t,e);return t}(t,e,n,i):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!lI.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|hI(e,n),r=(t=cI(t,i)).write(e,n);r!==i&&(t=t.slice(0,r));return t}(t,e,n):function(t,e){if(mI(e)){var n=0|sI(e.length);return 0===(t=cI(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(i=e.length)!=i?cI(t,0):dI(t,e);if("Buffer"===e.type&&iI(e.data))return dI(t,e.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function aI(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function uI(t,e){if(aI(e),t=cI(t,e<0?0:0|sI(e)),!lI.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function dI(t,e){var n=e.length<0?0:0|sI(e.length);t=cI(t,n);for(var i=0;i<n;i+=1)t[i]=255&e[i];return t}function sI(t){if(t>=rI())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+rI().toString(16)+" bytes");return 0|t}function mI(t){return!(null==t||!t._isBuffer)}function hI(t,e){if(mI(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return FI(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return zI(t).length;default:if(i)return FI(t).length;e=(""+e).toLowerCase(),i=!0}}function ZI(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return RI(this,e,n);case"utf8":case"utf-8":return vI(this,e,n);case"ascii":return CI(this,e,n);case"latin1":case"binary":return YI(this,e,n);case"base64":return WI(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return KI(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function bI(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function pI(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=lI.from(e,i)),mI(e))return 0===e.length?-1:yI(t,e,n,i,r);if("number"==typeof e)return e&=255,lI.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):yI(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function yI(t,e,n,i,r){var c,l=1,o=t.length,a=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;l=2,o/=2,a/=2,n/=2}function u(t,e){return 1===l?t[e]:t.readUInt16BE(e*l)}if(r){var d=-1;for(c=n;c<o;c++)if(u(t,c)===u(e,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===a)return d*l}else-1!==d&&(c-=c-d),d=-1}else for(n+a>o&&(n=o-a),c=n;c>=0;c--){for(var s=!0,m=0;m<a;m++)if(u(t,c+m)!==u(e,m)){s=!1;break}if(s)return c}return-1}function II(t,e,n,i){n=Number(n)||0;var r=t.length-n;i?(i=Number(i))>r&&(i=r):i=r;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var l=0;l<i;++l){var o=parseInt(e.substr(2*l,2),16);if(isNaN(o))return l;t[n+l]=o}return l}function XI(t,e,n,i){return jI(FI(e,t.length-n),t,n,i)}function GI(t,e,n,i){return jI(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,i)}function gI(t,e,n,i){return GI(t,e,n,i)}function fI(t,e,n,i){return jI(zI(e),t,n,i)}function VI(t,e,n,i){return jI(function(t,e){for(var n,i,r,c=[],l=0;l<t.length&&!((e-=2)<0);++l)i=(n=t.charCodeAt(l))>>8,r=n%256,c.push(r),c.push(i);return c}(e,t.length-n),t,n,i)}function WI(t,e,n){return 0===e&&n===t.length?$y(t):$y(t.slice(e,n))}function vI(t,e,n){n=Math.min(t.length,n);for(var i=[],r=e;r<n;){var c,l,o,a,u=t[r],d=null,s=u>239?4:u>223?3:u>191?2:1;if(r+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=t[r+1]))&&(a=(31&u)<<6|63&c)>127&&(d=a);break;case 3:c=t[r+1],l=t[r+2],128==(192&c)&&128==(192&l)&&(a=(15&u)<<12|(63&c)<<6|63&l)>2047&&(a<55296||a>57343)&&(d=a);break;case 4:c=t[r+1],l=t[r+2],o=t[r+3],128==(192&c)&&128==(192&l)&&128==(192&o)&&(a=(15&u)<<18|(63&c)<<12|(63&l)<<6|63&o)>65535&&a<1114112&&(d=a)}null===d?(d=65533,s=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),r+=s}return function(t){var e=t.length;if(e<=SI)return String.fromCharCode.apply(String,t);var n="",i=0;for(;i<e;)n+=String.fromCharCode.apply(String,t.slice(i,i+=SI));return n}(i)}lI.TYPED_ARRAY_SUPPORT=void 0===Py.TYPED_ARRAY_SUPPORT||Py.TYPED_ARRAY_SUPPORT,lI.poolSize=8192,lI._augment=function(t){return t.__proto__=lI.prototype,t},lI.from=function(t,e,n){return oI(null,t,e,n)},lI.TYPED_ARRAY_SUPPORT&&(lI.prototype.__proto__=Uint8Array.prototype,lI.__proto__=Uint8Array),lI.alloc=function(t,e,n){return function(t,e,n,i){return aI(e),e<=0?cI(t,e):void 0!==n?"string"==typeof i?cI(t,e).fill(n,i):cI(t,e).fill(n):cI(t,e)}(null,t,e,n)},lI.allocUnsafe=function(t){return uI(null,t)},lI.allocUnsafeSlow=function(t){return uI(null,t)},lI.isBuffer=function(t){return null!=t&&(!!t._isBuffer||BI(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&BI(t.slice(0,0))}(t))},lI.compare=function(t,e){if(!mI(t)||!mI(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,i=e.length,r=0,c=Math.min(n,i);r<c;++r)if(t[r]!==e[r]){n=t[r],i=e[r];break}return n<i?-1:i<n?1:0},lI.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},lI.concat=function(t,e){if(!iI(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return lI.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var i=lI.allocUnsafe(e),r=0;for(n=0;n<t.length;++n){var c=t[n];if(!mI(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,r),r+=c.length}return i},lI.byteLength=hI,lI.prototype._isBuffer=!0,lI.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)bI(this,e,e+1);return this},lI.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)bI(this,e,e+3),bI(this,e+1,e+2);return this},lI.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)bI(this,e,e+7),bI(this,e+1,e+6),bI(this,e+2,e+5),bI(this,e+3,e+4);return this},lI.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?vI(this,0,t):ZI.apply(this,arguments)},lI.prototype.equals=function(t){if(!mI(t))throw new TypeError("Argument must be a Buffer");return this===t||0===lI.compare(this,t)},lI.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},lI.prototype.compare=function(t,e,n,i,r){if(!mI(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(r>>>=0)-(i>>>=0),l=(n>>>=0)-(e>>>=0),o=Math.min(c,l),a=this.slice(i,r),u=t.slice(e,n),d=0;d<o;++d)if(a[d]!==u[d]){c=a[d],l=u[d];break}return c<l?-1:l<c?1:0},lI.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},lI.prototype.indexOf=function(t,e,n){return pI(this,t,e,n,!0)},lI.prototype.lastIndexOf=function(t,e,n){return pI(this,t,e,n,!1)},lI.prototype.write=function(t,e,n,i){if(void 0===e)i="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)i=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return II(this,t,e,n);case"utf8":case"utf-8":return XI(this,t,e,n);case"ascii":return GI(this,t,e,n);case"latin1":case"binary":return gI(this,t,e,n);case"base64":return fI(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return VI(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},lI.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var SI=4096;function CI(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(127&t[r]);return i}function YI(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(t[r]);return i}function RI(t,e,n){var i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var r="",c=e;c<n;++c)r+=TI(t[c]);return r}function KI(t,e,n){for(var i=t.slice(e,n),r="",c=0;c<i.length;c+=2)r+=String.fromCharCode(i[c]+256*i[c+1]);return r}function LI(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function JI(t,e,n,i,r,c){if(!mI(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<c)throw new RangeError('"value" argument is out of bounds');if(n+i>t.length)throw new RangeError("Index out of range")}function xI(t,e,n,i){e<0&&(e=65535+e+1);for(var r=0,c=Math.min(t.length-n,2);r<c;++r)t[n+r]=(e&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function NI(t,e,n,i){e<0&&(e=4294967295+e+1);for(var r=0,c=Math.min(t.length-n,4);r<c;++r)t[n+r]=e>>>8*(i?r:3-r)&255}function HI(t,e,n,i,r,c){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function kI(t,e,n,i,r){return r||HI(t,0,n,4),eI(t,e,n,i,23,4),n+4}function UI(t,e,n,i,r){return r||HI(t,0,n,8),eI(t,e,n,i,52,8),n+8}lI.prototype.slice=function(t,e){var n,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e<t&&(e=t),lI.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=lI.prototype;else{var r=e-t;n=new lI(r,void 0);for(var c=0;c<r;++c)n[c]=this[c+t]}return n},lI.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i},lI.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t+--e],r=1;e>0&&(r*=256);)i+=this[t+--e]*r;return i},lI.prototype.readUInt8=function(t,e){return e||LI(t,1,this.length),this[t]},lI.prototype.readUInt16LE=function(t,e){return e||LI(t,2,this.length),this[t]|this[t+1]<<8},lI.prototype.readUInt16BE=function(t,e){return e||LI(t,2,this.length),this[t]<<8|this[t+1]},lI.prototype.readUInt32LE=function(t,e){return e||LI(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},lI.prototype.readUInt32BE=function(t,e){return e||LI(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},lI.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*e)),i},lI.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||LI(t,e,this.length);for(var i=e,r=1,c=this[t+--i];i>0&&(r*=256);)c+=this[t+--i]*r;return c>=(r*=128)&&(c-=Math.pow(2,8*e)),c},lI.prototype.readInt8=function(t,e){return e||LI(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},lI.prototype.readInt16LE=function(t,e){e||LI(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},lI.prototype.readInt16BE=function(t,e){e||LI(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},lI.prototype.readInt32LE=function(t,e){return e||LI(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},lI.prototype.readInt32BE=function(t,e){return e||LI(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},lI.prototype.readFloatLE=function(t,e){return e||LI(t,4,this.length),tI(this,t,!0,23,4)},lI.prototype.readFloatBE=function(t,e){return e||LI(t,4,this.length),tI(this,t,!1,23,4)},lI.prototype.readDoubleLE=function(t,e){return e||LI(t,8,this.length),tI(this,t,!0,52,8)},lI.prototype.readDoubleBE=function(t,e){return e||LI(t,8,this.length),tI(this,t,!1,52,8)},lI.prototype.writeUIntLE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||JI(this,t,e,n,Math.pow(2,8*n)-1,0);var r=1,c=0;for(this[e]=255&t;++c<n&&(r*=256);)this[e+c]=t/r&255;return e+n},lI.prototype.writeUIntBE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||JI(this,t,e,n,Math.pow(2,8*n)-1,0);var r=n-1,c=1;for(this[e+r]=255&t;--r>=0&&(c*=256);)this[e+r]=t/c&255;return e+n},lI.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,1,255,0),lI.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},lI.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,65535,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):xI(this,t,e,!0),e+2},lI.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,65535,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):xI(this,t,e,!1),e+2},lI.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,4294967295,0),lI.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):NI(this,t,e,!0),e+4},lI.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,4294967295,0),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):NI(this,t,e,!1),e+4},lI.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);JI(this,t,e,n,r-1,-r)}var c=0,l=1,o=0;for(this[e]=255&t;++c<n&&(l*=256);)t<0&&0===o&&0!==this[e+c-1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},lI.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);JI(this,t,e,n,r-1,-r)}var c=n-1,l=1,o=0;for(this[e+c]=255&t;--c>=0&&(l*=256);)t<0&&0===o&&0!==this[e+c+1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},lI.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,1,127,-128),lI.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},lI.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,32767,-32768),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):xI(this,t,e,!0),e+2},lI.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,2,32767,-32768),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):xI(this,t,e,!1),e+2},lI.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,2147483647,-2147483648),lI.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):NI(this,t,e,!0),e+4},lI.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||JI(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),lI.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):NI(this,t,e,!1),e+4},lI.prototype.writeFloatLE=function(t,e,n){return kI(this,t,e,!0,n)},lI.prototype.writeFloatBE=function(t,e,n){return kI(this,t,e,!1,n)},lI.prototype.writeDoubleLE=function(t,e,n){return UI(this,t,e,!0,n)},lI.prototype.writeDoubleBE=function(t,e,n){return UI(this,t,e,!1,n)},lI.prototype.copy=function(t,e,n,i){if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e<i-n&&(i=t.length-e+n);var r,c=i-n;if(this===t&&n<e&&e<i)for(r=c-1;r>=0;--r)t[r+e]=this[r+n];else if(c<1e3||!lI.TYPED_ARRAY_SUPPORT)for(r=0;r<c;++r)t[r+e]=this[r+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},lI.prototype.fill=function(t,e,n,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===t.length){var r=t.charCodeAt(0);r<256&&(t=r)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!lI.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var l=mI(t)?t:FI(new lI(t,i).toString()),o=l.length;for(c=0;c<n-e;++c)this[c+e]=l[c%o]}return this};var wI=/[^+\/0-9A-Za-z-_]/g;function TI(t){return t<16?"0"+t.toString(16):t.toString(16)}function FI(t,e){var n;e=e||1/0;for(var i=t.length,r=null,c=[],l=0;l<i;++l){if((n=t.charCodeAt(l))>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(l+1===i){(e-=3)>-1&&c.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&c.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function zI(t){return function(t){var e,n,i,r,c,l;Oy||_y();var o=t.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[o-2]?2:"="===t[o-1]?1:0,l=new Ey(3*o/4-c),i=c>0?o-4:o;var a=0;for(e=0,n=0;e<i;e+=4,n+=3)r=Dy[t.charCodeAt(e)]<<18|Dy[t.charCodeAt(e+1)]<<12|Dy[t.charCodeAt(e+2)]<<6|Dy[t.charCodeAt(e+3)],l[a++]=r>>16&255,l[a++]=r>>8&255,l[a++]=255&r;return 2===c?(r=Dy[t.charCodeAt(e)]<<2|Dy[t.charCodeAt(e+1)]>>4,l[a++]=255&r):1===c&&(r=Dy[t.charCodeAt(e)]<<10|Dy[t.charCodeAt(e+1)]<<4|Dy[t.charCodeAt(e+2)]>>2,l[a++]=r>>8&255,l[a++]=255&r),l}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(wI,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function jI(t,e,n,i){for(var r=0;r<i&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function BI(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var MI=function(t,e){return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];return t.apply(e,n)}},AI=Object.prototype.toString;function PI(t){return"[object Array]"===AI.call(t)}function QI(t){return void 0===t}function DI(t){return null!==t&&"object"===o(t)}function EI(t){if("[object Object]"!==AI.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function OI(t){return"[object Function]"===AI.call(t)}function _I(t,e){if(null!=t)if("object"!==o(t)&&(t=[t]),PI(t))for(var n=0,i=t.length;n<i;n++)e.call(null,t[n],n,t);else for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.call(null,t[r],r,t)}var qI={isArray:PI,isArrayBuffer:function(t){return"[object ArrayBuffer]"===AI.call(t)},isBuffer:function(t){return null!==t&&!QI(t)&&null!==t.constructor&&!QI(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:DI,isPlainObject:EI,isUndefined:QI,isDate:function(t){return"[object Date]"===AI.call(t)},isFile:function(t){return"[object File]"===AI.call(t)},isBlob:function(t){return"[object Blob]"===AI.call(t)},isFunction:OI,isStream:function(t){return DI(t)&&OI(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:_I,merge:function t(){var e={};function n(n,i){EI(e[i])&&EI(n)?e[i]=t(e[i],n):EI(n)?e[i]=t({},n):PI(n)?e[i]=n.slice():e[i]=n}for(var i=0,r=arguments.length;i<r;i++)_I(arguments[i],n);return e},extend:function(t,e,n){return _I(e,(function(e,i){t[i]=n&&"function"==typeof e?MI(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}};function $I(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var tX=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(qI.isURLSearchParams(e))i=e.toString();else{var r=[];qI.forEach(e,(function(t,e){null!=t&&(qI.isArray(t)?e+="[]":t=[t],qI.forEach(t,(function(t){qI.isDate(t)?t=t.toISOString():qI.isObject(t)&&(t=JSON.stringify(t)),r.push($I(e)+"="+$I(t))})))})),i=r.join("&")}if(i){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t};function eX(){this.handlers=[]}eX.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},eX.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},eX.prototype.forEach=function(t){qI.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var nX=eX;function iX(){throw new Error("setTimeout has not been defined")}function rX(){throw new Error("clearTimeout has not been defined")}var cX=iX,lX=rX;function oX(t){if(cX===setTimeout)return setTimeout(t,0);if((cX===iX||!cX)&&setTimeout)return cX=setTimeout,setTimeout(t,0);try{return cX(t,0)}catch(e){try{return cX.call(null,t,0)}catch(e){return cX.call(this,t,0)}}}"function"==typeof Py.setTimeout&&(cX=setTimeout),"function"==typeof Py.clearTimeout&&(lX=clearTimeout);var aX,uX=[],dX=!1,sX=-1;function mX(){dX&&aX&&(dX=!1,aX.length?uX=aX.concat(uX):sX=-1,uX.length&&hX())}function hX(){if(!dX){var t=oX(mX);dX=!0;for(var e=uX.length;e;){for(aX=uX,uX=[];++sX<e;)aX&&aX[sX].run();sX=-1,e=uX.length}aX=null,dX=!1,function(t){if(lX===clearTimeout)return clearTimeout(t);if((lX===rX||!lX)&&clearTimeout)return lX=clearTimeout,clearTimeout(t);try{lX(t)}catch(e){try{return lX.call(null,t)}catch(e){return lX.call(this,t)}}}(t)}}function ZX(t,e){this.fun=t,this.array=e}ZX.prototype.run=function(){this.fun.apply(null,this.array)};function bX(){}var pX=bX,yX=bX,IX=bX,XX=bX,GX=bX,gX=bX,fX=bX;var VX=Py.performance||{},WX=VX.now||VX.mozNow||VX.msNow||VX.oNow||VX.webkitNow||function(){return(new Date).getTime()};var vX=new Date;var SX={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];uX.push(new ZX(t,e)),1!==uX.length||dX||oX(hX)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:pX,addListener:yX,once:IX,off:XX,removeListener:GX,removeAllListeners:gX,emit:fX,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*WX.call(VX),n=Math.floor(e),i=Math.floor(e%1*1e9);return t&&(n-=t[0],(i-=t[1])<0&&(n--,i+=1e9)),[n,i]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-vX)/1e3}},CX=SX,YX=function(t,e){qI.forEach(t,(function(n,i){i!==e&&i.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[i])}))},RX=function(t,e,n,i,r){return t.config=e,n&&(t.code=n),t.request=i,t.response=r,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t},KX=function(t,e,n,i,r){var c=new Error(t);return RX(c,e,n,i,r)},LX=qI.isStandardBrowserEnv()?{write:function(t,e,n,i,r,c){var l=[];l.push(t+"="+encodeURIComponent(e)),qI.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),qI.isString(i)&&l.push("path="+i),qI.isString(r)&&l.push("domain="+r),!0===c&&l.push("secure"),document.cookie=l.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},JX=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],xX=qI.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var i=t;return e&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=qI.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0},NX=function(t){return new Promise((function(e,n){var i=t.data,r=t.headers,c=t.responseType;qI.isFormData(i)&&delete r["Content-Type"];var l=new XMLHttpRequest;if(t.auth){var o=t.auth.username||"",a=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";r.Authorization="Basic "+btoa(o+":"+a)}var u,d,s=(u=t.baseURL,d=t.url,u&&!/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(d)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(u,d):d);function m(){if(l){var i="getAllResponseHeaders"in l?function(t){var e,n,i,r={};return t?(qI.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=qI.trim(t.substr(0,i)).toLowerCase(),n=qI.trim(t.substr(i+1)),e){if(r[e]&&JX.indexOf(e)>=0)return;r[e]="set-cookie"===e?(r[e]?r[e]:[]).concat([n]):r[e]?r[e]+", "+n:n}})),r):r}(l.getAllResponseHeaders()):null,r={data:c&&"text"!==c&&"json"!==c?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:i,config:t,request:l};!function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(KX("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}(e,n,r),l=null}}if(l.open(t.method.toUpperCase(),tX(s,t.params,t.paramsSerializer),!0),l.timeout=t.timeout,"onloadend"in l?l.onloadend=m:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(m)},l.onabort=function(){l&&(n(KX("Request aborted",t,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(KX("Network Error",t,null,l)),l=null},l.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(KX(e,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},qI.isStandardBrowserEnv()){var h=(t.withCredentials||xX(s))&&t.xsrfCookieName?LX.read(t.xsrfCookieName):void 0;h&&(r[t.xsrfHeaderName]=h)}"setRequestHeader"in l&&qI.forEach(r,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete r[e]:l.setRequestHeader(e,t)})),qI.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),c&&"json"!==c&&(l.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&l.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){l&&(l.abort(),n(t),l=null)})),i||(i=null),l.send(i)}))},HX={"Content-Type":"application/x-www-form-urlencoded"};function kX(t,e){!qI.isUndefined(t)&&qI.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var UX,wX={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==CX&&"[object process]"===Object.prototype.toString.call(CX))&&(UX=NX),UX),transformRequest:[function(t,e){return YX(e,"Accept"),YX(e,"Content-Type"),qI.isFormData(t)||qI.isArrayBuffer(t)||qI.isBuffer(t)||qI.isStream(t)||qI.isFile(t)||qI.isBlob(t)?t:qI.isArrayBufferView(t)?t.buffer:qI.isURLSearchParams(t)?(kX(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):qI.isObject(t)||e&&"application/json"===e["Content-Type"]?(kX(e,"application/json"),function(t,e,n){if(qI.isString(t))try{return(e||JSON.parse)(t),qI.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,r=!n&&"json"===this.responseType;if(r||i&&qI.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw RX(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300}};wX.headers={common:{Accept:"application/json, text/plain, */*"}},qI.forEach(["delete","get","head"],(function(t){wX.headers[t]={}})),qI.forEach(["post","put","patch"],(function(t){wX.headers[t]=qI.merge(HX)}));var TX=wX,FX=function(t,e,n){var i=this||TX;return qI.forEach(n,(function(n){t=n.call(i,t,e)})),t},zX=function(t){return!(!t||!t.__CANCEL__)};function jX(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var BX=function(t){return jX(t),t.headers=t.headers||{},t.data=FX.call(t,t.data,t.headers,t.transformRequest),t.headers=qI.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),qI.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||TX.adapter)(t).then((function(e){return jX(t),e.data=FX.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return zX(e)||(jX(t),e&&e.response&&(e.response.data=FX.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},MX=function(t,e){e=e||{};var n={},i=["url","method","data"],r=["headers","auth","proxy","params"],c=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],l=["validateStatus"];function o(t,e){return qI.isPlainObject(t)&&qI.isPlainObject(e)?qI.merge(t,e):qI.isPlainObject(e)?qI.merge({},e):qI.isArray(e)?e.slice():e}function a(i){qI.isUndefined(e[i])?qI.isUndefined(t[i])||(n[i]=o(void 0,t[i])):n[i]=o(t[i],e[i])}qI.forEach(i,(function(t){qI.isUndefined(e[t])||(n[t]=o(void 0,e[t]))})),qI.forEach(r,a),qI.forEach(c,(function(i){qI.isUndefined(e[i])?qI.isUndefined(t[i])||(n[i]=o(void 0,t[i])):n[i]=o(void 0,e[i])})),qI.forEach(l,(function(i){i in e?n[i]=o(t[i],e[i]):i in t&&(n[i]=o(void 0,t[i]))}));var u=i.concat(r).concat(c).concat(l),d=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===u.indexOf(t)}));return qI.forEach(d,a),n},AX={name:"axios",version:"0.21.4",description:"Promise based HTTP client for the browser and node.js",main:"index.js",scripts:{test:"grunt test",start:"node ./sandbox/server.js",build:"NODE_ENV=production grunt build",preversion:"npm test",version:"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json",postversion:"git push && git push --tags",examples:"node ./examples/server.js",coveralls:"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",fix:"eslint --fix lib/**/*.js"},repository:{type:"git",url:"https://github.com/axios/axios.git"},keywords:["xhr","http","ajax","promise","node"],author:"Matt Zabriskie",license:"MIT",bugs:{url:"https://github.com/axios/axios/issues"},homepage:"https://axios-http.com",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"},browser:{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},jsdelivr:"dist/axios.min.js",unpkg:"dist/axios.min.js",typings:"./index.d.ts",dependencies:{"follow-redirects":"^1.14.0"},bundlesize:[{path:"./dist/axios.min.js",threshold:"5kB"}],_resolved:"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",_integrity:"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",_from:"axios@0.21.4"},PX={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){PX[t]=function(n){return o(n)===t||"a"+(e<1?"n ":" ")+t}}));var QX={},DX=AX.version.split(".");function EX(t,e){for(var n=e?e.split("."):DX,i=t.split("."),r=0;r<3;r++){if(n[r]>i[r])return!0;if(n[r]<i[r])return!1}return!1}PX.transitional=function(t,e,n){var i=e&&EX(e);function r(t,e){return"[Axios v"+AX.version+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,c,l){if(!1===t)throw new Error(r(c," has been removed in "+e));return i&&!QX[c]&&(QX[c]=!0,console.warn(r(c," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,c,l)}};var OX={isOlderVersion:EX,assertOptions:function(t,e,n){if("object"!==o(t))throw new TypeError("options must be an object");for(var i=Object.keys(t),r=i.length;r-- >0;){var c=i[r],l=e[c];if(l){var a=t[c],u=void 0===a||l(a,c,t);if(!0!==u)throw new TypeError("option "+c+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:PX},_X=OX.validators;function qX(t){this.defaults=t,this.interceptors={request:new nX,response:new nX}}qX.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=MX(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&OX.assertOptions(e,{silentJSONParsing:_X.transitional(_X.boolean,"1.0.0"),forcedJSONParsing:_X.transitional(_X.boolean,"1.0.0"),clarifyTimeoutError:_X.transitional(_X.boolean,"1.0.0")},!1);var n=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var r,c=[];if(this.interceptors.response.forEach((function(t){c.push(t.fulfilled,t.rejected)})),!i){var l=[BX,void 0];for(Array.prototype.unshift.apply(l,n),l=l.concat(c),r=Promise.resolve(t);l.length;)r=r.then(l.shift(),l.shift());return r}for(var o=t;n.length;){var a=n.shift(),u=n.shift();try{o=a(o)}catch(t){u(t);break}}try{r=BX(o)}catch(t){return Promise.reject(t)}for(;c.length;)r=r.then(c.shift(),c.shift());return r},qX.prototype.getUri=function(t){return t=MX(this.defaults,t),tX(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},qI.forEach(["delete","get","head","options"],(function(t){qX.prototype[t]=function(e,n){return this.request(MX(n||{},{method:t,url:e,data:(n||{}).data}))}})),qI.forEach(["post","put","patch"],(function(t){qX.prototype[t]=function(e,n,i){return this.request(MX(i||{},{method:t,url:e,data:n}))}}));var $X=qX;function tG(t){this.message=t}tG.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},tG.prototype.__CANCEL__=!0;var eG=tG;function nG(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new eG(t),e(n.reason))}))}nG.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},nG.source=function(){var t,e=new nG((function(e){t=e}));return{token:e,cancel:t}};var iG=nG;function rG(t){var e=new $X(t),n=MI($X.prototype.request,e);return qI.extend(n,$X.prototype,e),qI.extend(n,e),n}var cG=rG(TX);cG.Axios=$X,cG.create=function(t){return rG(MX(cG.defaults,t))},cG.Cancel=eG,cG.CancelToken=iG,cG.isCancel=zX,cG.all=function(t){return Promise.all(t)},cG.spread=function(t){return function(e){return t.apply(null,e)}},cG.isAxiosError=function(t){return"object"===o(t)&&!0===t.isAxiosError};var lG=cG,oG=cG;lG.default=oG;var aG,uG=lG;function dG(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return sG(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sG(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}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 c,l=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){o=!0,c=t},f:function(){try{l||null==n.return||n.return()}finally{if(o)throw c}}}}function sG(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function mG(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function hG(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mG(Object(n),!0).forEach((function(e){Ky(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mG(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ZG(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}
2
2
  /*! *****************************************************************************
3
3
  Copyright (c) Microsoft Corporation.
4
4
 
@@ -12,7 +12,7 @@
12
12
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return Ty(this,n)}}function bG(t,e,n,i){return new(n||(n=Promise))((function(r,c){function l(t){try{a(i.next(t))}catch(t){c(t)}}function o(t){try{a(i.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}a((i=i.apply(t,e||[])).next())}))}t.ResponseMode=void 0,(aG=t.ResponseMode||(t.ResponseMode={})).formPost="form_post",aG.query="query";t.Stores=void 0,function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(t.Stores||(t.Stores={}));var pG="refresh_token_timer",yG="pkce_code_verifier",IG="code",XG="session_state",GG="sign_out_url",gG=function(t){ky(n,t);var e=ZG(n);function n(t,i,r,c,l,o){var a;return hy(this,n),(a=e.call(this,null!=c?c:null==o?void 0:o.message)).name=a.constructor.name,a.code=t,a.file=i,a.method=r,a.description=l,a.error=o,Object.setPrototypeOf(Ny(a),(this instanceof n?this.constructor:void 0).prototype),a}return n}(Ay(Error)),fG=function(t){ky(n,t);var e=ZG(n);function n(t,i,r,c,l,o,a,u,d){var s;return hy(this,n),(s=e.call(this,t,i,r,c,l)).name=s.constructor.name,s.code=t,s.file=i,s.method=r,s.description=l,s.networkErrorCode=o,s.networkErrorMessage=a,s.status=u,s.networkErrorData=d,s}return n}(gG),VG="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==Py?Py:"undefined"!=typeof self?self:{};function WG(t,e,n){return t(n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}var vG=void 0!==Py?Py:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},SG=[],CG=[],YG="undefined"!=typeof Uint8Array?Uint8Array:Array,RG=!1;function KG(){RG=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)SG[e]=t[e],CG[t.charCodeAt(e)]=e;CG["-".charCodeAt(0)]=62,CG["_".charCodeAt(0)]=63}function LG(t,e,n){for(var i,r,c=[],l=e;l<n;l+=3)i=(t[l]<<16)+(t[l+1]<<8)+t[l+2],c.push(SG[(r=i)>>18&63]+SG[r>>12&63]+SG[r>>6&63]+SG[63&r]);return c.join("")}function JG(t){var e;RG||KG();for(var n=t.length,i=n%3,r="",c=[],l=16383,o=0,a=n-i;o<a;o+=l)c.push(LG(t,o,o+l>a?a:o+l));return 1===i?(e=t[n-1],r+=SG[e>>2],r+=SG[e<<4&63],r+="=="):2===i&&(e=(t[n-2]<<8)+t[n-1],r+=SG[e>>10],r+=SG[e>>4&63],r+=SG[e<<2&63],r+="="),c.push(r),c.join("")}function xG(t,e,n,i,r){var c,l,o=8*r-i-1,a=(1<<o)-1,u=a>>1,d=-7,s=n?r-1:0,m=n?-1:1,h=t[e+s];for(s+=m,c=h&(1<<-d)-1,h>>=-d,d+=o;d>0;c=256*c+t[e+s],s+=m,d-=8);for(l=c&(1<<-d)-1,c>>=-d,d+=i;d>0;l=256*l+t[e+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===a)return l?NaN:1/0*(h?-1:1);l+=Math.pow(2,i),c-=u}return(h?-1:1)*l*Math.pow(2,c-i)}function NG(t,e,n,i,r,c){var l,o,a,u=8*c-r-1,d=(1<<u)-1,s=d>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:c-1,Z=i?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,l=d):(l=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-l))<1&&(l--,a*=2),(e+=l+s>=1?m/a:m*Math.pow(2,1-s))*a>=2&&(l++,a/=2),l+s>=d?(o=0,l=d):l+s>=1?(o=(e*a-1)*Math.pow(2,r),l+=s):(o=e*Math.pow(2,s-1)*Math.pow(2,r),l=0));r>=8;t[n+h]=255&o,h+=Z,o/=256,r-=8);for(l=l<<r|o,u+=r;u>0;t[n+h]=255&l,h+=Z,l/=256,u-=8);t[n+h-Z]|=128*b}var HG={}.toString,kG=Array.isArray||function(t){return"[object Array]"==HG.call(t)};FG.TYPED_ARRAY_SUPPORT=void 0===vG.TYPED_ARRAY_SUPPORT||vG.TYPED_ARRAY_SUPPORT;var UG=TG();function TG(){return FG.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function wG(t,e){if(TG()<e)throw new RangeError("Invalid typed array length");return FG.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=FG.prototype:(null===t&&(t=new FG(e)),t.length=e),t}function FG(t,e,n){if(!(FG.TYPED_ARRAY_SUPPORT||this instanceof FG))return new FG(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return BG(this,t)}return zG(this,t,e,n)}function zG(t,e,n,i){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,i){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===i?new Uint8Array(e):void 0===i?new Uint8Array(e,n):new Uint8Array(e,n,i),FG.TYPED_ARRAY_SUPPORT?(t=e).__proto__=FG.prototype:t=MG(t,e),t}(t,e,n,i):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!FG.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|QG(e,n),r=(t=wG(t,i)).write(e,n);return r!==i&&(t=t.slice(0,r)),t}(t,e,n):function(t,e){if(PG(e)){var n=0|AG(e.length);return 0===(t=wG(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(i=e.length)!=i?wG(t,0):MG(t,e);if("Buffer"===e.type&&kG(e.data))return MG(t,e.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function jG(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function BG(t,e){if(jG(e),t=wG(t,e<0?0:0|AG(e)),!FG.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function MG(t,e){var n=e.length<0?0:0|AG(e.length);t=wG(t,n);for(var i=0;i<n;i+=1)t[i]=255&e[i];return t}function AG(t){if(t>=TG())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+TG().toString(16)+" bytes");return 0|t}function PG(t){return!(null==t||!t._isBuffer)}function QG(t,e){if(PG(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Xg(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Gg(t).length;default:if(i)return Xg(t).length;e=(""+e).toLowerCase(),i=!0}}function DG(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return ag(this,e,n);case"utf8":case"utf-8":return cg(this,e,n);case"ascii":return lg(this,e,n);case"latin1":case"binary":return og(this,e,n);case"base64":return rg(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ug(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function EG(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function OG(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=FG.from(e,i)),PG(e))return 0===e.length?-1:_G(t,e,n,i,r);if("number"==typeof e)return e&=255,FG.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):_G(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function _G(t,e,n,i,r){var c,l=1,o=t.length,a=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;l=2,o/=2,a/=2,n/=2}function u(t,e){return 1===l?t[e]:t.readUInt16BE(e*l)}if(r){var d=-1;for(c=n;c<o;c++)if(u(t,c)===u(e,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===a)return d*l}else-1!==d&&(c-=c-d),d=-1}else for(n+a>o&&(n=o-a),c=n;c>=0;c--){for(var s=!0,m=0;m<a;m++)if(u(t,c+m)!==u(e,m)){s=!1;break}if(s)return c}return-1}function qG(t,e,n,i){n=Number(n)||0;var r=t.length-n;i?(i=Number(i))>r&&(i=r):i=r;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var l=0;l<i;++l){var o=parseInt(e.substr(2*l,2),16);if(isNaN(o))return l;t[n+l]=o}return l}function $G(t,e,n,i){return gg(Xg(e,t.length-n),t,n,i)}function tg(t,e,n,i){return gg(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,i)}function eg(t,e,n,i){return tg(t,e,n,i)}function ng(t,e,n,i){return gg(Gg(e),t,n,i)}function ig(t,e,n,i){return gg(function(t,e){for(var n,i,r,c=[],l=0;l<t.length&&!((e-=2)<0);++l)i=(n=t.charCodeAt(l))>>8,r=n%256,c.push(r),c.push(i);return c}(e,t.length-n),t,n,i)}function rg(t,e,n){return 0===e&&n===t.length?JG(t):JG(t.slice(e,n))}function cg(t,e,n){n=Math.min(t.length,n);for(var i=[],r=e;r<n;){var c,l,o,a,u=t[r],d=null,s=u>239?4:u>223?3:u>191?2:1;if(r+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=t[r+1]))&&(a=(31&u)<<6|63&c)>127&&(d=a);break;case 3:c=t[r+1],l=t[r+2],128==(192&c)&&128==(192&l)&&(a=(15&u)<<12|(63&c)<<6|63&l)>2047&&(a<55296||a>57343)&&(d=a);break;case 4:c=t[r+1],l=t[r+2],o=t[r+3],128==(192&c)&&128==(192&l)&&128==(192&o)&&(a=(15&u)<<18|(63&c)<<12|(63&l)<<6|63&o)>65535&&a<1114112&&(d=a)}null===d?(d=65533,s=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),r+=s}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var n="",i=0;i<e;)n+=String.fromCharCode.apply(String,t.slice(i,i+=4096));return n}(i)}function lg(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(127&t[r]);return i}function og(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(t[r]);return i}function ag(t,e,n){var i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var r="",c=e;c<n;++c)r+=Ig(t[c]);return r}function ug(t,e,n){for(var i=t.slice(e,n),r="",c=0;c<i.length;c+=2)r+=String.fromCharCode(i[c]+256*i[c+1]);return r}function dg(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function sg(t,e,n,i,r,c){if(!PG(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<c)throw new RangeError('"value" argument is out of bounds');if(n+i>t.length)throw new RangeError("Index out of range")}function mg(t,e,n,i){e<0&&(e=65535+e+1);for(var r=0,c=Math.min(t.length-n,2);r<c;++r)t[n+r]=(e&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function hg(t,e,n,i){e<0&&(e=4294967295+e+1);for(var r=0,c=Math.min(t.length-n,4);r<c;++r)t[n+r]=e>>>8*(i?r:3-r)&255}function Zg(t,e,n,i,r,c){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function bg(t,e,n,i,r){return r||Zg(t,0,n,4),NG(t,e,n,i,23,4),n+4}function pg(t,e,n,i,r){return r||Zg(t,0,n,8),NG(t,e,n,i,52,8),n+8}FG.poolSize=8192,FG._augment=function(t){return t.__proto__=FG.prototype,t},FG.from=function(t,e,n){return zG(null,t,e,n)},FG.TYPED_ARRAY_SUPPORT&&(FG.prototype.__proto__=Uint8Array.prototype,FG.__proto__=Uint8Array),FG.alloc=function(t,e,n){return function(t,e,n,i){return jG(e),e<=0?wG(t,e):void 0!==n?"string"==typeof i?wG(t,e).fill(n,i):wG(t,e).fill(n):wG(t,e)}(null,t,e,n)},FG.allocUnsafe=function(t){return BG(null,t)},FG.allocUnsafeSlow=function(t){return BG(null,t)},FG.isBuffer=fg,FG.compare=function(t,e){if(!PG(t)||!PG(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,i=e.length,r=0,c=Math.min(n,i);r<c;++r)if(t[r]!==e[r]){n=t[r],i=e[r];break}return n<i?-1:i<n?1:0},FG.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},FG.concat=function(t,e){if(!kG(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return FG.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var i=FG.allocUnsafe(e),r=0;for(n=0;n<t.length;++n){var c=t[n];if(!PG(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,r),r+=c.length}return i},FG.byteLength=QG,FG.prototype._isBuffer=!0,FG.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)EG(this,e,e+1);return this},FG.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)EG(this,e,e+3),EG(this,e+1,e+2);return this},FG.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)EG(this,e,e+7),EG(this,e+1,e+6),EG(this,e+2,e+5),EG(this,e+3,e+4);return this},FG.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?cg(this,0,t):DG.apply(this,arguments)},FG.prototype.equals=function(t){if(!PG(t))throw new TypeError("Argument must be a Buffer");return this===t||0===FG.compare(this,t)},FG.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},FG.prototype.compare=function(t,e,n,i,r){if(!PG(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(r>>>=0)-(i>>>=0),l=(n>>>=0)-(e>>>=0),o=Math.min(c,l),a=this.slice(i,r),u=t.slice(e,n),d=0;d<o;++d)if(a[d]!==u[d]){c=a[d],l=u[d];break}return c<l?-1:l<c?1:0},FG.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},FG.prototype.indexOf=function(t,e,n){return OG(this,t,e,n,!0)},FG.prototype.lastIndexOf=function(t,e,n){return OG(this,t,e,n,!1)},FG.prototype.write=function(t,e,n,i){if(void 0===e)i="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)i=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return qG(this,t,e,n);case"utf8":case"utf-8":return $G(this,t,e,n);case"ascii":return tg(this,t,e,n);case"latin1":case"binary":return eg(this,t,e,n);case"base64":return ng(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ig(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},FG.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},FG.prototype.slice=function(t,e){var n,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e<t&&(e=t),FG.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=FG.prototype;else{var r=e-t;n=new FG(r,void 0);for(var c=0;c<r;++c)n[c]=this[c+t]}return n},FG.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i},FG.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t+--e],r=1;e>0&&(r*=256);)i+=this[t+--e]*r;return i},FG.prototype.readUInt8=function(t,e){return e||dg(t,1,this.length),this[t]},FG.prototype.readUInt16LE=function(t,e){return e||dg(t,2,this.length),this[t]|this[t+1]<<8},FG.prototype.readUInt16BE=function(t,e){return e||dg(t,2,this.length),this[t]<<8|this[t+1]},FG.prototype.readUInt32LE=function(t,e){return e||dg(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},FG.prototype.readUInt32BE=function(t,e){return e||dg(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},FG.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*e)),i},FG.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=e,r=1,c=this[t+--i];i>0&&(r*=256);)c+=this[t+--i]*r;return c>=(r*=128)&&(c-=Math.pow(2,8*e)),c},FG.prototype.readInt8=function(t,e){return e||dg(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},FG.prototype.readInt16LE=function(t,e){e||dg(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},FG.prototype.readInt16BE=function(t,e){e||dg(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},FG.prototype.readInt32LE=function(t,e){return e||dg(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},FG.prototype.readInt32BE=function(t,e){return e||dg(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},FG.prototype.readFloatLE=function(t,e){return e||dg(t,4,this.length),xG(this,t,!0,23,4)},FG.prototype.readFloatBE=function(t,e){return e||dg(t,4,this.length),xG(this,t,!1,23,4)},FG.prototype.readDoubleLE=function(t,e){return e||dg(t,8,this.length),xG(this,t,!0,52,8)},FG.prototype.readDoubleBE=function(t,e){return e||dg(t,8,this.length),xG(this,t,!1,52,8)},FG.prototype.writeUIntLE=function(t,e,n,i){t=+t,e|=0,n|=0,i||sg(this,t,e,n,Math.pow(2,8*n)-1,0);var r=1,c=0;for(this[e]=255&t;++c<n&&(r*=256);)this[e+c]=t/r&255;return e+n},FG.prototype.writeUIntBE=function(t,e,n,i){t=+t,e|=0,n|=0,i||sg(this,t,e,n,Math.pow(2,8*n)-1,0);var r=n-1,c=1;for(this[e+r]=255&t;--r>=0&&(c*=256);)this[e+r]=t/c&255;return e+n},FG.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,1,255,0),FG.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},FG.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,65535,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):mg(this,t,e,!0),e+2},FG.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,65535,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):mg(this,t,e,!1),e+2},FG.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,4294967295,0),FG.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):hg(this,t,e,!0),e+4},FG.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,4294967295,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):hg(this,t,e,!1),e+4},FG.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);sg(this,t,e,n,r-1,-r)}var c=0,l=1,o=0;for(this[e]=255&t;++c<n&&(l*=256);)t<0&&0===o&&0!==this[e+c-1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},FG.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);sg(this,t,e,n,r-1,-r)}var c=n-1,l=1,o=0;for(this[e+c]=255&t;--c>=0&&(l*=256);)t<0&&0===o&&0!==this[e+c+1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},FG.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,1,127,-128),FG.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},FG.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,32767,-32768),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):mg(this,t,e,!0),e+2},FG.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,32767,-32768),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):mg(this,t,e,!1),e+2},FG.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,2147483647,-2147483648),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):hg(this,t,e,!0),e+4},FG.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):hg(this,t,e,!1),e+4},FG.prototype.writeFloatLE=function(t,e,n){return bg(this,t,e,!0,n)},FG.prototype.writeFloatBE=function(t,e,n){return bg(this,t,e,!1,n)},FG.prototype.writeDoubleLE=function(t,e,n){return pg(this,t,e,!0,n)},FG.prototype.writeDoubleBE=function(t,e,n){return pg(this,t,e,!1,n)},FG.prototype.copy=function(t,e,n,i){if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e<i-n&&(i=t.length-e+n);var r,c=i-n;if(this===t&&n<e&&e<i)for(r=c-1;r>=0;--r)t[r+e]=this[r+n];else if(c<1e3||!FG.TYPED_ARRAY_SUPPORT)for(r=0;r<c;++r)t[r+e]=this[r+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},FG.prototype.fill=function(t,e,n,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===t.length){var r=t.charCodeAt(0);r<256&&(t=r)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!FG.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var l=PG(t)?t:Xg(new FG(t,i).toString()),o=l.length;for(c=0;c<n-e;++c)this[c+e]=l[c%o]}return this};var yg=/[^+\/0-9A-Za-z-_]/g;function Ig(t){return t<16?"0"+t.toString(16):t.toString(16)}function Xg(t,e){var n;e=e||1/0;for(var i=t.length,r=null,c=[],l=0;l<i;++l){if((n=t.charCodeAt(l))>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(l+1===i){(e-=3)>-1&&c.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&c.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function Gg(t){return function(t){var e,n,i,r,c,l;RG||KG();var o=t.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[o-2]?2:"="===t[o-1]?1:0,l=new YG(3*o/4-c),i=c>0?o-4:o;var a=0;for(e=0,n=0;e<i;e+=4,n+=3)r=CG[t.charCodeAt(e)]<<18|CG[t.charCodeAt(e+1)]<<12|CG[t.charCodeAt(e+2)]<<6|CG[t.charCodeAt(e+3)],l[a++]=r>>16&255,l[a++]=r>>8&255,l[a++]=255&r;return 2===c?(r=CG[t.charCodeAt(e)]<<2|CG[t.charCodeAt(e+1)]>>4,l[a++]=255&r):1===c&&(r=CG[t.charCodeAt(e)]<<10|CG[t.charCodeAt(e+1)]<<4|CG[t.charCodeAt(e+2)]>>2,l[a++]=r>>8&255,l[a++]=255&r),l}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(yg,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function gg(t,e,n,i){for(var r=0;r<i&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function fg(t){return null!=t&&(!!t._isBuffer||Vg(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&Vg(t.slice(0,0))}(t))}function Vg(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Wg=Object.freeze({__proto__:null,Buffer:FG,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),FG.alloc(+t)},isBuffer:fg,kMaxLength:UG}),vg=WG((function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.length,n=e%4;if(!n)return t;var i=e,r=4-n,c=e+r,l=FG.alloc(c);for(l.write(t);r--;)l.write("=",i++);return l.toString()}})),Sg=WG((function(t,e){function n(t,e){return void 0===e&&(e="utf8"),FG.isBuffer(t)?r(t.toString("base64")):r(FG.from(t,e).toString("base64"))}function i(t){return t=t.toString(),vg.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function r(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}Object.defineProperty(e,"__esModule",{value:!0});var c=n;c.encode=n,c.decode=function(t,e){return void 0===e&&(e="utf8"),FG.from(i(t),"base64").toString(e)},c.toBase64=i,c.fromBase64=r,c.toBuffer=function(t){return FG.from(i(t),"base64")},e.default=c})),Cg=WG((function(t){t.exports=Sg.default,t.exports.default=t.exports})),Yg=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(WG((function(t){!function(e,n){var i={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,r,c){for(var l,o,a,u,d,s,m,h,Z,b,p,y,I;c>=64;){for(l=n[0],o=n[1],a=n[2],u=n[3],d=n[4],s=n[5],m=n[6],h=n[7],b=0;b<16;b++)p=r+4*b,t[b]=(255&i[p])<<24|(255&i[p+1])<<16|(255&i[p+2])<<8|255&i[p+3];for(b=16;b<64;b++)y=((Z=t[b-2])>>>17|Z<<15)^(Z>>>19|Z<<13)^Z>>>10,I=((Z=t[b-15])>>>7|Z<<25)^(Z>>>18|Z<<14)^Z>>>3,t[b]=(y+t[b-7]|0)+(I+t[b-16]|0);for(b=0;b<64;b++)y=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&s^~d&m)|0)+(h+(e[b]+t[b]|0)|0)|0,I=((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+(l&o^l&a^o&a)|0,h=m,m=s,s=d,d=u+y|0,u=a,a=o,o=l,l=y+I|0;n[0]+=l,n[1]+=o,n[2]+=a,n[3]+=u,n[4]+=d,n[5]+=s,n[6]+=m,n[7]+=h,r+=64,c-=64}return r}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,r=e/536870912|0,c=e<<3,l=e%64<56?64:128;this.buffer[i]=128;for(var o=i+1;o<l-8;o++)this.buffer[o]=0;this.buffer[l-8]=r>>>24&255,this.buffer[l-7]=r>>>16&255,this.buffer[l-6]=r>>>8&255,this.buffer[l-5]=r>>>0&255,this.buffer[l-4]=c>>>24&255,this.buffer[l-3]=c>>>16&255,this.buffer[l-2]=c>>>8&255,this.buffer[l-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,l),this.finished=!0}for(o=0;o<8;o++)t[4*o+0]=this.state[o]>>>24&255,t[4*o+1]=this.state[o]>>>16&255,t[4*o+2]=this.state[o]>>>8&255,t[4*o+3]=this.state[o]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var r=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function l(t,e){var n=new r(t).update(e),i=n.digest();return n.clean(),i}function o(t,e,n,i){var r=i[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=r,t.hash=c,t.default=c,t.hmac=l;var a=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=a),void 0===i&&(i=32);for(var c=new Uint8Array([1]),u=l(e,t),d=new r(u),s=new Uint8Array(d.digestLength),m=s.length,h=new Uint8Array(i),Z=0;Z<i;Z++)m===s.length&&(o(s,d,n,c),m=0),h[Z]=s[m++];return d.clean(),s.fill(0),c.fill(0),h},t.pbkdf2=function(t,e,n,i){for(var c=new r(t),l=c.digestLength,o=new Uint8Array(4),a=new Uint8Array(l),u=new Uint8Array(l),d=new Uint8Array(i),s=0;s*l<i;s++){var m=s+1;o[0]=m>>>24&255,o[1]=m>>>16&255,o[2]=m>>>8&255,o[3]=m>>>0&255,c.reset(),c.update(e),c.update(o),c.finish(u);for(var h=0;h<l;h++)a[h]=u[h];for(h=2;h<=n;h++){c.reset(),c.update(u).finish(u);for(var Z=0;Z<l;Z++)a[Z]^=u[Z]}for(h=0;h<l&&s*l+h<i;h++)d[s*l+h]=a[h]}for(s=0;s<l;s++)a[s]=u[s]=0;for(s=0;s<4;s++)o[s]=0;return c.clean(),d}}(i);var r=i.default;for(var c in i)r[c]=i[c];t.exports=r}()})));function Rg(){throw new Error("setTimeout has not been defined")}function Kg(){throw new Error("clearTimeout has not been defined")}var Lg=Rg,Jg=Kg;function xg(t){if(Lg===setTimeout)return setTimeout(t,0);if((Lg===Rg||!Lg)&&setTimeout)return Lg=setTimeout,setTimeout(t,0);try{return Lg(t,0)}catch(e){try{return Lg.call(null,t,0)}catch(e){return Lg.call(this,t,0)}}}"function"==typeof vG.setTimeout&&(Lg=setTimeout),"function"==typeof vG.clearTimeout&&(Jg=clearTimeout);var Ng,Hg=[],kg=!1,Ug=-1;function Tg(){kg&&Ng&&(kg=!1,Ng.length?Hg=Ng.concat(Hg):Ug=-1,Hg.length&&wg())}function wg(){if(!kg){var t=xg(Tg);kg=!0;for(var e=Hg.length;e;){for(Ng=Hg,Hg=[];++Ug<e;)Ng&&Ng[Ug].run();Ug=-1,e=Hg.length}Ng=null,kg=!1,function(t){if(Jg===clearTimeout)return clearTimeout(t);if((Jg===Kg||!Jg)&&clearTimeout)return Jg=clearTimeout,clearTimeout(t);try{Jg(t)}catch(e){try{return Jg.call(null,t)}catch(e){return Jg.call(this,t)}}}(t)}}function Fg(t,e){this.fun=t,this.array=e}Fg.prototype.run=function(){this.fun.apply(null,this.array)};var zg=vG.performance||{},jg=(zg.now||zg.mozNow||zg.msNow||zg.oNow||zg.webkitNow,new Date,function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];Hg.push(new Fg(t,e)),1!==Hg.length||kg||xg(wg)}),Bg=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})})),e}(Wg),Mg=WG((function(t,e){var n=Bg.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function r(t,e,i){return n(t,e,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=Bg:(i(Bg,e),e.Buffer=r),i(n,r),r.from=function(t,e,i){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,i)},r.alloc=function(t,e,i){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=n(t);return void 0!==e?"string"==typeof i?r.fill(e,i):r.fill(e):r.fill(0),r},r.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},r.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return Bg.SlowBuffer(t)}})),Ag=WG((function(t){var e=65536,n=Mg.Buffer,i=VG.crypto||VG.msCrypto;i&&i.getRandomValues?t.exports=function(t,r){if(t>4294967295)throw new RangeError("requested too many random bytes");var c=n.allocUnsafe(t);if(t>0)if(t>e)for(var l=0;l<t;l+=e)i.getRandomValues(c.slice(l,l+e));else i.getRandomValues(c);return"function"==typeof r?jg((function(){r(null,c)})):c}:t.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}})),Pg=new TextEncoder,Qg=new TextDecoder,Dg=function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;throw new Error("unable to locate global object")}(),Eg=function(t){var e=t;return e instanceof Uint8Array&&(e=Qg.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,""),new Uint8Array(Dg.atob(e).split("").map((function(t){return t.charCodeAt(0)})))},Og=function(t){ky(n,t);var e=ZG(n);function n(t){var i;return hy(this,n),(i=e.call(this,t)).code="ERR_JOSE_GENERIC",i.name=i.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(Ny(i),i.constructor),i}return n}(Ay(Error)),_g=function(t){ky(n,t);var e=ZG(n);function n(t){var i,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return hy(this,n),(i=e.call(this,t)).code="ERR_JWT_CLAIM_VALIDATION_FAILED",i.claim=r,i.reason=c,i}return n}(Og),qg=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_ALG_NOT_ALLOWED",t}return n}(Og),$g=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_NOT_SUPPORTED",t}return n}(Og),tf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_INVALID",t}return n}(Og),ef=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWT_INVALID",t}return n}(Og),nf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",t.message="signature verification failed",t}return n}(Og),rf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWT_EXPIRED",t}return n}(_g),cf=Dg.crypto;function lf(){if(!Dg.isSecureContext&&!Dg.crypto.subtle)throw new Og("Web Cryptography API is available only in Secure Contexts. See: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}var of=function(){var t=Jy(py.mark((function t(e){var n,i,r,c,l,o,a;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=function(t){var e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-".concat(t.alg.substr(-3))},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new $g("".concat(t.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-".concat(t.alg.substr(-3))},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(t.alg.substr(-3))},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(t.alg.substr(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":case"ES384":case"ES512":e={name:"ECDSA",namedCurve:t.crv},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;default:throw new $g('unsupported or invalid JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}(e),c=r.algorithm,l=r.keyUsages,o="jwk",a=hG({},e),t.abrupt("return",(delete a.alg,"PBKDF2"===c.name&&(o="raw",a=Eg(e.k)),lf(),cf.subtle.importKey(o,a,c,null!==(n=e.ext)&&void 0!==n&&n,null!==(i=e.key_ops)&&void 0!==i?i:l)));case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();function af(t){return!!t&&t.constructor===Object}function uf(t,e,n){return df.apply(this,arguments)}function df(){return df=Jy(py.mark((function t(e,n,i){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(af(e)){t.next=2;break}throw new TypeError("JWK must be an object");case 2:if(n||(n=e.alg),"string"==typeof n&&n){t.next=4;break}throw new TypeError('"alg" argument is required when "jwk.alg" is not present');case 4:t.t0=e.kty,t.next="oct"===t.t0?7:"RSA"===t.t0?10:"EC"===t.t0||"OKP"===t.t0?12:13;break;case 7:if("string"==typeof e.k&&e.k){t.next=9;break}throw new TypeError('missing "k" (Key Value) Parameter value');case 9:return t.abrupt("return",(null!=i||(i=!0!==e.ext),i?of(hG(hG({},e),{},{alg:n,ext:!1})):Eg(e.k)));case 10:if(void 0===e.oth){t.next=12;break}throw new $g('RSA JWK "oth" (Other Primes Info) Parameter value is unsupported');case 12:return t.abrupt("return",of(hG(hG({},e),{},{alg:n})));case 13:throw new $g('unsupported "kty" (Key Type) Parameter value');case 14:case"end":return t.stop()}}),t)}))),df.apply(this,arguments)}var sf=function(){var t=Jy(py.mark((function t(e,n,i,r){var c;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(lf(),!(n instanceof Uint8Array)){t.next=8;break}if(e.startsWith("HS")){t.next=3;break}throw new TypeError("symmetric keys are only applicable for HMAC-based algorithms");case 3:return t.next=5,cf.subtle.importKey("raw",n,{hash:"SHA-".concat(e.substr(-3)),name:"HMAC"},!1,["verify"]);case 5:c=t.sent,t.next=9;break;case 8:c=n;case 9:return t.abrupt("return",(function(t,e){if(t.startsWith("HS")){var n=parseInt(t.substr(-3),10),i=e.algorithm.length;if("number"!=typeof i||i<n)throw new TypeError("".concat(t," requires symmetric keys to be ").concat(n," bits or larger"))}if(t.startsWith("RS")||t.startsWith("PS")){var r=e.algorithm.modulusLength;if("number"!=typeof r||r<2048)throw new TypeError("".concat(t," requires key modulusLength to be 2048 bits or larger"))}}(e,c),cf.subtle.verify(function(t){switch(t){case"HS256":return{hash:"SHA-256",name:"HMAC"};case"HS384":return{hash:"SHA-384",name:"HMAC"};case"HS512":return{hash:"SHA-512",name:"HMAC"};case"PS256":return{hash:"SHA-256",name:"RSA-PSS",saltLength:32};case"PS384":return{hash:"SHA-384",name:"RSA-PSS",saltLength:48};case"PS512":return{hash:"SHA-512",name:"RSA-PSS",saltLength:64};case"RS256":return{hash:"SHA-256",name:"RSASSA-PKCS1-v1_5"};case"RS384":return{hash:"SHA-384",name:"RSASSA-PKCS1-v1_5"};case"RS512":return{hash:"SHA-512",name:"RSASSA-PKCS1-v1_5"};case"ES256":return{hash:"SHA-256",name:"ECDSA",namedCurve:"P-256"};case"ES384":return{hash:"SHA-384",name:"ECDSA",namedCurve:"P-384"};case"ES512":return{hash:"SHA-512",name:"ECDSA",namedCurve:"P-521"};default:throw new $g("alg ".concat(t," is unsupported either by JOSE or your javascript runtime"))}}(e),c,i,r)));case 10:case"end":return t.stop()}}),t)})));return function(e,n,i,r){return t.apply(this,arguments)}}(),mf=function(t,e,n,i){if(void 0!==i.crit&&void 0===n.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((function(t){return"string"!=typeof t||0===t.length})))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');var r,c=dG(n.crit);try{for(c.s();!(r=c.n()).done;){var l=r.value;if(!e.has(l))throw new $g('Extension Header Parameter "'.concat(l,'" is not supported by this implementation'));if(void 0===i[l])throw new t('Extension Header Parameter "'.concat(l,'" is missing'));if(e.get(l)&&void 0===n[l])throw new t('Extension Header Parameter "'.concat(l,'" MUST be integrity protected'))}}catch(t){c.e(t)}finally{c.f()}return new Set(n.crit)}.bind(void 0,tf,new Map([["b64",!0]])),hf=function(t,e){if(void 0!==e&&(!Array.isArray(e)||e.some((function(t){return"string"!=typeof t}))))throw new TypeError('"'.concat(t,'" option must be an array of strings'));if(e)return new Set(e)}.bind(void 0,"algorithms");function Zf(t,e,n){return bf.apply(this,arguments)}function bf(){return bf=Jy(py.mark((function t(e,n,i){var r,c,l,o,a,u,d,s,m,h;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(af(e)){t.next=2;break}throw new tf("Flattened JWS must be an object");case 2:if(void 0!==e.protected||void 0!==e.header){t.next=4;break}throw new tf('Flattened JWS must have either of the "protected" or "header" members');case 4:if(void 0===e.protected||"string"==typeof e.protected){t.next=6;break}throw new tf("JWS Protected Header incorrect type");case 6:if(void 0!==e.payload){t.next=8;break}throw new tf("JWS Payload missing");case 8:if("string"==typeof e.signature){t.next=10;break}throw new tf("JWS Signature missing or incorrect type");case 10:if(void 0===e.header||af(e.header)){t.next=12;break}throw new tf("JWS Unprotected Header incorrect type");case 12:if(r={},e.protected&&(c=Eg(e.protected),r=JSON.parse(Qg.decode(c))),function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i,r=e.filter(Boolean);if(0===r.length||1===r.length)return!0;var c,l=dG(r);try{for(l.s();!(c=l.n()).done;){var o=c.value,a=Object.keys(o);if(i&&0!==i.size){var u,d=dG(a);try{for(d.s();!(u=d.n()).done;){var s=u.value;if(i.has(s))return!1;i.add(s)}}catch(t){d.e(t)}finally{d.f()}}else i=new Set(a)}}catch(t){l.e(t)}finally{l.f()}return!0}(r,e.header)){t.next=16;break}throw new tf("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");case 16:if(l=hG(hG({},r),e.header),o=!0,!mf(r,l).has("b64")||"boolean"==typeof(o=r.b64)){t.next=20;break}throw new tf('The "b64" (base64url-encode payload) Header Parameter must be a boolean');case 20:if("string"==typeof(a=l.alg)&&a){t.next=23;break}throw new tf('JWS "alg" (Algorithm) Header Parameter missing or invalid');case 23:if(!(u=i&&hf(i.algorithms))||u.has(a)){t.next=26;break}throw new qg('"alg" (Algorithm) Header Parameter not allowed');case 26:if(!o){t.next=31;break}if("string"==typeof e.payload){t.next=29;break}throw new tf("JWS Payload must be a string");case 29:t.next=33;break;case 31:if("string"==typeof e.payload||e.payload instanceof Uint8Array){t.next=33;break}throw new tf("JWS Payload must be a string or an Uint8Array instance");case 33:if(t.t0="function"==typeof n,!t.t0){t.next=38;break}return t.next=37,n(r,e);case 37:n=t.sent;case 38:return function(t,e){if(t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||t.match(/^A\d{3}(?:GCM)KW$/)){if(e instanceof Uint8Array||"secret"===e.type)return;throw new TypeError('CryptoKey or KeyObject instances for symmetric algorithms must be of type "secret"')}if(e instanceof Uint8Array)throw new TypeError("CryptoKey or KeyObject instances must be used for asymmetric algorithms");if("secret"===e.type)throw new TypeError('CryptoKey or KeyObject instances for asymmetric algorithms must not be of type "secret"')}(a,n),d=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.reduce((function(t,e){return t+e.length}),0),r=new Uint8Array(i),c=0;return e.forEach((function(t){r.set(t,c),c+=t.length})),r}(Pg.encode(e.protected||""),Pg.encode("."),"string"==typeof e.payload?Pg.encode(e.payload):e.payload),s=Eg(e.signature),t.next=42,sf(a,n,s,d);case 42:if(t.sent){t.next=44;break}throw new nf;case 44:return m=o?Eg(e.payload):"string"==typeof e.payload?Pg.encode(e.payload):e.payload,h={payload:m},t.abrupt("return",(void 0!==e.protected&&(h.protectedHeader=r),void 0!==e.header&&(h.unprotectedHeader=e.header),h));case 47:case"end":return t.stop()}}),t)}))),bf.apply(this,arguments)}var pf=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i,yf=function(t){var e=pf.exec(t);if(!e)throw new TypeError("invalid time period format");var n=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(86400*n);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}},If=function(t){return t.toLowerCase().replace(/^application\//,"")},Xf=function(t,e){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=i.typ;if(r&&("string"!=typeof t.typ||If(t.typ)!==If(r)))throw new _g('unexpected "typ" JWT header value',"typ","check_failed");try{n=JSON.parse(Qg.decode(e))}catch(t){}if("object"!=o(n)||!n||Array.isArray(n))throw new ef("JWT Claims Set must be a top-level JSON object");var c=i.issuer;if(c&&!("string"==typeof c?[c]:c).includes(n.iss))throw new _g('unexpected "iss" claim value',"iss","check_failed");var l=i.subject;if(l&&n.sub!==l)throw new _g('unexpected "sub" claim value',"sub","check_failed");var a,u,d,s=i.audience;if(s&&(u="string"==typeof s?[s]:s,!("string"==typeof(a=n.aud)?u.includes(a):u.some(Set.prototype.has.bind(new Set(a))))))throw new _g('unexpected "aud" claim value',"aud","check_failed");switch(o(i.clockTolerance)){case"string":d=yf(i.clockTolerance);break;case"number":d=i.clockTolerance;break;case"undefined":d=0;break;default:throw new TypeError("invalid clockTolerance option type")}var m,h=i.currentDate,Z=(m=h||new Date,Math.floor(m.getTime()/1e3));if(void 0!==n.iat||i.maxTokenAge){if("number"!=typeof n.iat)throw new _g('"iat" claim must be a number',"iat","invalid");if(void 0===n.exp&&n.iat>Z+d)throw new _g('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new _g('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>Z+d)throw new _g('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new _g('"exp" claim must be a number',"exp","invalid");if(n.exp<=Z-d)throw new rf('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){var b=Z-n.iat;if(b-d>("number"==typeof i.maxTokenAge?i.maxTokenAge:yf(i.maxTokenAge)))throw new rf('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(b<0-d)throw new _g('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};function Gf(){return Gf=Jy(py.mark((function t(e,n,i){var r;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,function(){var t=Jy(py.mark((function t(e,n,i){var r,c,l,o,a;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e instanceof Uint8Array&&(e=Qg.decode(e)),"string"==typeof e){t.next=2;break}throw new tf("Compact JWS must be a string or Uint8Array");case 2:if(r=e.split("."),c=r[0],l=r[1],o=r[2],3===r.length){t.next=5;break}throw new tf("Invalid Compact JWS");case 5:return t.next=7,Zf({payload:l||void 0,protected:c||void 0,signature:o||void 0},n,i);case 7:return a=t.sent,t.abrupt("return",{payload:a.payload,protectedHeader:a.protectedHeader});case 9:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}()(e,n,i);case 2:return r=t.sent,t.abrupt("return",{payload:Xf(r.protectedHeader,r.payload,i),protectedHeader:r.protectedHeader});case 4:case"end":return t.stop()}}),t)}))),Gf.apply(this,arguments)}var gf=function(){function t(){hy(this,t)}return by(t,null,[{key:"base64URLEncode",value:function(t){return Cg.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}},{key:"getCodeVerifier",value:function(){return this.base64URLEncode(Ag(32))}},{key:"getCodeChallenge",value:function(t){return this.base64URLEncode(new lI(Yg((new TextEncoder).encode(t))))}},{key:"getSupportedSignatureAlgorithms",value:function(){return["RS256","RS512","RS384","PS256"]}},{key:"getJWKForTheIdToken",value:function(t,e){var n,i=JSON.parse(Cg.decode(t,"utf8")),r=dG(e);try{for(r.s();!(n=r.n()).done;){var c=n.value;if(i.kid===c.kid)return uf({alg:c.alg,e:c.e,kty:c.kty,n:c.n})}}catch(t){r.e(t)}finally{r.f()}return Promise.reject(new gG("CRYPTO_UTIL-GTFTIT-IV01","crypto-utils","getJWKForTheIdToken","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+e.map((function(t){return t.kid})).join(", ")))}},{key:"isValidIdToken",value:function(t,e,n,i,r,c){return function(t,e,n){return Gf.apply(this,arguments)}(t,e,{algorithms:this.getSupportedSignatureAlgorithms(),audience:n,clockTolerance:c,issuer:i,subject:r}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(new gG("CRYPTO_UTIL-IVIT-IV02","crypto-utils","isValidIdToken","Validating ID token failed",t))}))}},{key:"decodeIDToken",value:function(t){try{var e=Cg.decode(t.split(".")[1],"utf8");return JSON.parse(e)}catch(t){throw new gG("CRYPTO_UTIL-DIT-IV01","crypto-utils","decodeIDToken","Decoding ID token failed.",t)}}}]),t}(),ff=function(){function t(){hy(this,t)}return by(t,null,[{key:"getAuthenticatedUserInfo",value:function(t){var e,n,i,r=gf.decodeIDToken(t),c=this.getTenantDomainFromIdTokenPayload(r),l=this.extractUserName(r),o=null!==(e=r.given_name)&&void 0!==e?e:"",a=null!==(n=r.family_name)&&void 0!==n?n:"",u=o&&a?"".concat(o," ").concat(a):o||a||"",d=null!==(i=r.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:d,tenantDomain:c,username:l},this.filterClaimsFromIDTokenPayload(r))}},{key:"filterClaimsFromIDTokenPayload",value:function(t){var e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.sub,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;var n={};return Object.entries(e).forEach((function(t){var e=Yy(t,2),i=e[0],r=e[1],c=i.split("_").map((function(t,e){return 0===e?t:[t[0].toUpperCase()].concat(Vy(t.slice(1))).join("")})).join("");n[c]=r})),n}},{key:"getTokenRequestHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}}]),t}();ff.extractUserName=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=t.sub.split(e);return n.length>2&&n.pop(),n.join(e)},ff.getTenantDomainFromIdTokenPayload=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=t.sub.split(e);return n.length>2?n[n.length-1]:""};var Vf,Wf,vf=function(){function t(e){var n=this;hy(this,t),this._dataLayer=e,this._config=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}}return by(t,[{key:"resolveWellKnownEndpoint",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._config();case 2:return e=t.sent,t.abrupt("return",e.wellKnownEndpoint?e.serverOrigin+e.wellKnownEndpoint:e.serverOrigin+"/oauth2/token/.well-known/openid-configuration");case 4:case"end":return t.stop()}}),t,this)})))}},{key:"resolveEndpoints",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.next=3,this._config();case 3:return i=e.sent,e.abrupt("return",(i.overrideWellEndpointConfig&&i.endpoints&&Object.keys(i.endpoints).forEach((function(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));n[e]=(null==i?void 0:i.endpoints)?i.endpoints[t]:""})),Object.assign(Object.assign({},t),n)));case 5:case"end":return e.stop()}}),e,this)})))}},{key:"resolveFallbackEndpoints",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:return(n=t.sent).endpoints&&Object.keys(n.endpoints).forEach((function(t){var i=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[i]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""})),i={authorization_endpoint:n.serverOrigin+"/oauth2/authorize",end_session_endpoint:n.serverOrigin+"/oidc/logout",jwks_uri:n.serverOrigin+"/oauth2/jwks",check_session_iframe:n.serverOrigin+"/oidc/checksession",revocation_endpoint:n.serverOrigin+"/oauth2/revoke",token_endpoint:n.serverOrigin+"/oauth2/token"},t.abrupt("return",Object.assign(Object.assign({},e),i));case 7:case"end":return t.stop()}}),t,this)})))}},{key:"validateIdToken",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return n=e.sent.jwks_uri,e.next=5,this._config();case 5:return i=e.sent,e.abrupt("return",n&&0!==n.trim().length?uG.get(n,{withCredentials:null==i?void 0:i.sendCookiesInRequests}).then((function(e){return bG(r,void 0,void 0,py.mark((function n(){var i,r,c=this;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(200===e.status){n.next=2;break}return n.abrupt("return",Promise.reject(new gG("AUTH_HELPER-VIT-NR02","authentication-helper","validateIdToken","Invalid response status received for jwks request.","The request sent to get the jwks returned "+e.status+" , which is invalid.")));case 2:return n.next=4,this._oidcProviderMetaData();case 4:return i=n.sent.issuer,n.next=7,this.resolveWellKnownEndpoint();case 7:return r=n.sent.split("/.well-known")[0],n.abrupt("return",i&&i===r?gf.getJWKForTheIdToken(t.split(".")[0],e.data.keys).then((function(e){return bG(c,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=gf,n.t1=t,n.t2=e,n.next=5,this._config();case 5:return n.t3=n.sent.clientID,n.t4=i,n.t5=gf.decodeIDToken(t).sub,n.next=10,this._config();case 10:return n.t6=n.sent.clockTolerance,n.abrupt("return",n.t0.isValidIdToken.call(n.t0,n.t1,n.t2,n.t3,n.t4,n.t5,n.t6).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-VIT-ES03","authentication-helper","validateIdToken",void 0,void 0,t))})));case 12:case"end":return n.stop()}}),n,this)})))})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-VIT-ES04","authentication-helper","validateIdToken",void 0,void 0,t))})):Promise.resolve(!1));case 9:case"end":return n.stop()}}),n,this)})))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_HELPER-VIT-NR05","authentication-helper","validateIdToken","Request to jwks endpoint failed.","The request sent to get the jwks from the server failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})):Promise.reject(new gG("AUTH_HELPER-VIT-NF01","authentication-helper","validateIdToken","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.")));case 7:case"end":return e.stop()}}),e,this)})))}},{key:"replaceCustomGrantTemplateTags",value:function(t){var e;return bG(this,void 0,void 0,py.mark((function n(){var i,r,c;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i="openid",n.next=3,this._config();case 3:return r=n.sent,n.next=6,this._dataLayer.getSessionData();case 6:return c=n.sent,n.abrupt("return",(r.scope&&r.scope.length>0&&(r.scope.includes("openid")||r.scope.push("openid"),i=r.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",ff.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",i).replace("{{clientID}}",r.clientID).replace("{{clientSecret}}",null!==(e=r.clientSecret)&&void 0!==e?e:"")));case 8:case"end":return n.stop()}}),n,this)})))}},{key:"clearUserSessionData",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.removeOIDCProviderMetaData();case 2:return t.next=4,this._dataLayer.removeTemporaryData();case 4:return t.next=6,this._dataLayer.removeSessionData();case 6:case"end":return t.stop()}}),t,this)})))}},{key:"handleTokenResponse",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(200===t.status){e.next=2;break}return e.abrupt("return",Promise.reject(new gG("AUTH_HELPER-HTR-NR01","authentication-helper","handleTokenResponse","Invalid response status received for token request.","The request sent to get the token returned "+t.status+" , which is invalid.")));case 2:return e.next=4,this._config();case 4:if(!e.sent.validateIDToken){e.next=6;break}return e.abrupt("return",this.validateIdToken(t.data.id_token).then((function(e){return bG(i,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!e){n.next=5;break}return n.next=3,this._dataLayer.setSessionData(t.data);case 3:return i={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type},n.abrupt("return",Promise.resolve(i));case 5:return n.abrupt("return",Promise.reject(new gG("AUTH_HELPER-HTR-IV02","authentication-helper","handleTokenResponse","The id token returned is not valid.","The id token returned has failed the validation check.")));case 6:case"end":return n.stop()}}),n,this)})))})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-HAT-ES03","authentication-helper","handleTokenResponse",void 0,void 0,t))})));case 6:return n={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type},e.next=9,this._dataLayer.setSessionData(t.data);case 9:return e.abrupt("return",Promise.resolve(n));case 10:case"end":return e.stop()}}),e,this)})))}}]),t}(),Sf=function(){function t(e){var n=this;hy(this,t),this._authenticationHelper=new vf(e),this._dataLayer=e,this._config=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}}return by(t,[{key:"getAuthorizationURL",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r,c,l,o,a,u,d,s,m,h;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");case 2:return n=e.sent,e.next=5,this._config();case 5:if(i=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new gG("AUTH_CORE-GAU-NF01","authentication-core","getAuthorizationURL","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");case 8:if((r=new URL(n)).searchParams.append("response_type","code"),r.searchParams.append("client_id",i.clientID),c="openid",i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),c=i.scope.join(" ")),r.searchParams.append("scope",c),r.searchParams.append("redirect_uri",i.signInRedirectURL),i.responseMode&&r.searchParams.append("response_mode",i.responseMode),!i.enablePKCE){e.next=17;break}return l=gf.getCodeVerifier(),o=gf.getCodeChallenge(l),e.next=15,this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",l);case 15:r.searchParams.append("code_challenge_method","S256"),r.searchParams.append("code_challenge",o);case 17:if(i.prompt&&r.searchParams.append("prompt",i.prompt),a=t)for(u=0,d=Object.entries(a);u<d.length;u++)s=Yy(d[u],2),m=s[0],h=s[1],""!=m&&""!=h&&r.searchParams.append(m,h.toString());return e.abrupt("return",r.toString());case 21:case"end":return e.stop()}}),e,this)})))}},{key:"requestAccessToken",value:function(t,e){return bG(this,void 0,void 0,py.mark((function n(){var i,r,c,l,o=this;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._oidcProviderMetaData();case 2:return i=n.sent.token_endpoint,n.next=5,this._config();case 5:if(r=n.sent,i&&0!==i.trim().length){n.next=8;break}return n.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT1-NF01","authentication-core","requestAccessToken","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.")));case 8:if(n.t0=e,!n.t0){n.next=12;break}return n.next=12,this._dataLayer.setSessionDataParameter("session_state",e);case 12:if((c=[]).push("client_id=".concat(r.clientID)),r.clientSecret&&r.clientSecret.trim().length>0&&c.push("client_secret=".concat(r.clientSecret)),l=t,c.push("code=".concat(l)),c.push("grant_type=authorization_code"),c.push("redirect_uri=".concat(r.signInRedirectURL)),n.t1=r.enablePKCE,!n.t1){n.next=29;break}return n.t2=c,n.t3="code_verifier=",n.next=24,this._dataLayer.getTemporaryDataParameter("pkce_code_verifier");case 24:return n.t4=n.sent,n.t5=n.t3.concat.call(n.t3,n.t4),n.t2.push.call(n.t2,n.t5),n.next=29,this._dataLayer.removeTemporaryDataParameter("pkce_code_verifier");case 29:return n.abrupt("return",uG.post(i,c.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:r.sendCookiesInRequests}).then((function(t){return o._authenticationHelper.handleTokenResponse(t).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RAT1-ES02","authentication-core","requestAccessToken",void 0,void 0,t))}))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT1-NR03","authentication-core","requestAccessToken","Requesting access token failed","The request to get the access token from the server failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 30:case"end":return n.stop()}}),n,this)})))}},{key:"refreshAccessToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i,r,c=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent.token_endpoint,t.next=5,this._config();case 5:return n=t.sent,t.next=8,this._dataLayer.getSessionData();case 8:if((i=t.sent).refresh_token){t.next=11;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT2-NF01","authentication-core","refreshAccessToken","No refresh token found.","There was no refresh token found. The identity server doesn't return a refresh token if the refresh token grant is not enabled.")));case 11:if(e&&0!==e.trim().length){t.next=13;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT2-NF02","authentication-core","refreshAccessToken","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.")));case 13:return r=[],t.abrupt("return",(r.push("client_id=".concat(n.clientID)),r.push("refresh_token=".concat(i.refresh_token)),r.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&r.push("client_secret=".concat(n.clientSecret)),uG.post(e,r.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then((function(t){return c._authenticationHelper.handleTokenResponse(t).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RAT2-ES03","authentication-core","refreshAccessToken",void 0,void 0,t))}))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT2-NR03","authentication-core","refreshAccessToken","Refresh access token request failed.","The request to refresh the access token failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))}))));case 15:case"end":return t.stop()}}),t,this)})))}},{key:"revokeAccessToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i,r=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent.revocation_endpoint,t.next=5,this._config();case 5:if(n=t.sent,e&&0!==e.trim().length){t.next=8;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT3-NF01","authentication-core","revokeAccessToken","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.")));case 8:return(i=[]).push("client_id=".concat(n.clientID)),t.t0=i,t.t1="token=",t.next=14,this._dataLayer.getSessionData();case 14:return t.t2=t.sent.access_token,t.t3=t.t1.concat.call(t.t1,t.t2),t.t0.push.call(t.t0,t.t3),i.push("token_type_hint=access_token"),t.abrupt("return",uG.post(e,i.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then((function(t){return 200!==t.status?Promise.reject(new gG("AUTH_CORE-RAT3-NR02","authentication-core","revokeAccessToken","Invalid response status received for revoke access token request.","The request sent to revoke the access token returned "+t.status+" , which is invalid.")):(r._authenticationHelper.clearUserSessionData(),Promise.resolve(t))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT3-NR03","authentication-core","revokeAccessToken","The request to revoke access token failed.","The request sent to revoke the access token failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 19:case"end":return t.stop()}}),t,this)})))}},{key:"requestCustomGrant",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r,c,l=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._oidcProviderMetaData();case 2:return n=e.sent,e.next=5,this._config();case 5:if(i=e.sent,(r=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint)&&0!==r.trim().length){e.next=8;break}return e.abrupt("return",Promise.reject(new gG("AUTH_CORE-RCG-NF01","authentication-core","requestCustomGrant","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.")));case 8:return e.next=10,Promise.all(Object.entries(t.data).map((function(t){var e=Yy(t,2),n=e[0],i=e[1];return bG(l,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationHelper.replaceCustomGrantTemplateTags(i);case 2:return e=t.sent,t.abrupt("return","".concat(n,"=").concat(e));case 4:case"end":return t.stop()}}),t,this)})))})));case 10:if(e.t0=e.sent.join("&"),e.t1=Object.assign({},ff.getTokenRequestHeaders()),e.t2=r,e.t3=i.sendCookiesInRequests,c={data:e.t0,headers:e.t1,method:"POST",url:e.t2,withCredentials:e.t3},e.t4=t.attachToken,!e.t4){e.next=26;break}return e.t5=Object,e.t6=Object.assign({},c.headers),e.t7="Bearer ",e.next=22,this._dataLayer.getSessionData();case 22:e.t8=e.sent.access_token,e.t9=e.t7.concat.call(e.t7,e.t8),e.t10={Authorization:e.t9},c.headers=e.t5.assign.call(e.t5,e.t6,e.t10);case 26:return e.abrupt("return",uG(c).then((function(e){return 200!==e.status?Promise.reject(new gG("AUTH_CORE-RCG-NR02","authentication-core","requestCustomGrant","Invalid response status received for the custom grant request.","The request sent to get the custom grant returned "+e.status+" , which is invalid.")):t.returnsSession?l._authenticationHelper.handleTokenResponse(e).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RCG-ES03","authentication-core","requestCustomGrant",void 0,void 0,t))})):Promise.resolve(e)})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RCG-NR04","authentication-core","requestCustomGrant","The custom grant request failed.","The request sent to get the custom grant failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 27:case"end":return e.stop()}}),e,this)})))}},{key:"getBasicUserInfo",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return e=t.sent,n=ff.getAuthenticatedUserInfo(null==e?void 0:e.id_token),i={allowedScopes:e.scope,sessionState:e.session_state,username:n.username},t.abrupt("return",(n.displayName&&""!==n.displayName||delete n.displayName,n.tenantDomain&&""!==n.tenantDomain||delete n.tenantDomain,i=Object.assign(Object.assign({},i),n)));case 6:case"end":return t.stop()}}),t,this)})))}},{key:"getDecodedIDToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return e=t.sent.id_token,t.abrupt("return",gf.decodeIDToken(e));case 4:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return t.abrupt("return",t.sent.id_token);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"getOIDCProviderMetaData",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=!t,!e.t0){e.next=5;break}return e.next=4,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 4:e.t0=e.sent;case 5:if(!e.t0){e.next=7;break}return e.abrupt("return",Promise.resolve(!0));case 7:return e.next=9,this._authenticationHelper.resolveWellKnownEndpoint();case 9:return n=e.sent,e.abrupt("return",uG.get(n).then((function(t){return bG(i,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(200===t.status){e.next=4;break}e.t0=Promise.reject(new gG("AUTH_CORE-GOPM-NR01","authentication-core","getOIDCProviderMetaData","Invalid response status received for OIDC provider meta data request.","The request sent to the well-known endpoint to get the OIDC provider meta data returned "+t.status+" , which is invalid.")),e.next=13;break;case 4:return e.t1=this._dataLayer,e.next=7,this._authenticationHelper.resolveEndpoints(t.data);case 7:return e.t2=e.sent,e.next=10,e.t1.setOIDCProviderMetaData.call(e.t1,e.t2);case 10:return e.next=12,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 12:e.t0=Promise.resolve(!0);case 13:return e.abrupt("return",e.t0);case 14:case"end":return e.stop()}}),e,this)})))})).catch((function(){return bG(i,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=this._dataLayer,t.next=3,this._authenticationHelper.resolveFallbackEndpoints();case 3:return t.t1=t.sent,t.next=6,t.t0.setOIDCProviderMetaData.call(t.t0,t.t1);case 6:return t.next=8,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 8:return t.abrupt("return",Promise.resolve(!0));case 9:case"end":return t.stop()}}),t,this)})))})));case 11:case"end":return e.stop()}}),e,this)})))}},{key:"getOIDCServiceEndpoints",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent,t.t0=e.authorization_endpoint,t.t1=e.check_session_iframe,t.t2=e.end_session_endpoint,t.t3=e.introspection_endpoint,t.t4=e.issuer,t.t5=e.jwks_uri,t.t6=e.registration_endpoint,t.t7=e.revocation_endpoint,t.t8=e.token_endpoint,t.t9=e.userinfo_endpoint,t.next=15,this._authenticationHelper.resolveWellKnownEndpoint();case 15:return t.t10=t.sent,t.abrupt("return",{authorizationEndpoint:t.t0,checkSessionIframe:t.t1,endSessionEndpoint:t.t2,introspectionEndpoint:t.t3,issuer:t.t4,jwksUri:t.t5,registrationEndpoint:t.t6,revocationEndpoint:t.t7,tokenEndpoint:t.t8,userinfoEndpoint:t.t9,wellKnownEndpoint:t.t10});case 17:case"end":return t.stop()}}),t,this)})))}},{key:"getSignOutURL",value:function(){var t,e,n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._oidcProviderMetaData();case 2:if(i.t1=t=i.sent,i.t0=null===i.t1,i.t0){i.next=6;break}i.t0=void 0===t;case 6:if(!i.t0){i.next=10;break}i.t2=void 0,i.next=11;break;case 10:i.t2=t.end_session_endpoint;case 11:return r=i.t2,i.next=14,this._config();case 14:if(c=i.sent,r&&0!==r.trim().length){i.next=17;break}throw new gG("AUTH_CORE-GSOU-NF01","authentication-core","getSignOutURL","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");case 17:return i.next=19,this._dataLayer.getSessionData();case 19:if(i.t4=e=i.sent,i.t3=null===i.t4,i.t3){i.next=23;break}i.t3=void 0===e;case 23:if(!i.t3){i.next=27;break}i.t5=void 0,i.next=28;break;case 27:i.t5=e.id_token;case 28:if((l=i.t5)&&0!==l.trim().length){i.next=31;break}throw new gG("AUTH_CORE-GSOU-NF02","authentication-core","getSignOutURL","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");case 31:if((o=null!==(n=null==c?void 0:c.signOutRedirectURL)&&void 0!==n?n:null==c?void 0:c.signInRedirectURL)&&0!==o.trim().length){i.next=34;break}throw new gG("AUTH_CORE-GSOU-NF03","authentication-core","getSignOutURL","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");case 34:return i.abrupt("return","".concat(r,"?id_token_hint=").concat(l,"&post_logout_redirect_uri=").concat(o,"&state=sign_out_success"));case 35:case"end":return i.stop()}}),i,this)})))}},{key:"signOut",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getSignOutURL();case 2:return e=t.sent,t.abrupt("return",(this._authenticationHelper.clearUserSessionData(),e));case 4:case"end":return t.stop()}}),t,this)})))}},{key:"getAccessToken",value:function(){var t;return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData();case 2:if(e.t1=t=e.sent,e.t0=null===e.t1,e.t0){e.next=6;break}e.t0=void 0===t;case 6:if(!e.t0){e.next=10;break}e.t2=void 0,e.next=11;break;case 10:e.t2=t.access_token;case 11:return e.abrupt("return",e.t2);case 12:case"end":return e.stop()}}),e,this)})))}},{key:"isAuthenticated",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=Boolean,t.next=3,this.getAccessToken();case 3:return t.t1=t.sent,t.abrupt("return",(0,t.t0)(t.t1));case 5:case"end":return t.stop()}}),t,this)})))}},{key:"getPKCECode",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter("pkce_code_verifier");case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"setPKCECode",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))}},{key:"updateConfig",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setConfigData(t);case 2:if(!t.overrideWellEndpointConfig){e.next=13;break}if(e.t0=null==t?void 0:t.endpoints,!e.t0){e.next=11;break}return e.t1=this._dataLayer,e.next=8,this._authenticationHelper.resolveEndpoints({});case 8:return e.t2=e.sent,e.next=11,e.t1.setOIDCProviderMetaData.call(e.t1,e.t2);case 11:e.next=17;break;case 13:if(e.t3=null==t?void 0:t.endpoints,!e.t3){e.next=17;break}return e.next=17,this.getOIDCProviderMetaData(!0);case 17:case"end":return e.stop()}}),e,this)})))}}]),t}(),Cf=function(){function e(t,n){hy(this,e),this._id=t,this._store=n}return by(e,[{key:"setDataInBulk",value:function(t,e){var n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),l=Object.assign(Object.assign({},c),e),o=JSON.stringify(l),i.next=17,this._store.setData(t,o);case 17:case"end":return i.stop()}}),i,this)})))}},{key:"setValue",value:function(t,e,n){var i;return bG(this,void 0,void 0,py.mark((function r(){var c,l,o,a;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(t);case 2:if(r.t1=i=r.sent,r.t0=null!==r.t1,!r.t0){r.next=6;break}r.t0=void 0!==i;case 6:if(!r.t0){r.next=10;break}r.t2=i,r.next=11;break;case 10:r.t2=null;case 11:return c=r.t2,l=c&&JSON.parse(c),o=Object.assign(Object.assign({},l),Ky({},e,n)),a=JSON.stringify(o),r.next=17,this._store.setData(t,a);case 17:case"end":return r.stop()}}),r,this)})))}},{key:"removeValue",value:function(t,e){var n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),delete(l=Object.assign({},c))[e],o=JSON.stringify(l),i.next=18,this._store.setData(t,o);case 18:case"end":return i.stop()}}),i,this)})))}},{key:"_resolveKey",value:function(t){return"".concat(t,"-").concat(this._id)}},{key:"setConfigData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.setDataInBulk(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"setOIDCProviderMetaData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setTemporaryData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.TemporaryData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setSessionData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.SessionData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getConfigData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.TemporaryData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getSessionData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.SessionData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"removeConfigData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.ConfigData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeOIDCProviderMetaData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeTemporaryData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.TemporaryData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeSessionData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.SessionData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"getConfigDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.TemporaryData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getSessionDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.SessionData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"setConfigDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.ConfigData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setOIDCProviderMetaDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setTemporaryDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.TemporaryData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setSessionDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.SessionData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"removeConfigDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeOIDCProviderMetaDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeTemporaryDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.TemporaryData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeSessionDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.SessionData),e);case 2:case"end":return n.stop()}}),n,this)})))}}]),e}(),Yf={clientHost:origin,clockTolerance:300,enablePKCE:!0,responseMode:t.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0},Rf=function(){
15
+ ***************************************************************************** */();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return wy(this,n)}}function bG(t,e,n,i){return new(n||(n=Promise))((function(r,c){function l(t){try{a(i.next(t))}catch(t){c(t)}}function o(t){try{a(i.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}a((i=i.apply(t,e||[])).next())}))}t.ResponseMode=void 0,(aG=t.ResponseMode||(t.ResponseMode={})).formPost="form_post",aG.query="query";t.Stores=void 0,function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(t.Stores||(t.Stores={}));var pG="refresh_token_timer",yG="pkce_code_verifier",IG="code",XG="session_state",GG="sign_out_url",gG=function(t){ky(n,t);var e=ZG(n);function n(t,i,r,c,l,o){var a;return hy(this,n),(a=e.call(this,null!=c?c:null==o?void 0:o.message)).name=a.constructor.name,a.code=t,a.file=i,a.method=r,a.description=l,a.error=o,Object.setPrototypeOf(Ny(a),(this instanceof n?this.constructor:void 0).prototype),a}return n}(Ay(Error)),fG=function(t){ky(n,t);var e=ZG(n);function n(t,i,r,c,l,o,a,u,d){var s;return hy(this,n),(s=e.call(this,t,i,r,c,l)).name=s.constructor.name,s.code=t,s.file=i,s.method=r,s.description=l,s.networkErrorCode=o,s.networkErrorMessage=a,s.status=u,s.networkErrorData=d,s}return n}(gG),VG="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==Py?Py:"undefined"!=typeof self?self:{};function WG(t,e,n){return t(n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}var vG=void 0!==Py?Py:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},SG=[],CG=[],YG="undefined"!=typeof Uint8Array?Uint8Array:Array,RG=!1;function KG(){RG=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)SG[e]=t[e],CG[t.charCodeAt(e)]=e;CG["-".charCodeAt(0)]=62,CG["_".charCodeAt(0)]=63}function LG(t,e,n){for(var i,r,c=[],l=e;l<n;l+=3)i=(t[l]<<16)+(t[l+1]<<8)+t[l+2],c.push(SG[(r=i)>>18&63]+SG[r>>12&63]+SG[r>>6&63]+SG[63&r]);return c.join("")}function JG(t){var e;RG||KG();for(var n=t.length,i=n%3,r="",c=[],l=16383,o=0,a=n-i;o<a;o+=l)c.push(LG(t,o,o+l>a?a:o+l));return 1===i?(e=t[n-1],r+=SG[e>>2],r+=SG[e<<4&63],r+="=="):2===i&&(e=(t[n-2]<<8)+t[n-1],r+=SG[e>>10],r+=SG[e>>4&63],r+=SG[e<<2&63],r+="="),c.push(r),c.join("")}function xG(t,e,n,i,r){var c,l,o=8*r-i-1,a=(1<<o)-1,u=a>>1,d=-7,s=n?r-1:0,m=n?-1:1,h=t[e+s];for(s+=m,c=h&(1<<-d)-1,h>>=-d,d+=o;d>0;c=256*c+t[e+s],s+=m,d-=8);for(l=c&(1<<-d)-1,c>>=-d,d+=i;d>0;l=256*l+t[e+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===a)return l?NaN:1/0*(h?-1:1);l+=Math.pow(2,i),c-=u}return(h?-1:1)*l*Math.pow(2,c-i)}function NG(t,e,n,i,r,c){var l,o,a,u=8*c-r-1,d=(1<<u)-1,s=d>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:c-1,Z=i?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,l=d):(l=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-l))<1&&(l--,a*=2),(e+=l+s>=1?m/a:m*Math.pow(2,1-s))*a>=2&&(l++,a/=2),l+s>=d?(o=0,l=d):l+s>=1?(o=(e*a-1)*Math.pow(2,r),l+=s):(o=e*Math.pow(2,s-1)*Math.pow(2,r),l=0));r>=8;t[n+h]=255&o,h+=Z,o/=256,r-=8);for(l=l<<r|o,u+=r;u>0;t[n+h]=255&l,h+=Z,l/=256,u-=8);t[n+h-Z]|=128*b}var HG={}.toString,kG=Array.isArray||function(t){return"[object Array]"==HG.call(t)};FG.TYPED_ARRAY_SUPPORT=void 0===vG.TYPED_ARRAY_SUPPORT||vG.TYPED_ARRAY_SUPPORT;var UG=wG();function wG(){return FG.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function TG(t,e){if(wG()<e)throw new RangeError("Invalid typed array length");return FG.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=FG.prototype:(null===t&&(t=new FG(e)),t.length=e),t}function FG(t,e,n){if(!(FG.TYPED_ARRAY_SUPPORT||this instanceof FG))return new FG(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return BG(this,t)}return zG(this,t,e,n)}function zG(t,e,n,i){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,i){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===i?new Uint8Array(e):void 0===i?new Uint8Array(e,n):new Uint8Array(e,n,i),FG.TYPED_ARRAY_SUPPORT?(t=e).__proto__=FG.prototype:t=MG(t,e),t}(t,e,n,i):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!FG.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|QG(e,n),r=(t=TG(t,i)).write(e,n);return r!==i&&(t=t.slice(0,r)),t}(t,e,n):function(t,e){if(PG(e)){var n=0|AG(e.length);return 0===(t=TG(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(i=e.length)!=i?TG(t,0):MG(t,e);if("Buffer"===e.type&&kG(e.data))return MG(t,e.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function jG(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function BG(t,e){if(jG(e),t=TG(t,e<0?0:0|AG(e)),!FG.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function MG(t,e){var n=e.length<0?0:0|AG(e.length);t=TG(t,n);for(var i=0;i<n;i+=1)t[i]=255&e[i];return t}function AG(t){if(t>=wG())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+wG().toString(16)+" bytes");return 0|t}function PG(t){return!(null==t||!t._isBuffer)}function QG(t,e){if(PG(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Xg(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Gg(t).length;default:if(i)return Xg(t).length;e=(""+e).toLowerCase(),i=!0}}function DG(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return ag(this,e,n);case"utf8":case"utf-8":return cg(this,e,n);case"ascii":return lg(this,e,n);case"latin1":case"binary":return og(this,e,n);case"base64":return rg(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ug(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function EG(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function OG(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=FG.from(e,i)),PG(e))return 0===e.length?-1:_G(t,e,n,i,r);if("number"==typeof e)return e&=255,FG.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):_G(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function _G(t,e,n,i,r){var c,l=1,o=t.length,a=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;l=2,o/=2,a/=2,n/=2}function u(t,e){return 1===l?t[e]:t.readUInt16BE(e*l)}if(r){var d=-1;for(c=n;c<o;c++)if(u(t,c)===u(e,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===a)return d*l}else-1!==d&&(c-=c-d),d=-1}else for(n+a>o&&(n=o-a),c=n;c>=0;c--){for(var s=!0,m=0;m<a;m++)if(u(t,c+m)!==u(e,m)){s=!1;break}if(s)return c}return-1}function qG(t,e,n,i){n=Number(n)||0;var r=t.length-n;i?(i=Number(i))>r&&(i=r):i=r;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var l=0;l<i;++l){var o=parseInt(e.substr(2*l,2),16);if(isNaN(o))return l;t[n+l]=o}return l}function $G(t,e,n,i){return gg(Xg(e,t.length-n),t,n,i)}function tg(t,e,n,i){return gg(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,i)}function eg(t,e,n,i){return tg(t,e,n,i)}function ng(t,e,n,i){return gg(Gg(e),t,n,i)}function ig(t,e,n,i){return gg(function(t,e){for(var n,i,r,c=[],l=0;l<t.length&&!((e-=2)<0);++l)i=(n=t.charCodeAt(l))>>8,r=n%256,c.push(r),c.push(i);return c}(e,t.length-n),t,n,i)}function rg(t,e,n){return 0===e&&n===t.length?JG(t):JG(t.slice(e,n))}function cg(t,e,n){n=Math.min(t.length,n);for(var i=[],r=e;r<n;){var c,l,o,a,u=t[r],d=null,s=u>239?4:u>223?3:u>191?2:1;if(r+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=t[r+1]))&&(a=(31&u)<<6|63&c)>127&&(d=a);break;case 3:c=t[r+1],l=t[r+2],128==(192&c)&&128==(192&l)&&(a=(15&u)<<12|(63&c)<<6|63&l)>2047&&(a<55296||a>57343)&&(d=a);break;case 4:c=t[r+1],l=t[r+2],o=t[r+3],128==(192&c)&&128==(192&l)&&128==(192&o)&&(a=(15&u)<<18|(63&c)<<12|(63&l)<<6|63&o)>65535&&a<1114112&&(d=a)}null===d?(d=65533,s=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),r+=s}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var n="",i=0;i<e;)n+=String.fromCharCode.apply(String,t.slice(i,i+=4096));return n}(i)}function lg(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(127&t[r]);return i}function og(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(t[r]);return i}function ag(t,e,n){var i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var r="",c=e;c<n;++c)r+=Ig(t[c]);return r}function ug(t,e,n){for(var i=t.slice(e,n),r="",c=0;c<i.length;c+=2)r+=String.fromCharCode(i[c]+256*i[c+1]);return r}function dg(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function sg(t,e,n,i,r,c){if(!PG(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<c)throw new RangeError('"value" argument is out of bounds');if(n+i>t.length)throw new RangeError("Index out of range")}function mg(t,e,n,i){e<0&&(e=65535+e+1);for(var r=0,c=Math.min(t.length-n,2);r<c;++r)t[n+r]=(e&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function hg(t,e,n,i){e<0&&(e=4294967295+e+1);for(var r=0,c=Math.min(t.length-n,4);r<c;++r)t[n+r]=e>>>8*(i?r:3-r)&255}function Zg(t,e,n,i,r,c){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function bg(t,e,n,i,r){return r||Zg(t,0,n,4),NG(t,e,n,i,23,4),n+4}function pg(t,e,n,i,r){return r||Zg(t,0,n,8),NG(t,e,n,i,52,8),n+8}FG.poolSize=8192,FG._augment=function(t){return t.__proto__=FG.prototype,t},FG.from=function(t,e,n){return zG(null,t,e,n)},FG.TYPED_ARRAY_SUPPORT&&(FG.prototype.__proto__=Uint8Array.prototype,FG.__proto__=Uint8Array),FG.alloc=function(t,e,n){return function(t,e,n,i){return jG(e),e<=0?TG(t,e):void 0!==n?"string"==typeof i?TG(t,e).fill(n,i):TG(t,e).fill(n):TG(t,e)}(null,t,e,n)},FG.allocUnsafe=function(t){return BG(null,t)},FG.allocUnsafeSlow=function(t){return BG(null,t)},FG.isBuffer=fg,FG.compare=function(t,e){if(!PG(t)||!PG(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,i=e.length,r=0,c=Math.min(n,i);r<c;++r)if(t[r]!==e[r]){n=t[r],i=e[r];break}return n<i?-1:i<n?1:0},FG.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},FG.concat=function(t,e){if(!kG(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return FG.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var i=FG.allocUnsafe(e),r=0;for(n=0;n<t.length;++n){var c=t[n];if(!PG(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,r),r+=c.length}return i},FG.byteLength=QG,FG.prototype._isBuffer=!0,FG.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)EG(this,e,e+1);return this},FG.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)EG(this,e,e+3),EG(this,e+1,e+2);return this},FG.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)EG(this,e,e+7),EG(this,e+1,e+6),EG(this,e+2,e+5),EG(this,e+3,e+4);return this},FG.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?cg(this,0,t):DG.apply(this,arguments)},FG.prototype.equals=function(t){if(!PG(t))throw new TypeError("Argument must be a Buffer");return this===t||0===FG.compare(this,t)},FG.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},FG.prototype.compare=function(t,e,n,i,r){if(!PG(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(r>>>=0)-(i>>>=0),l=(n>>>=0)-(e>>>=0),o=Math.min(c,l),a=this.slice(i,r),u=t.slice(e,n),d=0;d<o;++d)if(a[d]!==u[d]){c=a[d],l=u[d];break}return c<l?-1:l<c?1:0},FG.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},FG.prototype.indexOf=function(t,e,n){return OG(this,t,e,n,!0)},FG.prototype.lastIndexOf=function(t,e,n){return OG(this,t,e,n,!1)},FG.prototype.write=function(t,e,n,i){if(void 0===e)i="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)i=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return qG(this,t,e,n);case"utf8":case"utf-8":return $G(this,t,e,n);case"ascii":return tg(this,t,e,n);case"latin1":case"binary":return eg(this,t,e,n);case"base64":return ng(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ig(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},FG.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},FG.prototype.slice=function(t,e){var n,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e<t&&(e=t),FG.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=FG.prototype;else{var r=e-t;n=new FG(r,void 0);for(var c=0;c<r;++c)n[c]=this[c+t]}return n},FG.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i},FG.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t+--e],r=1;e>0&&(r*=256);)i+=this[t+--e]*r;return i},FG.prototype.readUInt8=function(t,e){return e||dg(t,1,this.length),this[t]},FG.prototype.readUInt16LE=function(t,e){return e||dg(t,2,this.length),this[t]|this[t+1]<<8},FG.prototype.readUInt16BE=function(t,e){return e||dg(t,2,this.length),this[t]<<8|this[t+1]},FG.prototype.readUInt32LE=function(t,e){return e||dg(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},FG.prototype.readUInt32BE=function(t,e){return e||dg(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},FG.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*e)),i},FG.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||dg(t,e,this.length);for(var i=e,r=1,c=this[t+--i];i>0&&(r*=256);)c+=this[t+--i]*r;return c>=(r*=128)&&(c-=Math.pow(2,8*e)),c},FG.prototype.readInt8=function(t,e){return e||dg(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},FG.prototype.readInt16LE=function(t,e){e||dg(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},FG.prototype.readInt16BE=function(t,e){e||dg(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},FG.prototype.readInt32LE=function(t,e){return e||dg(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},FG.prototype.readInt32BE=function(t,e){return e||dg(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},FG.prototype.readFloatLE=function(t,e){return e||dg(t,4,this.length),xG(this,t,!0,23,4)},FG.prototype.readFloatBE=function(t,e){return e||dg(t,4,this.length),xG(this,t,!1,23,4)},FG.prototype.readDoubleLE=function(t,e){return e||dg(t,8,this.length),xG(this,t,!0,52,8)},FG.prototype.readDoubleBE=function(t,e){return e||dg(t,8,this.length),xG(this,t,!1,52,8)},FG.prototype.writeUIntLE=function(t,e,n,i){t=+t,e|=0,n|=0,i||sg(this,t,e,n,Math.pow(2,8*n)-1,0);var r=1,c=0;for(this[e]=255&t;++c<n&&(r*=256);)this[e+c]=t/r&255;return e+n},FG.prototype.writeUIntBE=function(t,e,n,i){t=+t,e|=0,n|=0,i||sg(this,t,e,n,Math.pow(2,8*n)-1,0);var r=n-1,c=1;for(this[e+r]=255&t;--r>=0&&(c*=256);)this[e+r]=t/c&255;return e+n},FG.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,1,255,0),FG.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},FG.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,65535,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):mg(this,t,e,!0),e+2},FG.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,65535,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):mg(this,t,e,!1),e+2},FG.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,4294967295,0),FG.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):hg(this,t,e,!0),e+4},FG.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,4294967295,0),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):hg(this,t,e,!1),e+4},FG.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);sg(this,t,e,n,r-1,-r)}var c=0,l=1,o=0;for(this[e]=255&t;++c<n&&(l*=256);)t<0&&0===o&&0!==this[e+c-1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},FG.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);sg(this,t,e,n,r-1,-r)}var c=n-1,l=1,o=0;for(this[e+c]=255&t;--c>=0&&(l*=256);)t<0&&0===o&&0!==this[e+c+1]&&(o=1),this[e+c]=(t/l>>0)-o&255;return e+n},FG.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,1,127,-128),FG.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},FG.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,32767,-32768),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):mg(this,t,e,!0),e+2},FG.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,2,32767,-32768),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):mg(this,t,e,!1),e+2},FG.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,2147483647,-2147483648),FG.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):hg(this,t,e,!0),e+4},FG.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||sg(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),FG.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):hg(this,t,e,!1),e+4},FG.prototype.writeFloatLE=function(t,e,n){return bg(this,t,e,!0,n)},FG.prototype.writeFloatBE=function(t,e,n){return bg(this,t,e,!1,n)},FG.prototype.writeDoubleLE=function(t,e,n){return pg(this,t,e,!0,n)},FG.prototype.writeDoubleBE=function(t,e,n){return pg(this,t,e,!1,n)},FG.prototype.copy=function(t,e,n,i){if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e<i-n&&(i=t.length-e+n);var r,c=i-n;if(this===t&&n<e&&e<i)for(r=c-1;r>=0;--r)t[r+e]=this[r+n];else if(c<1e3||!FG.TYPED_ARRAY_SUPPORT)for(r=0;r<c;++r)t[r+e]=this[r+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},FG.prototype.fill=function(t,e,n,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===t.length){var r=t.charCodeAt(0);r<256&&(t=r)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!FG.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var l=PG(t)?t:Xg(new FG(t,i).toString()),o=l.length;for(c=0;c<n-e;++c)this[c+e]=l[c%o]}return this};var yg=/[^+\/0-9A-Za-z-_]/g;function Ig(t){return t<16?"0"+t.toString(16):t.toString(16)}function Xg(t,e){var n;e=e||1/0;for(var i=t.length,r=null,c=[],l=0;l<i;++l){if((n=t.charCodeAt(l))>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(l+1===i){(e-=3)>-1&&c.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&c.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function Gg(t){return function(t){var e,n,i,r,c,l;RG||KG();var o=t.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[o-2]?2:"="===t[o-1]?1:0,l=new YG(3*o/4-c),i=c>0?o-4:o;var a=0;for(e=0,n=0;e<i;e+=4,n+=3)r=CG[t.charCodeAt(e)]<<18|CG[t.charCodeAt(e+1)]<<12|CG[t.charCodeAt(e+2)]<<6|CG[t.charCodeAt(e+3)],l[a++]=r>>16&255,l[a++]=r>>8&255,l[a++]=255&r;return 2===c?(r=CG[t.charCodeAt(e)]<<2|CG[t.charCodeAt(e+1)]>>4,l[a++]=255&r):1===c&&(r=CG[t.charCodeAt(e)]<<10|CG[t.charCodeAt(e+1)]<<4|CG[t.charCodeAt(e+2)]>>2,l[a++]=r>>8&255,l[a++]=255&r),l}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(yg,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function gg(t,e,n,i){for(var r=0;r<i&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function fg(t){return null!=t&&(!!t._isBuffer||Vg(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&Vg(t.slice(0,0))}(t))}function Vg(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Wg=Object.freeze({__proto__:null,Buffer:FG,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),FG.alloc(+t)},isBuffer:fg,kMaxLength:UG}),vg=WG((function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.length,n=e%4;if(!n)return t;var i=e,r=4-n,c=e+r,l=FG.alloc(c);for(l.write(t);r--;)l.write("=",i++);return l.toString()}})),Sg=WG((function(t,e){function n(t,e){return void 0===e&&(e="utf8"),FG.isBuffer(t)?r(t.toString("base64")):r(FG.from(t,e).toString("base64"))}function i(t){return t=t.toString(),vg.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function r(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}Object.defineProperty(e,"__esModule",{value:!0});var c=n;c.encode=n,c.decode=function(t,e){return void 0===e&&(e="utf8"),FG.from(i(t),"base64").toString(e)},c.toBase64=i,c.fromBase64=r,c.toBuffer=function(t){return FG.from(i(t),"base64")},e.default=c})),Cg=WG((function(t){t.exports=Sg.default,t.exports.default=t.exports})),Yg=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(WG((function(t){!function(e,n){var i={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,r,c){for(var l,o,a,u,d,s,m,h,Z,b,p,y,I;c>=64;){for(l=n[0],o=n[1],a=n[2],u=n[3],d=n[4],s=n[5],m=n[6],h=n[7],b=0;b<16;b++)p=r+4*b,t[b]=(255&i[p])<<24|(255&i[p+1])<<16|(255&i[p+2])<<8|255&i[p+3];for(b=16;b<64;b++)y=((Z=t[b-2])>>>17|Z<<15)^(Z>>>19|Z<<13)^Z>>>10,I=((Z=t[b-15])>>>7|Z<<25)^(Z>>>18|Z<<14)^Z>>>3,t[b]=(y+t[b-7]|0)+(I+t[b-16]|0);for(b=0;b<64;b++)y=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&s^~d&m)|0)+(h+(e[b]+t[b]|0)|0)|0,I=((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+(l&o^l&a^o&a)|0,h=m,m=s,s=d,d=u+y|0,u=a,a=o,o=l,l=y+I|0;n[0]+=l,n[1]+=o,n[2]+=a,n[3]+=u,n[4]+=d,n[5]+=s,n[6]+=m,n[7]+=h,r+=64,c-=64}return r}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,r=e/536870912|0,c=e<<3,l=e%64<56?64:128;this.buffer[i]=128;for(var o=i+1;o<l-8;o++)this.buffer[o]=0;this.buffer[l-8]=r>>>24&255,this.buffer[l-7]=r>>>16&255,this.buffer[l-6]=r>>>8&255,this.buffer[l-5]=r>>>0&255,this.buffer[l-4]=c>>>24&255,this.buffer[l-3]=c>>>16&255,this.buffer[l-2]=c>>>8&255,this.buffer[l-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,l),this.finished=!0}for(o=0;o<8;o++)t[4*o+0]=this.state[o]>>>24&255,t[4*o+1]=this.state[o]>>>16&255,t[4*o+2]=this.state[o]>>>8&255,t[4*o+3]=this.state[o]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var r=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function l(t,e){var n=new r(t).update(e),i=n.digest();return n.clean(),i}function o(t,e,n,i){var r=i[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=r,t.hash=c,t.default=c,t.hmac=l;var a=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=a),void 0===i&&(i=32);for(var c=new Uint8Array([1]),u=l(e,t),d=new r(u),s=new Uint8Array(d.digestLength),m=s.length,h=new Uint8Array(i),Z=0;Z<i;Z++)m===s.length&&(o(s,d,n,c),m=0),h[Z]=s[m++];return d.clean(),s.fill(0),c.fill(0),h},t.pbkdf2=function(t,e,n,i){for(var c=new r(t),l=c.digestLength,o=new Uint8Array(4),a=new Uint8Array(l),u=new Uint8Array(l),d=new Uint8Array(i),s=0;s*l<i;s++){var m=s+1;o[0]=m>>>24&255,o[1]=m>>>16&255,o[2]=m>>>8&255,o[3]=m>>>0&255,c.reset(),c.update(e),c.update(o),c.finish(u);for(var h=0;h<l;h++)a[h]=u[h];for(h=2;h<=n;h++){c.reset(),c.update(u).finish(u);for(var Z=0;Z<l;Z++)a[Z]^=u[Z]}for(h=0;h<l&&s*l+h<i;h++)d[s*l+h]=a[h]}for(s=0;s<l;s++)a[s]=u[s]=0;for(s=0;s<4;s++)o[s]=0;return c.clean(),d}}(i);var r=i.default;for(var c in i)r[c]=i[c];t.exports=r}()})));function Rg(){throw new Error("setTimeout has not been defined")}function Kg(){throw new Error("clearTimeout has not been defined")}var Lg=Rg,Jg=Kg;function xg(t){if(Lg===setTimeout)return setTimeout(t,0);if((Lg===Rg||!Lg)&&setTimeout)return Lg=setTimeout,setTimeout(t,0);try{return Lg(t,0)}catch(e){try{return Lg.call(null,t,0)}catch(e){return Lg.call(this,t,0)}}}"function"==typeof vG.setTimeout&&(Lg=setTimeout),"function"==typeof vG.clearTimeout&&(Jg=clearTimeout);var Ng,Hg=[],kg=!1,Ug=-1;function wg(){kg&&Ng&&(kg=!1,Ng.length?Hg=Ng.concat(Hg):Ug=-1,Hg.length&&Tg())}function Tg(){if(!kg){var t=xg(wg);kg=!0;for(var e=Hg.length;e;){for(Ng=Hg,Hg=[];++Ug<e;)Ng&&Ng[Ug].run();Ug=-1,e=Hg.length}Ng=null,kg=!1,function(t){if(Jg===clearTimeout)return clearTimeout(t);if((Jg===Kg||!Jg)&&clearTimeout)return Jg=clearTimeout,clearTimeout(t);try{Jg(t)}catch(e){try{return Jg.call(null,t)}catch(e){return Jg.call(this,t)}}}(t)}}function Fg(t,e){this.fun=t,this.array=e}Fg.prototype.run=function(){this.fun.apply(null,this.array)};var zg=vG.performance||{},jg=(zg.now||zg.mozNow||zg.msNow||zg.oNow||zg.webkitNow,new Date,function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];Hg.push(new Fg(t,e)),1!==Hg.length||kg||xg(Tg)}),Bg=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})})),e}(Wg),Mg=WG((function(t,e){var n=Bg.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function r(t,e,i){return n(t,e,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=Bg:(i(Bg,e),e.Buffer=r),i(n,r),r.from=function(t,e,i){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,i)},r.alloc=function(t,e,i){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=n(t);return void 0!==e?"string"==typeof i?r.fill(e,i):r.fill(e):r.fill(0),r},r.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},r.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return Bg.SlowBuffer(t)}})),Ag=WG((function(t){var e=65536,n=Mg.Buffer,i=VG.crypto||VG.msCrypto;i&&i.getRandomValues?t.exports=function(t,r){if(t>4294967295)throw new RangeError("requested too many random bytes");var c=n.allocUnsafe(t);if(t>0)if(t>e)for(var l=0;l<t;l+=e)i.getRandomValues(c.slice(l,l+e));else i.getRandomValues(c);return"function"==typeof r?jg((function(){r(null,c)})):c}:t.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}})),Pg=new TextEncoder,Qg=new TextDecoder,Dg=function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;throw new Error("unable to locate global object")}(),Eg=function(t){var e=t;return e instanceof Uint8Array&&(e=Qg.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,""),new Uint8Array(Dg.atob(e).split("").map((function(t){return t.charCodeAt(0)})))},Og=function(t){ky(n,t);var e=ZG(n);function n(t){var i;return hy(this,n),(i=e.call(this,t)).code="ERR_JOSE_GENERIC",i.name=i.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(Ny(i),i.constructor),i}return n}(Ay(Error)),_g=function(t){ky(n,t);var e=ZG(n);function n(t){var i,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return hy(this,n),(i=e.call(this,t)).code="ERR_JWT_CLAIM_VALIDATION_FAILED",i.claim=r,i.reason=c,i}return n}(Og),qg=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_ALG_NOT_ALLOWED",t}return n}(Og),$g=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_NOT_SUPPORTED",t}return n}(Og),tf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_INVALID",t}return n}(Og),ef=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWT_INVALID",t}return n}(Og),nf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",t.message="signature verification failed",t}return n}(Og),rf=function(t){ky(n,t);var e=ZG(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).code="ERR_JWT_EXPIRED",t}return n}(_g),cf=Dg.crypto;function lf(){if(!Dg.isSecureContext&&!Dg.crypto.subtle)throw new Og("Web Cryptography API is available only in Secure Contexts. See: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}var of=function(){var t=Jy(py.mark((function t(e){var n,i,r,c,l,o,a;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=function(t){var e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-".concat(t.alg.substr(-3))},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new $g("".concat(t.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-".concat(t.alg.substr(-3))},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(t.alg.substr(-3))},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(t.alg.substr(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":case"ES384":case"ES512":e={name:"ECDSA",namedCurve:t.crv},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new $g('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;default:throw new $g('unsupported or invalid JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}(e),c=r.algorithm,l=r.keyUsages,o="jwk",a=hG({},e),t.abrupt("return",(delete a.alg,"PBKDF2"===c.name&&(o="raw",a=Eg(e.k)),lf(),cf.subtle.importKey(o,a,c,null!==(n=e.ext)&&void 0!==n&&n,null!==(i=e.key_ops)&&void 0!==i?i:l)));case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();function af(t){return!!t&&t.constructor===Object}function uf(t,e,n){return df.apply(this,arguments)}function df(){return df=Jy(py.mark((function t(e,n,i){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(af(e)){t.next=2;break}throw new TypeError("JWK must be an object");case 2:if(n||(n=e.alg),"string"==typeof n&&n){t.next=4;break}throw new TypeError('"alg" argument is required when "jwk.alg" is not present');case 4:t.t0=e.kty,t.next="oct"===t.t0?7:"RSA"===t.t0?10:"EC"===t.t0||"OKP"===t.t0?12:13;break;case 7:if("string"==typeof e.k&&e.k){t.next=9;break}throw new TypeError('missing "k" (Key Value) Parameter value');case 9:return t.abrupt("return",(null!=i||(i=!0!==e.ext),i?of(hG(hG({},e),{},{alg:n,ext:!1})):Eg(e.k)));case 10:if(void 0===e.oth){t.next=12;break}throw new $g('RSA JWK "oth" (Other Primes Info) Parameter value is unsupported');case 12:return t.abrupt("return",of(hG(hG({},e),{},{alg:n})));case 13:throw new $g('unsupported "kty" (Key Type) Parameter value');case 14:case"end":return t.stop()}}),t)}))),df.apply(this,arguments)}var sf=function(){var t=Jy(py.mark((function t(e,n,i,r){var c;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(lf(),!(n instanceof Uint8Array)){t.next=8;break}if(e.startsWith("HS")){t.next=3;break}throw new TypeError("symmetric keys are only applicable for HMAC-based algorithms");case 3:return t.next=5,cf.subtle.importKey("raw",n,{hash:"SHA-".concat(e.substr(-3)),name:"HMAC"},!1,["verify"]);case 5:c=t.sent,t.next=9;break;case 8:c=n;case 9:return t.abrupt("return",(function(t,e){if(t.startsWith("HS")){var n=parseInt(t.substr(-3),10),i=e.algorithm.length;if("number"!=typeof i||i<n)throw new TypeError("".concat(t," requires symmetric keys to be ").concat(n," bits or larger"))}if(t.startsWith("RS")||t.startsWith("PS")){var r=e.algorithm.modulusLength;if("number"!=typeof r||r<2048)throw new TypeError("".concat(t," requires key modulusLength to be 2048 bits or larger"))}}(e,c),cf.subtle.verify(function(t){switch(t){case"HS256":return{hash:"SHA-256",name:"HMAC"};case"HS384":return{hash:"SHA-384",name:"HMAC"};case"HS512":return{hash:"SHA-512",name:"HMAC"};case"PS256":return{hash:"SHA-256",name:"RSA-PSS",saltLength:32};case"PS384":return{hash:"SHA-384",name:"RSA-PSS",saltLength:48};case"PS512":return{hash:"SHA-512",name:"RSA-PSS",saltLength:64};case"RS256":return{hash:"SHA-256",name:"RSASSA-PKCS1-v1_5"};case"RS384":return{hash:"SHA-384",name:"RSASSA-PKCS1-v1_5"};case"RS512":return{hash:"SHA-512",name:"RSASSA-PKCS1-v1_5"};case"ES256":return{hash:"SHA-256",name:"ECDSA",namedCurve:"P-256"};case"ES384":return{hash:"SHA-384",name:"ECDSA",namedCurve:"P-384"};case"ES512":return{hash:"SHA-512",name:"ECDSA",namedCurve:"P-521"};default:throw new $g("alg ".concat(t," is unsupported either by JOSE or your javascript runtime"))}}(e),c,i,r)));case 10:case"end":return t.stop()}}),t)})));return function(e,n,i,r){return t.apply(this,arguments)}}(),mf=function(t,e,n,i){if(void 0!==i.crit&&void 0===n.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((function(t){return"string"!=typeof t||0===t.length})))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');var r,c=dG(n.crit);try{for(c.s();!(r=c.n()).done;){var l=r.value;if(!e.has(l))throw new $g('Extension Header Parameter "'.concat(l,'" is not supported by this implementation'));if(void 0===i[l])throw new t('Extension Header Parameter "'.concat(l,'" is missing'));if(e.get(l)&&void 0===n[l])throw new t('Extension Header Parameter "'.concat(l,'" MUST be integrity protected'))}}catch(t){c.e(t)}finally{c.f()}return new Set(n.crit)}.bind(void 0,tf,new Map([["b64",!0]])),hf=function(t,e){if(void 0!==e&&(!Array.isArray(e)||e.some((function(t){return"string"!=typeof t}))))throw new TypeError('"'.concat(t,'" option must be an array of strings'));if(e)return new Set(e)}.bind(void 0,"algorithms");function Zf(t,e,n){return bf.apply(this,arguments)}function bf(){return bf=Jy(py.mark((function t(e,n,i){var r,c,l,o,a,u,d,s,m,h;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(af(e)){t.next=2;break}throw new tf("Flattened JWS must be an object");case 2:if(void 0!==e.protected||void 0!==e.header){t.next=4;break}throw new tf('Flattened JWS must have either of the "protected" or "header" members');case 4:if(void 0===e.protected||"string"==typeof e.protected){t.next=6;break}throw new tf("JWS Protected Header incorrect type");case 6:if(void 0!==e.payload){t.next=8;break}throw new tf("JWS Payload missing");case 8:if("string"==typeof e.signature){t.next=10;break}throw new tf("JWS Signature missing or incorrect type");case 10:if(void 0===e.header||af(e.header)){t.next=12;break}throw new tf("JWS Unprotected Header incorrect type");case 12:if(r={},e.protected&&(c=Eg(e.protected),r=JSON.parse(Qg.decode(c))),function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i,r=e.filter(Boolean);if(0===r.length||1===r.length)return!0;var c,l=dG(r);try{for(l.s();!(c=l.n()).done;){var o=c.value,a=Object.keys(o);if(i&&0!==i.size){var u,d=dG(a);try{for(d.s();!(u=d.n()).done;){var s=u.value;if(i.has(s))return!1;i.add(s)}}catch(t){d.e(t)}finally{d.f()}}else i=new Set(a)}}catch(t){l.e(t)}finally{l.f()}return!0}(r,e.header)){t.next=16;break}throw new tf("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");case 16:if(l=hG(hG({},r),e.header),o=!0,!mf(r,l).has("b64")||"boolean"==typeof(o=r.b64)){t.next=20;break}throw new tf('The "b64" (base64url-encode payload) Header Parameter must be a boolean');case 20:if("string"==typeof(a=l.alg)&&a){t.next=23;break}throw new tf('JWS "alg" (Algorithm) Header Parameter missing or invalid');case 23:if(!(u=i&&hf(i.algorithms))||u.has(a)){t.next=26;break}throw new qg('"alg" (Algorithm) Header Parameter not allowed');case 26:if(!o){t.next=31;break}if("string"==typeof e.payload){t.next=29;break}throw new tf("JWS Payload must be a string");case 29:t.next=33;break;case 31:if("string"==typeof e.payload||e.payload instanceof Uint8Array){t.next=33;break}throw new tf("JWS Payload must be a string or an Uint8Array instance");case 33:if(t.t0="function"==typeof n,!t.t0){t.next=38;break}return t.next=37,n(r,e);case 37:n=t.sent;case 38:return function(t,e){if(t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||t.match(/^A\d{3}(?:GCM)KW$/)){if(e instanceof Uint8Array||"secret"===e.type)return;throw new TypeError('CryptoKey or KeyObject instances for symmetric algorithms must be of type "secret"')}if(e instanceof Uint8Array)throw new TypeError("CryptoKey or KeyObject instances must be used for asymmetric algorithms");if("secret"===e.type)throw new TypeError('CryptoKey or KeyObject instances for asymmetric algorithms must not be of type "secret"')}(a,n),d=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.reduce((function(t,e){return t+e.length}),0),r=new Uint8Array(i),c=0;return e.forEach((function(t){r.set(t,c),c+=t.length})),r}(Pg.encode(e.protected||""),Pg.encode("."),"string"==typeof e.payload?Pg.encode(e.payload):e.payload),s=Eg(e.signature),t.next=42,sf(a,n,s,d);case 42:if(t.sent){t.next=44;break}throw new nf;case 44:return m=o?Eg(e.payload):"string"==typeof e.payload?Pg.encode(e.payload):e.payload,h={payload:m},t.abrupt("return",(void 0!==e.protected&&(h.protectedHeader=r),void 0!==e.header&&(h.unprotectedHeader=e.header),h));case 47:case"end":return t.stop()}}),t)}))),bf.apply(this,arguments)}var pf=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i,yf=function(t){var e=pf.exec(t);if(!e)throw new TypeError("invalid time period format");var n=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(86400*n);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}},If=function(t){return t.toLowerCase().replace(/^application\//,"")},Xf=function(t,e){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=i.typ;if(r&&("string"!=typeof t.typ||If(t.typ)!==If(r)))throw new _g('unexpected "typ" JWT header value',"typ","check_failed");try{n=JSON.parse(Qg.decode(e))}catch(t){}if("object"!=o(n)||!n||Array.isArray(n))throw new ef("JWT Claims Set must be a top-level JSON object");var c=i.issuer;if(c&&!("string"==typeof c?[c]:c).includes(n.iss))throw new _g('unexpected "iss" claim value',"iss","check_failed");var l=i.subject;if(l&&n.sub!==l)throw new _g('unexpected "sub" claim value',"sub","check_failed");var a,u,d,s=i.audience;if(s&&(u="string"==typeof s?[s]:s,!("string"==typeof(a=n.aud)?u.includes(a):u.some(Set.prototype.has.bind(new Set(a))))))throw new _g('unexpected "aud" claim value',"aud","check_failed");switch(o(i.clockTolerance)){case"string":d=yf(i.clockTolerance);break;case"number":d=i.clockTolerance;break;case"undefined":d=0;break;default:throw new TypeError("invalid clockTolerance option type")}var m,h=i.currentDate,Z=(m=h||new Date,Math.floor(m.getTime()/1e3));if(void 0!==n.iat||i.maxTokenAge){if("number"!=typeof n.iat)throw new _g('"iat" claim must be a number',"iat","invalid");if(void 0===n.exp&&n.iat>Z+d)throw new _g('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new _g('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>Z+d)throw new _g('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new _g('"exp" claim must be a number',"exp","invalid");if(n.exp<=Z-d)throw new rf('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){var b=Z-n.iat;if(b-d>("number"==typeof i.maxTokenAge?i.maxTokenAge:yf(i.maxTokenAge)))throw new rf('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(b<0-d)throw new _g('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};function Gf(){return Gf=Jy(py.mark((function t(e,n,i){var r;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,function(){var t=Jy(py.mark((function t(e,n,i){var r,c,l,o,a;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e instanceof Uint8Array&&(e=Qg.decode(e)),"string"==typeof e){t.next=2;break}throw new tf("Compact JWS must be a string or Uint8Array");case 2:if(r=e.split("."),c=r[0],l=r[1],o=r[2],3===r.length){t.next=5;break}throw new tf("Invalid Compact JWS");case 5:return t.next=7,Zf({payload:l||void 0,protected:c||void 0,signature:o||void 0},n,i);case 7:return a=t.sent,t.abrupt("return",{payload:a.payload,protectedHeader:a.protectedHeader});case 9:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}()(e,n,i);case 2:return r=t.sent,t.abrupt("return",{payload:Xf(r.protectedHeader,r.payload,i),protectedHeader:r.protectedHeader});case 4:case"end":return t.stop()}}),t)}))),Gf.apply(this,arguments)}var gf=function(){function t(){hy(this,t)}return by(t,null,[{key:"base64URLEncode",value:function(t){return Cg.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}},{key:"getCodeVerifier",value:function(){return this.base64URLEncode(Ag(32))}},{key:"getCodeChallenge",value:function(t){return this.base64URLEncode(new lI(Yg((new TextEncoder).encode(t))))}},{key:"getSupportedSignatureAlgorithms",value:function(){return["RS256","RS512","RS384","PS256"]}},{key:"getJWKForTheIdToken",value:function(t,e){var n,i=JSON.parse(Cg.decode(t,"utf8")),r=dG(e);try{for(r.s();!(n=r.n()).done;){var c=n.value;if(i.kid===c.kid)return uf({alg:c.alg,e:c.e,kty:c.kty,n:c.n})}}catch(t){r.e(t)}finally{r.f()}return Promise.reject(new gG("CRYPTO_UTIL-GTFTIT-IV01","crypto-utils","getJWKForTheIdToken","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+e.map((function(t){return t.kid})).join(", ")))}},{key:"isValidIdToken",value:function(t,e,n,i,r,c){return function(t,e,n){return Gf.apply(this,arguments)}(t,e,{algorithms:this.getSupportedSignatureAlgorithms(),audience:n,clockTolerance:c,issuer:i,subject:r}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(new gG("CRYPTO_UTIL-IVIT-IV02","crypto-utils","isValidIdToken","Validating ID token failed",t))}))}},{key:"decodeIDToken",value:function(t){try{var e=Cg.decode(t.split(".")[1],"utf8");return JSON.parse(e)}catch(t){throw new gG("CRYPTO_UTIL-DIT-IV01","crypto-utils","decodeIDToken","Decoding ID token failed.",t)}}}]),t}(),ff=function(){function t(){hy(this,t)}return by(t,null,[{key:"getAuthenticatedUserInfo",value:function(t){var e,n,i,r=gf.decodeIDToken(t),c=this.getTenantDomainFromIdTokenPayload(r),l=this.extractUserName(r),o=null!==(e=r.given_name)&&void 0!==e?e:"",a=null!==(n=r.family_name)&&void 0!==n?n:"",u=o&&a?"".concat(o," ").concat(a):o||a||"",d=null!==(i=r.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:d,tenantDomain:c,username:l},this.filterClaimsFromIDTokenPayload(r))}},{key:"filterClaimsFromIDTokenPayload",value:function(t){var e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.sub,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;var n={};return Object.entries(e).forEach((function(t){var e=Yy(t,2),i=e[0],r=e[1],c=i.split("_").map((function(t,e){return 0===e?t:[t[0].toUpperCase()].concat(Vy(t.slice(1))).join("")})).join("");n[c]=r})),n}},{key:"getTokenRequestHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}}]),t}();ff.extractUserName=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=t.sub.split(e);return n.length>2&&n.pop(),n.join(e)},ff.getTenantDomainFromIdTokenPayload=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=t.sub.split(e);return n.length>2?n[n.length-1]:""};var Vf,Wf,vf=function(){function t(e){var n=this;hy(this,t),this._dataLayer=e,this._config=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}}return by(t,[{key:"resolveWellKnownEndpoint",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._config();case 2:return e=t.sent,t.abrupt("return",e.wellKnownEndpoint?e.serverOrigin+e.wellKnownEndpoint:e.serverOrigin+"/oauth2/token/.well-known/openid-configuration");case 4:case"end":return t.stop()}}),t,this)})))}},{key:"resolveEndpoints",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.next=3,this._config();case 3:return i=e.sent,e.abrupt("return",(i.overrideWellEndpointConfig&&i.endpoints&&Object.keys(i.endpoints).forEach((function(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));n[e]=(null==i?void 0:i.endpoints)?i.endpoints[t]:""})),Object.assign(Object.assign({},t),n)));case 5:case"end":return e.stop()}}),e,this)})))}},{key:"resolveFallbackEndpoints",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:return(n=t.sent).endpoints&&Object.keys(n.endpoints).forEach((function(t){var i=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[i]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""})),i={authorization_endpoint:n.serverOrigin+"/oauth2/authorize",end_session_endpoint:n.serverOrigin+"/oidc/logout",jwks_uri:n.serverOrigin+"/oauth2/jwks",check_session_iframe:n.serverOrigin+"/oidc/checksession",revocation_endpoint:n.serverOrigin+"/oauth2/revoke",token_endpoint:n.serverOrigin+"/oauth2/token"},t.abrupt("return",Object.assign(Object.assign({},e),i));case 7:case"end":return t.stop()}}),t,this)})))}},{key:"validateIdToken",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return n=e.sent.jwks_uri,e.next=5,this._config();case 5:return i=e.sent,e.abrupt("return",n&&0!==n.trim().length?uG.get(n,{withCredentials:null==i?void 0:i.sendCookiesInRequests}).then((function(e){return bG(r,void 0,void 0,py.mark((function n(){var i,r,c=this;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(200===e.status){n.next=2;break}return n.abrupt("return",Promise.reject(new gG("AUTH_HELPER-VIT-NR02","authentication-helper","validateIdToken","Invalid response status received for jwks request.","The request sent to get the jwks returned "+e.status+" , which is invalid.")));case 2:return n.next=4,this._oidcProviderMetaData();case 4:return i=n.sent.issuer,n.next=7,this.resolveWellKnownEndpoint();case 7:return r=n.sent.split("/.well-known")[0],n.abrupt("return",i&&i===r?gf.getJWKForTheIdToken(t.split(".")[0],e.data.keys).then((function(e){return bG(c,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=gf,n.t1=t,n.t2=e,n.next=5,this._config();case 5:return n.t3=n.sent.clientID,n.t4=i,n.t5=gf.decodeIDToken(t).sub,n.next=10,this._config();case 10:return n.t6=n.sent.clockTolerance,n.abrupt("return",n.t0.isValidIdToken.call(n.t0,n.t1,n.t2,n.t3,n.t4,n.t5,n.t6).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-VIT-ES03","authentication-helper","validateIdToken",void 0,void 0,t))})));case 12:case"end":return n.stop()}}),n,this)})))})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-VIT-ES04","authentication-helper","validateIdToken",void 0,void 0,t))})):Promise.resolve(!1));case 9:case"end":return n.stop()}}),n,this)})))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_HELPER-VIT-NR05","authentication-helper","validateIdToken","Request to jwks endpoint failed.","The request sent to get the jwks from the server failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})):Promise.reject(new gG("AUTH_HELPER-VIT-NF01","authentication-helper","validateIdToken","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.")));case 7:case"end":return e.stop()}}),e,this)})))}},{key:"replaceCustomGrantTemplateTags",value:function(t){var e;return bG(this,void 0,void 0,py.mark((function n(){var i,r,c;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i="openid",n.next=3,this._config();case 3:return r=n.sent,n.next=6,this._dataLayer.getSessionData();case 6:return c=n.sent,n.abrupt("return",(r.scope&&r.scope.length>0&&(r.scope.includes("openid")||r.scope.push("openid"),i=r.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",ff.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",i).replace("{{clientID}}",r.clientID).replace("{{clientSecret}}",null!==(e=r.clientSecret)&&void 0!==e?e:"")));case 8:case"end":return n.stop()}}),n,this)})))}},{key:"clearUserSessionData",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.removeOIDCProviderMetaData();case 2:return t.next=4,this._dataLayer.removeTemporaryData();case 4:return t.next=6,this._dataLayer.removeSessionData();case 6:case"end":return t.stop()}}),t,this)})))}},{key:"handleTokenResponse",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(200===t.status){e.next=2;break}return e.abrupt("return",Promise.reject(new gG("AUTH_HELPER-HTR-NR01","authentication-helper","handleTokenResponse","Invalid response status received for token request.","The request sent to get the token returned "+t.status+" , which is invalid.")));case 2:return e.next=4,this._config();case 4:if(!e.sent.validateIDToken){e.next=6;break}return e.abrupt("return",this.validateIdToken(t.data.id_token).then((function(e){return bG(i,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!e){n.next=5;break}return n.next=3,this._dataLayer.setSessionData(t.data);case 3:return i={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type},n.abrupt("return",Promise.resolve(i));case 5:return n.abrupt("return",Promise.reject(new gG("AUTH_HELPER-HTR-IV02","authentication-helper","handleTokenResponse","The id token returned is not valid.","The id token returned has failed the validation check.")));case 6:case"end":return n.stop()}}),n,this)})))})).catch((function(t){return Promise.reject(new gG("AUTH_HELPER-HAT-ES03","authentication-helper","handleTokenResponse",void 0,void 0,t))})));case 6:return n={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type},e.next=9,this._dataLayer.setSessionData(t.data);case 9:return e.abrupt("return",Promise.resolve(n));case 10:case"end":return e.stop()}}),e,this)})))}}]),t}(),Sf=function(){function t(e){var n=this;hy(this,t),this._authenticationHelper=new vf(e),this._dataLayer=e,this._config=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return bG(n,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}}return by(t,[{key:"getAuthorizationURL",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r,c,l,o,a,u,d,s,m,h;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");case 2:return n=e.sent,e.next=5,this._config();case 5:if(i=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new gG("AUTH_CORE-GAU-NF01","authentication-core","getAuthorizationURL","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");case 8:if((r=new URL(n)).searchParams.append("response_type","code"),r.searchParams.append("client_id",i.clientID),c="openid",i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),c=i.scope.join(" ")),r.searchParams.append("scope",c),r.searchParams.append("redirect_uri",i.signInRedirectURL),i.responseMode&&r.searchParams.append("response_mode",i.responseMode),!i.enablePKCE){e.next=17;break}return l=gf.getCodeVerifier(),o=gf.getCodeChallenge(l),e.next=15,this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",l);case 15:r.searchParams.append("code_challenge_method","S256"),r.searchParams.append("code_challenge",o);case 17:if(i.prompt&&r.searchParams.append("prompt",i.prompt),a=t)for(u=0,d=Object.entries(a);u<d.length;u++)s=Yy(d[u],2),m=s[0],h=s[1],""!=m&&""!=h&&r.searchParams.append(m,h.toString());return e.abrupt("return",r.toString());case 21:case"end":return e.stop()}}),e,this)})))}},{key:"requestAccessToken",value:function(t,e){return bG(this,void 0,void 0,py.mark((function n(){var i,r,c,l,o=this;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._oidcProviderMetaData();case 2:return i=n.sent.token_endpoint,n.next=5,this._config();case 5:if(r=n.sent,i&&0!==i.trim().length){n.next=8;break}return n.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT1-NF01","authentication-core","requestAccessToken","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.")));case 8:if(n.t0=e,!n.t0){n.next=12;break}return n.next=12,this._dataLayer.setSessionDataParameter("session_state",e);case 12:if((c=[]).push("client_id=".concat(r.clientID)),r.clientSecret&&r.clientSecret.trim().length>0&&c.push("client_secret=".concat(r.clientSecret)),l=t,c.push("code=".concat(l)),c.push("grant_type=authorization_code"),c.push("redirect_uri=".concat(r.signInRedirectURL)),n.t1=r.enablePKCE,!n.t1){n.next=29;break}return n.t2=c,n.t3="code_verifier=",n.next=24,this._dataLayer.getTemporaryDataParameter("pkce_code_verifier");case 24:return n.t4=n.sent,n.t5=n.t3.concat.call(n.t3,n.t4),n.t2.push.call(n.t2,n.t5),n.next=29,this._dataLayer.removeTemporaryDataParameter("pkce_code_verifier");case 29:return n.abrupt("return",uG.post(i,c.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:r.sendCookiesInRequests}).then((function(t){return o._authenticationHelper.handleTokenResponse(t).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RAT1-ES02","authentication-core","requestAccessToken",void 0,void 0,t))}))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT1-NR03","authentication-core","requestAccessToken","Requesting access token failed","The request to get the access token from the server failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 30:case"end":return n.stop()}}),n,this)})))}},{key:"refreshAccessToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i,r,c=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent.token_endpoint,t.next=5,this._config();case 5:return n=t.sent,t.next=8,this._dataLayer.getSessionData();case 8:if((i=t.sent).refresh_token){t.next=11;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT2-NF01","authentication-core","refreshAccessToken","No refresh token found.","There was no refresh token found. The identity server doesn't return a refresh token if the refresh token grant is not enabled.")));case 11:if(e&&0!==e.trim().length){t.next=13;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT2-NF02","authentication-core","refreshAccessToken","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.")));case 13:return r=[],t.abrupt("return",(r.push("client_id=".concat(n.clientID)),r.push("refresh_token=".concat(i.refresh_token)),r.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&r.push("client_secret=".concat(n.clientSecret)),uG.post(e,r.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then((function(t){return c._authenticationHelper.handleTokenResponse(t).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RAT2-ES03","authentication-core","refreshAccessToken",void 0,void 0,t))}))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT2-NR03","authentication-core","refreshAccessToken","Refresh access token request failed.","The request to refresh the access token failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))}))));case 15:case"end":return t.stop()}}),t,this)})))}},{key:"revokeAccessToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i,r=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent.revocation_endpoint,t.next=5,this._config();case 5:if(n=t.sent,e&&0!==e.trim().length){t.next=8;break}return t.abrupt("return",Promise.reject(new gG("AUTH_CORE-RAT3-NF01","authentication-core","revokeAccessToken","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.")));case 8:return(i=[]).push("client_id=".concat(n.clientID)),t.t0=i,t.t1="token=",t.next=14,this._dataLayer.getSessionData();case 14:return t.t2=t.sent.access_token,t.t3=t.t1.concat.call(t.t1,t.t2),t.t0.push.call(t.t0,t.t3),i.push("token_type_hint=access_token"),t.abrupt("return",uG.post(e,i.join("&"),{headers:ff.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then((function(t){return 200!==t.status?Promise.reject(new gG("AUTH_CORE-RAT3-NR02","authentication-core","revokeAccessToken","Invalid response status received for revoke access token request.","The request sent to revoke the access token returned "+t.status+" , which is invalid.")):(r._authenticationHelper.clearUserSessionData(),Promise.resolve(t))})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RAT3-NR03","authentication-core","revokeAccessToken","The request to revoke access token failed.","The request sent to revoke the access token failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 19:case"end":return t.stop()}}),t,this)})))}},{key:"requestCustomGrant",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i,r,c,l=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._oidcProviderMetaData();case 2:return n=e.sent,e.next=5,this._config();case 5:if(i=e.sent,(r=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint)&&0!==r.trim().length){e.next=8;break}return e.abrupt("return",Promise.reject(new gG("AUTH_CORE-RCG-NF01","authentication-core","requestCustomGrant","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.")));case 8:return e.next=10,Promise.all(Object.entries(t.data).map((function(t){var e=Yy(t,2),n=e[0],i=e[1];return bG(l,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationHelper.replaceCustomGrantTemplateTags(i);case 2:return e=t.sent,t.abrupt("return","".concat(n,"=").concat(e));case 4:case"end":return t.stop()}}),t,this)})))})));case 10:if(e.t0=e.sent.join("&"),e.t1=Object.assign({},ff.getTokenRequestHeaders()),e.t2=r,e.t3=i.sendCookiesInRequests,c={data:e.t0,headers:e.t1,method:"POST",url:e.t2,withCredentials:e.t3},e.t4=t.attachToken,!e.t4){e.next=26;break}return e.t5=Object,e.t6=Object.assign({},c.headers),e.t7="Bearer ",e.next=22,this._dataLayer.getSessionData();case 22:e.t8=e.sent.access_token,e.t9=e.t7.concat.call(e.t7,e.t8),e.t10={Authorization:e.t9},c.headers=e.t5.assign.call(e.t5,e.t6,e.t10);case 26:return e.abrupt("return",uG(c).then((function(e){return 200!==e.status?Promise.reject(new gG("AUTH_CORE-RCG-NR02","authentication-core","requestCustomGrant","Invalid response status received for the custom grant request.","The request sent to get the custom grant returned "+e.status+" , which is invalid.")):t.returnsSession?l._authenticationHelper.handleTokenResponse(e).then((function(t){return t})).catch((function(t){return Promise.reject(new gG("AUTH_CORE-RCG-ES03","authentication-core","requestCustomGrant",void 0,void 0,t))})):Promise.resolve(e)})).catch((function(t){var e,n,i;return Promise.reject(new fG("AUTH_CORE-RCG-NR04","authentication-core","requestCustomGrant","The custom grant request failed.","The request sent to get the custom grant failed.",null!==(e=null==t?void 0:t.code)&&void 0!==e?e:"",null==t?void 0:t.message,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})));case 27:case"end":return e.stop()}}),e,this)})))}},{key:"getBasicUserInfo",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e,n,i;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return e=t.sent,n=ff.getAuthenticatedUserInfo(null==e?void 0:e.id_token),i={allowedScopes:e.scope,sessionState:e.session_state,username:n.username},t.abrupt("return",(n.displayName&&""!==n.displayName||delete n.displayName,n.tenantDomain&&""!==n.tenantDomain||delete n.tenantDomain,i=Object.assign(Object.assign({},i),n)));case 6:case"end":return t.stop()}}),t,this)})))}},{key:"getDecodedIDToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return e=t.sent.id_token,t.abrupt("return",gf.decodeIDToken(e));case 4:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:return t.abrupt("return",t.sent.id_token);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"getOIDCProviderMetaData",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){var n,i=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=!t,!e.t0){e.next=5;break}return e.next=4,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 4:e.t0=e.sent;case 5:if(!e.t0){e.next=7;break}return e.abrupt("return",Promise.resolve(!0));case 7:return e.next=9,this._authenticationHelper.resolveWellKnownEndpoint();case 9:return n=e.sent,e.abrupt("return",uG.get(n).then((function(t){return bG(i,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(200===t.status){e.next=4;break}e.t0=Promise.reject(new gG("AUTH_CORE-GOPM-NR01","authentication-core","getOIDCProviderMetaData","Invalid response status received for OIDC provider meta data request.","The request sent to the well-known endpoint to get the OIDC provider meta data returned "+t.status+" , which is invalid.")),e.next=13;break;case 4:return e.t1=this._dataLayer,e.next=7,this._authenticationHelper.resolveEndpoints(t.data);case 7:return e.t2=e.sent,e.next=10,e.t1.setOIDCProviderMetaData.call(e.t1,e.t2);case 10:return e.next=12,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 12:e.t0=Promise.resolve(!0);case 13:return e.abrupt("return",e.t0);case 14:case"end":return e.stop()}}),e,this)})))})).catch((function(){return bG(i,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=this._dataLayer,t.next=3,this._authenticationHelper.resolveFallbackEndpoints();case 3:return t.t1=t.sent,t.next=6,t.t0.setOIDCProviderMetaData.call(t.t0,t.t1);case 6:return t.next=8,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 8:return t.abrupt("return",Promise.resolve(!0));case 9:case"end":return t.stop()}}),t,this)})))})));case 11:case"end":return e.stop()}}),e,this)})))}},{key:"getOIDCServiceEndpoints",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return e=t.sent,t.t0=e.authorization_endpoint,t.t1=e.check_session_iframe,t.t2=e.end_session_endpoint,t.t3=e.introspection_endpoint,t.t4=e.issuer,t.t5=e.jwks_uri,t.t6=e.registration_endpoint,t.t7=e.revocation_endpoint,t.t8=e.token_endpoint,t.t9=e.userinfo_endpoint,t.next=15,this._authenticationHelper.resolveWellKnownEndpoint();case 15:return t.t10=t.sent,t.abrupt("return",{authorizationEndpoint:t.t0,checkSessionIframe:t.t1,endSessionEndpoint:t.t2,introspectionEndpoint:t.t3,issuer:t.t4,jwksUri:t.t5,registrationEndpoint:t.t6,revocationEndpoint:t.t7,tokenEndpoint:t.t8,userinfoEndpoint:t.t9,wellKnownEndpoint:t.t10});case 17:case"end":return t.stop()}}),t,this)})))}},{key:"getSignOutURL",value:function(){var t,e,n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._oidcProviderMetaData();case 2:if(i.t1=t=i.sent,i.t0=null===i.t1,i.t0){i.next=6;break}i.t0=void 0===t;case 6:if(!i.t0){i.next=10;break}i.t2=void 0,i.next=11;break;case 10:i.t2=t.end_session_endpoint;case 11:return r=i.t2,i.next=14,this._config();case 14:if(c=i.sent,r&&0!==r.trim().length){i.next=17;break}throw new gG("AUTH_CORE-GSOU-NF01","authentication-core","getSignOutURL","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");case 17:return i.next=19,this._dataLayer.getSessionData();case 19:if(i.t4=e=i.sent,i.t3=null===i.t4,i.t3){i.next=23;break}i.t3=void 0===e;case 23:if(!i.t3){i.next=27;break}i.t5=void 0,i.next=28;break;case 27:i.t5=e.id_token;case 28:if((l=i.t5)&&0!==l.trim().length){i.next=31;break}throw new gG("AUTH_CORE-GSOU-NF02","authentication-core","getSignOutURL","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");case 31:if((o=null!==(n=null==c?void 0:c.signOutRedirectURL)&&void 0!==n?n:null==c?void 0:c.signInRedirectURL)&&0!==o.trim().length){i.next=34;break}throw new gG("AUTH_CORE-GSOU-NF03","authentication-core","getSignOutURL","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");case 34:return i.abrupt("return","".concat(r,"?id_token_hint=").concat(l,"&post_logout_redirect_uri=").concat(o,"&state=sign_out_success"));case 35:case"end":return i.stop()}}),i,this)})))}},{key:"signOut",value:function(){return bG(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getSignOutURL();case 2:return e=t.sent,t.abrupt("return",(this._authenticationHelper.clearUserSessionData(),e));case 4:case"end":return t.stop()}}),t,this)})))}},{key:"getAccessToken",value:function(){var t;return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData();case 2:if(e.t1=t=e.sent,e.t0=null===e.t1,e.t0){e.next=6;break}e.t0=void 0===t;case 6:if(!e.t0){e.next=10;break}e.t2=void 0,e.next=11;break;case 10:e.t2=t.access_token;case 11:return e.abrupt("return",e.t2);case 12:case"end":return e.stop()}}),e,this)})))}},{key:"isAuthenticated",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=Boolean,t.next=3,this.getAccessToken();case 3:return t.t1=t.sent,t.abrupt("return",(0,t.t0)(t.t1));case 5:case"end":return t.stop()}}),t,this)})))}},{key:"getPKCECode",value:function(){return bG(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter("pkce_code_verifier");case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"setPKCECode",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))}},{key:"updateConfig",value:function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setConfigData(t);case 2:if(!t.overrideWellEndpointConfig){e.next=13;break}if(e.t0=null==t?void 0:t.endpoints,!e.t0){e.next=11;break}return e.t1=this._dataLayer,e.next=8,this._authenticationHelper.resolveEndpoints({});case 8:return e.t2=e.sent,e.next=11,e.t1.setOIDCProviderMetaData.call(e.t1,e.t2);case 11:e.next=17;break;case 13:if(e.t3=null==t?void 0:t.endpoints,!e.t3){e.next=17;break}return e.next=17,this.getOIDCProviderMetaData(!0);case 17:case"end":return e.stop()}}),e,this)})))}}]),t}(),Cf=function(){function e(t,n){hy(this,e),this._id=t,this._store=n}return by(e,[{key:"setDataInBulk",value:function(t,e){var n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),l=Object.assign(Object.assign({},c),e),o=JSON.stringify(l),i.next=17,this._store.setData(t,o);case 17:case"end":return i.stop()}}),i,this)})))}},{key:"setValue",value:function(t,e,n){var i;return bG(this,void 0,void 0,py.mark((function r(){var c,l,o,a;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(t);case 2:if(r.t1=i=r.sent,r.t0=null!==r.t1,!r.t0){r.next=6;break}r.t0=void 0!==i;case 6:if(!r.t0){r.next=10;break}r.t2=i,r.next=11;break;case 10:r.t2=null;case 11:return c=r.t2,l=c&&JSON.parse(c),o=Object.assign(Object.assign({},l),Ky({},e,n)),a=JSON.stringify(o),r.next=17,this._store.setData(t,a);case 17:case"end":return r.stop()}}),r,this)})))}},{key:"removeValue",value:function(t,e){var n;return bG(this,void 0,void 0,py.mark((function i(){var r,c,l,o;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),delete(l=Object.assign({},c))[e],o=JSON.stringify(l),i.next=18,this._store.setData(t,o);case 18:case"end":return i.stop()}}),i,this)})))}},{key:"_resolveKey",value:function(t){return"".concat(t,"-").concat(this._id)}},{key:"setConfigData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.setDataInBulk(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"setOIDCProviderMetaData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setTemporaryData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.TemporaryData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setSessionData",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.SessionData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getConfigData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.TemporaryData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getSessionData",value:function(){var e;return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.SessionData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"removeConfigData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.ConfigData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeOIDCProviderMetaData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeTemporaryData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.TemporaryData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeSessionData",value:function(){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.SessionData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"getConfigDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.TemporaryData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getSessionDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){var i;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.SessionData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"setConfigDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.ConfigData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setOIDCProviderMetaDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setTemporaryDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.TemporaryData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setSessionDataParameter",value:function(e,n){return bG(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.SessionData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"removeConfigDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeOIDCProviderMetaDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeTemporaryDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.TemporaryData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeSessionDataParameter",value:function(e){return bG(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.SessionData),e);case 2:case"end":return n.stop()}}),n,this)})))}}]),e}(),Yf={clientHost:origin,clockTolerance:300,enablePKCE:!0,responseMode:t.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0},Rf=function(){
16
16
  /**
17
17
  * This is the constructor method that returns an instance of the .
18
18
  *
@@ -390,7 +390,7 @@ function t(e){hy(this,t),t._instanceID?t._instanceID+=1:t._instanceID=0,this._da
390
390
  *
391
391
  * @preserve
392
392
  */
393
- function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationCore.updateConfig(t);case 2:case"end":return e.stop()}}),e,this)})))}}],[{key:"isSignOutSuccessful",value:function(t){var e=new URL(t),n=e.searchParams.get("state"),i=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!i}}]),t}(),Kf="sign-out",Lf="get_auth_url",Jf="check_session_signed_in",xf="check_session_signed_out";t.Storage=void 0,(Vf=t.Storage||(t.Storage={})).LocalStorage="localStorage",Vf.SessionStorage="sessionStorage",Vf.WebWorker="webWorker",Vf.BrowserMemory="browserMemory",t.Hooks=void 0,(Wf=t.Hooks||(t.Hooks={})).SignIn="sign-in",Wf.SignOut="sign-out",Wf.Initialize="initialize",Wf.HttpRequestStart="http-request-start",Wf.HttpRequestFinish="http-request-finish",Wf.HttpRequestError="http-request-error",Wf.HttpRequestSuccess="http-request-success",Wf.RevokeAccessToken="revoke-access-token",Wf.CustomGrant="custom-grant";var Nf="rpIFrame",Hf="promptNoneIFrame",kf="Y2hlY2tTZXNzaW9u",Uf="sign-in-silently",Tf="initialized-sign-in",wf="initialized-silent-sign-in",Ff="promptNoneRequestSent",zf="error",jf="error_description";function Bf(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return Ty(this,n)}}var Mf,Af,Pf,Qf,Df,Ef,Of,_f,qf,$f,tV,eV,nV,iV,rV,cV,lV=function(t){ky(n,t);var e=Bf(n);function n(t,i,r,c,l,o){var a;return hy(this,n),(a=e.call(this,null!=c?c:null==o?void 0:o.message)).name=a.constructor.name,a.code=t,a.file=i,a.method=r,a.error=o,a.description=l,Object.setPrototypeOf(Ny(a),(this instanceof n?this.constructor:void 0).prototype),a}return n}(Ay(Error)),oV=function(){function t(e){hy(this,t),this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}return by(t,[{key:"refreshAccessTokenAutomatically",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e,n,i,r=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:if(!(e=t.sent).refresh_token){t.next=9;break}return n=parseInt(e.expires_in),i=setTimeout((function(){return yy(r,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationClient.refreshAccessToken();case 2:case"end":return t.stop()}}),t,this)})))}),1e3*(n<=10?n:n-10)),t.next=9,this._dataLayer.setTemporaryDataParameter(pG,JSON.stringify(i));case 9:case"end":return t.stop()}}),t,this)})))}},{key:"clearRefreshTokenTimeout",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(pG);case 2:if(!t.sent){t.next=9;break}return t.t0=JSON,t.next=6,this._dataLayer.getTemporaryDataParameter(pG);case 6:t.t1=t.sent,e=t.t0.parse.call(t.t0,t.t1),clearTimeout(e);case 9:case"end":return t.stop()}}),t,this)})))}}]),t}(),aV=function(){function t(){hy(this,t)}return by(t,null,[{key:"removeAuthorizationCode",value:function(){var t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}},{key:"getPKCE",value:function(){var t;return null!==(t=sessionStorage.getItem(yG))&&void 0!==t?t:""}},{key:"setPKCE",value:function(t){sessionStorage.setItem(yG,t)}},{key:"setSignOutURL",value:function(t){sessionStorage.setItem(GG,t)}},{key:"getSignOutURL",value:function(){var t;return null!==(t=sessionStorage.getItem(GG))&&void 0!==t?t:""}},{key:"removePKCE",value:function(){sessionStorage.removeItem(yG)}},{key:"setInitializedSignIn",value:function(t){var e=sessionStorage.getItem(Tf),n=e?JSON.parse(e):null;return t&&n?(sessionStorage.setItem(Tf,"false"),!0):!t&&(n?(sessionStorage.setItem(Tf,"false"),!0):(sessionStorage.setItem(Tf,"true"),!0))}},{key:"setIsInitializedSilentSignIn",value:function(){var t=sessionStorage.getItem(wf);return(t?JSON.parse(t):null)?(sessionStorage.setItem(wf,"false"),!0):(sessionStorage.setItem(wf,"true"),!1)}},{key:"wasSignInCalled",value:function(){var t=sessionStorage.getItem(Tf),e=t?JSON.parse(t):null,n=sessionStorage.getItem(wf),i=n?JSON.parse(n):null;return e&&!i}},{key:"wasSilentSignInCalled",value:function(){var t=sessionStorage.getItem(wf),e=t?JSON.parse(t):null;return Boolean(e)}},{key:"isSignOutSuccessful",value:function(){if(Rf.isSignOutSuccessful(window.location.href)){var t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}},{key:"isStatePresentInURL",value:function(){var t=new URL(window.location.href).searchParams.get("state");return t===Uf||t===kf}},{key:"hasAuthSearchParamsInURL",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search,e=/[?&]code=[^&]+/,n=/[?&]session_state=[^&]+/;return e.test(t)&&n.test(t)}},{key:"canSendPromptNoneRequest",value:function(){var t=sessionStorage.getItem(Ff);return!(t?JSON.parse(t):null)}},{key:"setPromptNoneRequestSent",value:function(t){sessionStorage.setItem(Ff,JSON.stringify(t))}},{key:"waitTillPageRedirect",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=null!=t?t:3e3,e.next=3,new Promise((function(t){return setTimeout(t,1e3*n)}));case 3:case"end":return e.stop()}}),e)})))}}]),t}(),uV=($f=function(t,e,n,i,r,c,l){Mf=t,Af=e,Pf=n,Df=c,Ef=l,Of=r,(Qf=i)>-1&&tV(),Of>-1&&(r=setInterval((function(){iV()}),1e3*Of))},tV=function(){if(Af&&Mf&&Df){var t=document.getElementById(Nf);t.contentWindow.eval(e.toString()),(null==t?void 0:t.contentWindow)&&(null==t||t.contentWindow[e.name](Af,Mf,Df,Pf,Qf)),nV()}function e(t,e,n,i,r){var c="opIFrame";function l(){if(Boolean(e)&&Boolean(i)){var n="".concat(e," ").concat(i),r=document.getElementById(c).contentWindow;null==r||r.postMessage(n,t)}}document.getElementById(c).src=t+"?client_id="+e+"&redirect_uri="+n,l(),qf=setInterval(l,1e3*r)}},eV=function(){clearInterval(qf),clearInterval(void 0)},nV=function(){var t,e=document.getElementById(Nf);null===(t=null==e?void 0:e.contentWindow)||void 0===t||t.addEventListener("message",(function(t){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((n=Af)&&!((null==n?void 0:n.indexOf(t.origin))<0)){e.next=3;break}return e.abrupt("return");case 3:if("unchanged"!==t.data){e.next=6;break}e.next=13;break;case 6:if("error"!==t.data){e.next=12;break}return e.next=9,_f();case 9:window.parent.location.href=e.sent,e.next=13;break;case 12:iV();case 13:case"end":return e.stop()}}),e)})))}),!1)},iV=function(){var t,e=document.getElementById(Nf),n=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById(Hf);aV.canSendPromptNoneRequest()&&(aV.setPromptNoneRequestSent(!0),n.src=Ef+"?response_type=code&client_id="+Mf+"&scope=openid&redirect_uri="+Df+"&state="+kf+"&prompt=none&code_challenge_method=S256&code_challenge="+function(){for(var t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_",e="",n=0;n<43;n++){var i=Math.floor(Math.random()*t.length);e+=t.substring(i,i+1)}return e}())},rV=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,c,l,o,a;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(XG),r=window.parent.parent,null===n||n!==kf&&n!==Uf){e.next=44;break}if(null===(c=new URL(window.location.href).searchParams.get("code"))||0===c.length){e.next=27;break}if(n!==Uf){e.next=15;break}return l={data:{code:c,sessionState:null!=i?i:""},type:Jf},sessionStorage.setItem(wf,"false"),r.postMessage(l,r.origin),aV.setPromptNoneRequestSent(!1),window.location.href="about:blank",e.next=14,aV.waitTillPageRedirect();case 14:case 24:case 35:case 43:return e.abrupt("return",!0);case 15:if(o=new URL(window.location.href).searchParams.get("session_state"),e.t0=t,!e.t0){e.next=20;break}return e.next=20,t(o);case 20:return aV.setPromptNoneRequestSent(!1),window.location.href="about:blank",e.next=24,aV.waitTillPageRedirect();case 27:if(n!==Uf){e.next=36;break}return a={type:xf},sessionStorage.setItem(wf,"false"),window.parent.parent.postMessage(a,r.origin),aV.setPromptNoneRequestSent(!1),window.location.href="about:blank",e.next=35,aV.waitTillPageRedirect();case 36:return aV.setPromptNoneRequestSent(!1),e.next=39,_f();case 39:return r.location.href=e.sent,window.location.href="about:blank",e.next=43,aV.waitTillPageRedirect();case 44:return e.abrupt("return",!1);case 45:case"end":return e.stop()}}),e)})))},function(t){var e,n,i,r,c,l=document.createElement("iframe");l.setAttribute("id","opIFrame"),l.style.display="none";var o=document.createElement("iframe");o.setAttribute("id",Nf),o.style.display="none";var a=document.createElement("iframe");return a.setAttribute("id",Hf),a.style.display="none",null===(e=null===document||void 0===document?void 0:document.body)||void 0===e||e.appendChild(o),null===(i=null===(n=null==(o=document.getElementById(Nf))?void 0:o.contentDocument)||void 0===n?void 0:n.body)||void 0===i||i.appendChild(l),null===(c=null===(r=null==o?void 0:o.contentDocument)||void 0===r?void 0:r.body)||void 0===c||c.appendChild(a),_f=t,{initialize:$f,receivePromptNoneResponse:rV,reset:eV}});var dV=cV=function(){function t(){hy(this,t),this.attachToken=function(){return Promise.resolve()},this.requestStartCallback=function(){return null},this.requestSuccessCallback=function(){return null},this.requestErrorCallback=function(){return null},this.requestFinishCallback=function(){return null},this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}return by(t,[{key:"requestHandler",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.attachToken(t);case 2:return cV.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)})))}},{key:"errorHandler",value:function(t){throw cV.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"successHandler",value:function(t){return cV.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"init",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=arguments.length>1?arguments[1]:void 0;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:cV.isHandlerEnabled=t,this.attachToken=e;case 2:case"end":return n.stop()}}),n,this)})))}},{key:"enableHandler",value:function(){cV.isHandlerEnabled=!0}},{key:"disableHandler",value:function(){cV.isHandlerEnabled=!1}},{key:"disableHandlerWithTimeout",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:cV.DEFAULT_HANDLER_DISABLE_TIMEOUT;cV.isHandlerEnabled=!1,setTimeout((function(){cV.isHandlerEnabled=!0}),t)}},{key:"setHttpRequestStartCallback",value:function(t){this.requestStartCallback=t}},{key:"setHttpRequestSuccessCallback",value:function(t){this.requestSuccessCallback=t}},{key:"setHttpRequestErrorCallback",value:function(t){this.requestErrorCallback=t}},{key:"setHttpRequestFinishCallback",value:function(t){this.requestFinishCallback=t}}],[{key:"getInstance",value:function(){var t=this;return this.axiosInstance||(this.axiosInstance=uG.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new cV),this.axiosInstance.interceptors.request.use((function(e){return yy(t,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.clientInstance.requestHandler(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))})),this.axiosInstance.interceptors.response.use((function(e){return t.clientInstance.successHandler(e)}),(function(e){return t.clientInstance.errorHandler(e)})),this.axiosInstance.all=uG.all,this.axiosInstance.spread=uG.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}}]),t}();dV.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,dV=cV=function(t,e,n,i){var r,c=arguments.length,l=c<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if("object"===("undefined"==typeof Reflect?"undefined":o(Reflect))&&"function"==typeof Reflect.decorate)l=Reflect.decorate(t,e,n,i);else for(var a=t.length-1;a>=0;a--)(r=t[a])&&(l=(c<3?r(l):c>3?r(e,n,l):r(e,n))||l);return c>3&&l&&Object.defineProperty(e,n,l),l}([function(t){}],dV);var sV=function(){function t(){hy(this,t)}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:localStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:localStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),mV=function(){function t(){hy(this,t),this._data=new Map}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this._data.set(t,e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getData",value:function(t){var e,n;return yy(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}");case 1:case"end":return i.stop()}}),i,this)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._data.delete(t);case 1:case"end":return e.stop()}}),e,this)})))}}]),t}(),hV=function(){function t(){hy(this,t)}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:sessionStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:sessionStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}();function ZV(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return bV(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bV(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}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 c,l=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){o=!0,c=t},f:function(){try{l||null==n.return||n.return()}finally{if(o)throw c}}}}function bV(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var pV=function(e){switch(e){case t.Storage.LocalStorage:return new sV;case t.Storage.SessionStorage:return new hV;case t.Storage.BrowserMemory:return new mV;default:return new hV}},yV=function(e){return yy(void 0,void 0,void 0,py.mark((function n(){var i,r,c,l,o,a,u,d,s,m,h,Z,b,p,y,I,X,G,g,f,V,W,v,S,C,Y,R,K,L,J,x;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=pV(e.storage),r=new Rf(i),n.next=4,r.initialize(e);case 4:if(c=new oV(r),l=r.getDataLayer(),o=uV((function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.signOut());case 1:case"end":return t.stop()}}),t)})))})),a=dV.getInstance(),u=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Object.assign({attachToken:!0},t).attachToken){e.next=11;break}return e.t0=Object,e.t1=Object.assign({},t.headers),e.t2="Bearer ",e.next=7,r.getAccessToken();case 7:e.t3=e.sent,e.t4=e.t2.concat.call(e.t2,e.t3),e.t5={Authorization:e.t4},t.headers=e.t0.assign.call(e.t0,e.t1,e.t5);case 11:case"end":return e.stop()}}),e)})))},n.t0=null==a?void 0:a.init,!n.t0){n.next=13;break}return n.next=13,a.init(!0,u);case 13:return d=function(t){(null==a?void 0:a.setHttpRequestStartCallback)&&a.setHttpRequestStartCallback(t)},s=function(t){(null==a?void 0:a.setHttpRequestSuccessCallback)&&a.setHttpRequestSuccessCallback(t)},m=function(t){(null==a?void 0:a.setHttpRequestFinishCallback)&&a.setHttpRequestFinishCallback(t)},h=function(t){(null==a?void 0:a.setHttpRequestErrorCallback)&&a.setHttpRequestErrorCallback(t)},Z=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,c,o,u,d,s;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=!1,e.next=3,l.getConfigData();case 3:return o=e.sent,u=0,e.t0=[],e.t1=Vy,e.next=9,null==o?void 0:o.resourceServerURLs;case 9:if(e.t3=n=e.sent,e.t2=null!==e.t3,!e.t2){e.next=13;break}e.t2=void 0!==n;case 13:if(!e.t2){e.next=17;break}e.t4=n,e.next=18;break;case 17:e.t4=[];case 18:e.t5=e.t4,e.t6=(0,e.t1)(e.t5),e.t7=[null==o?void 0:o.serverOrigin],d=e.t0.concat.call(e.t0,e.t6,e.t7);case 22:if(!(u<d.length)){e.next=30;break}if(s=d[u],!(null===(i=null==t?void 0:t.url)||void 0===i?void 0:i.startsWith(s))){e.next=27;break}return c=!0,e.abrupt("break",30);case 27:u++,e.next=22;break;case 30:if(!c){e.next=34;break}return e.abrupt("return",a.request(t).then((function(t){return Promise.resolve(t)})).catch((function(e){var n;return 401===(null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.status)?r.refreshAccessToken().then((function(){return a.request(t).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(new lV("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",t))})):Promise.reject(e)})));case 34:return e.abrupt("return",Promise.reject(new lV("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")));case 35:case"end":return e.stop()}}),e)})))},b=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,c,o,u,d,s,m,h,Z,b,p,y;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=!0,e.next=3,l.getConfigData();case 3:u=e.sent,d=ZV(t),e.prev=5,d.s();case 7:if((s=d.n()).done){e.next=50;break}return m=s.value,h=!1,Z=0,e.t0=[],e.t1=Vy,e.next=15,u;case 15:if(e.t4=n=e.sent,e.t3=null===e.t4,e.t3){e.next=19;break}e.t3=void 0===n;case 19:if(!e.t3){e.next=23;break}e.t5=void 0,e.next=24;break;case 23:e.t5=n.resourceServerURLs;case 24:if(e.t6=i=e.t5,e.t2=null!==e.t6,!e.t2){e.next=28;break}e.t2=void 0!==i;case 28:if(!e.t2){e.next=32;break}e.t7=i,e.next=33;break;case 32:e.t7=[];case 33:e.t8=e.t7,e.t9=(0,e.t1)(e.t8),e.t10=[null==u?void 0:u.serverOrigin],b=e.t0.concat.call(e.t0,e.t9,e.t10);case 37:if(!(Z<b.length)){e.next=45;break}if(p=b[Z],!(null===(c=m.url)||void 0===c?void 0:c.startsWith(p))){e.next=42;break}return h=!0,e.abrupt("break",45);case 42:Z++,e.next=37;break;case 45:if(h){e.next=48;break}return o=!1,e.abrupt("break",50);case 48:e.next=7;break;case 50:e.next=55;break;case 52:e.prev=52,e.t11=e.catch(5),d.e(e.t11);case 55:return e.prev=55,d.f(),e.finish(55);case 58:if(y=[],!o){e.next=64;break}return t.forEach((function(t){y.push(a.request(t))})),e.abrupt("return",(null==a?void 0:a.all)&&a.all(y).then((function(t){return Promise.resolve(t)})).catch((function(t){var e;return 401===(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status)?r.refreshAccessToken().then((function(){return a.all&&a.all(y).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(new lV("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",t))})):Promise.reject(t)})));case 64:return e.abrupt("return",Promise.reject(new lV("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")));case 65:case"end":return e.stop()}}),e,null,[[5,52,55,58]])})))},p=function(){return a},y=function(){return(null==a?void 0:a.enableHandler)&&a.enableHandler(),!0},I=function(){return(null==a?void 0:a.disableHandler)&&a.disableHandler(),!0},X=function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,c,a,u;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,r.getOIDCServiceEndpoints();case 2:return a=t.sent,t.next=5,l.getConfigData();case 5:return u=t.sent,t.t0=o,t.t1=u.clientID,t.t2=null!==(e=a.checkSessionIframe)&&void 0!==e?e:"",t.next=11,r.getBasicUserInfo();case 11:t.t3=t.sent.sessionState,t.t4=null!==(n=u.checkSessionInterval)&&void 0!==n?n:3,t.t5=null!==(i=u.sessionRefreshInterval)&&void 0!==i?i:300,t.t6=u.signInRedirectURL,t.t7=null!==(c=a.authorizationEndpoint)&&void 0!==c?c:"",t.t0.initialize.call(t.t0,t.t1,t.t2,t.t3,t.t4,t.t5,t.t6,t.t7);case 17:case"end":return t.stop()}}),t)})))},G=function(e,n,i){return yy(void 0,void 0,void 0,py.mark((function a(){var u,d,s,m,h,Z,b,p;return py.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,l.getConfigData();case 2:return s=a.sent,a.next=5,o.receivePromptNoneResponse((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.setSessionDataParameter(XG,null!=t?t:"");case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))}));case 5:if(!a.sent){a.next=8;break}return a.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 8:return aV.wasSilentSignInCalled()&&aV.setIsInitializedSilentSignIn(),a.next=11,r.isAuthenticated();case 11:if(!a.sent){a.next=20;break}return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),s.enableOIDCSessionManagement&&X(),a.t0=Promise,a.next=18,r.getBasicUserInfo();case 18:return a.t1=a.sent,a.abrupt("return",a.t0.resolve.call(a.t0,a.t1));case 20:if((null==s?void 0:s.responseMode)===t.ResponseMode.formPost&&n?(m=n,h=null!=i?i:""):(m=null!==(u=new URL(window.location.href).searchParams.get(IG))&&void 0!==u?u:"",h=null!==(d=new URL(window.location.href).searchParams.get(XG))&&void 0!==d?d:"",aV.removeAuthorizationCode()),!m){a.next=23;break}return a.abrupt("return",v(m,h));case 23:if(Z=new URL(window.location.href).searchParams.get(zf),b=new URL(window.location.href).searchParams.get(jf),!Z){a.next=31;break}return(p=new URL(window.location.href)).searchParams.delete(zf),p.searchParams.delete(jf),history.pushState(null,document.title,p.toString()),a.abrupt("return",Promise.reject(new lV("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",Z,null!=b?b:"")));case 31:return a.abrupt("return",r.getAuthorizationURL(e).then((function(e){return yy(void 0,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(s.storage!==t.Storage.BrowserMemory||!s.enablePKCE){n.next=6;break}return n.t0=aV,n.next=4,r.getPKCECode();case 4:n.t1=n.sent,n.t0.setPKCE.call(n.t0,n.t1);case 6:return location.href=e,n.next=9,aV.waitTillPageRedirect();case 9:return n.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:case"end":return n.stop()}}),n)})))})));case 32:case"end":return a.stop()}}),a)})))},g=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,r.isAuthenticated();case 2:if(!t.sent){t.next=8;break}return t.next=5,r.signOut();case 5:location.href=t.sent,t.next=9;break;case 8:location.href=aV.getSignOutURL();case 9:return c.clearRefreshTokenTimeout(),t.next=12,aV.waitTillPageRedirect();case 12:return t.abrupt("return",!0);case 13:case"end":return t.stop()}}),t)})))},f=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,o,a,u,d,s,m,h;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=!0,u=!1,e.next=4,l.getConfigData();case 4:if(d=e.sent,!(null==t?void 0:t.tokenEndpoint)){e.next=42;break}return a=!1,s=0,e.t0=[],e.t1=Vy,e.next=12,l.getConfigData();case 12:if(e.t4=n=e.sent,e.t3=null===e.t4,e.t3){e.next=16;break}e.t3=void 0===n;case 16:if(!e.t3){e.next=20;break}e.t5=void 0,e.next=21;break;case 20:e.t5=n.resourceServerURLs;case 21:if(e.t6=i=e.t5,e.t2=null!==e.t6,!e.t2){e.next=25;break}e.t2=void 0!==i;case 25:if(!e.t2){e.next=29;break}e.t7=i,e.next=30;break;case 29:e.t7=[];case 30:e.t8=e.t7,e.t9=(0,e.t1)(e.t8),e.t10=[null==d?void 0:d.serverOrigin],m=e.t0.concat.call(e.t0,e.t9,e.t10);case 34:if(!(s<m.length)){e.next=42;break}if(h=m[s],!(null===(o=t.tokenEndpoint)||void 0===o?void 0:o.startsWith(h))){e.next=39;break}return u=!0,e.abrupt("break",42);case 39:s++,e.next=34;break;case 42:if(!a&&!u){e.next=46;break}return e.abrupt("return",r.requestCustomGrant(t).then((function(e){return yy(void 0,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!t.returnsSession){n.next=5;break}return c.refreshAccessTokenAutomatically(),n.abrupt("return",r.getBasicUserInfo());case 5:return n.abrupt("return",e);case 6:case"end":return n.stop()}}),n)})))})).catch((function(t){return Promise.reject(t)})));case 46:return e.abrupt("return",Promise.reject(new lV("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`")));case 47:case"end":return e.stop()}}),e)})))},V=function(){return r.refreshAccessToken().then((function(){return c.refreshAccessTokenAutomatically(),r.getBasicUserInfo()})).catch((function(t){return Promise.reject(t)}))},W=function(){return r.revokeAccessToken().then((function(){return c.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},v=function(e,n){return yy(void 0,void 0,void 0,py.mark((function i(){var o,a;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,l.getConfigData();case 2:if((o=i.sent).storage!==t.Storage.BrowserMemory||!o.enablePKCE){i.next=7;break}return a=aV.getPKCE(),i.next=7,r.setPKCECode(a);case 7:return i.abrupt("return",r.requestAccessToken(e,n).then((function(){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o.storage!==t.Storage.BrowserMemory){e.next=6;break}return e.t0=aV,e.next=4,r.getSignOutURL();case 4:e.t1=e.sent,e.t0.setSignOutURL.call(e.t0,e.t1);case 6:return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),o.enableOIDCSessionManagement&&X(),e.abrupt("return",r.getBasicUserInfo());case 10:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 8:case"end":return i.stop()}}),i)})))},S=function(){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,c,a,u,d,s;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.getConfigData();case 2:if(i=e.sent,!aV.setIsInitializedSilentSignIn()){e.next=7;break}return e.next=6,o.receivePromptNoneResponse();case 6:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 7:if(!aV.isStatePresentInURL()){e.next=10;break}return aV.setIsInitializedSilentSignIn(),e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:return c=document.getElementById(Nf),a=null===(n=null==c?void 0:c.contentDocument)||void 0===n?void 0:n.getElementById(Hf),e.prev=12,e.next=15,r.getAuthorizationURL({prompt:"none",state:Uf});case 15:if(u=e.sent,(d=new URL(u)).searchParams.set("response_mode","query"),s=d.toString(),i.storage!==t.Storage.BrowserMemory||!i.enablePKCE){e.next=25;break}return e.t0=aV,e.next=23,r.getPKCECode();case 23:e.t1=e.sent,e.t0.setPKCE.call(e.t0,e.t1);case 25:a.src=s,e.next=31;break;case 28:return e.prev=28,e.t2=e.catch(12),e.abrupt("return",Promise.reject(e.t2));case 31:return e.abrupt("return",new Promise((function(t,e){window.addEventListener("message",(function n(i){return yy(void 0,void 0,void 0,py.mark((function r(){var c,l,o,a;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:o=i.data,a=setTimeout((function(){t(!1)}),1e4),(null==o?void 0:o.type)==xf&&(window.removeEventListener("message",n),clearTimeout(a),t(!1)),(null==o?void 0:o.type)==Jf&&(null===(c=null==o?void 0:o.data)||void 0===c?void 0:c.code)&&v(o.data.code,null===(l=null==o?void 0:o.data)||void 0===l?void 0:l.sessionState).then((function(e){window.removeEventListener("message",n),t(e)})).catch((function(t){window.removeEventListener("message",n),e(t)})).finally((function(){clearTimeout(a)}));case 4:case"end":return r.stop()}}),r)})))}))})));case 32:case"end":return e.stop()}}),e,null,[[12,28]])})))},C=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.getBasicUserInfo());case 1:case"end":return t.stop()}}),t)})))},Y=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.getDecodedIDToken());case 1:case"end":return t.stop()}}),t)})))},R=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.getIDToken());case 1:case"end":return t.stop()}}),t)})))},K=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t)})))},L=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.getAccessToken());case 1:case"end":return t.stop()}}),t)})))},J=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.isAuthenticated());case 1:case"end":return t.stop()}}),t)})))},x=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,c;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.getConfigData();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),c=Object.assign(Object.assign({},n),t),e.next=7,r.updateConfig(c);case 7:c.enableOIDCSessionManagement&&i&&(o.reset(),X());case 8:case"end":return e.stop()}}),e)})))},n.abrupt("return",{disableHttpHandler:I,enableHttpHandler:y,getAccessToken:L,getBasicUserInfo:C,getDecodedIDToken:Y,getHttpClient:p,getIDToken:R,getOIDCServiceEndpoints:K,httpRequest:Z,httpRequestAll:b,isAuthenticated:J,refreshAccessToken:V,requestCustomGrant:f,revokeAccessToken:W,setHttpRequestErrorCallback:h,setHttpRequestFinishCallback:m,setHttpRequestStartCallback:d,setHttpRequestSuccessCallback:s,signIn:G,signOut:g,trySignInSilently:S,updateConfig:x});case 38:case"end":return n.stop()}}),n)})))};function IV(t,e,n){var i=void 0===e?null:e,r=function(t,e){var n=atob(t);if(e){for(var i=new Uint8Array(n.length),r=0,c=n.length;r<c;++r)i[r]=n.charCodeAt(r);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return n}(t,void 0!==n&&n),c=r.indexOf("\n",10)+1,l=r.substring(c)+(i?"//# sourceMappingURL="+i:""),o=new Blob([l],{type:"application/javascript"});return URL.createObjectURL(o)}var XV,GV,gV,fV,VV=(XV="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlKHI9e3BhdGg6dCxleHBvcnRzOnt9LHJlcXVpcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkR5bmFtaWMgcmVxdWlyZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIil9KG51bGw9PXQmJnIucGF0aCl9fSxyLmV4cG9ydHMpLHIuZXhwb3J0c312YXIgcj10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yPyhlLmV4cG9ydHM9dD1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCk6KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKSx0KHIpfWUuZXhwb3J0cz10LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxuPWUociksbz10KChmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdCxyPU9iamVjdC5wcm90b3R5cGUsbz1yLmhhc093blByb3BlcnR5LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYT1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixuKXt2YXIgbz10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHk/dDp5LGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgQyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49bDtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihuPT09ZCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihuPT09dil7aWYoInRocm93Ij09PW8pdGhyb3cgaTtyZXR1cm4gTygpfWZvcihyLm1ldGhvZD1vLHIuYXJnPWk7Oyl7dmFyIGE9ci5kZWxlZ2F0ZTtpZihhKXt2YXIgcz1BKGEscik7aWYocyl7aWYocz09PWcpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZihuPT09bCl0aHJvdyBuPXYsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPWQ7dmFyIHU9aChlLHQscik7aWYoIm5vcm1hbCI9PT11LnR5cGUpe2lmKG49ci5kb25lP3Y6cCx1LmFyZz09PWcpY29udGludWU7cmV0dXJue3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09dS50eXBlJiYobj12LHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9dS5hcmcpfX19KGUscixhKSxpfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgbD0ic3VzcGVuZGVkU3RhcnQiLHA9InN1c3BlbmRlZFlpZWxkIixkPSJleGVjdXRpbmciLHY9ImNvbXBsZXRlZCIsZz17fTtmdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9ZnVuY3Rpb24gdygpe312YXIgYj17fTtjKGIsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgaz1PYmplY3QuZ2V0UHJvdG90eXBlT2YseD1rJiZrKGsoUChbXSkpKTt4JiZ4IT09ciYmby5jYWxsKHgsYSkmJihiPXgpO3ZhciBfPXcucHJvdG90eXBlPXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYik7ZnVuY3Rpb24gUyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gRShlLHQpe2Z1bmN0aW9uIHIoaSxhLHMsdSl7dmFyIGM9aChlW2ldLGUsYSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIGY9Yy5hcmcsbD1mLnZhbHVlO3JldHVybiBsJiYib2JqZWN0Ij09PW4obCkmJm8uY2FsbChsLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGwuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxzLHUpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLHMsdSl9KSk6dC5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe2YudmFsdWU9ZSxzKGYpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxzLHUpfSkpfXUoYy5hcmcpfXZhciBpO3RoaXMuX2ludm9rZT1mdW5jdGlvbihlLG4pe2Z1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbyl7cihlLG4sdCxvKX0pKX1yZXR1cm4gaT1pP2kudGhlbihvLG8pOm8oKX19ZnVuY3Rpb24gQShlLHIpe3ZhciBuPWUuaXRlcmF0b3Jbci5tZXRob2RdO2lmKG49PT10KXtpZihyLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXIubWV0aG9kKXtpZihlLml0ZXJhdG9yLnJldHVybiYmKHIubWV0aG9kPSJyZXR1cm4iLHIuYXJnPXQsQShlLHIpLCJ0aHJvdyI9PT1yLm1ldGhvZCkpcmV0dXJuIGc7ci5tZXRob2Q9InRocm93IixyLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIGd9dmFyIG89aChuLGUuaXRlcmF0b3Isci5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9by5hcmcsci5kZWxlZ2F0ZT1udWxsLGc7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhyW2UucmVzdWx0TmFtZV09aS52YWx1ZSxyLm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09ci5tZXRob2QmJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9dCksci5kZWxlZ2F0ZT1udWxsLGcpOmk6KHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxyLmRlbGVnYXRlPW51bGwsZyl9ZnVuY3Rpb24gVChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBSKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBDKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goVCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciByPWVbYV07aWYocilyZXR1cm4gci5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiByKCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKG8uY2FsbChlLG4pKXJldHVybiByLnZhbHVlPWVbbl0sci5kb25lPSExLHI7cmV0dXJuIHIudmFsdWU9dCxyLmRvbmU9ITAscn07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpPfX1mdW5jdGlvbiBPKCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19cmV0dXJuIG0ucHJvdG90eXBlPXcsYyhfLCJjb25zdHJ1Y3RvciIsdyksYyh3LCJjb25zdHJ1Y3RvciIsbSksbS5kaXNwbGF5TmFtZT1jKHcsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PW18fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHcpOihlLl9fcHJvdG9fXz13LGMoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LFMoRS5wcm90b3R5cGUpLGMoRS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9RSxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IEUoZih0LHIsbixvKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxTKF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBuPXQucG9wKCk7aWYobiBpbiBlKXJldHVybiByLnZhbHVlPW4sci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxyfX0sZS52YWx1ZXM9UCxDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QyxyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goUiksIWUpZm9yKHZhciByIGluIHRoaXMpInQiPT09ci5jaGFyQXQoMCkmJm8uY2FsbCh0aGlzLHIpJiYhaXNOYU4oK3Iuc2xpY2UoMSkpJiYodGhpc1tyXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciByPXRoaXM7ZnVuY3Rpb24gbihuLG8pe3JldHVybiBzLnR5cGU9InRocm93IixzLmFyZz1lLHIubmV4dD1uLG8mJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxzPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9by5jYWxsKGEsImNhdGNoTG9jIiksYz1vLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHUmJmMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJm8uY2FsbChuLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxuLmZpbmFsbHlMb2Mpe3ZhciBpPW47YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPWUsYS5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGd9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUihyKSxnfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBvPW4uYXJnO1Iocil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6cixuZXh0TG9jOm59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dCksZ319LGV9KGUuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT10fWNhdGNoKGUpeyJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZ2xvYmFsVGhpcz8idW5kZWZpbmVkIjpuKGdsb2JhbFRoaXMpKT9nbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZT10OkZ1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKHQpfX0pKSxpPW87ZnVuY3Rpb24gYShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24obyxpKXtmdW5jdGlvbiBhKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9vKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgcz10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLHU9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHMoZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxjPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxmPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3MoZSx0KTp2b2lkIDB9fSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksaD10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLGw9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSl8fGMoZSl8fGYoZSl8fGgoKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpKSxwPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksZD10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLG8saT1bXSxhPSEwLHM9ITE7dHJ5e2ZvcihyPXIuY2FsbChlKTshKGE9KG49ci5uZXh0KCkpLmRvbmUpJiYoaS5wdXNoKG4udmFsdWUpLCF0fHxpLmxlbmd0aCE9PXQpO2E9ITApO31jYXRjaChlKXtzPSEwLG89ZX1maW5hbGx5e3RyeXthfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgb319cmV0dXJuIGl9fSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksdj10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksZz10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlKXx8ZChlLHQpfHxmKGUsdCl8fHYoKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLHk9ZShnKSxtPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksdz1lKG0pLGI9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLGs9dCgoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQscixuLG8saSxhKXt0cnl7dmFyIHM9ZVtpXShhKSx1PXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dCh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLG8pfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT1lLmFwcGx5KHIsbik7ZnVuY3Rpb24gcyhlKXt0KGEsbyxpLHMsdSwibmV4dCIsZSl9ZnVuY3Rpb24gdShlKXt0KGEsbyxpLHMsdSwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSx4PWUoayksXz1lKHQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLFM9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLEU9ZShTKSxBPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuKXtyZXR1cm4gZS5leHBvcnRzPXQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx0KHIsbil9ZS5leHBvcnRzPXQsZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLFQ9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmQShlLHQpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLFI9dCgoZnVuY3Rpb24oZSl7dmFyIHQ9ci5kZWZhdWx0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHIpe2lmKHImJigib2JqZWN0Ij09PXQocil8fCJmdW5jdGlvbiI9PXR5cGVvZiByKSlyZXR1cm4gcjtpZih2b2lkIDAhPT1yKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFMoZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxDPWUoUiksUD10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBlLmV4cG9ydHM9dD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdChyKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTz1lKFApLEQ9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChlKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxJPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxVPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuLG8pe3JldHVybiBJKCk/KGUuZXhwb3J0cz10PVJlZmxlY3QuY29uc3RydWN0LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCk6KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bbnVsbF07bi5wdXNoLmFwcGx5KG4sdCk7dmFyIG89bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxuKSk7cmV0dXJuIHImJkEobyxyLnByb3RvdHlwZSksb30sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKSx0LmFwcGx5KG51bGwsYXJndW1lbnRzKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTT10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwhRChlKSlyZXR1cm4gZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHZvaWQgMCE9PW4pe2lmKG4uaGFzKGUpKXJldHVybiBuLmdldChlKTtuLnNldChlLHQpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gVShlLGFyZ3VtZW50cyxQKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQSh0LGUpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdChyKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTD1lKE0pLGo9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxIPVtdLHE9W10sQj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxOPSExO2Z1bmN0aW9uIEsoKXtOPSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClIW3RdPWVbdF0scVtlLmNoYXJDb2RlQXQodCldPXQ7cVsiLSIuY2hhckNvZGVBdCgwKV09NjIscVsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gRihlLHQscil7Zm9yKHZhciBuLG8saT1bXSxhPXQ7YTxyO2ErPTMpbj0oZVthXTw8MTYpKyhlW2ErMV08PDgpK2VbYSsyXSxpLnB1c2goSFsobz1uKT4+MTgmNjNdK0hbbz4+MTImNjNdK0hbbz4+NiY2M10rSFs2MyZvXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gWShlKXt2YXIgdDtOfHxLKCk7Zm9yKHZhciByPWUubGVuZ3RoLG49ciUzLG89IiIsaT1bXSxhPTE2MzgzLHM9MCx1PXItbjtzPHU7cys9YSlpLnB1c2goRihlLHMscythPnU/dTpzK2EpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLG8rPUhbdD4+Ml0sbys9SFt0PDw0JjYzXSxvKz0iPT0iKToyPT09biYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLG8rPUhbdD4+MTBdLG8rPUhbdD4+NCY2M10sbys9SFt0PDwyJjYzXSxvKz0iPSIpLGkucHVzaChvKSxpLmpvaW4oIiIpfWZ1bmN0aW9uIFcoZSx0LHIsbixvKXt2YXIgaSxhLHM9OCpvLW4tMSx1PSgxPDxzKS0xLGM9dT4+MSxmPS03LGg9cj9vLTE6MCxsPXI/LTE6MSxwPWVbdCtoXTtmb3IoaCs9bCxpPXAmKDE8PC1mKS0xLHA+Pj0tZixmKz1zO2Y+MDtpPTI1NippK2VbdCtoXSxoKz1sLGYtPTgpO2ZvcihhPWkmKDE8PC1mKS0xLGk+Pj0tZixmKz1uO2Y+MDthPTI1NiphK2VbdCtoXSxoKz1sLGYtPTgpO2lmKDA9PT1pKWk9MS1jO2Vsc2V7aWYoaT09PXUpcmV0dXJuIGE/TmFOOjEvMCoocD8tMToxKTthKz1NYXRoLnBvdygyLG4pLGktPWN9cmV0dXJuKHA/LTE6MSkqYSpNYXRoLnBvdygyLGktbil9ZnVuY3Rpb24gSihlLHQscixuLG8saSl7dmFyIGEscyx1LGM9OCppLW8tMSxmPSgxPDxjKS0xLGg9Zj4+MSxsPTIzPT09bz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6aS0xLGQ9bj8xOi0xLHY9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxhPWYpOihhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0sdSo9MiksKHQrPWEraD49MT9sL3U6bCpNYXRoLnBvdygyLDEtaCkpKnU+PTImJihhKyssdS89MiksYStoPj1mPyhzPTAsYT1mKTphK2g+PTE/KHM9KHQqdS0xKSpNYXRoLnBvdygyLG8pLGErPWgpOihzPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsbyksYT0wKSk7bz49ODtlW3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsby09OCk7Zm9yKGE9YTw8b3xzLGMrPW87Yz4wO2VbcitwXT0yNTUmYSxwKz1kLGEvPTI1NixjLT04KTtlW3IrcC1kXXw9MTI4KnZ9dmFyIHo9e30udG9TdHJpbmcsVj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT16LmNhbGwoZSl9O2Z1bmN0aW9uIEcoKXtyZXR1cm4gWC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiAkKGUsdCl7aWYoRygpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFguVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVgucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IFgodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWChlLHQscil7aWYoIShYLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFgoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gZWUodGhpcyxlKX1yZXR1cm4gWih0aGlzLGUsdCxyKX1mdW5jdGlvbiBaKGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7WC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1YLnByb3RvdHlwZTplPXRlKGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIVguaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfG9lKHQsciksbz0oZT0kKGUsbikpLndyaXRlKHQscik7byE9PW4mJihlPWUuc2xpY2UoMCxvKSk7cmV0dXJuIGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKG5lKHQpKXt2YXIgcj0wfHJlKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPSQoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uPyQoZSwwKTp0ZShlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZWKHQuZGF0YSkpcmV0dXJuIHRlKGUsdC5kYXRhKX12YXIgbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gUShlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIGVlKGUsdCl7aWYoUSh0KSxlPSQoZSx0PDA/MDowfHJlKHQpKSwhWC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIHRlKGUsdCl7dmFyIHI9dC5sZW5ndGg8MD8wOjB8cmUodC5sZW5ndGgpO2U9JChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gcmUoZSl7aWYoZT49RygpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitHKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIG5lKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBvZShlLHQpe2lmKG5lKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBPZShlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIERlKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIE9lKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGllKGUsdCxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIGJlKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBnZSh0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIG1lKHRoaXMsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB3ZSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZSh0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBrZSh0aGlzLHQscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBhZShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIHNlKGUsdCxyLG4sbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9bz8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighbylyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1YLmZyb20odCxuKSksbmUodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp1ZShlLHQscixuLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFguVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/bz9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOnVlKGUsW3RdLHIsbixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB1ZShlLHQscixuLG8pe3ZhciBpLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYobyl7dmFyIGY9LTE7Zm9yKGk9cjtpPHM7aSsrKWlmKGMoZSxpKT09PWModCwtMT09PWY/MDppLWYpKXtpZigtMT09PWYmJihmPWkpLGktZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihpLT1pLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksaT1yO2k+PTA7aS0tKXtmb3IodmFyIGg9ITAsbD0wO2w8dTtsKyspaWYoYyhlLGkrbCkhPT1jKHQsbCkpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gaX1yZXR1cm4tMX1mdW5jdGlvbiBjZShlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgbz1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5vJiYobj1vKTpuPW87dmFyIGk9dC5sZW5ndGg7aWYoaSUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+aS8yJiYobj1pLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gZmUoZSx0LHIsbil7cmV0dXJuIEllKE9lKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIGhlKGUsdCxyLG4pe3JldHVybiBJZShmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gdH0odCksZSxyLG4pfWZ1bmN0aW9uIGxlKGUsdCxyLG4pe3JldHVybiBoZShlLHQscixuKX1mdW5jdGlvbiBwZShlLHQscixuKXtyZXR1cm4gSWUoRGUodCksZSxyLG4pfWZ1bmN0aW9uIGRlKGUsdCxyLG4pe3JldHVybiBJZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLG8saT1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKW49KHI9ZS5jaGFyQ29kZUF0KGEpKT4+OCxvPXIlMjU2LGkucHVzaChvKSxpLnB1c2gobik7cmV0dXJuIGl9KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIHZlKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9ZKGUpOlkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBnZShlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sbz10O288cjspe3ZhciBpLGEscyx1LGM9ZVtvXSxmPW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKG8raDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYoZj1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbbysxXSkpJiYodT0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6aT1lW28rMV0sYT1lW28rMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJmEpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGY9dSk7YnJlYWs7Y2FzZSA0Omk9ZVtvKzFdLGE9ZVtvKzJdLHM9ZVtvKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmYSk8PDZ8NjMmcyk+NjU1MzUmJnU8MTExNDExMiYmKGY9dSl9bnVsbD09PWY/KGY9NjU1MzMsaD0xKTpmPjY1NTM1JiYoZi09NjU1MzYsbi5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfDEwMjMmZiksbi5wdXNoKGYpLG8rPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXllKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz15ZSkpO3JldHVybiByfShuKX1YLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09ai5UWVBFRF9BUlJBWV9TVVBQT1JUfHxqLlRZUEVEX0FSUkFZX1NVUFBPUlQsWC5wb29sU2l6ZT04MTkyLFguX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVgucHJvdG90eXBlLGV9LFguZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFoobnVsbCxlLHQscil9LFguVFlQRURfQVJSQVlfU1VQUE9SVCYmKFgucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxYLl9fcHJvdG9fXz1VaW50OEFycmF5KSxYLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFEodCksdDw9MD8kKGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/JChlLHQpLmZpbGwocixuKTokKGUsdCkuZmlsbChyKTokKGUsdCl9KG51bGwsZSx0LHIpfSxYLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBlZShudWxsLGUpfSxYLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gZWUobnVsbCxlKX0sWC5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFVlKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJlVlKGUuc2xpY2UoMCwwKSl9KGUpKX0sWC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW5lKGUpfHwhbmUodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLG89MCxpPU1hdGgubWluKHIsbik7bzxpOysrbylpZihlW29dIT09dFtvXSl7cj1lW29dLG49dFtvXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LFguaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sWC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighVihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBYLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49WC5hbGxvY1Vuc2FmZSh0KSxvPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGk9ZVtyXTtpZighbmUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2kuY29weShuLG8pLG8rPWkubGVuZ3RofXJldHVybiBufSxYLmJ5dGVMZW5ndGg9b2UsWC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFgucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilhZSh0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWFlKHRoaXMsdCx0KzMpLGFlKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFgucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClhZSh0aGlzLHQsdCs3KSxhZSh0aGlzLHQrMSx0KzYpLGFlKHRoaXMsdCsyLHQrNSksYWUodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sWC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9nZSh0aGlzLDAsZSk6aWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxYLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW5lKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1YLmNvbXBhcmUodGhpcyxlKX0sWC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxYLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sbyl7aWYoIW5lKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49byYmdD49cilyZXR1cm4gMDtpZihuPj1vKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBpPShvPj4+PTApLShuPj4+PTApLGE9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihpLGEpLHU9dGhpcy5zbGljZShuLG8pLGM9ZS5zbGljZSh0LHIpLGY9MDtmPHM7KytmKWlmKHVbZl0hPT1jW2ZdKXtpPXVbZl0sYT1jW2ZdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0sWC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sWC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHNlKHRoaXMsZSx0LHIsITApfSxYLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHNlKHRoaXMsZSx0LHIsITEpfSxYLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgbz10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPm8pJiYocj1vKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBpPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gY2UodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gZmUodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGhlKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGxlKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcGUodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBkZSh0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGk9ITB9fSxYLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB5ZT00MDk2O2Z1bmN0aW9uIG1lKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtvXSk7cmV0dXJuIG59ZnVuY3Rpb24gd2UoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBvPXQ7bzxyOysrbyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiBufWZ1bmN0aW9uIGJlKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIG89IiIsaT10O2k8cjsrK2kpbys9UGUoZVtpXSk7cmV0dXJuIG99ZnVuY3Rpb24ga2UoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksbz0iIixpPTA7aTxuLmxlbmd0aDtpKz0yKW8rPVN0cmluZy5mcm9tQ2hhckNvZGUobltpXSsyNTYqbltpKzFdKTtyZXR1cm4gb31mdW5jdGlvbiB4ZShlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gX2UoZSx0LHIsbixvLGkpe2lmKCFuZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5vfHx0PGkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gU2UoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgbz0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciwyKTtvPGk7KytvKWVbcitvXT0odCYyNTU8PDgqKG4/bzoxLW8pKT4+PjgqKG4/bzoxLW8pfWZ1bmN0aW9uIEVlKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgbz0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciw0KTtvPGk7KytvKWVbcitvXT10Pj4+OCoobj9vOjMtbykmMjU1fWZ1bmN0aW9uIEFlKGUsdCxyLG4sbyxpKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gVGUoZSx0LHIsbixvKXtyZXR1cm4gb3x8QWUoZSwwLHIsNCksSihlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBSZShlLHQscixuLG8pe3JldHVybiBvfHxBZShlLDAsciw4KSxKKGUsdCxyLG4sNTIsOCkscis4fVgucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLFguVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1YLnByb3RvdHlwZTtlbHNle3ZhciBvPXQtZTtyPW5ldyBYKG8sdm9pZCAwKTtmb3IodmFyIGk9MDtpPG87KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxYLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8eGUoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxvPTEsaT0wOysraTx0JiYobyo9MjU2KTspbis9dGhpc1tlK2ldKm87cmV0dXJuIG59LFgucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHx4ZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2UrLS10XSxvPTE7dD4wJiYobyo9MjU2KTspbis9dGhpc1tlKy0tdF0qbztyZXR1cm4gbn0sWC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFgucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxYLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxYLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxYLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHx4ZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLG89MSxpPTA7KytpPHQmJihvKj0yNTYpOyluKz10aGlzW2UraV0qbztyZXR1cm4gbj49KG8qPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqdCkpLG59LFgucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fHhlKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsbz0xLGk9dGhpc1tlKy0tbl07bj4wJiYobyo9MjU2KTspaSs9dGhpc1tlKy0tbl0qbztyZXR1cm4gaT49KG8qPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LFgucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFgucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8eGUoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sWC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHx4ZShlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxYLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LFgucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsNCx0aGlzLmxlbmd0aCksVyh0aGlzLGUsITAsMjMsNCl9LFgucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsNCx0aGlzLmxlbmd0aCksVyh0aGlzLGUsITEsMjMsNCl9LFgucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDgsdGhpcy5sZW5ndGgpLFcodGhpcyxlLCEwLDUyLDgpfSxYLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw4LHRoaXMubGVuZ3RoKSxXKHRoaXMsZSwhMSw1Miw4KX0sWC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxfZSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sWC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxfZSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPXItMSxpPTE7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSxYLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDEsMjU1LDApLFguVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LFgucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMiw2NTUzNSwwKSxYLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpTZSh0aGlzLGUsdCwhMCksdCsyfSxYLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDIsNjU1MzUsMCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6U2UodGhpcyxlLHQsITEpLHQrMn0sWC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkVlKHRoaXMsZSx0LCEwKSx0KzR9LFgucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpFZSh0aGlzLGUsdCwhMSksdCs0fSxYLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIG89TWF0aC5wb3coMiw4KnItMSk7X2UodGhpcyxlLHQscixvLTEsLW8pfXZhciBpPTAsYT0xLHM9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8ciYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QraS0xXSYmKHM9MSksdGhpc1t0K2ldPShlL2E+PjApLXMmMjU1O3JldHVybiB0K3J9LFgucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgbz1NYXRoLnBvdygyLDgqci0xKTtfZSh0aGlzLGUsdCxyLG8tMSwtbyl9dmFyIGk9ci0xLGE9MSxzPTA7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K2krMV0mJihzPTEpLHRoaXNbdCtpXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxYLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMSwxMjcsLTEyOCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxYLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOlNlKHRoaXMsZSx0LCEwKSx0KzJ9LFgucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6U2UodGhpcyxlLHQsITEpLHQrMn0sWC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkVlKHRoaXMsZSx0LCEwKSx0KzR9LFgucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpFZSh0aGlzLGUsdCwhMSksdCs0fSxYLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUZSh0aGlzLGUsdCwhMCxyKX0sWC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gVGUodGhpcyxlLHQsITEscil9LFgucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBSZSh0aGlzLGUsdCwhMCxyKX0sWC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFJlKHRoaXMsZSx0LCExLHIpfSxYLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIG8saT1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihvPWktMTtvPj0wOy0tbyllW28rdF09dGhpc1tvK3JdO2Vsc2UgaWYoaTwxZTN8fCFYLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxYLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFYLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIGk7aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPHI7KytpKXRoaXNbaV09ZTtlbHNle3ZhciBhPW5lKGUpP2U6T2UobmV3IFgoZSxuKS50b1N0cmluZygpKSxzPWEubGVuZ3RoO2ZvcihpPTA7aTxyLXQ7KytpKXRoaXNbaSt0XT1hW2klc119cmV0dXJuIHRoaXN9O3ZhciBDZT0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBQZShlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gT2UoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsbz1udWxsLGk9W10sYT0wO2E8bjsrK2Epe2lmKChyPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFvKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9NjU1MzYrKG8tNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztpLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIERlKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4sbyxpLGE7Tnx8SygpO3ZhciBzPWUubGVuZ3RoO2lmKHMlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO2k9Ij0iPT09ZVtzLTJdPzI6Ij0iPT09ZVtzLTFdPzE6MCxhPW5ldyBCKDMqcy80LWkpLG49aT4wP3MtNDpzO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylvPXFbZS5jaGFyQ29kZUF0KHQpXTw8MTh8cVtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHFbZS5jaGFyQ29kZUF0KHQrMildPDw2fHFbZS5jaGFyQ29kZUF0KHQrMyldLGFbdSsrXT1vPj4xNiYyNTUsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbztyZXR1cm4gMj09PWk/KG89cVtlLmNoYXJDb2RlQXQodCldPDwyfHFbZS5jaGFyQ29kZUF0KHQrMSldPj40LGFbdSsrXT0yNTUmbyk6MT09PWkmJihvPXFbZS5jaGFyQ29kZUF0KHQpXTw8MTB8cVtlLmNoYXJDb2RlQXQodCsxKV08PDR8cVtlLmNoYXJDb2RlQXQodCsyKV0+PjIsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbyksYX0oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShDZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSWUoZSx0LHIsbil7Zm9yKHZhciBvPTA7bzxuJiYhKG8rcj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK3JdPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gVWUoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgTWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLG49MDtuPHIubGVuZ3RoO24rKylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5hcHBseSh0LHIpfX0sTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBqZShlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09TGUuY2FsbChlKX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBxZShlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT09bihlKX1mdW5jdGlvbiBCZShlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUxlLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUxlLmNhbGwoZSl9ZnVuY3Rpb24gS2UoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT09bihlKSYmKGU9W2VdKSxqZShlKSlmb3IodmFyIHI9MCxvPWUubGVuZ3RoO3I8bztyKyspdC5jYWxsKG51bGwsZVtyXSxyLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgRmU9e2lzQXJyYXk6amUsaXNBcnJheUJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09TGUuY2FsbChlKX0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhSGUoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhSGUoZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJmUgaW5zdGFuY2VvZiBGb3JtRGF0YX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OnFlLGlzUGxhaW5PYmplY3Q6QmUsaXNVbmRlZmluZWQ6SGUsaXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUxlLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1MZS5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09TGUuY2FsbChlKX0saXNGdW5jdGlvbjpOZSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gcWUoZSkmJk5lKGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zJiZlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOktlLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7QmUodFtuXSkmJkJlKHIpP3Rbbl09ZSh0W25dLHIpOkJlKHIpP3Rbbl09ZSh7fSxyKTpqZShyKT90W25dPXIuc2xpY2UoKTp0W25dPXJ9Zm9yKHZhciBuPTAsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspS2UoYXJndW1lbnRzW25dLHIpO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBLZSh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/TWUodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIFdlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKEZlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIG89W107RmUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihGZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sRmUuZm9yRWFjaChlLChmdW5jdGlvbihlKXtGZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6RmUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxvLnB1c2goWWUodCkrIj0iK1llKGUpKX0pKSl9KSksbj1vLmpvaW4oIiYiKX1pZihuKXt2YXIgaT1lLmluZGV4T2YoIiMiKTstMSE9PWkmJihlPWUuc2xpY2UoMCxpKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gSmUoKXt0aGlzLmhhbmRsZXJzPVtdfUplLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEplLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sSmUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7RmUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIHplPUplO2Z1bmN0aW9uIFZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gR2UoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciAkZT1WZSxYZT1HZTtmdW5jdGlvbiBaZShlKXtpZigkZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoJGU9PT1WZXx8ISRlKSYmc2V0VGltZW91dClyZXR1cm4gJGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiAkZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gJGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuICRlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIGouc2V0VGltZW91dCYmKCRlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBqLmNsZWFyVGltZW91dCYmKFhlPWNsZWFyVGltZW91dCk7dmFyIFFlLGV0PVtdLHR0PSExLHJ0PS0xO2Z1bmN0aW9uIG50KCl7dHQmJlFlJiYodHQ9ITEsUWUubGVuZ3RoP2V0PVFlLmNvbmNhdChldCk6cnQ9LTEsZXQubGVuZ3RoJiZvdCgpKX1mdW5jdGlvbiBvdCgpe2lmKCF0dCl7dmFyIGU9WmUobnQpO3R0PSEwO2Zvcih2YXIgdD1ldC5sZW5ndGg7dDspe2ZvcihRZT1ldCxldD1bXTsrK3J0PHQ7KVFlJiZRZVtydF0ucnVuKCk7cnQ9LTEsdD1ldC5sZW5ndGh9UWU9bnVsbCx0dD0hMSxmdW5jdGlvbihlKXtpZihYZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChYZT09PUdlfHwhWGUpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFhlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e1hlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gWGUuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBYZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGl0KGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9aXQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIGF0KCl7fXZhciBzdD1hdCx1dD1hdCxjdD1hdCxmdD1hdCxodD1hdCxsdD1hdCxwdD1hdDt2YXIgZHQ9ai5wZXJmb3JtYW5jZXx8e30sdnQ9ZHQubm93fHxkdC5tb3pOb3d8fGR0Lm1zTm93fHxkdC5vTm93fHxkdC53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBndD1uZXcgRGF0ZTt2YXIgeXQ9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07ZXQucHVzaChuZXcgaXQoZSx0KSksMSE9PWV0Lmxlbmd0aHx8dHR8fFplKG90KX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpzdCxhZGRMaXN0ZW5lcjp1dCxvbmNlOmN0LG9mZjpmdCxyZW1vdmVMaXN0ZW5lcjpodCxyZW1vdmVBbGxMaXN0ZW5lcnM6bHQsZW1pdDpwdCxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSp2dC5jYWxsKGR0KSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1ndCkvMWUzfX0sbXQ9eXQsd3Q9ZnVuY3Rpb24oZSx0KXtGZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LGJ0PWZ1bmN0aW9uKGUsdCxyLG4sbyl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPW8sZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxrdD1mdW5jdGlvbihlLHQscixuLG8pe3ZhciBpPW5ldyBFcnJvcihlKTtyZXR1cm4gYnQoaSx0LHIsbixvKX0seHQ9RmUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixvLGkpe3ZhciBhPVtdO2EucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLEZlLmlzTnVtYmVyKHIpJiZhLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxGZS5pc1N0cmluZyhuKSYmYS5wdXNoKCJwYXRoPSIrbiksRmUuaXNTdHJpbmcobykmJmEucHVzaCgiZG9tYWluPSIrbyksITA9PT1pJiZhLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1hLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxfdD1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFN0PUZlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPUZlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxvPWUuaGVhZGVycyxpPWUucmVzcG9uc2VUeXBlO0ZlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgcz1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShzKyI6Iit1KX12YXIgYyxmLGg9KGM9ZS5iYXNlVVJMLGY9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChmKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGYpOmYpO2Z1bmN0aW9uIGwoKXtpZihhKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGE/ZnVuY3Rpb24oZSl7dmFyIHQscixuLG89e307cmV0dXJuIGU/KEZlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PUZlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPUZlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYob1t0XSYmX3QuaW5kZXhPZih0KT49MClyZXR1cm47b1t0XT0ic2V0LWNvb2tpZSI9PT10PyhvW3RdP29bdF06W10pLmNvbmNhdChbcl0pOm9bdF0/b1t0XSsiLCAiK3I6cn19KSksbyk6b30oYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxvPXtkYXRhOmkmJiJ0ZXh0IiE9PWkmJiJqc29uIiE9PWk/YS5yZXNwb25zZTphLnJlc3BvbnNlVGV4dCxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6YX07IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qoa3QoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLG8pLGE9bnVsbH19aWYoYS5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksV2UoaCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gYT9hLm9ubG9hZGVuZD1sOmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YSYmND09PWEucmVhZHlTdGF0ZSYmKDAhPT1hLnN0YXR1c3x8YS5yZXNwb25zZVVSTCYmMD09PWEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQobCl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKGt0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3Ioa3QoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIoa3QodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGEpKSxhPW51bGx9LEZlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBwPShlLndpdGhDcmVkZW50aWFsc3x8U3QoaCkpJiZlLnhzcmZDb29raWVOYW1lP3h0LnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO3AmJihvW2UueHNyZkhlYWRlck5hbWVdPXApfSJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJkZlLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTphLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxGZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChhLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxpJiYianNvbiIhPT1pJiYoYS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7YSYmKGEuYWJvcnQoKSxyKGUpLGE9bnVsbCl9KSksbnx8KG49bnVsbCksYS5zZW5kKG4pfSkpfSxBdD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFR0KGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgUnQsQ3Q9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PW10JiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobXQpKSYmKFJ0PUV0KSxSdCksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gd3QodCwiQWNjZXB0Iiksd3QodCwiQ29udGVudC1UeXBlIiksRmUuaXNGb3JtRGF0YShlKXx8RmUuaXNBcnJheUJ1ZmZlcihlKXx8RmUuaXNCdWZmZXIoZSl8fEZlLmlzU3RyZWFtKGUpfHxGZS5pc0ZpbGUoZSl8fEZlLmlzQmxvYihlKT9lOkZlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkZlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhUdCh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6RmUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhUdCh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEZlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksRmUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihvfHxuJiZGZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKG8pe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgYnQoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07Q3QuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxGZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtDdC5oZWFkZXJzW2VdPXt9fSkpLEZlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7Q3QuaGVhZGVyc1tlXT1GZS5tZXJnZShBdCl9KSk7dmFyIFB0PUN0LE90PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxQdDtyZXR1cm4gRmUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sRHQ9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIEl0KGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBVdD1mdW5jdGlvbihlKXtyZXR1cm4gSXQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPU90LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPUZlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksRmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxQdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gSXQoZSksdC5kYXRhPU90LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIER0KHQpfHwoSXQoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1PdC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxNdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxvPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLGk9WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0sYT1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBGZS5pc1BsYWluT2JqZWN0KGUpJiZGZS5pc1BsYWluT2JqZWN0KHQpP0ZlLm1lcmdlKGUsdCk6RmUuaXNQbGFpbk9iamVjdCh0KT9GZS5tZXJnZSh7fSx0KTpGZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7RmUuaXNVbmRlZmluZWQodFtuXSk/RmUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPXModm9pZCAwLGVbbl0pKTpyW25dPXMoZVtuXSx0W25dKX1GZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe0ZlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1zKHZvaWQgMCx0W2VdKSl9KSksRmUuZm9yRWFjaChvLHUpLEZlLmZvckVhY2goaSwoZnVuY3Rpb24obil7RmUuaXNVbmRlZmluZWQodFtuXSk/RmUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPXModm9pZCAwLGVbbl0pKTpyW25dPXModm9pZCAwLHRbbl0pfSkpLEZlLmZvckVhY2goYSwoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09cyhlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09cyh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KG8pLmNvbmNhdChpKS5jb25jYXQoYSksZj1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIEZlLmZvckVhY2goZix1KSxyfSxMdD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sanQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2p0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiBuKHIpPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBIdD17fSxxdD1MdC52ZXJzaW9uLnNwbGl0KCIuIik7ZnVuY3Rpb24gQnQoZSx0KXtmb3IodmFyIHI9dD90LnNwbGl0KCIuIik6cXQsbj1lLnNwbGl0KCIuIiksbz0wO288MztvKyspe2lmKHJbb10+bltvXSlyZXR1cm4hMDtpZihyW29dPG5bb10pcmV0dXJuITF9cmV0dXJuITF9anQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10JiZCdCh0KTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIltBeGlvcyB2IitMdC52ZXJzaW9uKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksYSl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihvKGksIiBoYXMgYmVlbiByZW1vdmVkIGluICIrdCkpO3JldHVybiBuJiYhSHRbaV0mJihIdFtpXT0hMCxjb25zb2xlLndhcm4obyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKHIsaSxhKX19O3ZhciBOdD17aXNPbGRlclZlcnNpb246QnQsYXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQscil7aWYoIm9iamVjdCIhPT1uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIG89T2JqZWN0LmtleXMoZSksaT1vLmxlbmd0aDtpLS0gPjA7KXt2YXIgYT1vW2ldLHM9dFthXTtpZihzKXt2YXIgdT1lW2FdLGM9dm9pZCAwPT09dXx8cyh1LGEsZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK2ErIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PXIpdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrYSl9fSx2YWxpZGF0b3JzOmp0fSxLdD1OdC52YWxpZGF0b3JzO2Z1bmN0aW9uIEZ0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgemUscmVzcG9uc2U6bmV3IHplfX1GdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGU/KGU9YXJndW1lbnRzWzFdfHx7fSkudXJsPWFyZ3VtZW50c1swXTplPWV8fHt9LChlPU10KHRoaXMuZGVmYXVsdHMsZSkpLm1ldGhvZD9lLm1ldGhvZD1lLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP2UubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6ZS5tZXRob2Q9ImdldCI7dmFyIHQ9ZS50cmFuc2l0aW9uYWw7dm9pZCAwIT09dCYmTnQuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpLdC50cmFuc2l0aW9uYWwoS3QuYm9vbGVhbiwiMS4wLjAiKSxmb3JjZWRKU09OUGFyc2luZzpLdC50cmFuc2l0aW9uYWwoS3QuYm9vbGVhbiwiMS4wLjAiKSxjbGFyaWZ5VGltZW91dEVycm9yOkt0LnRyYW5zaXRpb25hbChLdC5ib29sZWFuLCIxLjAuMCIpfSwhMSk7dmFyIHI9W10sbj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnJ1bldoZW4mJiExPT09dC5ydW5XaGVuKGUpfHwobj1uJiZ0LnN5bmNocm9ub3VzLHIudW5zaGlmdCh0LmZ1bGZpbGxlZCx0LnJlamVjdGVkKSl9KSk7dmFyIG8saT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIW4pe3ZhciBhPVtVdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhLHIpLGE9YS5jb25jYXQoaSksbz1Qcm9taXNlLnJlc29sdmUoZSk7YS5sZW5ndGg7KW89by50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgcz1lO3IubGVuZ3RoOyl7dmFyIHU9ci5zaGlmdCgpLGM9ci5zaGlmdCgpO3RyeXtzPXUocyl9Y2F0Y2goZSl7YyhlKTticmVha319dHJ5e289VXQocyl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7aS5sZW5ndGg7KW89by50aGVuKGkuc2hpZnQoKSxpLnNoaWZ0KCkpO3JldHVybiBvfSxGdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPU10KHRoaXMuZGVmYXVsdHMsZSksV2UoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sRmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe0Z0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0Z0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChNdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgWXQ9RnQ7ZnVuY3Rpb24gV3QoZSl7dGhpcy5tZXNzYWdlPWV9V3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LFd0LnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBKdD1XdDtmdW5jdGlvbiB6dChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpcztlKChmdW5jdGlvbihlKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBKdChlKSx0KHIucmVhc29uKSl9KSl9enQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0senQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgenQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBWdD16dDtmdW5jdGlvbiBHdChlKXt2YXIgdD1uZXcgWXQoZSkscj1NZShZdC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gRmUuZXh0ZW5kKHIsWXQucHJvdG90eXBlLHQpLEZlLmV4dGVuZChyLHQpLHJ9dmFyICR0PUd0KFB0KTskdC5BeGlvcz1ZdCwkdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KE10KCR0LmRlZmF1bHRzLGUpKX0sJHQuQ2FuY2VsPUp0LCR0LkNhbmNlbFRva2VuPVZ0LCR0LmlzQ2FuY2VsPUR0LCR0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LCR0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LCR0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PW4oZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBYdD0kdCxadD0kdDtYdC5kZWZhdWx0PVp0O3ZhciBRdCxlcix0cj1YdDtmdW5jdGlvbiBycihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBucihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1yfHwiU2V0Ij09PXIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoIkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gbnIoZSx0KX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBhPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG5yKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gb3IoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGlyKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP29yKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YihlLHQsclt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6b3IoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fQovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCUNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKCVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQoJcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKCVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICglSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKCUFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKCUlORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQoJTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKCU9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKCVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCgkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLygpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49TyhlKTtpZih0KXt2YXIgbz1PKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsbyl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBDKHRoaXMscil9fWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoZSl7dHJ5e3Uobi5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KG4udGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9dSgobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfShlcj1RdHx8KFF0PXt9KSkuZm9ybVBvc3Q9ImZvcm1fcG9zdCIsZXIucXVlcnk9InF1ZXJ5Ijt2YXIgdXI7IWZ1bmN0aW9uKGUpe2UuQ29uZmlnRGF0YT0iY29uZmlnX2RhdGEiLGUuT0lEQ1Byb3ZpZGVyTWV0YURhdGE9Im9pZGNfcHJvdmlkZXJfbWV0YV9kYXRhIixlLlNlc3Npb25EYXRhPSJzZXNzaW9uX2RhdGEiLGUuVGVtcG9yYXJ5RGF0YT0idGVtcG9yYXJ5X2RhdGEifSh1cnx8KHVyPXt9KSk7dmFyIGNyPSJyZWZyZXNoX3Rva2VuX3RpbWVyIixmcj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcihlLG4sbyxpLGEscyl7dmFyIHU7cmV0dXJuIF8odGhpcyxyKSwodT10LmNhbGwodGhpcyxudWxsIT1pP2k6bnVsbD09cz92b2lkIDA6cy5tZXNzYWdlKSkubmFtZT11LmNvbnN0cnVjdG9yLm5hbWUsdS5jb2RlPWUsdS5maWxlPW4sdS5tZXRob2Q9byx1LmRlc2NyaXB0aW9uPWEsdS5lcnJvcj1zLE9iamVjdC5zZXRQcm90b3R5cGVPZihFKHUpLCh0aGlzIGluc3RhbmNlb2Ygcj90aGlzLmNvbnN0cnVjdG9yOnZvaWQgMCkucHJvdG90eXBlKSx1fXJldHVybiByfShMKEVycm9yKSksaHI9ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoZSxuLG8saSxhLHMsdSxjLGYpe3ZhciBoO3JldHVybiBfKHRoaXMsciksKGg9dC5jYWxsKHRoaXMsZSxuLG8saSxhKSkubmFtZT1oLmNvbnN0cnVjdG9yLm5hbWUsaC5jb2RlPWUsaC5maWxlPW4saC5tZXRob2Q9byxoLmRlc2NyaXB0aW9uPWEsaC5uZXR3b3JrRXJyb3JDb2RlPXMsaC5uZXR3b3JrRXJyb3JNZXNzYWdlPXUsaC5zdGF0dXM9YyxoLm5ldHdvcmtFcnJvckRhdGE9ZixofXJldHVybiByfShmciksbHI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWo/ajoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBwcihlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBkcj12b2lkIDAhPT1qP2o6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHZyPVtdLGdyPVtdLHlyPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG1yPSExO2Z1bmN0aW9uIHdyKCl7bXI9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXZyW3RdPWVbdF0sZ3JbZS5jaGFyQ29kZUF0KHQpXT10O2dyWyItIi5jaGFyQ29kZUF0KDApXT02MixnclsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gYnIoZSx0LHIpe2Zvcih2YXIgbixvLGk9W10sYT10O2E8cjthKz0zKW49KGVbYV08PDE2KSsoZVthKzFdPDw4KStlW2ErMl0saS5wdXNoKHZyWyhvPW4pPj4xOCY2M10rdnJbbz4+MTImNjNdK3ZyW28+PjYmNjNdK3ZyWzYzJm9dKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBrcihlKXt2YXIgdDttcnx8d3IoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsbz0iIixpPVtdLGE9MTYzODMscz0wLHU9ci1uO3M8dTtzKz1hKWkucHVzaChicihlLHMscythPnU/dTpzK2EpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLG8rPXZyW3Q+PjJdLG8rPXZyW3Q8PDQmNjNdLG8rPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0sbys9dnJbdD4+MTBdLG8rPXZyW3Q+PjQmNjNdLG8rPXZyW3Q8PDImNjNdLG8rPSI9IiksaS5wdXNoKG8pLGkuam9pbigiIil9ZnVuY3Rpb24geHIoZSx0LHIsbixvKXt2YXIgaSxhLHM9OCpvLW4tMSx1PSgxPDxzKS0xLGM9dT4+MSxmPS03LGg9cj9vLTE6MCxsPXI/LTE6MSxwPWVbdCtoXTtmb3IoaCs9bCxpPXAmKDE8PC1mKS0xLHA+Pj0tZixmKz1zO2Y+MDtpPTI1NippK2VbdCtoXSxoKz1sLGYtPTgpO2ZvcihhPWkmKDE8PC1mKS0xLGk+Pj0tZixmKz1uO2Y+MDthPTI1NiphK2VbdCtoXSxoKz1sLGYtPTgpO2lmKDA9PT1pKWk9MS1jO2Vsc2V7aWYoaT09PXUpcmV0dXJuIGE/TmFOOjEvMCoocD8tMToxKTthKz1NYXRoLnBvdygyLG4pLGktPWN9cmV0dXJuKHA/LTE6MSkqYSpNYXRoLnBvdygyLGktbil9ZnVuY3Rpb24gX3IoZSx0LHIsbixvLGkpe3ZhciBhLHMsdSxjPTgqaS1vLTEsZj0oMTw8YyktMSxoPWY+PjEsbD0yMz09PW8/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmktMSxkPW4/MTotMSx2PXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsYT1mKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLHUqPTIpLCh0Kz1hK2g+PTE/bC91OmwqTWF0aC5wb3coMiwxLWgpKSp1Pj0yJiYoYSsrLHUvPTIpLGEraD49Zj8ocz0wLGE9Zik6YStoPj0xPyhzPSh0KnUtMSkqTWF0aC5wb3coMixvKSxhKz1oKToocz10Kk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLG8pLGE9MCkpO28+PTg7ZVtyK3BdPTI1NSZzLHArPWQscy89MjU2LG8tPTgpO2ZvcihhPWE8PG98cyxjKz1vO2M+MDtlW3IrcF09MjU1JmEscCs9ZCxhLz0yNTYsYy09OCk7ZVtyK3AtZF18PTEyOCp2fXZhciBTcj17fS50b1N0cmluZyxFcj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1Tci5jYWxsKGUpfTtDci5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PWRyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fGRyLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEFyPVRyKCk7ZnVuY3Rpb24gVHIoKXtyZXR1cm4gQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gUnIoZSx0KXtpZihUcigpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1Dci5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgQ3IodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gQ3IoZSx0LHIpe2lmKCEoQ3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIENyKSlyZXR1cm4gbmV3IENyKGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIERyKHRoaXMsZSl9cmV0dXJuIFByKHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFByKGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUNyLnByb3RvdHlwZTplPUlyKGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhQ3IuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfExyKHQsciksbz0oZT1ScihlLG4pKS53cml0ZSh0LHIpO3JldHVybiBvIT09biYmKGU9ZS5zbGljZSgwLG8pKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihNcih0KSl7dmFyIHI9MHxVcih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1ScihlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/UnIoZSwwKTpJcihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZFcih0LmRhdGEpKXJldHVybiBJcihlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIE9yKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gRHIoZSx0KXtpZihPcih0KSxlPVJyKGUsdDwwPzA6MHxVcih0KSksIUNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSXIoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxVcih0Lmxlbmd0aCk7ZT1ScihlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gVXIoZSl7aWYoZT49VHIoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrVHIoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gTXIoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIExyKGUsdCl7aWYoTXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIGNuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gZm4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gY24oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24ganIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gWHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFZyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gR3IodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuICRyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHpyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFpyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIEhyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gcXIoZSx0LHIsbixvKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1vPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFvKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUNyLmZyb20odCxuKSksTXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpCcihlLHQscixuLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LENyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpCcihlLFt0XSxyLG4sbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gQnIoZSx0LHIsbixvKXt2YXIgaSxhPTEscz1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLHMvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PWE/ZVt0XTplLnJlYWRVSW50MTZCRSh0KmEpfWlmKG8pe3ZhciBmPS0xO2ZvcihpPXI7aTxzO2krKylpZihjKGUsaSk9PT1jKHQsLTE9PT1mPzA6aS1mKSl7aWYoLTE9PT1mJiYoZj1pKSxpLWYrMT09PXUpcmV0dXJuIGYqYX1lbHNlLTEhPT1mJiYoaS09aS1mKSxmPS0xfWVsc2UgZm9yKHIrdT5zJiYocj1zLXUpLGk9cjtpPj0wO2ktLSl7Zm9yKHZhciBoPSEwLGw9MDtsPHU7bCsrKWlmKGMoZSxpK2wpIT09Yyh0LGwpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gTnIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIG89ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+byYmKG49byk6bj1vO3ZhciBpPXQubGVuZ3RoO2lmKGklMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmkvMiYmKG49aS8yKTtmb3IodmFyIGE9MDthPG47KythKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBhO2VbcithXT1zfXJldHVybiBhfWZ1bmN0aW9uIEtyKGUsdCxyLG4pe3JldHVybiBobihjbih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBGcihlLHQscixuKXtyZXR1cm4gaG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBZcihlLHQscixuKXtyZXR1cm4gRnIoZSx0LHIsbil9ZnVuY3Rpb24gV3IoZSx0LHIsbil7cmV0dXJuIGhuKGZuKHQpLGUscixuKX1mdW5jdGlvbiBKcihlLHQscixuKXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixvLGk9W10sYT0wO2E8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrYSluPShyPWUuY2hhckNvZGVBdChhKSk+Pjgsbz1yJTI1NixpLnB1c2gobyksaS5wdXNoKG4pO3JldHVybiBpfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiB6cihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/a3IoZSk6a3IoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBWcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sbz10O288cjspe3ZhciBpLGEscyx1LGM9ZVtvXSxmPW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKG8raDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYoZj1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbbysxXSkpJiYodT0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6aT1lW28rMV0sYT1lW28rMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJmEpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGY9dSk7YnJlYWs7Y2FzZSA0Omk9ZVtvKzFdLGE9ZVtvKzJdLHM9ZVtvKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmYSk8PDZ8NjMmcyk+NjU1MzUmJnU8MTExNDExMiYmKGY9dSl9bnVsbD09PWY/KGY9NjU1MzMsaD0xKTpmPjY1NTM1JiYoZi09NjU1MzYsbi5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfDEwMjMmZiksbi5wdXNoKGYpLG8rPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiBHcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG89dDtvPHI7KytvKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbb10pO3JldHVybiBufWZ1bmN0aW9uICRyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBYcihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBvPSIiLGk9dDtpPHI7KytpKW8rPXVuKGVbaV0pO3JldHVybiBvfWZ1bmN0aW9uIFpyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLG89IiIsaT0wO2k8bi5sZW5ndGg7aSs9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0rMjU2Km5baSsxXSk7cmV0dXJuIG99ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGVuKGUsdCxyLG4sbyxpKXtpZighTXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHRuKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIG89MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsMik7bzxpOysrbyllW3Irb109KHQmMjU1PDw4KihuP286MS1vKSk+Pj44KihuP286MS1vKX1mdW5jdGlvbiBybihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIG89MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7bzxpOysrbyllW3Irb109dD4+PjgqKG4/bzozLW8pJjI1NX1mdW5jdGlvbiBubihlLHQscixuLG8saSl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG9uKGUsdCxyLG4sbyl7cmV0dXJuIG98fG5uKGUsMCxyLDQpLF9yKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIGFuKGUsdCxyLG4sbyl7cmV0dXJuIG98fG5uKGUsMCxyLDgpLF9yKGUsdCxyLG4sNTIsOCkscis4fUNyLnBvb2xTaXplPTgxOTIsQ3IuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUNyLnByb3RvdHlwZSxlfSxDci5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUHIobnVsbCxlLHQscil9LENyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihDci5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLENyLl9fcHJvdG9fXz1VaW50OEFycmF5KSxDci5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBPcih0KSx0PD0wP1JyKGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/UnIoZSx0KS5maWxsKHIsbik6UnIoZSx0KS5maWxsKHIpOlJyKGUsdCl9KG51bGwsZSx0LHIpfSxDci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gRHIobnVsbCxlKX0sQ3IuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBEcihudWxsLGUpfSxDci5pc0J1ZmZlcj1sbixDci5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIU1yKGUpfHwhTXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLG89MCxpPU1hdGgubWluKHIsbik7bzxpOysrbylpZihlW29dIT09dFtvXSl7cj1lW29dLG49dFtvXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LENyLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LENyLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFFcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBDci5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUNyLmFsbG9jVW5zYWZlKHQpLG89MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgaT1lW3JdO2lmKCFNcihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aS5jb3B5KG4sbyksbys9aS5sZW5ndGh9cmV0dXJuIG59LENyLmJ5dGVMZW5ndGg9THIsQ3IucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxDci5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKUhyKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxDci5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KUhyKHRoaXMsdCx0KzMpLEhyKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LENyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpSHIodGhpcyx0LHQrNyksSHIodGhpcyx0KzEsdCs2KSxIcih0aGlzLHQrMix0KzUpLEhyKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LENyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1ZyKHRoaXMsMCxlKTpqci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LENyLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIU1yKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1Dci5jb21wYXJlKHRoaXMsZSl9LENyLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LENyLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sbyl7aWYoIU1yKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49byYmdD49cilyZXR1cm4gMDtpZihuPj1vKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBpPShvPj4+PTApLShuPj4+PTApLGE9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihpLGEpLHU9dGhpcy5zbGljZShuLG8pLGM9ZS5zbGljZSh0LHIpLGY9MDtmPHM7KytmKWlmKHVbZl0hPT1jW2ZdKXtpPXVbZl0sYT1jW2ZdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0sQ3IucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LENyLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcXIodGhpcyxlLHQsciwhMCl9LENyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHFyKHRoaXMsZSx0LHIsITEpfSxDci5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIG89dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5vKSYmKHI9byksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIE5yKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEtyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBGcih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBZcih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIFdyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSnIodGhpcyxlLHQscik7ZGVmYXVsdDppZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxpPSEwfX0sQ3IucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sQ3IucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Q3IucHJvdG90eXBlO2Vsc2V7dmFyIG89dC1lO3I9bmV3IENyKG8sdm9pZCAwKTtmb3IodmFyIGk9MDtpPG87KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxDci5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sbz0xLGk9MDsrK2k8dCYmKG8qPTI1Nik7KW4rPXRoaXNbZStpXSpvO3JldHVybiBufSxDci5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLG89MTt0PjAmJihvKj0yNTYpOyluKz10aGlzW2UrLS10XSpvO3JldHVybiBufSxDci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sQ3IucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxDci5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LENyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxDci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sQ3IucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sbz0xLGk9MDsrK2k8dCYmKG8qPTI1Nik7KW4rPXRoaXNbZStpXSpvO3JldHVybiBuPj0obyo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sQ3IucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsbz0xLGk9dGhpc1tlKy0tbl07bj4wJiYobyo9MjU2KTspaSs9dGhpc1tlKy0tbl0qbztyZXR1cm4gaT49KG8qPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LENyLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxDci5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxRcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxDci5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxRcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxDci5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LENyLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sQ3IucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsNCx0aGlzLmxlbmd0aCkseHIodGhpcyxlLCEwLDIzLDQpfSxDci5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITEsMjMsNCl9LENyLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw4LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITAsNTIsOCl9LENyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw4LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITEsNTIsOCl9LENyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxlbih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sQ3IucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGVuKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIG89ci0xLGk9MTtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K3J9LENyLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDEsMjU1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxDci5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDY1NTM1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTp0bih0aGlzLGUsdCwhMCksdCsyfSxDci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDY1NTM1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTp0bih0aGlzLGUsdCwhMSksdCsyfSxDci5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpybih0aGlzLGUsdCwhMCksdCs0fSxDci5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpybih0aGlzLGUsdCwhMSksdCs0fSxDci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBvPU1hdGgucG93KDIsOCpyLTEpO2VuKHRoaXMsZSx0LHIsby0xLC1vKX12YXIgaT0wLGE9MSxzPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytpPHImJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K2ktMV0mJihzPTEpLHRoaXNbdCtpXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxDci5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBvPU1hdGgucG93KDIsOCpyLTEpO2VuKHRoaXMsZSx0LHIsby0xLC1vKX12YXIgaT1yLTEsYT0xLHM9MDtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QraSsxXSYmKHM9MSksdGhpc1t0K2ldPShlL2E+PjApLXMmMjU1O3JldHVybiB0K3J9LENyLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZW4odGhpcyxlLHQsMSwxMjcsLTEyOCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sQ3IucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnRuKHRoaXMsZSx0LCEwKSx0KzJ9LENyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZW4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTp0bih0aGlzLGUsdCwhMSksdCsyfSxDci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpybih0aGlzLGUsdCwhMCksdCs0fSxDci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpybih0aGlzLGUsdCwhMSksdCs0fSxDci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gb24odGhpcyxlLHQsITAscil9LENyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBvbih0aGlzLGUsdCwhMSxyKX0sQ3IucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhbih0aGlzLGUsdCwhMCxyKX0sQ3IucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhbih0aGlzLGUsdCwhMSxyKX0sQ3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgbyxpPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKG89aS0xO28+PTA7LS1vKWVbbyt0XT10aGlzW28rcl07ZWxzZSBpZihpPDFlM3x8IUNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxDci5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgbz1lLmNoYXJDb2RlQXQoMCk7bzwyNTYmJihlPW8pfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhQ3IuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgaTtpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3IoaT10O2k8cjsrK2kpdGhpc1tpXT1lO2Vsc2V7dmFyIGE9TXIoZSk/ZTpjbihuZXcgQ3IoZSxuKS50b1N0cmluZygpKSxzPWEubGVuZ3RoO2ZvcihpPTA7aTxyLXQ7KytpKXRoaXNbaSt0XT1hW2klc119cmV0dXJuIHRoaXN9O3ZhciBzbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiB1bihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gY24oZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsbz1udWxsLGk9W10sYT0wO2E8bjsrK2Epe2lmKChyPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFvKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9NjU1MzYrKG8tNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztpLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4sbyxpLGE7bXJ8fHdyKCk7dmFyIHM9ZS5sZW5ndGg7aWYocyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7aT0iPSI9PT1lW3MtMl0/MjoiPSI9PT1lW3MtMV0/MTowLGE9bmV3IHlyKDMqcy80LWkpLG49aT4wP3MtNDpzO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylvPWdyW2UuY2hhckNvZGVBdCh0KV08PDE4fGdyW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8Z3JbZS5jaGFyQ29kZUF0KHQrMildPDw2fGdyW2UuY2hhckNvZGVBdCh0KzMpXSxhW3UrK109bz4+MTYmMjU1LGFbdSsrXT1vPj44JjI1NSxhW3UrK109MjU1Jm87cmV0dXJuIDI9PT1pPyhvPWdyW2UuY2hhckNvZGVBdCh0KV08PDJ8Z3JbZS5jaGFyQ29kZUF0KHQrMSldPj40LGFbdSsrXT0yNTUmbyk6MT09PWkmJihvPWdyW2UuY2hhckNvZGVBdCh0KV08PDEwfGdyW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxncltlLmNoYXJDb2RlQXQodCsyKV0+PjIsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbyksYX0oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gaG4oZSx0LHIsbil7Zm9yKHZhciBvPTA7bzxuJiYhKG8rcj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK3JdPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxwbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZwbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgZG49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkNyLElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLENyLmFsbG9jKCtlKX0saXNCdWZmZXI6bG4sa01heExlbmd0aDpBcn0pLHZuPXByKChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxvPTQtcixpPXQrbyxhPUNyLmFsbG9jKGkpO2ZvcihhLndyaXRlKGUpO28tLTspYS53cml0ZSgiPSIsbisrKTtyZXR1cm4gYS50b1N0cmluZygpfX0pKSxnbj1wcigoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksQ3IuaXNCdWZmZXIoZSk/byhlLnRvU3RyaW5nKCJiYXNlNjQiKSk6byhDci5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSx2bi5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cjtpLmVuY29kZT1yLGkuZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksQ3IuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0saS50b0Jhc2U2ND1uLGkuZnJvbUJhc2U2ND1vLGkudG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIENyLmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1pfSkpLHluPXByKChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Z24uZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksbW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0ocHIoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLG8saSl7Zm9yKHZhciBhLHMsdSxjLGYsaCxsLHAsZCx2LGcseSxtO2k+PTY0Oyl7Zm9yKGE9clswXSxzPXJbMV0sdT1yWzJdLGM9clszXSxmPXJbNF0saD1yWzVdLGw9cls2XSxwPXJbN10sdj0wO3Y8MTY7disrKWc9bys0KnYsZVt2XT0oMjU1Jm5bZ10pPDwyNHwoMjU1Jm5bZysxXSk8PDE2fCgyNTUmbltnKzJdKTw8OHwyNTUmbltnKzNdO2Zvcih2PTE2O3Y8NjQ7disrKXk9KChkPWVbdi0yXSk+Pj4xN3xkPDwxNSleKGQ+Pj4xOXxkPDwxMyleZD4+PjEwLG09KChkPWVbdi0xNV0pPj4+N3xkPDwyNSleKGQ+Pj4xOHxkPDwxNCleZD4+PjMsZVt2XT0oeStlW3YtN118MCkrKG0rZVt2LTE2XXwwKTtmb3Iodj0wO3Y8NjQ7disrKXk9KCgoZj4+PjZ8Zjw8MjYpXihmPj4+MTF8Zjw8MjEpXihmPj4+MjV8Zjw8NykpKyhmJmhefmYmbCl8MCkrKHArKHRbdl0rZVt2XXwwKXwwKXwwLG09KChhPj4+MnxhPDwzMCleKGE+Pj4xM3xhPDwxOSleKGE+Pj4yMnxhPDwxMCkpKyhhJnNeYSZ1XnMmdSl8MCxwPWwsbD1oLGg9ZixmPWMreXwwLGM9dSx1PXMscz1hLGE9eSttfDA7clswXSs9YSxyWzFdKz1zLHJbMl0rPXUsclszXSs9YyxyWzRdKz1mLHJbNV0rPWgscls2XSs9bCxyWzddKz1wLG8rPTY0LGktPTY0fXJldHVybiBvfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsbz10LzUzNjg3MDkxMnwwLGk9dDw8MyxhPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIHM9bisxO3M8YS04O3MrKyl0aGlzLmJ1ZmZlcltzXT0wO3RoaXMuYnVmZmVyW2EtOF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlclthLTddPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbYS02XT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbYS01XT1vPj4+MCYyNTUsdGhpcy5idWZmZXJbYS00XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW2EtM109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlclthLTJdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlclthLTFdPWk+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsYSksdGhpcy5maW5pc2hlZD0hMH1mb3Iocz0wO3M8ODtzKyspZVs0KnMrMF09dGhpcy5zdGF0ZVtzXT4+PjI0JjI1NSxlWzQqcysxXT10aGlzLnN0YXRlW3NdPj4+MTYmMjU1LGVbNCpzKzJdPXRoaXMuc3RhdGVbc10+Pj44JjI1NSxlWzQqcyszXT10aGlzLnN0YXRlW3NdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gaShlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1uZXcgbyhlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCxyLG4pe3ZhciBvPW5bMF07aWYoMD09PW8pdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksbz4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPW8sZS5oYXNoPWksZS5kZWZhdWx0PWksZS5obWFjPWE7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KFsxXSksYz1hKHQsZSksZj1uZXcgbyhjKSxoPW5ldyBVaW50OEFycmF5KGYuZGlnZXN0TGVuZ3RoKSxsPWgubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkobiksZD0wO2Q8bjtkKyspbD09PWgubGVuZ3RoJiYocyhoLGYscixpKSxsPTApLHBbZF09aFtsKytdO3JldHVybiBmLmNsZWFuKCksaC5maWxsKDApLGkuZmlsbCgwKSxwfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGk9bmV3IG8oZSksYT1pLmRpZ2VzdExlbmd0aCxzPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkoYSksYz1uZXcgVWludDhBcnJheShhKSxmPW5ldyBVaW50OEFycmF5KG4pLGg9MDtoKmE8bjtoKyspe3ZhciBsPWgrMTtzWzBdPWw+Pj4yNCYyNTUsc1sxXT1sPj4+MTYmMjU1LHNbMl09bD4+PjgmMjU1LHNbM109bD4+PjAmMjU1LGkucmVzZXQoKSxpLnVwZGF0ZSh0KSxpLnVwZGF0ZShzKSxpLmZpbmlzaChjKTtmb3IodmFyIHA9MDtwPGE7cCsrKXVbcF09Y1twXTtmb3IocD0yO3A8PXI7cCsrKXtpLnJlc2V0KCksaS51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgZD0wO2Q8YTtkKyspdVtkXV49Y1tkXX1mb3IocD0wO3A8YSYmaCphK3A8bjtwKyspZltoKmErcF09dVtwXX1mb3IoaD0wO2g8YTtoKyspdVtoXT1jW2hdPTA7Zm9yKGg9MDtoPDQ7aCsrKXNbaF09MDtyZXR1cm4gaS5jbGVhbigpLGZ9fShuKTt2YXIgbz1uLmRlZmF1bHQ7Zm9yKHZhciBpIGluIG4pb1tpXT1uW2ldO2UuZXhwb3J0cz1vfSgpfSkpKTtmdW5jdGlvbiB3bigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGJuKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIga249d24seG49Ym47ZnVuY3Rpb24gX24oZSl7aWYoa249PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKGtuPT09d258fCFrbikmJnNldFRpbWVvdXQpcmV0dXJuIGtuPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4ga24oZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGtuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBrbi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBkci5zZXRUaW1lb3V0JiYoa249c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIGRyLmNsZWFyVGltZW91dCYmKHhuPWNsZWFyVGltZW91dCk7dmFyIFNuLEVuPVtdLEFuPSExLFRuPS0xO2Z1bmN0aW9uIFJuKCl7QW4mJlNuJiYoQW49ITEsU24ubGVuZ3RoP0VuPVNuLmNvbmNhdChFbik6VG49LTEsRW4ubGVuZ3RoJiZDbigpKX1mdW5jdGlvbiBDbigpe2lmKCFBbil7dmFyIGU9X24oUm4pO0FuPSEwO2Zvcih2YXIgdD1Fbi5sZW5ndGg7dDspe2ZvcihTbj1FbixFbj1bXTsrK1RuPHQ7KVNuJiZTbltUbl0ucnVuKCk7VG49LTEsdD1Fbi5sZW5ndGh9U249bnVsbCxBbj0hMSxmdW5jdGlvbihlKXtpZih4bj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKCh4bj09PWJufHwheG4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIHhuPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e3huKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4geG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiB4bi5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFBuKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9UG4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBPbj1kci5wZXJmb3JtYW5jZXx8e30sRG49KE9uLm5vd3x8T24ubW96Tm93fHxPbi5tc05vd3x8T24ub05vd3x8T24ud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07RW4ucHVzaChuZXcgUG4oZSx0KSksMSE9PUVuLmxlbmd0aHx8QW58fF9uKENuKX0pLEluPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KGRuKSxVbj1wcigoZnVuY3Rpb24oZSx0KXt2YXIgcj1Jbi5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9SW46KG4oSW4sdCksdC5CdWZmZXI9byksbihyLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBvPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP28uZmlsbCh0LG4pOm8uZmlsbCh0KTpvLmZpbGwoMCksb30sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxvLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJbi5TbG93QnVmZmVyKGUpfX0pKSxNbj1wcigoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Vbi5CdWZmZXIsbj1sci5jcnlwdG98fGxyLm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLG8pe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBpPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIGE9MDthPGU7YSs9dCluLmdldFJhbmRvbVZhbHVlcyhpLnNsaWNlKGEsYSt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbz9EbigoZnVuY3Rpb24oKXtvKG51bGwsaSl9KSk6aX06ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKSxMbj1uZXcgVGV4dEVuY29kZXIsam49bmV3IFRleHREZWNvZGVyLEhuPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O3Rocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Iil9KCkscW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PWpuLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpLG5ldyBVaW50OEFycmF5KEhuLmF0b2IodCkuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKX0pKSl9LEJuPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBfKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLG4ubmFtZT1uLmNvbnN0cnVjdG9yLm5hbWUsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKEUobiksbi5jb25zdHJ1Y3Rvciksbn1yZXR1cm4gcn0oTChFcnJvcikpLE5uPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKGUpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtyZXR1cm4gXyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIixuLmNsYWltPW8sbi5yZWFzb249aSxufXJldHVybiByfShCbiksS249ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQiLGV9cmV0dXJuIHJ9KEJuKSxGbj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBfKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQiLGV9cmV0dXJuIHJ9KEJuKSxZbj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBfKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCIsZX1yZXR1cm4gcn0oQm4pLFduPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIF8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXVF9JTlZBTElEIixlfXJldHVybiByfShCbiksSm49ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIixlLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIixlfXJldHVybiByfShCbiksem49ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldUX0VYUElSRUQiLGV9cmV0dXJuIHJ9KE5uKSxWbj1Ibi5jcnlwdG87ZnVuY3Rpb24gR24oKXtpZighSG4uaXNTZWN1cmVDb250ZXh0JiYhSG4uY3J5cHRvLnN1YnRsZSl0aHJvdyBuZXcgQm4oIldlYiBDcnlwdG9ncmFwaHkgQVBJIGlzIGF2YWlsYWJsZSBvbmx5IGluIFNlY3VyZSBDb250ZXh0cy4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmVfQ29udGV4dHMiKX12YXIgJG49ZnVuY3Rpb24oKXt2YXIgZT14KGkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8sYSxzLHUsYztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1mdW5jdGlvbihlKXt2YXIgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnN1YnN0cigtMykpfSxyPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBGbigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxyPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxyPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LHI9WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zdWJzdHIoLTMpKX0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnN1YnN0cigtMykpfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc3Vic3RyKC0zKSwxMCl8fDEpfSxyPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxyPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBGbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpyfX0odCksYT1vLmFsZ29yaXRobSxzPW8ua2V5VXNhZ2VzLHU9Imp3ayIsYz1pcih7fSx0KSxlLmFicnVwdCgicmV0dXJuIiwoZGVsZXRlIGMuYWxnLCJQQktERjIiPT09YS5uYW1lJiYodT0icmF3IixjPXFuKHQuaykpLEduKCksVm4uc3VidGxlLmltcG9ydEtleSh1LGMsYSxudWxsIT09KHI9dC5leHQpJiZ2b2lkIDAhPT1yJiZyLG51bGwhPT0obj10LmtleV9vcHMpJiZ2b2lkIDAhPT1uP246cykpKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZnVuY3Rpb24gWG4oZSl7cmV0dXJuISFlJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fWZ1bmN0aW9uIFpuKGUsdCxyKXtyZXR1cm4gUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFFuKCl7cmV0dXJuIFFuPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihYbih0KSl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7Y2FzZSAyOmlmKHJ8fChyPXQuYWxnKSwic3RyaW5nIj09dHlwZW9mIHImJnIpe2UubmV4dD00O2JyZWFrfXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7Y2FzZSA0OmUudDA9dC5rdHksZS5uZXh0PSJvY3QiPT09ZS50MD83OiJSU0EiPT09ZS50MD8xMDoiRUMiPT09ZS50MHx8Ik9LUCI9PT1lLnQwPzEyOjEzO2JyZWFrO2Nhc2UgNzppZigic3RyaW5nIj09dHlwZW9mIHQuayYmdC5rKXtlLm5leHQ9OTticmVha310aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtjYXNlIDk6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChudWxsIT1ufHwobj0hMCE9PXQuZXh0KSxuPyRuKGlyKGlyKHt9LHQpLHt9LHthbGc6cixleHQ6ITF9KSk6cW4odC5rKSkpO2Nhc2UgMTA6aWYodm9pZCAwPT09dC5vdGgpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgRm4oJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgdW5zdXBwb3J0ZWQnKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwkbihpcihpcih7fSx0KSx7fSx7YWxnOnJ9KSkpO2Nhc2UgMTM6dGhyb3cgbmV3IEZuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBlbz1mdW5jdGlvbigpe3ZhciBlPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuLG8pe3ZhciBhO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKEduKCksIShyIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2UubmV4dD04O2JyZWFrfWlmKHQuc3RhcnRzV2l0aCgiSFMiKSl7ZS5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcigic3ltbWV0cmljIGtleXMgYXJlIG9ubHkgYXBwbGljYWJsZSBmb3IgSE1BQy1iYXNlZCBhbGdvcml0aG1zIik7Y2FzZSAzOnJldHVybiBlLm5leHQ9NSxWbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHIse2hhc2g6IlNIQS0iLmNvbmNhdCh0LnN1YnN0cigtMykpLG5hbWU6IkhNQUMifSwhMSxbInZlcmlmeSJdKTtjYXNlIDU6YT1lLnNlbnQsZS5uZXh0PTk7YnJlYWs7Y2FzZSA4OmE9cjtjYXNlIDk6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChmdW5jdGlvbihlLHQpe2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7dmFyIHI9cGFyc2VJbnQoZS5zdWJzdHIoLTMpLDEwKSxuPXQuYWxnb3JpdGhtLmxlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48cil0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMgc3ltbWV0cmljIGtleXMgdG8gYmUgIikuY29uY2F0KHIsIiBiaXRzIG9yIGxhcmdlciIpKX1pZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7dmFyIG89dC5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIG98fG88MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KHQsYSksVm4uc3VidGxlLnZlcmlmeShmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IkhNQUMifTtjYXNlIkhTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiSE1BQyJ9O2Nhc2UiSFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6MzJ9O2Nhc2UiUFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjQ4fTtjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDo2NH07Y2FzZSJSUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJSUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9O2Nhc2UiRVMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifTtjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn07ZGVmYXVsdDp0aHJvdyBuZXcgRm4oImFsZyAiLmNvbmNhdChlLCIgaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWUiKSl9fSh0KSxhLG4sbykpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIsbixvKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHRvPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMCE9PW4uY3JpdCYmdm9pZCAwPT09ci5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFyfHx2b2lkIDA9PT1yLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoci5jcml0KXx8MD09PXIuY3JpdC5sZW5ndGh8fHIuY3JpdC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aH0pKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO3ZhciBvLGk9cnIoci5jcml0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspe3ZhciBhPW8udmFsdWU7aWYoIXQuaGFzKGEpKXRocm93IG5ldyBGbignRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KGEsJyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uJykpO2lmKHZvaWQgMD09PW5bYV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdChhLCciIGlzIG1pc3NpbmcnKSk7aWYodC5nZXQoYSkmJnZvaWQgMD09PXJbYV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdChhLCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0uYmluZCh2b2lkIDAsWW4sbmV3IE1hcChbWyJiNjQiLCEwXV0pKSxybz1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV9KSkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyInLmNvbmNhdChlLCciIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0uYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTtmdW5jdGlvbiBubyhlLHQscil7cmV0dXJuIG9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvbygpe3JldHVybiBvbz14KGkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIG8sYSxzLHUsYyxmLGgsbCxwLGQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoWG4odCkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBZbigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2Nhc2UgMjppZih2b2lkIDAhPT10LnByb3RlY3RlZHx8dm9pZCAwIT09dC5oZWFkZXIpe2UubmV4dD00O2JyZWFrfXRocm93IG5ldyBZbignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7Y2FzZSA0OmlmKHZvaWQgMD09PXQucHJvdGVjdGVkfHwic3RyaW5nIj09dHlwZW9mIHQucHJvdGVjdGVkKXtlLm5leHQ9NjticmVha310aHJvdyBuZXcgWW4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7Y2FzZSA2OmlmKHZvaWQgMCE9PXQucGF5bG9hZCl7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IFluKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7Y2FzZSA4OmlmKCJzdHJpbmciPT10eXBlb2YgdC5zaWduYXR1cmUpe2UubmV4dD0xMDticmVha310aHJvdyBuZXcgWW4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTA6aWYodm9pZCAwPT09dC5oZWFkZXJ8fFhuKHQuaGVhZGVyKSl7ZS5uZXh0PTEyO2JyZWFrfXRocm93IG5ldyBZbigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTI6aWYobz17fSx0LnByb3RlY3RlZCYmKGE9cW4odC5wcm90ZWN0ZWQpLG89SlNPTi5wYXJzZShqbi5kZWNvZGUoYSkpKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuLG89dC5maWx0ZXIoQm9vbGVhbik7aWYoMD09PW8ubGVuZ3RofHwxPT09by5sZW5ndGgpcmV0dXJuITA7dmFyIGksYT1ycihvKTt0cnl7Zm9yKGEucygpOyEoaT1hLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWUsdT1PYmplY3Qua2V5cyhzKTtpZihuJiYwIT09bi5zaXplKXt2YXIgYyxmPXJyKHUpO3RyeXtmb3IoZi5zKCk7IShjPWYubigpKS5kb25lOyl7dmFyIGg9Yy52YWx1ZTtpZihuLmhhcyhoKSlyZXR1cm4hMTtuLmFkZChoKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fWVsc2Ugbj1uZXcgU2V0KHUpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4hMH0obyx0LmhlYWRlcikpe2UubmV4dD0xNjticmVha310aHJvdyBuZXcgWW4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjYXNlIDE2OmlmKHM9aXIoaXIoe30sbyksdC5oZWFkZXIpLHU9ITAsIXRvKG8scykuaGFzKCJiNjQiKXx8ImJvb2xlYW4iPT10eXBlb2YodT1vLmI2NCkpe2UubmV4dD0yMDticmVha310aHJvdyBuZXcgWW4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y2FzZSAyMDppZigic3RyaW5nIj09dHlwZW9mKGM9cy5hbGcpJiZjKXtlLm5leHQ9MjM7YnJlYWt9dGhyb3cgbmV3IFluKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjYXNlIDIzOmlmKCEoZj1uJiZybyhuLmFsZ29yaXRobXMpKXx8Zi5oYXMoYykpe2UubmV4dD0yNjticmVha310aHJvdyBuZXcgS24oJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtjYXNlIDI2OmlmKCF1KXtlLm5leHQ9MzE7YnJlYWt9aWYoInN0cmluZyI9PXR5cGVvZiB0LnBheWxvYWQpe2UubmV4dD0yOTticmVha310aHJvdyBuZXcgWW4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKTtjYXNlIDI5OmUubmV4dD0zMzticmVhaztjYXNlIDMxOmlmKCJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkfHx0LnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtlLm5leHQ9MzM7YnJlYWt9dGhyb3cgbmV3IFluKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtjYXNlIDMzOmlmKGUudDA9ImZ1bmN0aW9uIj09dHlwZW9mIHIsIWUudDApe2UubmV4dD0zODticmVha31yZXR1cm4gZS5uZXh0PTM3LHIobyx0KTtjYXNlIDM3OnI9ZS5zZW50O2Nhc2UgMzg6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8ZS5tYXRjaCgvXkFcZHszfSg/OkdDTSlLVyQvKSl7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJzZWNyZXQiPT09dC50eXBlKXJldHVybjt0aHJvdyBuZXcgVHlwZUVycm9yKCdDcnlwdG9LZXkgb3IgS2V5T2JqZWN0IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgbXVzdCBiZSB1c2VkIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMiKTtpZigic2VjcmV0Ij09PXQudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdDcnlwdG9LZXkgb3IgS2V5T2JqZWN0IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCInKX0oYyxyKSxoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5sZW5ndGh9KSwwKSxvPW5ldyBVaW50OEFycmF5KG4pLGk9MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnNldChlLGkpLGkrPWUubGVuZ3RofSkpLG99KExuLmVuY29kZSh0LnByb3RlY3RlZHx8IiIpLExuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkP0xuLmVuY29kZSh0LnBheWxvYWQpOnQucGF5bG9hZCksbD1xbih0LnNpZ25hdHVyZSksZS5uZXh0PTQyLGVvKGMscixsLGgpO2Nhc2UgNDI6aWYoZS5zZW50KXtlLm5leHQ9NDQ7YnJlYWt9dGhyb3cgbmV3IEpuO2Nhc2UgNDQ6cmV0dXJuIHA9dT9xbih0LnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkP0xuLmVuY29kZSh0LnBheWxvYWQpOnQucGF5bG9hZCxkPXtwYXlsb2FkOnB9LGUuYWJydXB0KCJyZXR1cm4iLCh2b2lkIDAhPT10LnByb3RlY3RlZCYmKGQucHJvdGVjdGVkSGVhZGVyPW8pLHZvaWQgMCE9PXQuaGVhZGVyJiYoZC51bnByb3RlY3RlZEhlYWRlcj10LmhlYWRlciksZCkpO2Nhc2UgNDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksb28uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpbz0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaSxhbz1mdW5jdGlvbihlKXt2YXIgdD1pby5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7dmFyIHI9cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKHIpO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqcik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKnIpO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQoODY0MDAqcik7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpyKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKnIpfX0sc289ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpfSx1bz1mdW5jdGlvbihlLHQpe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9by50eXA7aWYoaSYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHNvKGUudHlwKSE9PXNvKGkpKSl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO3RyeXtyPUpTT04ucGFyc2Uoam4uZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPW4ocil8fCFyfHxBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBXbigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO3ZhciBhPW8uaXNzdWVyO2lmKGEmJiEoInN0cmluZyI9PXR5cGVvZiBhP1thXTphKS5pbmNsdWRlcyhyLmlzcykpdGhyb3cgbmV3IE5uKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7dmFyIHM9by5zdWJqZWN0O2lmKHMmJnIuc3ViIT09cyl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTt2YXIgdSxjLGYsaD1vLmF1ZGllbmNlO2lmKGgmJihjPSJzdHJpbmciPT10eXBlb2YgaD9baF06aCwhKCJzdHJpbmciPT10eXBlb2YodT1yLmF1ZCk/Yy5pbmNsdWRlcyh1KTpjLnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KHUpKSkpKSl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTtzd2l0Y2gobihvLmNsb2NrVG9sZXJhbmNlKSl7Y2FzZSJzdHJpbmciOmY9YW8oby5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmY9by5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Zj0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfXZhciBsLHA9by5jdXJyZW50RGF0ZSxkPShsPXB8fG5ldyBEYXRlLE1hdGguZmxvb3IobC5nZXRUaW1lKCkvMWUzKSk7aWYodm9pZCAwIT09ci5pYXR8fG8ubWF4VG9rZW5BZ2Upe2lmKCJudW1iZXIiIT10eXBlb2Ygci5pYXQpdGhyb3cgbmV3IE5uKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMD09PXIuZXhwJiZyLmlhdD5kK2YpdGhyb3cgbmV3IE5uKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09ci5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2Ygci5uYmYpdGhyb3cgbmV3IE5uKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKHIubmJmPmQrZil0aHJvdyBuZXcgTm4oJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1yLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiByLmV4cCl0aHJvdyBuZXcgTm4oJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoci5leHA8PWQtZil0aHJvdyBuZXcgem4oJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihvLm1heFRva2VuQWdlKXt2YXIgdj1kLXIuaWF0O2lmKHYtZj4oIm51bWJlciI9PXR5cGVvZiBvLm1heFRva2VuQWdlP28ubWF4VG9rZW5BZ2U6YW8oby5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyB6bignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZih2PDAtZil0aHJvdyBuZXcgTm4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gcn07ZnVuY3Rpb24gY28oKXtyZXR1cm4gY289eChpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBvO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixmdW5jdGlvbigpe3ZhciBlPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgbyxhLHMsdSxjO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1qbi5kZWNvZGUodCkpLCJzdHJpbmciPT10eXBlb2YgdCl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IFluKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjYXNlIDI6aWYobz10LnNwbGl0KCIuIiksYT1vWzBdLHM9b1sxXSx1PW9bMl0sMz09PW8ubGVuZ3RoKXtlLm5leHQ9NTticmVha310aHJvdyBuZXcgWW4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG5vKHtwYXlsb2FkOnN8fHZvaWQgMCxwcm90ZWN0ZWQ6YXx8dm9pZCAwLHNpZ25hdHVyZTp1fHx2b2lkIDB9LHIsbik7Y2FzZSA3OnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7cGF5bG9hZDpjLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmMucHJvdGVjdGVkSGVhZGVyfSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSh0LHIsbik7Y2FzZSAyOnJldHVybiBvPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7cGF5bG9hZDp1byhvLnByb3RlY3RlZEhlYWRlcixvLnBheWxvYWQsbikscHJvdGVjdGVkSGVhZGVyOm8ucHJvdGVjdGVkSGVhZGVyfSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGNvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiYmFzZTY0VVJMRW5jb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX19LHtrZXk6ImdldENvZGVWZXJpZmllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoTW4oMzIpKX19LHtrZXk6ImdldENvZGVDaGFsbGVuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgWChtbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9fSx7a2V5OiJnZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiUlMyNTYiLCJSUzUxMiIsIlJTMzg0IiwiUFMyNTYiXX19LHtrZXk6ImdldEpXS0ZvclRoZUlkVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1KU09OLnBhcnNlKHluLmRlY29kZShlLCJ1dGY4IikpLG89cnIodCk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKG4ua2lkPT09aS5raWQpcmV0dXJuIFpuKHthbGc6aS5hbGcsZTppLmUsa3R5Omkua3R5LG46aS5ufSl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2lkfSkpLmpvaW4oIiwgIikpKX19LHtrZXk6ImlzVmFsaWRJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLG8saSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY28uYXBwbHkodGhpcyxhcmd1bWVudHMpfShlLHQse2FsZ29yaXRobXM6dGhpcy5nZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCksYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTppLGlzc3VlcjpuLHN1YmplY3Q6b30pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkNSWVBUT19VVElMLUlWSVQtSVYwMiIsImNyeXB0by11dGlscyIsImlzVmFsaWRJZFRva2VuIiwiVmFsaWRhdGluZyBJRCB0b2tlbiBmYWlsZWQiLGUpKX0pKX19LHtrZXk6ImRlY29kZUlEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD15bi5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGZyKCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fV0pLGV9KCksaG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sbz1mby5kZWNvZGVJRFRva2VuKGUpLGk9dGhpcy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT10aGlzLmV4dHJhY3RVc2VyTmFtZShvKSxzPW51bGwhPT0odD1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsdT1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixjPXMmJnU/IiIuY29uY2F0KHMsIiAiKS5jb25jYXQodSk6c3x8dXx8IiIsZj1udWxsIT09KG49by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1uP246YztyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6Zix0ZW5hbnREb21haW46aSx1c2VybmFtZTphfSx0aGlzLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9fSx7a2V5OiJmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LnN1YixudWxsPT10fHxkZWxldGUgdC5hdWQsbnVsbD09dHx8ZGVsZXRlIHQuZXhwLG51bGw9PXR8fGRlbGV0ZSB0LmlhdCxudWxsPT10fHxkZWxldGUgdC5hY3IsbnVsbD09dHx8ZGVsZXRlIHQuYW1yLG51bGw9PXR8fGRlbGV0ZSB0LmF6cCxudWxsPT10fHxkZWxldGUgdC5hdXRoX3RpbWUsbnVsbD09dHx8ZGVsZXRlIHQubm9uY2UsbnVsbD09dHx8ZGVsZXRlIHQuY19oYXNoLG51bGw9PXR8fGRlbGV0ZSB0LmF0X2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQubmJmLG51bGw9PXR8fGRlbGV0ZSB0LmlzayxudWxsPT10fHxkZWxldGUgdC5zaWQ7dmFyIHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXkoZSwyKSxuPXRbMF0sbz10WzFdLGk9bi5zcGxpdCgiXyIpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpXS5jb25jYXQobChlLnNsaWNlKDEpKSkuam9pbigiIil9KSkuam9pbigiIik7cltpXT1vfSkpLHJ9fSx7a2V5OiJnZXRUb2tlblJlcXVlc3RIZWFkZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19XSksZX0oKTtoby5leHRyYWN0VXNlck5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIixyPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yJiZyLnBvcCgpLHIuam9pbih0KX0saG8uZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQCIscj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTt2YXIgbG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Xyh0aGlzLGUpLHRoaXMuX2RhdGFMYXllcj10LHRoaXMuX2NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBzcihyLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT1mdW5jdGlvbigpe3JldHVybiBzcihyLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19cmV0dXJuIHcoZSxbe2tleToicmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2NvbmZpZygpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsdC53ZWxsS25vd25FbmRwb2ludD90LnNlcnZlck9yaWdpbit0LndlbGxLbm93bkVuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIik7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9e30sdC5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybiBuPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIiwobi5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyYmbi5lbmRwb2ludHMmJk9iamVjdC5rZXlzKG4uZW5kcG9pbnRzKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoL1tBLVpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKX0pKTtyW3RdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpKSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9e30sZS5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybihyPWUuc2VudCkuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6ci5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDpyLnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTpyLnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTpyLnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnIuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6ci5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifSxlLmFicnVwdCgicmV0dXJuIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksbikpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToidmFsaWRhdGVJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sbz10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50Lmp3a3NfdXJpLHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTpyZXR1cm4gbj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmMCE9PXIudHJpbSgpLmxlbmd0aD90ci5nZXQocix7d2l0aENyZWRlbnRpYWxzOm51bGw9PW4/dm9pZCAwOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHNyKG8sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGE9dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDppZigyMDA9PT10LnN0YXR1cyl7ci5uZXh0PTI7YnJlYWt9cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULU5SMDIiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpKTtjYXNlIDI6cmV0dXJuIHIubmV4dD00LHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSA0OnJldHVybiBuPXIuc2VudC5pc3N1ZXIsci5uZXh0PTcsdGhpcy5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtjYXNlIDc6cmV0dXJuIG89ci5zZW50LnNwbGl0KCIvLndlbGwta25vd24iKVswXSxyLmFicnVwdCgicmV0dXJuIixuJiZuPT09bz9mby5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSx0LmRhdGEua2V5cykudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHNyKGEsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci50MD1mbyxyLnQxPWUsci50Mj10LHIubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTpyZXR1cm4gci50Mz1yLnNlbnQuY2xpZW50SUQsci50ND1uLHIudDU9Zm8uZGVjb2RlSURUb2tlbihlKS5zdWIsci5uZXh0PTEwLHRoaXMuX2NvbmZpZygpO2Nhc2UgMTA6cmV0dXJuIHIudDY9ci5zZW50LmNsb2NrVG9sZXJhbmNlLHIuYWJydXB0KCJyZXR1cm4iLHIudDAuaXNWYWxpZElkVG9rZW4uY2FsbChyLnQwLHIudDEsci50MixyLnQzLHIudDQsci50NSxyLnQ2KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpfSkpKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLVZJVC1FUzA0IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKX0pKTpQcm9taXNlLnJlc29sdmUoITEpKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGE7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIG49Im9wZW5pZCIsci5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybiBvPXIuc2VudCxyLm5leHQ9Nix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDY6cmV0dXJuIGE9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLChvLnNjb3BlJiZvLnNjb3BlLmxlbmd0aD4wJiYoby5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG8uc2NvcGUucHVzaCgib3BlbmlkIiksbj1vLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLGEuYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLGhvLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhhLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19IixuKS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLG8uY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0odD1vLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXQ/dDoiIikpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyVXNlclNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YSgpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiaGFuZGxlVG9rZW5SZXNwb25zZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuPXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoMjAwPT09ZS5zdGF0dXMpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLUhUUi1OUjAxIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSB0b2tlbiByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKSk7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9jb25maWcoKTtjYXNlIDQ6aWYoIXQuc2VudC52YWxpZGF0ZUlEVG9rZW4pe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLnZhbGlkYXRlSWRUb2tlbihlLmRhdGEuaWRfdG9rZW4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBzcihuLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiByKCl7dmFyIG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYoIXQpe3IubmV4dD01O2JyZWFrfXJldHVybiByLm5leHQ9Myx0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjYXNlIDM6cmV0dXJuIG49e2FjY2Vzc1Rva2VuOmUuZGF0YS5hY2Nlc3NfdG9rZW4sZXhwaXJlc0luOmUuZGF0YS5leHBpcmVzX2luLGlkVG9rZW46ZS5kYXRhLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjplLmRhdGEucmVmcmVzaF90b2tlbixzY29wZTplLmRhdGEuc2NvcGUsdG9rZW5UeXBlOmUuZGF0YS50b2tlbl90eXBlfSxyLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUobikpO2Nhc2UgNTpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSl9KSkpO2Nhc2UgNjpyZXR1cm4gcj17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9LHQubmV4dD05LHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHIpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCkscG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Xyh0aGlzLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBsbyh0KSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gc3Iocix2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc3Iocix2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fXJldHVybiB3KGUsW3trZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixvLGEscyx1LGMsZixoLGwscCxkO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTppZihuPXQuc2VudCxyJiYwIT09ci50cmltKCkubGVuZ3RoKXt0Lm5leHQ9ODticmVha310aHJvdyBuZXcgZnIoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6aWYoKG89bmV3IFVSTChyKSkuc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxvLnNlYXJjaFBhcmFtcy5hcHBlbmQoImNsaWVudF9pZCIsbi5jbGllbnRJRCksYT0ib3BlbmlkIixuLnNjb3BlJiZuLnNjb3BlLmxlbmd0aD4wJiYobi5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG4uc2NvcGUucHVzaCgib3BlbmlkIiksYT1uLnNjb3BlLmpvaW4oIiAiKSksby5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsYSksby5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLG4uc2lnbkluUmVkaXJlY3RVUkwpLG4ucmVzcG9uc2VNb2RlJiZvLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLG4ucmVzcG9uc2VNb2RlKSwhbi5lbmFibGVQS0NFKXt0Lm5leHQ9MTc7YnJlYWt9cmV0dXJuIHM9Zm8uZ2V0Q29kZVZlcmlmaWVyKCksdT1mby5nZXRDb2RlQ2hhbGxlbmdlKHMpLHQubmV4dD0xNSx0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIixzKTtjYXNlIDE1Om8uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG8uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHUpO2Nhc2UgMTc6aWYobi5wcm9tcHQmJm8uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixuLnByb21wdCksYz1lKWZvcihmPTAsaD1PYmplY3QuZW50cmllcyhjKTtmPGgubGVuZ3RoO2YrKylsPXkoaFtmXSwyKSxwPWxbMF0sZD1sWzFdLCIiIT1wJiYiIiE9ZCYmby5zZWFyY2hQYXJhbXMuYXBwZW5kKHAsZC50b1N0cmluZygpKTtyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsby50b1N0cmluZygpKTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGEscyx1PXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBuPXIuc2VudC50b2tlbl9lbmRwb2ludCxyLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYobz1yLnNlbnQsbiYmMCE9PW4udHJpbSgpLmxlbmd0aCl7ci5uZXh0PTg7YnJlYWt9cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDEtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDg6aWYoci50MD10LCFyLnQwKXtyLm5leHQ9MTI7YnJlYWt9cmV0dXJuIHIubmV4dD0xMix0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpO2Nhc2UgMTI6aWYoKGE9W10pLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChvLmNsaWVudElEKSksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmYS5wdXNoKCJjbGllbnRfc2VjcmV0PSIuY29uY2F0KG8uY2xpZW50U2VjcmV0KSkscz1lLGEucHVzaCgiY29kZT0iLmNvbmNhdChzKSksYS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLGEucHVzaCgicmVkaXJlY3RfdXJpPSIuY29uY2F0KG8uc2lnbkluUmVkaXJlY3RVUkwpKSxyLnQxPW8uZW5hYmxlUEtDRSwhci50MSl7ci5uZXh0PTI5O2JyZWFrfXJldHVybiByLnQyPWEsci50Mz0iY29kZV92ZXJpZmllcj0iLHIubmV4dD0yNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIik7Y2FzZSAyNDpyZXR1cm4gci50ND1yLnNlbnQsci50NT1yLnQzLmNvbmNhdC5jYWxsKHIudDMsci50NCksci50Mi5wdXNoLmNhbGwoci50MixyLnQ1KSxyLm5leHQ9MjksdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpO2Nhc2UgMjk6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHRyLnBvc3QobixhLmpvaW4oIiYiKSx7aGVhZGVyczpoby5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHUuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQxLUVTMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIix2b2lkIDAsdm9pZCAwLGUpKX0pKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKSk7Y2FzZSAzMDpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLG8sYT10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQudG9rZW5fZW5kcG9pbnQsZS5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OnJldHVybiByPWUuc2VudCxlLm5leHQ9OCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDg6aWYoKG49ZS5zZW50KS5yZWZyZXNoX3Rva2VuKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSkpO2Nhc2UgMTE6aWYodCYmMCE9PXQudHJpbSgpLmxlbmd0aCl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQyLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVmcmVzaEFjY2Vzc1Rva2VuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDEzOnJldHVybiBvPVtdLGUuYWJydXB0KCJyZXR1cm4iLChvLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChyLmNsaWVudElEKSksby5wdXNoKCJyZWZyZXNoX3Rva2VuPSIuY29uY2F0KG4ucmVmcmVzaF90b2tlbikpLG8ucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksci5jbGllbnRTZWNyZXQmJnIuY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmby5wdXNoKCJjbGllbnRfc2VjcmV0PSIuY29uY2F0KHIuY2xpZW50U2VjcmV0KSksdHIucG9zdCh0LG8uam9pbigiJiIpLHtoZWFkZXJzOmhvLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYS5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBocigiQVVUSF9DT1JFLVJBVDItTlIwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpKSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToicmV2b2tlQWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sbz10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQucmV2b2NhdGlvbl9lbmRwb2ludCxlLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYocj1lLnNlbnQsdCYmMCE9PXQudHJpbSgpLmxlbmd0aCl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKSk7Y2FzZSA4OnJldHVybihuPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoci5jbGllbnRJRCkpLGUudDA9bixlLnQxPSJ0b2tlbj0iLGUubmV4dD0xNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDE0OnJldHVybiBlLnQyPWUuc2VudC5hY2Nlc3NfdG9rZW4sZS50Mz1lLnQxLmNvbmNhdC5jYWxsKGUudDEsZS50MiksZS50MC5wdXNoLmNhbGwoZS50MCxlLnQzKSxuLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKSxlLmFicnVwdCgicmV0dXJuIix0ci5wb3N0KHQsbi5qb2luKCImIikse2hlYWRlcnM6aG8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c30pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQzLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KG8uX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksUHJvbWlzZS5yZXNvbHZlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfQ09SRS1SQVQzLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sbyxhLHM9dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTppZihuPXQuc2VudCwobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCkmJjAhPT1vLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQ0ctTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDg6cmV0dXJuIHQubmV4dD0xMCxQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9eShlLDIpLHI9dFswXSxuPXRbMV07cmV0dXJuIHNyKHMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKG4pO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsIiIuY29uY2F0KHIsIj0iKS5jb25jYXQodCkpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSkpKTtjYXNlIDEwOmlmKHQudDA9dC5zZW50LmpvaW4oIiYiKSx0LnQxPU9iamVjdC5hc3NpZ24oe30saG8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSx0LnQyPW8sdC50Mz1uLnNlbmRDb29raWVzSW5SZXF1ZXN0cyxhPXtkYXRhOnQudDAsaGVhZGVyczp0LnQxLG1ldGhvZDoiUE9TVCIsdXJsOnQudDIsd2l0aENyZWRlbnRpYWxzOnQudDN9LHQudDQ9ZS5hdHRhY2hUb2tlbiwhdC50NCl7dC5uZXh0PTI2O2JyZWFrfXJldHVybiB0LnQ1PU9iamVjdCx0LnQ2PU9iamVjdC5hc3NpZ24oe30sYS5oZWFkZXJzKSx0LnQ3PSJCZWFyZXIgIix0Lm5leHQ9MjIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyMjp0LnQ4PXQuc2VudC5hY2Nlc3NfdG9rZW4sdC50OT10LnQ3LmNvbmNhdC5jYWxsKHQudDcsdC50OCksdC50MTA9e0F1dGhvcml6YXRpb246dC50OX0sYS5oZWFkZXJzPXQudDUuYXNzaWduLmNhbGwodC50NSx0LnQ2LHQudDEwKTtjYXNlIDI2OnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0cihhKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gMjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/cy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSl9KSk6UHJvbWlzZS5yZXNvbHZlKHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBocigiQVVUSF9DT1JFLVJDRy1OUjA0IiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdCBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSkpO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldEJhc2ljVXNlckluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQscj1oby5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09dD92b2lkIDA6dC5pZF90b2tlbiksbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6ci51c2VybmFtZX0sZS5hYnJ1cHQoInJldHVybiIsKHIuZGlzcGxheU5hbWUmJiIiIT09ci5kaXNwbGF5TmFtZXx8ZGVsZXRlIHIuZGlzcGxheU5hbWUsci50ZW5hbnREb21haW4mJiIiIT09ci50ZW5hbnREb21haW58fGRlbGV0ZSByLnRlbmFudERvbWFpbixuPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSxyKSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOnJldHVybiB0PWUuc2VudC5pZF90b2tlbixlLmFicnVwdCgicmV0dXJuIixmby5kZWNvZGVJRFRva2VuKHQpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQuaWRfdG9rZW4pO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbj10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHQudDA9IWUsIXQudDApe3QubmV4dD01O2JyZWFrfXJldHVybiB0Lm5leHQ9NCx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpO2Nhc2UgNDp0LnQwPXQuc2VudDtjYXNlIDU6aWYoIXQudDApe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoITApKTtjYXNlIDc6cmV0dXJuIHQubmV4dD05LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpO2Nhc2UgOTpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsdHIuZ2V0KHIpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBzcihuLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoMjAwPT09ZS5zdGF0dXMpe3QubmV4dD00O2JyZWFrfXQudDA9UHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0NPUkUtR09QTS1OUjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldE9JRENQcm92aWRlck1ldGFEYXRhIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byB0aGUgd2VsbC1rbm93biBlbmRwb2ludCB0byBnZXQgdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpLHQubmV4dD0xMzticmVhaztjYXNlIDQ6cmV0dXJuIHQudDE9dGhpcy5fZGF0YUxheWVyLHQubmV4dD03LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKTtjYXNlIDc6cmV0dXJuIHQudDI9dC5zZW50LHQubmV4dD0xMCx0LnQxLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50MSx0LnQyKTtjYXNlIDEwOnJldHVybiB0Lm5leHQ9MTIsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDEyOnQudDA9UHJvbWlzZS5yZXNvbHZlKCEwKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnQwKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7cmV0dXJuIHNyKG4sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS50MD10aGlzLl9kYXRhTGF5ZXIsZS5uZXh0PTMsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUZhbGxiYWNrRW5kcG9pbnRzKCk7Y2FzZSAzOnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9NixlLnQwLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwoZS50MCxlLnQxKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSA4OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoITApKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHQ9ZS5zZW50LGUudDA9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50LGUudDE9dC5jaGVja19zZXNzaW9uX2lmcmFtZSxlLnQyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQsZS50Mz10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQsZS50ND10Lmlzc3VlcixlLnQ1PXQuandrc191cmksZS50Nj10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCxlLnQ3PXQucmV2b2NhdGlvbl9lbmRwb2ludCxlLnQ4PXQudG9rZW5fZW5kcG9pbnQsZS50OT10LnVzZXJpbmZvX2VuZHBvaW50LGUubmV4dD0xNSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtjYXNlIDE1OnJldHVybiBlLnQxMD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIse2F1dGhvcml6YXRpb25FbmRwb2ludDplLnQwLGNoZWNrU2Vzc2lvbklmcmFtZTplLnQxLGVuZFNlc3Npb25FbmRwb2ludDplLnQyLGludHJvc3BlY3Rpb25FbmRwb2ludDplLnQzLGlzc3VlcjplLnQ0LGp3a3NVcmk6ZS50NSxyZWdpc3RyYXRpb25FbmRwb2ludDplLnQ2LHJldm9jYXRpb25FbmRwb2ludDplLnQ3LHRva2VuRW5kcG9pbnQ6ZS50OCx1c2VyaW5mb0VuZHBvaW50OmUudDksd2VsbEtub3duRW5kcG9pbnQ6ZS50MTB9KTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTaWduT3V0VVJMIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscjtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBvLGEscyx1O3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjppZihuLnQxPWU9bi5zZW50LG4udDA9bnVsbD09PW4udDEsbi50MCl7bi5uZXh0PTY7YnJlYWt9bi50MD12b2lkIDA9PT1lO2Nhc2UgNjppZighbi50MCl7bi5uZXh0PTEwO2JyZWFrfW4udDI9dm9pZCAwLG4ubmV4dD0xMTticmVhaztjYXNlIDEwOm4udDI9ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludDtjYXNlIDExOnJldHVybiBvPW4udDIsbi5uZXh0PTE0LHRoaXMuX2NvbmZpZygpO2Nhc2UgMTQ6aWYoYT1uLnNlbnQsbyYmMCE9PW8udHJpbSgpLmxlbmd0aCl7bi5uZXh0PTE3O2JyZWFrfXRocm93IG5ldyBmcigiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgMTc6cmV0dXJuIG4ubmV4dD0xOSx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDE5OmlmKG4udDQ9dD1uLnNlbnQsbi50Mz1udWxsPT09bi50NCxuLnQzKXtuLm5leHQ9MjM7YnJlYWt9bi50Mz12b2lkIDA9PT10O2Nhc2UgMjM6aWYoIW4udDMpe24ubmV4dD0yNzticmVha31uLnQ1PXZvaWQgMCxuLm5leHQ9Mjg7YnJlYWs7Y2FzZSAyNzpuLnQ1PXQuaWRfdG9rZW47Y2FzZSAyODppZigocz1uLnQ1KSYmMCE9PXMudHJpbSgpLmxlbmd0aCl7bi5uZXh0PTMxO2JyZWFrfXRocm93IG5ldyBmcigiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2Nhc2UgMzE6aWYoKHU9bnVsbCE9PShyPW51bGw9PWE/dm9pZCAwOmEuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWE/dm9pZCAwOmEuc2lnbkluUmVkaXJlY3RVUkwpJiYwIT09dS50cmltKCkubGVuZ3RoKXtuLm5leHQ9MzQ7YnJlYWt9dGhyb3cgbmV3IGZyKCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtjYXNlIDM0OnJldHVybiBuLmFicnVwdCgicmV0dXJuIiwiIi5jb25jYXQobywiP2lkX3Rva2VuX2hpbnQ9IikuY29uY2F0KHMsIiZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9IikuY29uY2F0KHUsIiZzdGF0ZT1zaWduX291dF9zdWNjZXNzIikpO2Nhc2UgMzU6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNpZ25PdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5nZXRTaWduT3V0VVJMKCk7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLmFicnVwdCgicmV0dXJuIiwodGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoKSx0KSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDI6aWYodC50MT1lPXQuc2VudCx0LnQwPW51bGw9PT10LnQxLHQudDApe3QubmV4dD02O2JyZWFrfXQudDA9dm9pZCAwPT09ZTtjYXNlIDY6aWYoIXQudDApe3QubmV4dD0xMDticmVha310LnQyPXZvaWQgMCx0Lm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDp0LnQyPWUuYWNjZXNzX3Rva2VuO2Nhc2UgMTE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDIpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImlzQXV0aGVudGljYXRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnQwPUJvb2xlYW4sZS5uZXh0PTMsdGhpcy5nZXRBY2Nlc3NUb2tlbigpO2Nhc2UgMzpyZXR1cm4gZS50MT1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsKDAsZS50MCkoZS50MSkpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0UEtDRUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIixlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJ1cGRhdGVDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpO2Nhc2UgMjppZighZS5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyl7dC5uZXh0PTEzO2JyZWFrfWlmKHQudDA9bnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMsIXQudDApe3QubmV4dD0xMTticmVha31yZXR1cm4gdC50MT10aGlzLl9kYXRhTGF5ZXIsdC5uZXh0PTgsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSk7Y2FzZSA4OnJldHVybiB0LnQyPXQuc2VudCx0Lm5leHQ9MTEsdC50MS5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDEsdC50Mik7Y2FzZSAxMTp0Lm5leHQ9MTc7YnJlYWs7Y2FzZSAxMzppZih0LnQzPW51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzLCF0LnQzKXt0Lm5leHQ9MTc7YnJlYWt9cmV0dXJuIHQubmV4dD0xNyx0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCksdm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Xyh0aGlzLGUpLHRoaXMuX2lkPXQsdGhpcy5fc3RvcmU9cn1yZXR1cm4gdyhlLFt7a2V5OiJzZXREYXRhSW5CdWxrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIG8sYSxzLHU7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEoZSk7Y2FzZSAyOmlmKG4udDE9cj1uLnNlbnQsbi50MD1udWxsIT09bi50MSwhbi50MCl7bi5uZXh0PTY7YnJlYWt9bi50MD12b2lkIDAhPT1yO2Nhc2UgNjppZighbi50MCl7bi5uZXh0PTEwO2JyZWFrfW4udDI9cixuLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpuLnQyPW51bGw7Y2FzZSAxMTpyZXR1cm4gbz1uLnQyLGE9byYmSlNPTi5wYXJzZShvKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx0KSx1PUpTT04uc3RyaW5naWZ5KHMpLG4ubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsdSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gbygpe3ZhciBhLHMsdSxjO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKG8pe2Zvcig7Oylzd2l0Y2goby5wcmV2PW8ubmV4dCl7Y2FzZSAwOnJldHVybiBvLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKGUpO2Nhc2UgMjppZihvLnQxPW49by5zZW50LG8udDA9bnVsbCE9PW8udDEsIW8udDApe28ubmV4dD02O2JyZWFrfW8udDA9dm9pZCAwIT09bjtjYXNlIDY6aWYoIW8udDApe28ubmV4dD0xMDticmVha31vLnQyPW4sby5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6by50Mj1udWxsO2Nhc2UgMTE6cmV0dXJuIGE9by50MixzPWEmJkpTT04ucGFyc2UoYSksdT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scyksYih7fSx0LHIpKSxjPUpTT04uc3RyaW5naWZ5KHUpLG8ubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsYyk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0pLG8sdGhpcyl9KSkpfX0se2tleToicmVtb3ZlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgbyxhLHMsdTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YShlKTtjYXNlIDI6aWYobi50MT1yPW4uc2VudCxuLnQwPW51bGwhPT1uLnQxLCFuLnQwKXtuLm5leHQ9NjticmVha31uLnQwPXZvaWQgMCE9PXI7Y2FzZSA2OmlmKCFuLnQwKXtuLm5leHQ9MTA7YnJlYWt9bi50Mj1yLG4ubmV4dD0xMTticmVhaztjYXNlIDEwOm4udDI9bnVsbDtjYXNlIDExOnJldHVybiBvPW4udDIsYT1vJiZKU09OLnBhcnNlKG8pLGRlbGV0ZShzPU9iamVjdC5hc3NpZ24oe30sYSkpW3RdLHU9SlNPTi5zdHJpbmdpZnkocyksbi5uZXh0PTE4LHRoaXMuX3N0b3JlLnNldERhdGEoZSx1KTtjYXNlIDE4OmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJfcmVzb2x2ZUtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiIuY29uY2F0KGUsIi0iKS5jb25jYXQodGhpcy5faWQpfX0se2tleToic2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkodXIuQ29uZmlnRGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDp0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHVyLlRlbXBvcmFyeURhdGEpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkodXIuU2Vzc2lvbkRhdGEpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUpTT04sdC5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9SlNPTix0Lm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldFRlbXBvcmFyeURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC50MD1KU09OLHQubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5UZW1wb3JhcnlEYXRhKSk7Y2FzZSAzOmlmKHQudDI9ZT10LnNlbnQsdC50MT1udWxsIT09dC50MiwhdC50MSl7dC5uZXh0PTc7YnJlYWt9dC50MT12b2lkIDAhPT1lO2Nhc2UgNzppZighdC50MSl7dC5uZXh0PTExO2JyZWFrfXQudDM9ZSx0Lm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTp0LnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gdC50ND10LnQzLHQuYWJydXB0KCJyZXR1cm4iLHQudDAucGFyc2UuY2FsbCh0LnQwLHQudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUpTT04sdC5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSk7Y2FzZSAzOmlmKHQudDI9ZT10LnNlbnQsdC50MT1udWxsIT09dC50MiwhdC50MSl7dC5uZXh0PTc7YnJlYWt9dC50MT12b2lkIDAhPT1lO2Nhc2UgNzppZighdC50MSl7dC5uZXh0PTExO2JyZWFrfXQudDM9ZSx0Lm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTp0LnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gdC50ND10LnQzLHQuYWJydXB0KCJyZXR1cm4iLHQudDAucGFyc2UuY2FsbCh0LnQwLHQudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5Db25maWdEYXRhKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVRlbXBvcmFyeURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlRlbXBvcmFyeURhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5TZXNzaW9uRGF0YSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0Q29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLHImJkpTT04ucGFyc2UocilbZV0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHI7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmSlNPTi5wYXJzZShyKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuVGVtcG9yYXJ5RGF0YSkpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmSlNPTi5wYXJzZShyKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSk7Y2FzZSAyOnJldHVybiByPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIixyJiZKU09OLnBhcnNlKHIpW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InNldENvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpLGUsdCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJzZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleSh1ci5UZW1wb3JhcnlEYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkodXIuVGVtcG9yYXJ5RGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSksZX0oKSxnbz17Y2xpZW50SG9zdDpvcmlnaW4sY2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOlF0LnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH0seW89ZnVuY3Rpb24oKXsKLyoqCgkgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCgkgICAgICAgKgoJICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgoJICAgICAgICoKCSAgICAgICAqIEBleGFtcGxlCgkgICAgICAgKiBgYGAKCSAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CgkgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CgkgICAgICAgKiBgYGAKCSAgICAgICAqCgkgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKCSAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICovCmZ1bmN0aW9uIGUodCl7Xyh0aGlzLGUpLGUuX2luc3RhbmNlSUQ/ZS5faW5zdGFuY2VJRCs9MTplLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyB2bygiaW5zdGFuY2VfIi5jb25jYXQoZS5faW5zdGFuY2VJRCksdCksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBwbyh0aGlzLl9kYXRhTGF5ZXIpfQovKioKCSAgICAgICAqCgkgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgoJICAgICAgICoKCSAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgoJICAgICAgICoKCSAgICAgICAqIEBleGFtcGxlCgkgICAgICAgKiBjb25zdCBjb25maWcgPSB7CgkgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCgkgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAoJICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCgkgICAgICAgKiB9CgkgICAgICAgKgoJICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CgkgICAgICAgKgoJICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKCSAgICAgICAqCgkgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAqL3JldHVybiB3KGUsW3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxnbyksZSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKCSAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBkYXRhID0gYXV0aC5nZXREYXRhTGF5ZXIoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREYXRhTGF5ZXIKCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXREYXRhTGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCgkgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwoJICAgICAgICAgKiBjdXN0b20gcGF0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGZpZHAgcGFyYW1ldGVyLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLmdldEF1dGhvcml6YXRpb25VUkwoKS50aGVuKCh1cmwpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwoJICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKCSAgICAgICAgICogfSk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbj10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBudWxsPT0ocj1PYmplY3QuYXNzaWduKHt9LGUpKXx8ZGVsZXRlIHIuZm9yY2VJbml0LHQubmV4dD00LHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSA0OmlmKCF0LnNlbnQpe3QubmV4dD04O2JyZWFrfXQudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwociksdC5uZXh0PTk7YnJlYWs7Y2FzZSA4OnQudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBuLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTChyKX0pKTtjYXNlIDk6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQoJICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgoJICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKCSAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CgkgICAgICAgICAqIH0pOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuPXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSAyOmlmKCFyLnNlbnQpe3IubmV4dD02O2JyZWFrfXIudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpLHIubmV4dD03O2JyZWFrO2Nhc2UgNjpyLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpfSkpO2Nhc2UgNzpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci50MCk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLnNpZ25PdXQoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzaWduT3V0CgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldE9JRENTZXJ2aWNlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXREZWNvZGVkSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXRJRFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfQovKioKCSAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToiZ2V0QmFzaWNVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CgkgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwoJICAgICAgICAgKiB9KTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJldm9rZUFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKCSAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwoJICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKCSAgICAgICAgICogfSk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGF1dGguZ2V0QWNjZXNzVG9rZW4oKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKCSAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBBeGlvc1Jlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKCSAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKCSAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCgkgICAgICAgICAqICAgZGF0YTogewoJICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAoJICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAoJICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCgkgICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKCSAgICAgICAgICogICB9LAoJICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAoJICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAoJICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAoJICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCgkgICAgICAgICAqIH0KCSAgICAgICAgICoKCSAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKCSAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CgkgICAgICAgICAqIH0pOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RDdXN0b21HcmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBQS0NFIGNvZGUuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRQS0NFQ29kZSgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCgkgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InVwZGF0ZUNvbmZpZyIsdmFsdWU6Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKCSAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAoJICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAoJICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKCSAgICAgICAgICogfQoJICAgICAgICAgKgoJICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi8KZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSxbe2tleToiaXNTaWduT3V0U3VjY2Vzc2Z1bCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJiFufX1dKSxlfSgpO2Z1bmN0aW9uIG1vKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPU8oZSk7aWYodCl7dmFyIG89Tyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLG8pfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gQyh0aGlzLHIpfX12YXIgd28sYm8sa289ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PW1vKHIpO2Z1bmN0aW9uIHIoZSxuLG8saSxhLHMpe3ZhciB1O3JldHVybiBfKHRoaXMsciksKHU9dC5jYWxsKHRoaXMsbnVsbCE9aT9pOm51bGw9PXM/dm9pZCAwOnMubWVzc2FnZSkpLm5hbWU9dS5jb25zdHJ1Y3Rvci5uYW1lLHUuY29kZT1lLHUuZmlsZT1uLHUubWV0aG9kPW8sdS5lcnJvcj1zLHUuZGVzY3JpcHRpb249YSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRSh1KSwodGhpcyBpbnN0YW5jZW9mIHI/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApLnByb3RvdHlwZSksdX1yZXR1cm4gcn0oTChFcnJvcikpLHhvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtfKHRoaXMsZSksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9dCx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmV0dXJuIHcoZSxbe2tleToicmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLG89dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpLnJlZnJlc2hfdG9rZW4pe2UubmV4dD05O2JyZWFrfXJldHVybiByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBhKG8sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSwxZTMqKHI8PTEwP3I6ci0xMCkpLGUubmV4dD05LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGNyLEpTT04uc3RyaW5naWZ5KG4pKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyUmVmcmVzaFRva2VuVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGNyKTtjYXNlIDI6aWYoIWUuc2VudCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUudDA9SlNPTixlLm5leHQ9Nix0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjcik7Y2FzZSA2OmUudDE9ZS5zZW50LHQ9ZS50MC5wYXJzZS5jYWxsKGUudDAsZS50MSksY2xlYXJUaW1lb3V0KHQpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX1dKSxlfSgpLF9vPSJpbml0IjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KHdvfHwod289e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oYm98fChibz17fSkpO3ZhciBTbyxFbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIHcoZSxudWxsLFt7a2V5OiJnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19fSx7a2V5OiJnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fV0pLGV9KCk7dmFyIEFvPVNvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmF0dGFjaFRva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXJldHVybiB3KGUsW3trZXk6InJlcXVlc3RIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuYXR0YWNoVG9rZW4oZSk7Y2FzZSAyOnJldHVybiBTby5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayhlKSx0LmFicnVwdCgicmV0dXJuIixlKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImVycm9ySGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgU28uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9fSx7a2V5OiJzdWNjZXNzSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFNvLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfX0se2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOlNvLmlzSGFuZGxlckVuYWJsZWQ9ZSx0aGlzLmF0dGFjaFRva2VuPXQ7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJlbmFibGVIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbigpe1NvLmlzSGFuZGxlckVuYWJsZWQ9ITB9fSx7a2V5OiJkaXNhYmxlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXtTby5pc0hhbmRsZXJFbmFibGVkPSExfX0se2tleToiZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06U28uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVDtTby5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7U28uaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfX0se2tleToic2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX19LHtrZXk6InNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fV0sW3trZXk6ImdldEluc3RhbmNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT10ci5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBTbyksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGEoZSx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIodCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKHQpfSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9dHIuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9dHIuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX19XSksZX0oKTtBby5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxBbz1Tbz1mdW5jdGlvbihlLHQscixvKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGgscz1hPDM/dDpudWxsPT09bz9vPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpvO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdD8idW5kZWZpbmVkIjpuKFJlZmxlY3QpKSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG8pO2Vsc2UgZm9yKHZhciB1PWUubGVuZ3RoLTE7dT49MDt1LS0pKGk9ZVt1XSkmJihzPShhPDM/aShzKTphPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIGE+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZnVuY3Rpb24oZSl7fV0sQW8pO3ZhciBUbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSksdGhpcy5fZGF0YT1uZXcgTWFwfXJldHVybiB3KGUsW3trZXk6InNldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnRoaXMuX2RhdGEuc2V0KGUsdCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiBhKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5hYnJ1cHQoInJldHVybiIsbnVsbCE9PShyPW51bGw9PT0odD10aGlzLl9kYXRhKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXQoZSkpJiZ2b2lkIDAhPT1yP3I6Int9Iik7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5fZGF0YS5kZWxldGUoZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCk7ZnVuY3Rpb24gUm8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQ28oZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09cnx8IlNldCI9PT1yKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKCJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIENvKGUsdCl9KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksYT0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gYT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXthfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBDbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBQbyxPbz1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuLG8scyx1LGMsZixoLHAsZCx2LGcseSxtLHcsYixrLHgsXyxTLEUsQSxULFIsQyxQLE8sRCxJLFUsTTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgVG8sbj1uZXcgeW8ociksdC5uZXh0PTQsbi5pbml0aWFsaXplKGUpO2Nhc2UgNDppZihvPW5ldyB4byhuKSxzPW4uZ2V0RGF0YUxheWVyKCksdT1Bby5nZXRJbnN0YW5jZSgpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSxlKS5hdHRhY2hUb2tlbil7dC5uZXh0PTExO2JyZWFrfXJldHVybiB0LnQwPU9iamVjdCx0LnQxPU9iamVjdC5hc3NpZ24oe30sZS5oZWFkZXJzKSx0LnQyPSJCZWFyZXIgIix0Lm5leHQ9NyxuLmdldEFjY2Vzc1Rva2VuKCk7Y2FzZSA3OnQudDM9dC5zZW50LHQudDQ9dC50Mi5jb25jYXQuY2FsbCh0LnQyLHQudDMpLHQudDU9e0F1dGhvcml6YXRpb246dC50NH0sZS5oZWFkZXJzPXQudDAuYXNzaWduLmNhbGwodC50MCx0LnQxLHQudDUpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LHQudDA9bnVsbD09dT92b2lkIDA6dS5pbml0LCF0LnQwKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIHQubmV4dD0xMix1LmluaXQoITAsYyk7Y2FzZSAxMjpyZXR1cm4gZj1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0saD1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHA9ZnVuY3Rpb24oZSl7KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sZD1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixvLGEsYyxmLGgscCxkO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBjPSExLHQubmV4dD0zLHMuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMzpyZXR1cm4gZj10LnNlbnQsaD0wLHQudDA9W10sdC50MT1sLHQubmV4dD05LHMuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgOTppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTEzO2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDEzOmlmKCF0LnQzKXt0Lm5leHQ9MTc7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTE4O2JyZWFrO2Nhc2UgMTc6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDE4OmlmKHQudDY9bz10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yMjticmVha310LnQyPXZvaWQgMCE9PW87Y2FzZSAyMjppZighdC50Mil7dC5uZXh0PTI2O2JyZWFrfXQudDc9byx0Lm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNjp0LnQ3PVtdO2Nhc2UgMjc6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PWY/dm9pZCAwOmYuc2VydmVyT3JpZ2luXSxwPXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDMxOmlmKCEoaDxwLmxlbmd0aCkpe3QubmV4dD0zOTticmVha31pZihkPXBbaF0sIShudWxsPT09KGE9bnVsbD09ZT92b2lkIDA6ZS51cmwpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgoZCkpKXt0Lm5leHQ9MzY7YnJlYWt9cmV0dXJuIGM9ITAsdC5hYnJ1cHQoImJyZWFrIiwzOSk7Y2FzZSAzNjpoKyssdC5uZXh0PTMxO2JyZWFrO2Nhc2UgMzk6aWYoIWMpe3QubmV4dD00MzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdS5yZXF1ZXN0KGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiA0MDE9PT0obnVsbD09PShyPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB1LnJlcXVlc3QoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGtvKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpfSkpOlByb21pc2UucmVqZWN0KHQpfSkpKTtjYXNlIDQzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSkpO2Nhc2UgNDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbyxhLGMsZixoLHAsZCx2LGcseSxtLHc7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGM9ITAsdC5uZXh0PTMscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAzOmY9dC5zZW50LGg9Um8oZSksdC5wcmV2PTUsaC5zKCk7Y2FzZSA3OmlmKChwPWgubigpKS5kb25lKXt0Lm5leHQ9NTA7YnJlYWt9cmV0dXJuIGQ9cC52YWx1ZSx2PSExLGc9MCx0LnQwPVtdLHQudDE9bCx0Lm5leHQ9MTUscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAxNTppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTE5O2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDE5OmlmKCF0LnQzKXt0Lm5leHQ9MjM7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTI0O2JyZWFrO2Nhc2UgMjM6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDI0OmlmKHQudDY9bz10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yODticmVha310LnQyPXZvaWQgMCE9PW87Y2FzZSAyODppZighdC50Mil7dC5uZXh0PTMyO2JyZWFrfXQudDc9byx0Lm5leHQ9MzM7YnJlYWs7Y2FzZSAzMjp0LnQ3PVtdO2Nhc2UgMzM6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PWY/dm9pZCAwOmYuc2VydmVyT3JpZ2luXSx5PXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDM3OmlmKCEoZzx5Lmxlbmd0aCkpe3QubmV4dD00NTticmVha31pZihtPXlbZ10sIShudWxsPT09KGE9ZC51cmwpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgobSkpKXt0Lm5leHQ9NDI7YnJlYWt9cmV0dXJuIHY9ITAsdC5hYnJ1cHQoImJyZWFrIiw0NSk7Y2FzZSA0MjpnKyssdC5uZXh0PTM3O2JyZWFrO2Nhc2UgNDU6aWYodil7dC5uZXh0PTQ4O2JyZWFrfXJldHVybiBjPSExLHQuYWJydXB0KCJicmVhayIsNTApO2Nhc2UgNDg6dC5uZXh0PTc7YnJlYWs7Y2FzZSA1MDp0Lm5leHQ9NTU7YnJlYWs7Y2FzZSA1Mjp0LnByZXY9NTIsdC50MTE9dC5jYXRjaCg1KSxoLmUodC50MTEpO2Nhc2UgNTU6cmV0dXJuIHQucHJldj01NSxoLmYoKSx0LmZpbmlzaCg1NSk7Y2FzZSA1ODppZih3PVtdLCFjKXt0Lm5leHQ9NjQ7YnJlYWt9cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dy5wdXNoKHUucmVxdWVzdChlKSl9KSksdC5hYnJ1cHQoInJldHVybiIsKG51bGw9PXU/dm9pZCAwOnUuYWxsKSYmdS5hbGwodykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDQwMT09PShudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYWxsJiZ1LmFsbCh3KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSQS1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdEFsbCIsIiIsIiIsZSkpfSkpOlByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDY0OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSQS1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDY1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbNSw1Miw1NSw1OF1dKX0pKSl9LHk9ZnVuY3Rpb24oKXt1LmVuYWJsZUhhbmRsZXImJnUuZW5hYmxlSGFuZGxlcigpfSxtPWZ1bmN0aW9uKCl7dS5kaXNhYmxlSGFuZGxlciYmdS5kaXNhYmxlSGFuZGxlcigpfSx3PWZ1bmN0aW9uKGUpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixuLmdldEF1dGhvcml6YXRpb25VUkwoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9ZSx0Lm5leHQ9MyxuLmdldFBLQ0VDb2RlKCk7Y2FzZSAzOnJldHVybiB0LnQxPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIix7YXV0aG9yaXphdGlvblVSTDp0LnQwLHBrY2U6dC50MX0pO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LGI9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxrPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGEoKXt2YXIgdTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDpyZXR1cm4gaS5uZXh0PTIscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOmlmKHU9aS5zZW50LCFyfHwhdS5lbmFibGVQS0NFKXtpLm5leHQ9NjticmVha31yZXR1cm4gaS5uZXh0PTYsbi5zZXRQS0NFQ29kZShyKTtjYXNlIDY6aWYoIWUpe2kubmV4dD04O2JyZWFrfXJldHVybiBpLmFicnVwdCgicmV0dXJuIixuLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG51bGwhPXQ/dDoiIikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKSk7Y2FzZSA4OnJldHVybiBpLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLVJBVDEtTkYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBpLnN0b3AoKX19KSxhKX0pKSl9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxlLm5leHQ9MyxuLnNpZ25PdXQoKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxfPWZ1bmN0aW9uKCl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLG4uZ2V0U2lnbk91dFVSTCgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LFM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsdSxjLGYsaCxwLGQsdixnO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBmPSEwLGg9ITEsdC5uZXh0PTQscy5nZXRDb25maWdEYXRhKCk7Y2FzZSA0OmlmKHA9dC5zZW50LCEobnVsbD09ZT92b2lkIDA6ZS50b2tlbkVuZHBvaW50KSl7dC5uZXh0PTQyO2JyZWFrfXJldHVybiBmPSExLGQ9MCx0LnQwPVtdLHQudDE9bCx0Lm5leHQ9MTIscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAxMjppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTE2O2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDE2OmlmKCF0LnQzKXt0Lm5leHQ9MjA7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTIxO2JyZWFrO2Nhc2UgMjA6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDIxOmlmKHQudDY9dT10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yNTticmVha310LnQyPXZvaWQgMCE9PXU7Y2FzZSAyNTppZighdC50Mil7dC5uZXh0PTI5O2JyZWFrfXQudDc9dSx0Lm5leHQ9MzA7YnJlYWs7Y2FzZSAyOTp0LnQ3PVtdO2Nhc2UgMzA6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PXA/dm9pZCAwOnAuc2VydmVyT3JpZ2luXSx2PXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDM0OmlmKCEoZDx2Lmxlbmd0aCkpe3QubmV4dD00MjticmVha31pZihnPXZbZF0sIShudWxsPT09KGM9ZS50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zdGFydHNXaXRoKGcpKSl7dC5uZXh0PTM5O2JyZWFrfXJldHVybiBoPSEwLHQuYWJydXB0KCJicmVhayIsNDIpO2Nhc2UgMzk6ZCsrLHQubmV4dD0zNDticmVhaztjYXNlIDQyOmlmKCFmJiYhaCl7dC5uZXh0PTQ2O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixuLnJlcXVlc3RDdXN0b21HcmFudChlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDppZighZS5yZXR1cm5zU2Vzc2lvbil7ci5uZXh0PTU7YnJlYWt9cmV0dXJuIG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLHIuYWJydXB0KCJyZXR1cm4iLG4uZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDU6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHQpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDQ2OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKSk7Y2FzZSA0NzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sRT1mdW5jdGlvbigpe3JldHVybiBuLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSl9LEE9ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpfSxUPWZ1bmN0aW9uKCl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG4uZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LFI9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbi5nZXREZWNvZGVkSURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEM9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbi5nZXRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sUD1mdW5jdGlvbigpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sTz1mdW5jdGlvbigpe3JldHVybiBuLmdldEFjY2Vzc1Rva2VuKCl9LEQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5pc0F1dGhlbnRpY2F0ZWQoKX0sST1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIscy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxVPWZ1bmN0aW9uKGUpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixuLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LE09ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5nZXRDb25maWdEYXRhKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sdC5hYnJ1cHQoInJldHVybiIse2Rpc2FibGVIdHRwSGFuZGxlcjptLGVuYWJsZUh0dHBIYW5kbGVyOnksZ2V0QWNjZXNzVG9rZW46TyxnZXRBdXRob3JpemF0aW9uVVJMOncsZ2V0QmFzaWNVc2VySW5mbzpULGdldENvbmZpZ0RhdGE6TSxnZXREZWNvZGVkSURUb2tlbjpSLGdldElEVG9rZW46QyxnZXRPSURDU2VydmljZUVuZHBvaW50czpQLGdldFNpZ25PdXRVUkw6XyxodHRwUmVxdWVzdDp2LGh0dHBSZXF1ZXN0QWxsOmcsaXNBdXRoZW50aWNhdGVkOkQscmVmcmVzaEFjY2Vzc1Rva2VuOkUscmVxdWVzdEFjY2Vzc1Rva2VuOmsscmVxdWVzdEN1c3RvbUdyYW50OlMscmV2b2tlQWNjZXNzVG9rZW46QSxzZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s6ZCxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOnAsc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmYsc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6aCxzZXRTZXNzaW9uU3RhdGU6SSxzaWduT3V0Ongsc3RhcnRBdXRvUmVmcmVzaFRva2VuOmIsdXBkYXRlQ29uZmlnOlV9KTtjYXNlIDM4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxEbz1zZWxmO0RvLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEscj1lLnBvcnRzO3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciBuLG8sYSxzLHU7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocz1yWzBdLHQudHlwZT09PV9vfHxQbyl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcga28oIkNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsImNsaWVudC53b3JrZXIiLHQudHlwZSwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OmUudDA9dC50eXBlLGUubmV4dD1lLnQwPT09X28/NzoiZ2V0X2F1dGhfdXJsIj09PWUudDA/MjM6InJlcXVlc3RfZ2V0X3Rva2VuIj09PWUudDA/MjU6Imh0dHAtcmVxdWVzdCI9PT1lLnQwPzI3OiJodHRwLXJlcXVlc3QtYWxsIj09PWUudDA/Mjk6InNpZ24tb3V0Ij09PWUudDA/MzE6InJlcXVlc3QtY3VzdG9tLWdyYW50Ij09PWUudDA/NDU6InJldm9rZS1hY2Nlc3MtdG9rZW4iPT09ZS50MD80NzoiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiPT09ZS50MD80OToiZ2V0LWJhc2ljLXVzZXItaW5mbyI9PT1lLnQwPzYzOiJnZXQtZGVjb2RlZC1pZC10b2tlbiI9PT1lLnQwPzc3OiJnZXRfaWRfdG9rZW4iPT09ZS50MD85MToiZW5hYmxlX2h0dHBfaGFuZGxlciI9PT1lLnQwPzEwNToiZGlzYWJsZV9odHRwX2hhbmRsZXIiPT09ZS50MD8xMDg6ImlzX2F1dGhlbnRpY2F0ZWQiPT09ZS50MD8xMTE6ImdldF9zaWduX291dF91cmwiPT09ZS50MD8xMjU6InJlZnJlc2hfYWNjZXNzLXRva2VuIj09PWUudDA/MTM5OiJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iPT09ZS50MD8xNTM6InNldF9zZXNzaW9uX3N0YXRlIj09PWUudDA/MTU1OiJ1cGRhdGVfY29uZmlnIj09PWUudDA/MTY5OiJnZXRfY29uZmlnX2RhdGEiPT09ZS50MD8xODM6MTk3O2JyZWFrO2Nhc2UgNzpyZXR1cm4gZS5wcmV2PTcsdT1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSksZS5uZXh0PTExLE9vKHUpO2Nhc2UgMTE6KFBvPWUuc2VudCkuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKExvKSxQby5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKE1vKSxQby5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soSW8pLFBvLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKFVvKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMTk6ZS5wcmV2PTE5LGUudDE9ZS5jYXRjaCg3KSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MSkpO2Nhc2UgMjI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDIzOnJldHVybiBQby5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAyNTpyZXR1cm4gUG8ucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0obj1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvZGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2Vzc2lvblN0YXRlLG51bGw9PT0oYT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBrY2UpLnRoZW4oKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMjc6cmV0dXJuIFBvLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAyOTpyZXR1cm4gUG8uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDMxOnJldHVybiBlLnByZXY9MzEsZS50Mj1zLGUudDM9RW8sZS5uZXh0PTM2LFBvLnNpZ25PdXQoKTtjYXNlIDM2OmUudDQ9ZS5zZW50LGUudDU9ZS50My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MyxlLnQ0KSxlLnQyLnBvc3RNZXNzYWdlLmNhbGwoZS50MixlLnQ1KSxlLm5leHQ9NDQ7YnJlYWs7Y2FzZSA0MTplLnByZXY9NDEsZS50Nj1lLmNhdGNoKDMxKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50NikpO2Nhc2UgNDQ6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDQ1OnJldHVybiBQby5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDQ3OnJldHVybiBQby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgNDk6cmV0dXJuIGUucHJldj00OSxlLnQ3PXMsZS50OD1FbyxlLm5leHQ9NTQsUG8uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTtjYXNlIDU0OmUudDk9ZS5zZW50LGUudDEwPWUudDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDgsZS50OSksZS50Ny5wb3N0TWVzc2FnZS5jYWxsKGUudDcsZS50MTApLGUubmV4dD02MjticmVhaztjYXNlIDU5OmUucHJldj01OSxlLnQxMT1lLmNhdGNoKDQ5KSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MTEpKTtjYXNlIDYyOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSA2MzpyZXR1cm4gZS5wcmV2PTYzLGUudDEyPXMsZS50MTM9RW8sZS5uZXh0PTY4LFBvLmdldEJhc2ljVXNlckluZm8oKTtjYXNlIDY4OmUudDE0PWUuc2VudCxlLnQxNT1lLnQxMy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MTMsZS50MTQpLGUudDEyLnBvc3RNZXNzYWdlLmNhbGwoZS50MTIsZS50MTUpLGUubmV4dD03NjticmVhaztjYXNlIDczOmUucHJldj03MyxlLnQxNj1lLmNhdGNoKDYzKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MTYpKTtjYXNlIDc2OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSA3NzpyZXR1cm4gZS5wcmV2PTc3LGUudDE3PXMsZS50MTg9RW8sZS5uZXh0PTgyLFBvLmdldERlY29kZWRJRFRva2VuKCk7Y2FzZSA4MjplLnQxOT1lLnNlbnQsZS50MjA9ZS50MTguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDE4LGUudDE5KSxlLnQxNy5wb3N0TWVzc2FnZS5jYWxsKGUudDE3LGUudDIwKSxlLm5leHQ9OTA7YnJlYWs7Y2FzZSA4NzplLnByZXY9ODcsZS50MjE9ZS5jYXRjaCg3Nykscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDIxKSk7Y2FzZSA5MDpyZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgOTE6cmV0dXJuIGUucHJldj05MSxlLnQyMj1zLGUudDIzPUVvLGUubmV4dD05NixQby5nZXRJRFRva2VuKCk7Y2FzZSA5NjplLnQyND1lLnNlbnQsZS50MjU9ZS50MjMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDIzLGUudDI0KSxlLnQyMi5wb3N0TWVzc2FnZS5jYWxsKGUudDIyLGUudDI1KSxlLm5leHQ9MTA0O2JyZWFrO2Nhc2UgMTAxOmUucHJldj0xMDEsZS50MjY9ZS5jYXRjaCg5MSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDI2KSk7Y2FzZSAxMDQ6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDEwNTpyZXR1cm4gUG8uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTA4OnJldHVybiBQby5kaXNhYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTExOnJldHVybiBlLnByZXY9MTExLGUudDI3PXMsZS50Mjg9RW8sZS5uZXh0PTExNixQby5pc0F1dGhlbnRpY2F0ZWQoKTtjYXNlIDExNjplLnQyOT1lLnNlbnQsZS50MzA9ZS50MjguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDI4LGUudDI5KSxlLnQyNy5wb3N0TWVzc2FnZS5jYWxsKGUudDI3LGUudDMwKSxlLm5leHQ9MTI0O2JyZWFrO2Nhc2UgMTIxOmUucHJldj0xMjEsZS50MzE9ZS5jYXRjaCgxMTEpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQzMSkpO2Nhc2UgMTI0OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxMjU6cmV0dXJuIGUucHJldj0xMjUsZS50MzI9cyxlLnQzMz1FbyxlLm5leHQ9MTMwLFBvLmdldFNpZ25PdXRVUkwoKTtjYXNlIDEzMDplLnQzND1lLnNlbnQsZS50MzU9ZS50MzMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDMzLGUudDM0KSxlLnQzMi5wb3N0TWVzc2FnZS5jYWxsKGUudDMyLGUudDM1KSxlLm5leHQ9MTM4O2JyZWFrO2Nhc2UgMTM1OmUucHJldj0xMzUsZS50MzY9ZS5jYXRjaCgxMjUpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQzNikpO2Nhc2UgMTM4OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxMzk6cmV0dXJuIGUucHJldj0xMzksZS50Mzc9cyxlLnQzOD1FbyxlLm5leHQ9MTQ0LFBvLnJlZnJlc2hBY2Nlc3NUb2tlbigpO2Nhc2UgMTQ0OmUudDM5PWUuc2VudCxlLnQ0MD1lLnQzOC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MzgsZS50MzkpLGUudDM3LnBvc3RNZXNzYWdlLmNhbGwoZS50MzcsZS50NDApLGUubmV4dD0xNTI7YnJlYWs7Y2FzZSAxNDk6ZS5wcmV2PTE0OSxlLnQ0MT1lLmNhdGNoKDEzOSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDQxKSk7Y2FzZSAxNTI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE1Mzp0cnl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKFBvLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1yZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTU1OnJldHVybiBlLnByZXY9MTU1LGUudDQyPXMsZS50NDM9RW8sZS5uZXh0PTE2MCxQby5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKTtjYXNlIDE2MDplLnQ0ND1lLnNlbnQsZS50NDU9ZS50NDMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDQzLGUudDQ0KSxlLnQ0Mi5wb3N0TWVzc2FnZS5jYWxsKGUudDQyLGUudDQ1KSxlLm5leHQ9MTY4O2JyZWFrO2Nhc2UgMTY1OmUucHJldj0xNjUsZS50NDY9ZS5jYXRjaCgxNTUpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQ0NikpO2Nhc2UgMTY4OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxNjk6cmV0dXJuIGUucHJldj0xNjksZS50NDc9cyxlLnQ0OD1FbyxlLm5leHQ9MTc0LFBvLnVwZGF0ZUNvbmZpZyhudWxsPT10P3ZvaWQgMDp0LmRhdGEpO2Nhc2UgMTc0OmUudDQ5PWUuc2VudCxlLnQ1MD1lLnQ0OC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50NDgsZS50NDkpLGUudDQ3LnBvc3RNZXNzYWdlLmNhbGwoZS50NDcsZS50NTApLGUubmV4dD0xODI7YnJlYWs7Y2FzZSAxNzk6ZS5wcmV2PTE3OSxlLnQ1MT1lLmNhdGNoKDE2OSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDUxKSk7Y2FzZSAxODI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE4MzpyZXR1cm4gZS5wcmV2PTE4MyxlLnQ1Mj1zLGUudDUzPUVvLGUubmV4dD0xODgsUG8uZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMTg4OmUudDU0PWUuc2VudCxlLnQ1NT1lLnQ1My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50NTMsZS50NTQpLGUudDUyLnBvc3RNZXNzYWdlLmNhbGwoZS50NTIsZS50NTUpLGUubmV4dD0xOTY7YnJlYWs7Y2FzZSAxOTM6ZS5wcmV2PTE5MyxlLnQ1Nj1lLmNhdGNoKDE4Mykscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDU2KSk7Y2FzZSAxOTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE5NzpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGtvKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsIlRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICIuY29uY2F0KHQudHlwZSwiLCBpcyBpbnZhbGlkLiIpKSkpO2Nhc2UgMTk4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNywxOV0sWzMxLDQxXSxbNDksNTldLFs2Myw3M10sWzc3LDg3XSxbOTEsMTAxXSxbMTExLDEyMV0sWzEyNSwxMzVdLFsxMzksMTQ5XSxbMTU1LDE2NV0sWzE2OSwxNzldLFsxODMsMTkzXV0pfSkpKX07dmFyIElvPWZ1bmN0aW9uKCl7RG8ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LFVvPWZ1bmN0aW9uKGUpe0RvLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxNbz1mdW5jdGlvbigpe0RvLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtkZWxldGUgdC50b0pTT04sRG8ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9dD90OiIiKSx0eXBlOiJyZXF1ZXN0LWVycm9yIn0pfTtyZXR1cm57fX0oKTsKCg==",GV=null,gV=!1,function(t){return fV=fV||IV(XV,GV,gV),new Worker(fV,t)}),WV=function(e){var n,i,r=null!==(n=null==e?void 0:e.requestTimeout)&&void 0!==n?n:6e4,c=uV((function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={type:Kf},t.prev=1,t.next=4,o(e);case 4:return n=t.sent,t.abrupt("return",n);case 8:return t.prev=8,t.t0=t.catch(1),t.abrupt("return",aV.getSignOutURL());case 11:case"end":return t.stop()}}),t,null,[[1,8]])})))})),l=new VV,o=function(t){var e=new MessageChannel;return l.postMessage(t,[e.port2]),new Promise((function(t,n){var i=setTimeout((function(){n(new lV("WEB_WORKER_CLIENT-COM-TO-01","web-worker-client","communicate","Operation timed out.","No response was received from the web worker for "+r/1e3+" since dispatching the request"))}),r);return e.port1.onmessage=function(e){var r=e.data;if(clearTimeout(i),null==r?void 0:r.success){var c=(null==r?void 0:r.data)?JSON.parse(null==r?void 0:r.data):null;(null==r?void 0:r.blob)&&(c.data=null==r?void 0:r.blob),t(c)}else n(r.error?JSON.parse(r.error):null)}}))},a=function(t){return o({data:t,type:"set_session_state"})},u=function(){return o({type:"start_auto_refresh_token"})},d=function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r,l,o,a;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,m();case 2:return l=t.sent,t.next=5,Z();case 5:return o=t.sent.sessionState,t.next=8,h();case 8:a=t.sent,c.initialize(a.clientID,null!==(e=l.checkSessionIframe)&&void 0!==e?e:"",o,null!==(n=a.checkSessionInterval)&&void 0!==n?n:3,null!==(i=a.sessionRefreshInterval)&&void 0!==i?i:300,a.signInRedirectURL,null!==(r=l.authorizationEndpoint)&&void 0!==r?r:"");case 10:case"end":return t.stop()}}),t)})))},s=function(t,e){return yy(void 0,void 0,void 0,py.mark((function n(){var i,r;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,h();case 2:return i=n.sent,r={data:{code:t,pkce:i.enablePKCE?aV.getPKCE():void 0,sessionState:e},type:"request_get_token"},i.enablePKCE&&aV.removePKCE(),n.abrupt("return",o(r).then((function(t){return o({type:"get_sign_out_url"}).then((function(e){return aV.setSignOutURL(e),i.enableOIDCSessionManagement&&d(),u(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(t)})));case 6:case"end":return n.stop()}}),n)})))},m=function(){return o({type:"get-oidc-service-endpoints"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},h=function(){return o({type:"get_config_data"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},Z=function(){return o({type:"get-basic-user-info"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},b=function(){return o({type:"is_authenticated"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))};return{disableHttpHandler:function(){return o({type:"disable_http_handler"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},enableHttpHandler:function(){return o({type:"enable_http_handler"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},getBasicUserInfo:Z,getDecodedIDToken:function(){return o({type:"get-decoded-id-token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},getIDToken:function(){return o({type:"get_id_token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},getOIDCServiceEndpoints:m,httpRequest:function(t){return o({data:t,type:"http-request"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},httpRequestAll:function(t){return o({data:t,type:"http-request-all"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},initialize:function(){return i={requestErrorCallback:function(){return null},requestFinishCallback:function(){return null},requestStartCallback:function(){return null},requestSuccessCallback:function(){return null}},l.onmessage=function(t){var e=t.data;switch(e.type){case"request-error":(null==i?void 0:i.requestErrorCallback)&&(null==i||i.requestErrorCallback(e.data?JSON.parse(e.data):null));break;case"request-finish":(null==i?void 0:i.requestFinishCallback)&&(null==i||i.requestFinishCallback());break;case"request-start":(null==i?void 0:i.requestStartCallback)&&(null==i||i.requestStartCallback());break;case"request-success":(null==i?void 0:i.requestSuccessCallback)&&(null==i||i.requestSuccessCallback(e.data?JSON.parse(e.data):null))}},o({data:e,type:"init"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},isAuthenticated:b,refreshAccessToken:function(){return o({type:"refresh_access-token"})},requestCustomGrant:function(t){return o({data:t,type:"request-custom-grant"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},revokeAccessToken:function(){return o({type:"revoke-access-token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},setHttpRequestErrorCallback:function(t){t&&"function"==typeof t&&(i.requestErrorCallback=t)},setHttpRequestFinishCallback:function(t){t&&"function"==typeof t&&(i.requestFinishCallback=t)},setHttpRequestStartCallback:function(t){t&&"function"==typeof t&&(i.requestStartCallback=t)},setHttpRequestSuccessCallback:function(t){t&&"function"==typeof t&&(i.requestSuccessCallback=t)},signIn:function(e,n,i){return yy(void 0,void 0,void 0,py.mark((function r(){var l,m,p,y,I,X,G,g,f;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,h();case 2:return p=r.sent,r.next=5,c.receivePromptNoneResponse((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",a(t));case 1:case"end":return e.stop()}}),e)})))}));case 5:if(!r.sent){r.next=8;break}return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 8:if(aV.wasSilentSignInCalled()&&aV.setIsInitializedSilentSignIn(),y=new URL(window.location.href).searchParams.get(zf),I=new URL(window.location.href).searchParams.get(jf),!y){r.next=17;break}return(X=new URL(window.location.href)).searchParams.delete(zf),X.searchParams.delete(jf),history.pushState(null,document.title,X.toString()),r.abrupt("return",Promise.reject(new lV("WEB_WORKER_CLIENT-SI-BE","web-worker-client","signIn",y,null!=I?I:"")));case 17:return r.next=19,b();case 19:if(!r.sent){r.next=24;break}return r.next=22,u();case 22:return p.enableOIDCSessionManagement&&d(),r.abrupt("return",Z());case 24:if((null==p?void 0:p.responseMode)===t.ResponseMode.formPost&&n?(G=n,g=null!=i?i:""):(G=null!==(l=new URL(window.location.href).searchParams.get(IG))&&void 0!==l?l:"",g=null!==(m=new URL(window.location.href).searchParams.get(XG))&&void 0!==m?m:"",aV.removeAuthorizationCode()),!G){r.next=27;break}return r.abrupt("return",s(G,g));case 27:return f={data:e,type:Lf},r.abrupt("return",o(f).then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.pkce&&p.enablePKCE&&aV.setPKCE(t.pkce),location.href=t.authorizationURL,e.next=4,aV.waitTillPageRedirect();case 4:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 5:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 29:case"end":return r.stop()}}),r)})))},signOut:function(){return b().then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=5;break}return n={type:Kf},e.abrupt("return",o(n).then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return window.location.href=t,e.next=3,aV.waitTillPageRedirect();case 3:return e.abrupt("return",Promise.resolve(!0));case 4:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 5:return window.location.href=aV.getSignOutURL(),e.next=8,aV.waitTillPageRedirect();case 8:return e.abrupt("return",Promise.resolve(!0));case 9:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)}))},trySignInSilently:function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r,l,a,u,d,m;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,h();case 2:if(n=t.sent,!aV.setIsInitializedSilentSignIn()){t.next=7;break}return t.next=6,c.receivePromptNoneResponse();case 6:return t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 7:if(!aV.isStatePresentInURL()){t.next=10;break}return aV.setIsInitializedSilentSignIn(),t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:return i=document.getElementById(Nf),r=null===(e=null==i?void 0:i.contentDocument)||void 0===e?void 0:e.getElementById(Hf),l={data:{prompt:"none",state:Uf},type:Lf},t.prev=13,t.next=16,o(l);case 16:(a=t.sent).pkce&&n.enablePKCE&&aV.setPKCE(a.pkce),u=a.authorizationURL,(d=new URL(u)).searchParams.set("response_mode","query"),m=d.toString(),r.src=m,t.next=28;break;case 25:return t.prev=25,t.t0=t.catch(13),t.abrupt("return",Promise.reject(t.t0));case 28:return t.abrupt("return",new Promise((function(t,e){window.addEventListener("message",(function n(i){return yy(void 0,void 0,void 0,py.mark((function r(){var c,l,o,a,u;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:a=i.data,u=setTimeout((function(){t(!1)}),1e4),(null==a?void 0:a.type)==xf&&(window.removeEventListener("message",n),clearTimeout(u),t(!1)),(null==a?void 0:a.type)==Jf&&(null===(c=null==a?void 0:a.data)||void 0===c?void 0:c.code)&&s(null===(l=null==a?void 0:a.data)||void 0===l?void 0:l.code,null===(o=null==a?void 0:a.data)||void 0===o?void 0:o.sessionState).then((function(e){window.removeEventListener("message",n),t(e)})).catch((function(t){window.removeEventListener("message",n),e(t)})).finally((function(){clearTimeout(u)}));case 4:case"end":return r.stop()}}),r)})))}))})));case 29:case"end":return t.stop()}}),t,null,[[13,25]])})))},updateConfig:function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,l;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,h();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),r=Object.assign(Object.assign({},n),t),l={data:r,type:"update_config"},e.next=8,o(l);case 8:r.enableOIDCSessionManagement&&i&&(c.reset(),d());case 9:case"end":return e.stop()}}),e)})))}}},vV={checkSessionInterval:3,enableOIDCSessionManagement:!1,sessionRefreshInterval:300},SV="primaryInstance",CV=function(){function e(t){hy(this,e),this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=function(){return null},this._onSignOutCallback=function(){return null},this._onEndUserSession=function(){return null},this._onInitialize=function(){return null},this._onCustomGrant=new Map,this._instanceID=t}return by(e,[{key:"_isInitialized",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e,n;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._startedInitialize){t.next=2;break}return t.abrupt("return",!1);case 2:e=0,n=function(){return new Promise((function(t){return setTimeout(t,1e3)}))};case 4:if(this._initialized){t.next=11;break}return 10===e&&console.warn("It is taking longer than usual for the object to be initialized"),t.next=8,n();case 8:e++,t.next=4;break;case 11:return t.abrupt("return",!0);case 12:case"end":return t.stop()}}),t,this)})))}},{key:"_validateMethod",value:function(){return yy(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:if(t.sent){t.next=4;break}return t.abrupt("return",Promise.reject());case 4:return t.next=6,this.isAuthenticated();case 6:if(t.sent){t.next=8;break}return t.abrupt("return",Promise.reject());case 8:return t.abrupt("return",!0);case 9:case"end":return t.stop()}}),t,this)})))}
393
+ function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationCore.updateConfig(t);case 2:case"end":return e.stop()}}),e,this)})))}}],[{key:"isSignOutSuccessful",value:function(t){var e=new URL(t),n=e.searchParams.get("state"),i=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!i}}]),t}(),Kf="sign-out",Lf="get_auth_url",Jf="check_session_signed_in",xf="check_session_signed_out",Nf="set_session_state_from_iframe";t.Storage=void 0,(Vf=t.Storage||(t.Storage={})).LocalStorage="localStorage",Vf.SessionStorage="sessionStorage",Vf.WebWorker="webWorker",Vf.BrowserMemory="browserMemory",t.Hooks=void 0,(Wf=t.Hooks||(t.Hooks={})).SignIn="sign-in",Wf.SignOut="sign-out",Wf.Initialize="initialize",Wf.HttpRequestStart="http-request-start",Wf.HttpRequestFinish="http-request-finish",Wf.HttpRequestError="http-request-error",Wf.HttpRequestSuccess="http-request-success",Wf.RevokeAccessToken="revoke-access-token",Wf.CustomGrant="custom-grant";var Hf="rpIFrame",kf="promptNoneIFrame",Uf="Y2hlY2tTZXNzaW9u",wf="sign-in-silently",Tf="initialized-sign-in",Ff="initialized-silent-sign-in",zf="promptNoneRequestSent",jf="error",Bf="error_description";function Mf(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return wy(this,n)}}var Af,Pf,Qf,Df,Ef,Of,_f,qf,$f,tV,eV,nV,iV,rV,cV,lV,oV,aV,uV,dV=function(t){ky(n,t);var e=Mf(n);function n(t,i,r,c,l,o){var a;return hy(this,n),(a=e.call(this,null!=c?c:null==o?void 0:o.message)).name=a.constructor.name,a.code=t,a.file=i,a.method=r,a.error=o,a.description=l,Object.setPrototypeOf(Ny(a),(this instanceof n?this.constructor:void 0).prototype),a}return n}(Ay(Error)),sV=function(){function t(e){hy(this,t),this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}return by(t,[{key:"refreshAccessTokenAutomatically",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e,n,i,r=this;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:if(!(e=t.sent).refresh_token){t.next=9;break}return n=parseInt(e.expires_in),i=setTimeout((function(){return yy(r,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationClient.refreshAccessToken();case 2:case"end":return t.stop()}}),t,this)})))}),1e3*(n<=10?n:n-10)),t.next=9,this._dataLayer.setTemporaryDataParameter(pG,JSON.stringify(i));case 9:case"end":return t.stop()}}),t,this)})))}},{key:"clearRefreshTokenTimeout",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(pG);case 2:if(!t.sent){t.next=9;break}return t.t0=JSON,t.next=6,this._dataLayer.getTemporaryDataParameter(pG);case 6:t.t1=t.sent,e=t.t0.parse.call(t.t0,t.t1),clearTimeout(e);case 9:case"end":return t.stop()}}),t,this)})))}}]),t}(),mV=function(){function t(){hy(this,t)}return by(t,null,[{key:"removeAuthorizationCode",value:function(){var t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}},{key:"getPKCE",value:function(){var t;return null!==(t=sessionStorage.getItem(yG))&&void 0!==t?t:""}},{key:"setPKCE",value:function(t){sessionStorage.setItem(yG,t)}},{key:"setSignOutURL",value:function(t){sessionStorage.setItem(GG,t)}},{key:"getSignOutURL",value:function(){var t;return null!==(t=sessionStorage.getItem(GG))&&void 0!==t?t:""}},{key:"removePKCE",value:function(){sessionStorage.removeItem(yG)}},{key:"setInitializedSignIn",value:function(t){var e=sessionStorage.getItem(Tf),n=e?JSON.parse(e):null;return t&&n?(sessionStorage.setItem(Tf,"false"),!0):!t&&(n?(sessionStorage.setItem(Tf,"false"),!0):(sessionStorage.setItem(Tf,"true"),!0))}},{key:"setIsInitializedSilentSignIn",value:function(){var t=sessionStorage.getItem(Ff);return(t?JSON.parse(t):null)?(sessionStorage.setItem(Ff,"false"),!0):(sessionStorage.setItem(Ff,"true"),!1)}},{key:"wasSignInCalled",value:function(){var t=sessionStorage.getItem(Tf),e=t?JSON.parse(t):null,n=sessionStorage.getItem(Ff),i=n?JSON.parse(n):null;return e&&!i}},{key:"wasSilentSignInCalled",value:function(){var t=sessionStorage.getItem(Ff),e=t?JSON.parse(t):null;return Boolean(e)}},{key:"isSignOutSuccessful",value:function(){if(Rf.isSignOutSuccessful(window.location.href)){var t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}},{key:"isStatePresentInURL",value:function(){var t=new URL(window.location.href).searchParams.get("state");return t===wf||t===Uf}},{key:"hasAuthSearchParamsInURL",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search,e=/[?&]code=[^&]+/,n=/[?&]session_state=[^&]+/;return e.test(t)&&n.test(t)}},{key:"canSendPromptNoneRequest",value:function(){var t=sessionStorage.getItem(zf);return!(t?JSON.parse(t):null)}},{key:"setPromptNoneRequestSent",value:function(t){sessionStorage.setItem(zf,JSON.stringify(t))}},{key:"waitTillPageRedirect",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=null!=t?t:3e3,e.next=3,new Promise((function(t){return setTimeout(t,1e3*n)}));case 3:case"end":return e.stop()}}),e)})))}}]),t}(),hV=(iV=function(t,e,n,i,r,c,l,o){Af=t,Pf=e,Qf=n,Ef=c,Of=l,_f=r,nV=o,(Df=i)>-1&&rV(),_f>-1&&(r=setInterval((function(){oV()}),1e3*_f))},rV=function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=function(){var t;return yy(this,void 0,void 0,py.mark((function e(){var i,r,c,l,o;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Qf();case 2:i=e.sent,Boolean(Af)&&Boolean(i)&&(r="".concat(Af," ").concat(i),c=document.getElementById(Hf),l=null===(t=null==c?void 0:c.contentDocument)||void 0===t?void 0:t.getElementById(n),null==(o=l.contentWindow)||o.postMessage(r,Pf));case 4:case"end":return e.stop()}}),e)})))},Pf&&Af&&Ef){t.next=3;break}return t.abrupt("return");case 3:return n="opIFrame",r=document.getElementById(Hf),(null===(e=null==r?void 0:r.contentDocument)||void 0===e?void 0:e.getElementById(n)).src=Pf+"?client_id="+Af+"&redirect_uri="+Ef,t.next=9,i();case 9:$f=setInterval(i,1e3*Df),lV();case 11:case"end":return t.stop()}}),t)})))},cV=function(){clearInterval($f),clearInterval(void 0)},lV=function(){null===window||void 0===window||window.addEventListener("message",(function(t){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((n=Pf)&&!((null==n?void 0:n.indexOf(t.origin))<0)){e.next=3;break}return e.abrupt("return");case 3:if("unchanged"!==t.data){e.next=6;break}e.next=13;break;case 6:if("error"!==t.data){e.next=12;break}return e.next=9,qf();case 9:window.location.href=e.sent,e.next=13;break;case 12:oV();case 13:case"end":return e.stop()}}),e)})))}),!1)},oV=function(){var e,n=document.getElementById(Hf),i=null===(e=null==n?void 0:n.contentDocument)||void 0===e?void 0:e.getElementById(kf);if(mV.canSendPromptNoneRequest()){mV.setPromptNoneRequestSent(!0),tV!==t.Storage.BrowserMemory&&tV!==t.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",(function t(e){var n,i,r;(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)===Nf&&(eV(null!==(r=null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.data)&&void 0!==r?r:""),null===window||void 0===window||window.removeEventListener("message",t))}));var r=new URL(Of);r.searchParams.set("response_type","code"),r.searchParams.set("client_id",Af),r.searchParams.set("scope","openid"),r.searchParams.set("redirect_uri",Ef),r.searchParams.set("state",Uf),r.searchParams.set("prompt","none"),nV&&(r.searchParams.set("code_challenge_method","S256"),r.searchParams.set("code_challenge",function(){for(var t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_",e="",n=0;n<43;n++){var i=Math.floor(Math.random()*t.length);e+=t.substring(i,i+1)}return e}())),i.src=r.toString()}},aV=function(e){return yy(void 0,void 0,void 0,py.mark((function n(){var i,r,c,l,o,a,u,d,s,m;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(c=new URL(window.location.href).searchParams.get("state"),l=new URL(window.location.href).searchParams.get(XG),o=window.parent.parent,null===c||c!==Uf&&c!==wf){n.next=49;break}if(null===(a=new URL(window.location.href).searchParams.get("code"))||0===a.length){n.next=32;break}if(c!==wf){n.next=15;break}return u={data:{code:a,sessionState:null!=l?l:""},type:Jf},sessionStorage.setItem(Ff,"false"),o.postMessage(u,o.origin),mV.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=14,mV.waitTillPageRedirect();case 14:return n.abrupt("return",!0);case 15:if(d=new URL(window.location.href).searchParams.get("session_state"),tV!==t.Storage.LocalStorage&&tV!==t.Storage.SessionStorage){n.next=23;break}if(n.t0=e,!n.t0){n.next=21;break}return n.next=21,e(d);case 21:n.next=25;break;case 23:s={data:null!=d?d:"",type:Nf},null===(r=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===r||r.postMessage(s);case 25:return mV.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=29,mV.waitTillPageRedirect();case 29:return n.abrupt("return",!0);case 32:if(c!==wf){n.next=41;break}return m={type:xf},sessionStorage.setItem(Ff,"false"),window.parent.parent.postMessage(m,o.origin),mV.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=40,mV.waitTillPageRedirect();case 40:return n.abrupt("return",!0);case 41:return mV.setPromptNoneRequestSent(!1),n.next=44,qf();case 44:return o.location.href=n.sent,window.location.href="about:blank",n.next=48,mV.waitTillPageRedirect();case 48:return n.abrupt("return",!0);case 49:return n.abrupt("return",!1);case 50:case"end":return n.stop()}}),n)})))},function(t,e,n){var i,r=document.createElement("iframe");return r.setAttribute("id",Hf),r.style.display="none",r.onload=function(){var t,e,n,i,c=null==(r=document.getElementById(Hf))?void 0:r.contentDocument,l=null==c?void 0:c.createElement("iframe");l&&(l.setAttribute("id","opIFrame"),l.style.display="none");var o=null==c?void 0:c.createElement("iframe");o&&(o.setAttribute("id",kf),o.style.display="none"),l&&(null===(e=null===(t=null==r?void 0:r.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(l)),o&&(null===(i=null===(n=null==r?void 0:r.contentDocument)||void 0===n?void 0:n.body)||void 0===i||i.appendChild(o))},null===(i=null===document||void 0===document?void 0:document.body)||void 0===i||i.appendChild(r),qf=t,tV=e,eV=n,{initialize:iV,receivePromptNoneResponse:aV,reset:cV}});var ZV=uV=function(){function t(){hy(this,t),this.attachToken=function(){return Promise.resolve()},this.requestStartCallback=function(){return null},this.requestSuccessCallback=function(){return null},this.requestErrorCallback=function(){return null},this.requestFinishCallback=function(){return null},this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}return by(t,[{key:"requestHandler",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.attachToken(t);case 2:return uV.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)})))}},{key:"errorHandler",value:function(t){throw uV.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"successHandler",value:function(t){return uV.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"init",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=arguments.length>1?arguments[1]:void 0;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:uV.isHandlerEnabled=t,this.attachToken=e;case 2:case"end":return n.stop()}}),n,this)})))}},{key:"enableHandler",value:function(){uV.isHandlerEnabled=!0}},{key:"disableHandler",value:function(){uV.isHandlerEnabled=!1}},{key:"disableHandlerWithTimeout",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:uV.DEFAULT_HANDLER_DISABLE_TIMEOUT;uV.isHandlerEnabled=!1,setTimeout((function(){uV.isHandlerEnabled=!0}),t)}},{key:"setHttpRequestStartCallback",value:function(t){this.requestStartCallback=t}},{key:"setHttpRequestSuccessCallback",value:function(t){this.requestSuccessCallback=t}},{key:"setHttpRequestErrorCallback",value:function(t){this.requestErrorCallback=t}},{key:"setHttpRequestFinishCallback",value:function(t){this.requestFinishCallback=t}}],[{key:"getInstance",value:function(){var t=this;return this.axiosInstance||(this.axiosInstance=uG.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new uV),this.axiosInstance.interceptors.request.use((function(e){return yy(t,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.clientInstance.requestHandler(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))})),this.axiosInstance.interceptors.response.use((function(e){return t.clientInstance.successHandler(e)}),(function(e){return t.clientInstance.errorHandler(e)})),this.axiosInstance.all=uG.all,this.axiosInstance.spread=uG.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}}]),t}();ZV.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,ZV=uV=function(t,e,n,i){var r,c=arguments.length,l=c<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if("object"===("undefined"==typeof Reflect?"undefined":o(Reflect))&&"function"==typeof Reflect.decorate)l=Reflect.decorate(t,e,n,i);else for(var a=t.length-1;a>=0;a--)(r=t[a])&&(l=(c<3?r(l):c>3?r(e,n,l):r(e,n))||l);return c>3&&l&&Object.defineProperty(e,n,l),l}([function(t){}],ZV);var bV=function(){function t(){hy(this,t)}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:localStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:localStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),pV=function(){function t(){hy(this,t),this._data=new Map}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this._data.set(t,e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getData",value:function(t){var e,n;return yy(this,void 0,void 0,py.mark((function i(){return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}");case 1:case"end":return i.stop()}}),i,this)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._data.delete(t);case 1:case"end":return e.stop()}}),e,this)})))}}]),t}(),yV=function(){function t(){hy(this,t)}return by(t,[{key:"setData",value:function(t,e){return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:sessionStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return yy(this,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:sessionStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}();function IV(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return XV(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return XV(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}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 c,l=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){o=!0,c=t},f:function(){try{l||null==n.return||n.return()}finally{if(o)throw c}}}}function XV(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var GV=function(e){switch(e){case t.Storage.LocalStorage:return new bV;case t.Storage.SessionStorage:return new yV;case t.Storage.BrowserMemory:return new pV;default:return new yV}},gV=function(e){return yy(void 0,void 0,void 0,py.mark((function n(){var i,r,c,l,o,a,u,d,s,m,h,Z,b,p,y,I,X,G,g,f,V,W,v,S,C,Y,R,K,L,J,x,N;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=GV(e.storage),c=new Rf(r),n.next=4,c.initialize(e);case 4:if(l=new sV(c),o=c.getDataLayer(),a=hV((function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.signOut());case 1:case"end":return t.stop()}}),t)})))}),null!==(i=e.storage)&&void 0!==i?i:t.Storage.SessionStorage,(function(t){return o.setSessionDataParameter(XG,null!=t?t:"")})),u=ZV.getInstance(),d=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Object.assign({attachToken:!0},t).attachToken){e.next=11;break}return e.t0=Object,e.t1=Object.assign({},t.headers),e.t2="Bearer ",e.next=7,c.getAccessToken();case 7:e.t3=e.sent,e.t4=e.t2.concat.call(e.t2,e.t3),e.t5={Authorization:e.t4},t.headers=e.t0.assign.call(e.t0,e.t1,e.t5);case 11:case"end":return e.stop()}}),e)})))},n.t0=null==u?void 0:u.init,!n.t0){n.next=13;break}return n.next=13,u.init(!0,d);case 13:return s=function(t){(null==u?void 0:u.setHttpRequestStartCallback)&&u.setHttpRequestStartCallback(t)},m=function(t){(null==u?void 0:u.setHttpRequestSuccessCallback)&&u.setHttpRequestSuccessCallback(t)},h=function(t){(null==u?void 0:u.setHttpRequestFinishCallback)&&u.setHttpRequestFinishCallback(t)},Z=function(t){(null==u?void 0:u.setHttpRequestErrorCallback)&&u.setHttpRequestErrorCallback(t)},b=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,l,a,d,s;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=!1,e.next=3,o.getConfigData();case 3:return l=e.sent,a=0,e.t0=[],e.t1=Vy,e.next=9,null==l?void 0:l.resourceServerURLs;case 9:if(e.t3=n=e.sent,e.t2=null!==e.t3,!e.t2){e.next=13;break}e.t2=void 0!==n;case 13:if(!e.t2){e.next=17;break}e.t4=n,e.next=18;break;case 17:e.t4=[];case 18:e.t5=e.t4,e.t6=(0,e.t1)(e.t5),e.t7=[null==l?void 0:l.serverOrigin],d=e.t0.concat.call(e.t0,e.t6,e.t7);case 22:if(!(a<d.length)){e.next=30;break}if(s=d[a],!(null===(i=null==t?void 0:t.url)||void 0===i?void 0:i.startsWith(s))){e.next=27;break}return r=!0,e.abrupt("break",30);case 27:a++,e.next=22;break;case 30:if(!r){e.next=34;break}return e.abrupt("return",u.request(t).then((function(t){return Promise.resolve(t)})).catch((function(e){var n;return 401===(null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.status)?c.refreshAccessToken().then((function(){return u.request(t).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(new dV("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",t))})):Promise.reject(e)})));case 34:return e.abrupt("return",Promise.reject(new dV("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")));case 35:case"end":return e.stop()}}),e)})))},p=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,l,a,d,s,m,h,Z,b,p,y;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return l=!0,e.next=3,o.getConfigData();case 3:a=e.sent,d=IV(t),e.prev=5,d.s();case 7:if((s=d.n()).done){e.next=50;break}return m=s.value,h=!1,Z=0,e.t0=[],e.t1=Vy,e.next=15,a;case 15:if(e.t4=n=e.sent,e.t3=null===e.t4,e.t3){e.next=19;break}e.t3=void 0===n;case 19:if(!e.t3){e.next=23;break}e.t5=void 0,e.next=24;break;case 23:e.t5=n.resourceServerURLs;case 24:if(e.t6=i=e.t5,e.t2=null!==e.t6,!e.t2){e.next=28;break}e.t2=void 0!==i;case 28:if(!e.t2){e.next=32;break}e.t7=i,e.next=33;break;case 32:e.t7=[];case 33:e.t8=e.t7,e.t9=(0,e.t1)(e.t8),e.t10=[null==a?void 0:a.serverOrigin],b=e.t0.concat.call(e.t0,e.t9,e.t10);case 37:if(!(Z<b.length)){e.next=45;break}if(p=b[Z],!(null===(r=m.url)||void 0===r?void 0:r.startsWith(p))){e.next=42;break}return h=!0,e.abrupt("break",45);case 42:Z++,e.next=37;break;case 45:if(h){e.next=48;break}return l=!1,e.abrupt("break",50);case 48:e.next=7;break;case 50:e.next=55;break;case 52:e.prev=52,e.t11=e.catch(5),d.e(e.t11);case 55:return e.prev=55,d.f(),e.finish(55);case 58:if(y=[],!l){e.next=64;break}return t.forEach((function(t){y.push(u.request(t))})),e.abrupt("return",(null==u?void 0:u.all)&&u.all(y).then((function(t){return Promise.resolve(t)})).catch((function(t){var e;return 401===(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status)?c.refreshAccessToken().then((function(){return u.all&&u.all(y).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(new dV("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",t))})):Promise.reject(t)})));case 64:return e.abrupt("return",Promise.reject(new dV("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")));case 65:case"end":return e.stop()}}),e,null,[[5,52,55,58]])})))},y=function(){return u},I=function(){return(null==u?void 0:u.enableHandler)&&u.enableHandler(),!0},X=function(){return(null==u?void 0:u.disableHandler)&&u.disableHandler(),!0},G=function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r,l,u;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.getOIDCServiceEndpoints();case 2:return l=t.sent,t.next=5,o.getConfigData();case 5:u=t.sent,a.initialize(u.clientID,null!==(e=l.checkSessionIframe)&&void 0!==e?e:"",(function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.getBasicUserInfo();case 2:return t.abrupt("return",t.sent.sessionState);case 3:case"end":return t.stop()}}),t)})))}),null!==(n=u.checkSessionInterval)&&void 0!==n?n:3,null!==(i=u.sessionRefreshInterval)&&void 0!==i?i:300,u.signInRedirectURL,null!==(r=l.authorizationEndpoint)&&void 0!==r?r:"",u.enablePKCE);case 7:case"end":return t.stop()}}),t)})))},g=function(e,n,i){return yy(void 0,void 0,void 0,py.mark((function r(){var u,d,s,m,h,Z,b,p;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,o.getConfigData();case 2:return s=r.sent,r.next=5,a.receivePromptNoneResponse((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.setSessionDataParameter(XG,null!=t?t:"");case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))}));case 5:if(!r.sent){r.next=8;break}return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 8:return mV.wasSilentSignInCalled()&&mV.setIsInitializedSilentSignIn(),r.next=11,c.isAuthenticated();case 11:if(!r.sent){r.next=20;break}return l.clearRefreshTokenTimeout(),l.refreshAccessTokenAutomatically(),s.enableOIDCSessionManagement&&G(),r.t0=Promise,r.next=18,c.getBasicUserInfo();case 18:return r.t1=r.sent,r.abrupt("return",r.t0.resolve.call(r.t0,r.t1));case 20:if((null==s?void 0:s.responseMode)===t.ResponseMode.formPost&&n?(m=n,h=null!=i?i:""):(m=null!==(u=new URL(window.location.href).searchParams.get(IG))&&void 0!==u?u:"",h=null!==(d=new URL(window.location.href).searchParams.get(XG))&&void 0!==d?d:"",mV.removeAuthorizationCode()),!m){r.next=23;break}return r.abrupt("return",S(m,h));case 23:if(Z=new URL(window.location.href).searchParams.get(jf),b=new URL(window.location.href).searchParams.get(Bf),!Z){r.next=31;break}return(p=new URL(window.location.href)).searchParams.delete(jf),p.searchParams.delete(Bf),history.pushState(null,document.title,p.toString()),r.abrupt("return",Promise.reject(new dV("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",Z,null!=b?b:"")));case 31:return r.abrupt("return",c.getAuthorizationURL(e).then((function(e){return yy(void 0,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(s.storage!==t.Storage.BrowserMemory||!s.enablePKCE){n.next=6;break}return n.t0=mV,n.next=4,c.getPKCECode();case 4:n.t1=n.sent,n.t0.setPKCE.call(n.t0,n.t1);case 6:return location.href=e,n.next=9,mV.waitTillPageRedirect();case 9:return n.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:case"end":return n.stop()}}),n)})))})));case 32:case"end":return r.stop()}}),r)})))},f=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.isAuthenticated();case 2:if(!t.sent){t.next=8;break}return t.next=5,c.signOut();case 5:location.href=t.sent,t.next=9;break;case 8:location.href=mV.getSignOutURL();case 9:return l.clearRefreshTokenTimeout(),t.next=12,mV.waitTillPageRedirect();case 12:return t.abrupt("return",!0);case 13:case"end":return t.stop()}}),t)})))},V=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,a,u,d,s,m,h;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=!0,u=!1,e.next=4,o.getConfigData();case 4:if(d=e.sent,!(null==t?void 0:t.tokenEndpoint)){e.next=42;break}return a=!1,s=0,e.t0=[],e.t1=Vy,e.next=12,o.getConfigData();case 12:if(e.t4=n=e.sent,e.t3=null===e.t4,e.t3){e.next=16;break}e.t3=void 0===n;case 16:if(!e.t3){e.next=20;break}e.t5=void 0,e.next=21;break;case 20:e.t5=n.resourceServerURLs;case 21:if(e.t6=i=e.t5,e.t2=null!==e.t6,!e.t2){e.next=25;break}e.t2=void 0!==i;case 25:if(!e.t2){e.next=29;break}e.t7=i,e.next=30;break;case 29:e.t7=[];case 30:e.t8=e.t7,e.t9=(0,e.t1)(e.t8),e.t10=[null==d?void 0:d.serverOrigin],m=e.t0.concat.call(e.t0,e.t9,e.t10);case 34:if(!(s<m.length)){e.next=42;break}if(h=m[s],!(null===(r=t.tokenEndpoint)||void 0===r?void 0:r.startsWith(h))){e.next=39;break}return u=!0,e.abrupt("break",42);case 39:s++,e.next=34;break;case 42:if(!a&&!u){e.next=46;break}return e.abrupt("return",c.requestCustomGrant(t).then((function(e){return yy(void 0,void 0,void 0,py.mark((function n(){return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!t.returnsSession){n.next=5;break}return l.refreshAccessTokenAutomatically(),n.abrupt("return",c.getBasicUserInfo());case 5:return n.abrupt("return",e);case 6:case"end":return n.stop()}}),n)})))})).catch((function(t){return Promise.reject(t)})));case 46:return e.abrupt("return",Promise.reject(new dV("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`")));case 47:case"end":return e.stop()}}),e)})))},W=function(){return c.refreshAccessToken().then((function(){return l.refreshAccessTokenAutomatically(),c.getBasicUserInfo()})).catch((function(t){return Promise.reject(t)}))},v=function(){return c.revokeAccessToken().then((function(){return a.reset(),l.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},S=function(e,n){return yy(void 0,void 0,void 0,py.mark((function i(){var r,a;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,o.getConfigData();case 2:if((r=i.sent).storage!==t.Storage.BrowserMemory||!r.enablePKCE){i.next=7;break}return a=mV.getPKCE(),i.next=7,c.setPKCECode(a);case 7:return i.abrupt("return",c.requestAccessToken(e,n).then((function(){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r.storage!==t.Storage.BrowserMemory){e.next=6;break}return e.t0=mV,e.next=4,c.getSignOutURL();case 4:e.t1=e.sent,e.t0.setSignOutURL.call(e.t0,e.t1);case 6:return l.clearRefreshTokenTimeout(),l.refreshAccessTokenAutomatically(),r.enableOIDCSessionManagement&&G(),e.abrupt("return",c.getBasicUserInfo());case 10:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 8:case"end":return i.stop()}}),i)})))},C=function(){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,l,u,d,s;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.getConfigData();case 2:if(i=e.sent,!mV.setIsInitializedSilentSignIn()){e.next=7;break}return e.next=6,a.receivePromptNoneResponse();case 6:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 7:if(!mV.isStatePresentInURL()){e.next=10;break}return mV.setIsInitializedSilentSignIn(),e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:return r=document.getElementById(Hf),l=null===(n=null==r?void 0:r.contentDocument)||void 0===n?void 0:n.getElementById(kf),e.prev=12,e.next=15,c.getAuthorizationURL({prompt:"none",state:wf});case 15:if(u=e.sent,(d=new URL(u)).searchParams.set("response_mode","query"),s=d.toString(),i.storage!==t.Storage.BrowserMemory||!i.enablePKCE){e.next=25;break}return e.t0=mV,e.next=23,c.getPKCECode();case 23:e.t1=e.sent,e.t0.setPKCE.call(e.t0,e.t1);case 25:l.src=s,e.next=31;break;case 28:return e.prev=28,e.t2=e.catch(12),e.abrupt("return",Promise.reject(e.t2));case 31:return e.abrupt("return",new Promise((function(t,e){window.addEventListener("message",(function n(i){return yy(void 0,void 0,void 0,py.mark((function r(){var c,l,o,a;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:o=i.data,a=setTimeout((function(){t(!1)}),1e4),(null==o?void 0:o.type)==xf&&(window.removeEventListener("message",n),clearTimeout(a),t(!1)),(null==o?void 0:o.type)==Jf&&(null===(c=null==o?void 0:o.data)||void 0===c?void 0:c.code)&&S(o.data.code,null===(l=null==o?void 0:o.data)||void 0===l?void 0:l.sessionState).then((function(e){window.removeEventListener("message",n),t(e)})).catch((function(t){window.removeEventListener("message",n),e(t)})).finally((function(){clearTimeout(a)}));case 4:case"end":return r.stop()}}),r)})))}))})));case 32:case"end":return e.stop()}}),e,null,[[12,28]])})))},Y=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.getBasicUserInfo());case 1:case"end":return t.stop()}}),t)})))},R=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.getDecodedIDToken());case 1:case"end":return t.stop()}}),t)})))},K=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.getIDToken());case 1:case"end":return t.stop()}}),t)})))},L=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t)})))},J=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.getAccessToken());case 1:case"end":return t.stop()}}),t)})))},x=function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",c.isAuthenticated());case 1:case"end":return t.stop()}}),t)})))},N=function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.getConfigData();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),r=Object.assign(Object.assign({},n),t),e.next=7,c.updateConfig(r);case 7:r.enableOIDCSessionManagement&&i&&(a.reset(),G());case 8:case"end":return e.stop()}}),e)})))},n.abrupt("return",{disableHttpHandler:X,enableHttpHandler:I,getAccessToken:J,getBasicUserInfo:Y,getDecodedIDToken:R,getHttpClient:y,getIDToken:K,getOIDCServiceEndpoints:L,httpRequest:b,httpRequestAll:p,isAuthenticated:x,refreshAccessToken:W,requestCustomGrant:V,revokeAccessToken:v,setHttpRequestErrorCallback:Z,setHttpRequestFinishCallback:h,setHttpRequestStartCallback:s,setHttpRequestSuccessCallback:m,signIn:g,signOut:f,trySignInSilently:C,updateConfig:N});case 38:case"end":return n.stop()}}),n)})))};function fV(t,e,n){var i=void 0===e?null:e,r=function(t,e){var n=atob(t);if(e){for(var i=new Uint8Array(n.length),r=0,c=n.length;r<c;++r)i[r]=n.charCodeAt(r);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return n}(t,void 0!==n&&n),c=r.indexOf("\n",10)+1,l=r.substring(c)+(i?"//# sourceMappingURL="+i:""),o=new Blob([l],{type:"application/javascript"});return URL.createObjectURL(o)}var VV,WV,vV,SV,CV=(VV="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlKHI9e3BhdGg6dCxleHBvcnRzOnt9LHJlcXVpcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkR5bmFtaWMgcmVxdWlyZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIil9KG51bGw9PXQmJnIucGF0aCl9fSxyLmV4cG9ydHMpLHIuZXhwb3J0c312YXIgcj10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yPyhlLmV4cG9ydHM9dD1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCk6KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKSx0KHIpfWUuZXhwb3J0cz10LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxuPWUociksbz10KChmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdCxyPU9iamVjdC5wcm90b3R5cGUsbz1yLmhhc093blByb3BlcnR5LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYT1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixuKXt2YXIgbz10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHk/dDp5LGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgQyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49bDtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihuPT09ZCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihuPT09dil7aWYoInRocm93Ij09PW8pdGhyb3cgaTtyZXR1cm4gTygpfWZvcihyLm1ldGhvZD1vLHIuYXJnPWk7Oyl7dmFyIGE9ci5kZWxlZ2F0ZTtpZihhKXt2YXIgcz1BKGEscik7aWYocyl7aWYocz09PWcpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZihuPT09bCl0aHJvdyBuPXYsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPWQ7dmFyIHU9aChlLHQscik7aWYoIm5vcm1hbCI9PT11LnR5cGUpe2lmKG49ci5kb25lP3Y6cCx1LmFyZz09PWcpY29udGludWU7cmV0dXJue3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09dS50eXBlJiYobj12LHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9dS5hcmcpfX19KGUscixhKSxpfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgbD0ic3VzcGVuZGVkU3RhcnQiLHA9InN1c3BlbmRlZFlpZWxkIixkPSJleGVjdXRpbmciLHY9ImNvbXBsZXRlZCIsZz17fTtmdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9ZnVuY3Rpb24gdygpe312YXIgYj17fTtjKGIsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgaz1PYmplY3QuZ2V0UHJvdG90eXBlT2YseD1rJiZrKGsoUChbXSkpKTt4JiZ4IT09ciYmby5jYWxsKHgsYSkmJihiPXgpO3ZhciBfPXcucHJvdG90eXBlPXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYik7ZnVuY3Rpb24gUyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gRShlLHQpe2Z1bmN0aW9uIHIoaSxhLHMsdSl7dmFyIGM9aChlW2ldLGUsYSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIGY9Yy5hcmcsbD1mLnZhbHVlO3JldHVybiBsJiYib2JqZWN0Ij09PW4obCkmJm8uY2FsbChsLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGwuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxzLHUpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLHMsdSl9KSk6dC5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe2YudmFsdWU9ZSxzKGYpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxzLHUpfSkpfXUoYy5hcmcpfXZhciBpO3RoaXMuX2ludm9rZT1mdW5jdGlvbihlLG4pe2Z1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbyl7cihlLG4sdCxvKX0pKX1yZXR1cm4gaT1pP2kudGhlbihvLG8pOm8oKX19ZnVuY3Rpb24gQShlLHIpe3ZhciBuPWUuaXRlcmF0b3Jbci5tZXRob2RdO2lmKG49PT10KXtpZihyLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXIubWV0aG9kKXtpZihlLml0ZXJhdG9yLnJldHVybiYmKHIubWV0aG9kPSJyZXR1cm4iLHIuYXJnPXQsQShlLHIpLCJ0aHJvdyI9PT1yLm1ldGhvZCkpcmV0dXJuIGc7ci5tZXRob2Q9InRocm93IixyLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIGd9dmFyIG89aChuLGUuaXRlcmF0b3Isci5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9by5hcmcsci5kZWxlZ2F0ZT1udWxsLGc7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhyW2UucmVzdWx0TmFtZV09aS52YWx1ZSxyLm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09ci5tZXRob2QmJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9dCksci5kZWxlZ2F0ZT1udWxsLGcpOmk6KHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxyLmRlbGVnYXRlPW51bGwsZyl9ZnVuY3Rpb24gVChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBSKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBDKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goVCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciByPWVbYV07aWYocilyZXR1cm4gci5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiByKCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKG8uY2FsbChlLG4pKXJldHVybiByLnZhbHVlPWVbbl0sci5kb25lPSExLHI7cmV0dXJuIHIudmFsdWU9dCxyLmRvbmU9ITAscn07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpPfX1mdW5jdGlvbiBPKCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19cmV0dXJuIG0ucHJvdG90eXBlPXcsYyhfLCJjb25zdHJ1Y3RvciIsdyksYyh3LCJjb25zdHJ1Y3RvciIsbSksbS5kaXNwbGF5TmFtZT1jKHcsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PW18fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHcpOihlLl9fcHJvdG9fXz13LGMoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LFMoRS5wcm90b3R5cGUpLGMoRS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9RSxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IEUoZih0LHIsbixvKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxTKF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBuPXQucG9wKCk7aWYobiBpbiBlKXJldHVybiByLnZhbHVlPW4sci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxyfX0sZS52YWx1ZXM9UCxDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QyxyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goUiksIWUpZm9yKHZhciByIGluIHRoaXMpInQiPT09ci5jaGFyQXQoMCkmJm8uY2FsbCh0aGlzLHIpJiYhaXNOYU4oK3Iuc2xpY2UoMSkpJiYodGhpc1tyXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciByPXRoaXM7ZnVuY3Rpb24gbihuLG8pe3JldHVybiBzLnR5cGU9InRocm93IixzLmFyZz1lLHIubmV4dD1uLG8mJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxzPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9by5jYWxsKGEsImNhdGNoTG9jIiksYz1vLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHUmJmMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJm8uY2FsbChuLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxuLmZpbmFsbHlMb2Mpe3ZhciBpPW47YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPWUsYS5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGd9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUihyKSxnfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBvPW4uYXJnO1Iocil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6cixuZXh0TG9jOm59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dCksZ319LGV9KGUuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT10fWNhdGNoKGUpeyJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZ2xvYmFsVGhpcz8idW5kZWZpbmVkIjpuKGdsb2JhbFRoaXMpKT9nbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZT10OkZ1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKHQpfX0pKSxpPW87ZnVuY3Rpb24gYShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24obyxpKXtmdW5jdGlvbiBhKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9vKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgcz10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLHU9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHMoZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxjPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxmPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3MoZSx0KTp2b2lkIDB9fSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksaD10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLGw9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSl8fGMoZSl8fGYoZSl8fGgoKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpKSxwPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksZD10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLG8saT1bXSxhPSEwLHM9ITE7dHJ5e2ZvcihyPXIuY2FsbChlKTshKGE9KG49ci5uZXh0KCkpLmRvbmUpJiYoaS5wdXNoKG4udmFsdWUpLCF0fHxpLmxlbmd0aCE9PXQpO2E9ITApO31jYXRjaChlKXtzPSEwLG89ZX1maW5hbGx5e3RyeXthfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgb319cmV0dXJuIGl9fSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksdj10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksZz10KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlKXx8ZChlLHQpfHxmKGUsdCl8fHYoKX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLHk9ZShnKSxtPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksdz1lKG0pLGI9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLGs9dCgoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQscixuLG8saSxhKXt0cnl7dmFyIHM9ZVtpXShhKSx1PXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dCh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLG8pfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT1lLmFwcGx5KHIsbik7ZnVuY3Rpb24gcyhlKXt0KGEsbyxpLHMsdSwibmV4dCIsZSl9ZnVuY3Rpb24gdShlKXt0KGEsbyxpLHMsdSwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSx4PWUoayksXz1lKHQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLFM9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLEU9ZShTKSxBPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuKXtyZXR1cm4gZS5leHBvcnRzPXQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx0KHIsbil9ZS5leHBvcnRzPXQsZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwfSkpLFQ9ZSh0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmQShlLHQpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSkpLFI9dCgoZnVuY3Rpb24oZSl7dmFyIHQ9ci5kZWZhdWx0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHIpe2lmKHImJigib2JqZWN0Ij09PXQocil8fCJmdW5jdGlvbiI9PXR5cGVvZiByKSlyZXR1cm4gcjtpZih2b2lkIDAhPT1yKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFMoZSl9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxDPWUoUiksUD10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBlLmV4cG9ydHM9dD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdChyKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTz1lKFApLEQ9dCgoZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChlKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxJPXQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxVPXQoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuLG8pe3JldHVybiBJKCk/KGUuZXhwb3J0cz10PVJlZmxlY3QuY29uc3RydWN0LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCk6KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bbnVsbF07bi5wdXNoLmFwcGx5KG4sdCk7dmFyIG89bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxuKSk7cmV0dXJuIHImJkEobyxyLnByb3RvdHlwZSksb30sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKSx0LmFwcGx5KG51bGwsYXJndW1lbnRzKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTT10KChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwhRChlKSlyZXR1cm4gZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHZvaWQgMCE9PW4pe2lmKG4uaGFzKGUpKXJldHVybiBuLmdldChlKTtuLnNldChlLHQpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gVShlLGFyZ3VtZW50cyxQKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQSh0LGUpfSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdChyKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksTD1lKE0pLGo9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxIPVtdLHE9W10sQj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxOPSExO2Z1bmN0aW9uIEsoKXtOPSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClIW3RdPWVbdF0scVtlLmNoYXJDb2RlQXQodCldPXQ7cVsiLSIuY2hhckNvZGVBdCgwKV09NjIscVsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gRihlLHQscil7Zm9yKHZhciBuLG8saT1bXSxhPXQ7YTxyO2ErPTMpbj0oZVthXTw8MTYpKyhlW2ErMV08PDgpK2VbYSsyXSxpLnB1c2goSFsobz1uKT4+MTgmNjNdK0hbbz4+MTImNjNdK0hbbz4+NiY2M10rSFs2MyZvXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gWShlKXt2YXIgdDtOfHxLKCk7Zm9yKHZhciByPWUubGVuZ3RoLG49ciUzLG89IiIsaT1bXSxhPTE2MzgzLHM9MCx1PXItbjtzPHU7cys9YSlpLnB1c2goRihlLHMscythPnU/dTpzK2EpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLG8rPUhbdD4+Ml0sbys9SFt0PDw0JjYzXSxvKz0iPT0iKToyPT09biYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLG8rPUhbdD4+MTBdLG8rPUhbdD4+NCY2M10sbys9SFt0PDwyJjYzXSxvKz0iPSIpLGkucHVzaChvKSxpLmpvaW4oIiIpfWZ1bmN0aW9uIFcoZSx0LHIsbixvKXt2YXIgaSxhLHM9OCpvLW4tMSx1PSgxPDxzKS0xLGM9dT4+MSxmPS03LGg9cj9vLTE6MCxsPXI/LTE6MSxwPWVbdCtoXTtmb3IoaCs9bCxpPXAmKDE8PC1mKS0xLHA+Pj0tZixmKz1zO2Y+MDtpPTI1NippK2VbdCtoXSxoKz1sLGYtPTgpO2ZvcihhPWkmKDE8PC1mKS0xLGk+Pj0tZixmKz1uO2Y+MDthPTI1NiphK2VbdCtoXSxoKz1sLGYtPTgpO2lmKDA9PT1pKWk9MS1jO2Vsc2V7aWYoaT09PXUpcmV0dXJuIGE/TmFOOjEvMCoocD8tMToxKTthKz1NYXRoLnBvdygyLG4pLGktPWN9cmV0dXJuKHA/LTE6MSkqYSpNYXRoLnBvdygyLGktbil9ZnVuY3Rpb24gSihlLHQscixuLG8saSl7dmFyIGEscyx1LGM9OCppLW8tMSxmPSgxPDxjKS0xLGg9Zj4+MSxsPTIzPT09bz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6aS0xLGQ9bj8xOi0xLHY9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxhPWYpOihhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0sdSo9MiksKHQrPWEraD49MT9sL3U6bCpNYXRoLnBvdygyLDEtaCkpKnU+PTImJihhKyssdS89MiksYStoPj1mPyhzPTAsYT1mKTphK2g+PTE/KHM9KHQqdS0xKSpNYXRoLnBvdygyLG8pLGErPWgpOihzPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsbyksYT0wKSk7bz49ODtlW3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsby09OCk7Zm9yKGE9YTw8b3xzLGMrPW87Yz4wO2VbcitwXT0yNTUmYSxwKz1kLGEvPTI1NixjLT04KTtlW3IrcC1kXXw9MTI4KnZ9dmFyIHo9e30udG9TdHJpbmcsVj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT16LmNhbGwoZSl9O2Z1bmN0aW9uIEcoKXtyZXR1cm4gWC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiAkKGUsdCl7aWYoRygpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFguVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVgucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IFgodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWChlLHQscil7aWYoIShYLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFgoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gZWUodGhpcyxlKX1yZXR1cm4gWih0aGlzLGUsdCxyKX1mdW5jdGlvbiBaKGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7WC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1YLnByb3RvdHlwZTplPXRlKGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIVguaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfG9lKHQsciksbz0oZT0kKGUsbikpLndyaXRlKHQscik7byE9PW4mJihlPWUuc2xpY2UoMCxvKSk7cmV0dXJuIGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKG5lKHQpKXt2YXIgcj0wfHJlKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPSQoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uPyQoZSwwKTp0ZShlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZWKHQuZGF0YSkpcmV0dXJuIHRlKGUsdC5kYXRhKX12YXIgbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gUShlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIGVlKGUsdCl7aWYoUSh0KSxlPSQoZSx0PDA/MDowfHJlKHQpKSwhWC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIHRlKGUsdCl7dmFyIHI9dC5sZW5ndGg8MD8wOjB8cmUodC5sZW5ndGgpO2U9JChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gcmUoZSl7aWYoZT49RygpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitHKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIG5lKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBvZShlLHQpe2lmKG5lKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBPZShlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIERlKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIE9lKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGllKGUsdCxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIGJlKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBnZSh0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIG1lKHRoaXMsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB3ZSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZSh0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBrZSh0aGlzLHQscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBhZShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIHNlKGUsdCxyLG4sbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9bz8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighbylyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1YLmZyb20odCxuKSksbmUodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp1ZShlLHQscixuLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFguVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/bz9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOnVlKGUsW3RdLHIsbixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB1ZShlLHQscixuLG8pe3ZhciBpLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYobyl7dmFyIGY9LTE7Zm9yKGk9cjtpPHM7aSsrKWlmKGMoZSxpKT09PWModCwtMT09PWY/MDppLWYpKXtpZigtMT09PWYmJihmPWkpLGktZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihpLT1pLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksaT1yO2k+PTA7aS0tKXtmb3IodmFyIGg9ITAsbD0wO2w8dTtsKyspaWYoYyhlLGkrbCkhPT1jKHQsbCkpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gaX1yZXR1cm4tMX1mdW5jdGlvbiBjZShlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgbz1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5vJiYobj1vKTpuPW87dmFyIGk9dC5sZW5ndGg7aWYoaSUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+aS8yJiYobj1pLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gZmUoZSx0LHIsbil7cmV0dXJuIEllKE9lKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIGhlKGUsdCxyLG4pe3JldHVybiBJZShmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gdH0odCksZSxyLG4pfWZ1bmN0aW9uIGxlKGUsdCxyLG4pe3JldHVybiBoZShlLHQscixuKX1mdW5jdGlvbiBwZShlLHQscixuKXtyZXR1cm4gSWUoRGUodCksZSxyLG4pfWZ1bmN0aW9uIGRlKGUsdCxyLG4pe3JldHVybiBJZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLG8saT1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKW49KHI9ZS5jaGFyQ29kZUF0KGEpKT4+OCxvPXIlMjU2LGkucHVzaChvKSxpLnB1c2gobik7cmV0dXJuIGl9KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIHZlKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9ZKGUpOlkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBnZShlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sbz10O288cjspe3ZhciBpLGEscyx1LGM9ZVtvXSxmPW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKG8raDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYoZj1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbbysxXSkpJiYodT0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6aT1lW28rMV0sYT1lW28rMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJmEpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGY9dSk7YnJlYWs7Y2FzZSA0Omk9ZVtvKzFdLGE9ZVtvKzJdLHM9ZVtvKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmYSk8PDZ8NjMmcyk+NjU1MzUmJnU8MTExNDExMiYmKGY9dSl9bnVsbD09PWY/KGY9NjU1MzMsaD0xKTpmPjY1NTM1JiYoZi09NjU1MzYsbi5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfDEwMjMmZiksbi5wdXNoKGYpLG8rPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXllKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz15ZSkpO3JldHVybiByfShuKX1YLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09ai5UWVBFRF9BUlJBWV9TVVBQT1JUfHxqLlRZUEVEX0FSUkFZX1NVUFBPUlQsWC5wb29sU2l6ZT04MTkyLFguX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVgucHJvdG90eXBlLGV9LFguZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFoobnVsbCxlLHQscil9LFguVFlQRURfQVJSQVlfU1VQUE9SVCYmKFgucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxYLl9fcHJvdG9fXz1VaW50OEFycmF5KSxYLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFEodCksdDw9MD8kKGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/JChlLHQpLmZpbGwocixuKTokKGUsdCkuZmlsbChyKTokKGUsdCl9KG51bGwsZSx0LHIpfSxYLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBlZShudWxsLGUpfSxYLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gZWUobnVsbCxlKX0sWC5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFVlKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJlVlKGUuc2xpY2UoMCwwKSl9KGUpKX0sWC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW5lKGUpfHwhbmUodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLG89MCxpPU1hdGgubWluKHIsbik7bzxpOysrbylpZihlW29dIT09dFtvXSl7cj1lW29dLG49dFtvXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LFguaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sWC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighVihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBYLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49WC5hbGxvY1Vuc2FmZSh0KSxvPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGk9ZVtyXTtpZighbmUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2kuY29weShuLG8pLG8rPWkubGVuZ3RofXJldHVybiBufSxYLmJ5dGVMZW5ndGg9b2UsWC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFgucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilhZSh0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWFlKHRoaXMsdCx0KzMpLGFlKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFgucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClhZSh0aGlzLHQsdCs3KSxhZSh0aGlzLHQrMSx0KzYpLGFlKHRoaXMsdCsyLHQrNSksYWUodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sWC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9nZSh0aGlzLDAsZSk6aWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxYLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW5lKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1YLmNvbXBhcmUodGhpcyxlKX0sWC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxYLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sbyl7aWYoIW5lKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49byYmdD49cilyZXR1cm4gMDtpZihuPj1vKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBpPShvPj4+PTApLShuPj4+PTApLGE9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihpLGEpLHU9dGhpcy5zbGljZShuLG8pLGM9ZS5zbGljZSh0LHIpLGY9MDtmPHM7KytmKWlmKHVbZl0hPT1jW2ZdKXtpPXVbZl0sYT1jW2ZdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0sWC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sWC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHNlKHRoaXMsZSx0LHIsITApfSxYLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHNlKHRoaXMsZSx0LHIsITEpfSxYLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgbz10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPm8pJiYocj1vKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBpPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gY2UodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gZmUodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGhlKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGxlKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcGUodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBkZSh0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGk9ITB9fSxYLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB5ZT00MDk2O2Z1bmN0aW9uIG1lKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtvXSk7cmV0dXJuIG59ZnVuY3Rpb24gd2UoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBvPXQ7bzxyOysrbyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiBufWZ1bmN0aW9uIGJlKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIG89IiIsaT10O2k8cjsrK2kpbys9UGUoZVtpXSk7cmV0dXJuIG99ZnVuY3Rpb24ga2UoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksbz0iIixpPTA7aTxuLmxlbmd0aDtpKz0yKW8rPVN0cmluZy5mcm9tQ2hhckNvZGUobltpXSsyNTYqbltpKzFdKTtyZXR1cm4gb31mdW5jdGlvbiB4ZShlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gX2UoZSx0LHIsbixvLGkpe2lmKCFuZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5vfHx0PGkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gU2UoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgbz0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciwyKTtvPGk7KytvKWVbcitvXT0odCYyNTU8PDgqKG4/bzoxLW8pKT4+PjgqKG4/bzoxLW8pfWZ1bmN0aW9uIEVlKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgbz0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciw0KTtvPGk7KytvKWVbcitvXT10Pj4+OCoobj9vOjMtbykmMjU1fWZ1bmN0aW9uIEFlKGUsdCxyLG4sbyxpKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gVGUoZSx0LHIsbixvKXtyZXR1cm4gb3x8QWUoZSwwLHIsNCksSihlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBSZShlLHQscixuLG8pe3JldHVybiBvfHxBZShlLDAsciw4KSxKKGUsdCxyLG4sNTIsOCkscis4fVgucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLFguVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1YLnByb3RvdHlwZTtlbHNle3ZhciBvPXQtZTtyPW5ldyBYKG8sdm9pZCAwKTtmb3IodmFyIGk9MDtpPG87KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxYLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8eGUoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxvPTEsaT0wOysraTx0JiYobyo9MjU2KTspbis9dGhpc1tlK2ldKm87cmV0dXJuIG59LFgucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHx4ZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2UrLS10XSxvPTE7dD4wJiYobyo9MjU2KTspbis9dGhpc1tlKy0tdF0qbztyZXR1cm4gbn0sWC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFgucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxYLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxYLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxYLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHx4ZShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLG89MSxpPTA7KytpPHQmJihvKj0yNTYpOyluKz10aGlzW2UraV0qbztyZXR1cm4gbj49KG8qPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqdCkpLG59LFgucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fHhlKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsbz0xLGk9dGhpc1tlKy0tbl07bj4wJiYobyo9MjU2KTspaSs9dGhpc1tlKy0tbl0qbztyZXR1cm4gaT49KG8qPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LFgucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFgucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8eGUoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sWC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHx4ZShlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxYLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LFgucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsNCx0aGlzLmxlbmd0aCksVyh0aGlzLGUsITAsMjMsNCl9LFgucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHhlKGUsNCx0aGlzLmxlbmd0aCksVyh0aGlzLGUsITEsMjMsNCl9LFgucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHx4ZShlLDgsdGhpcy5sZW5ndGgpLFcodGhpcyxlLCEwLDUyLDgpfSxYLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8eGUoZSw4LHRoaXMubGVuZ3RoKSxXKHRoaXMsZSwhMSw1Miw4KX0sWC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxfZSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sWC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxfZSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPXItMSxpPTE7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSxYLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDEsMjU1LDApLFguVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LFgucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMiw2NTUzNSwwKSxYLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpTZSh0aGlzLGUsdCwhMCksdCsyfSxYLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDIsNjU1MzUsMCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6U2UodGhpcyxlLHQsITEpLHQrMn0sWC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkVlKHRoaXMsZSx0LCEwKSx0KzR9LFgucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpFZSh0aGlzLGUsdCwhMSksdCs0fSxYLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIG89TWF0aC5wb3coMiw4KnItMSk7X2UodGhpcyxlLHQscixvLTEsLW8pfXZhciBpPTAsYT0xLHM9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8ciYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QraS0xXSYmKHM9MSksdGhpc1t0K2ldPShlL2E+PjApLXMmMjU1O3JldHVybiB0K3J9LFgucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgbz1NYXRoLnBvdygyLDgqci0xKTtfZSh0aGlzLGUsdCxyLG8tMSwtbyl9dmFyIGk9ci0xLGE9MSxzPTA7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K2krMV0mJihzPTEpLHRoaXNbdCtpXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxYLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMSwxMjcsLTEyOCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxYLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8X2UodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOlNlKHRoaXMsZSx0LCEwKSx0KzJ9LFgucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6U2UodGhpcyxlLHQsITEpLHQrMn0sWC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fF9lKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkVlKHRoaXMsZSx0LCEwKSx0KzR9LFgucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxfZSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFguVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpFZSh0aGlzLGUsdCwhMSksdCs0fSxYLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUZSh0aGlzLGUsdCwhMCxyKX0sWC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gVGUodGhpcyxlLHQsITEscil9LFgucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBSZSh0aGlzLGUsdCwhMCxyKX0sWC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFJlKHRoaXMsZSx0LCExLHIpfSxYLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIG8saT1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihvPWktMTtvPj0wOy0tbyllW28rdF09dGhpc1tvK3JdO2Vsc2UgaWYoaTwxZTN8fCFYLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxYLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFYLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIGk7aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPHI7KytpKXRoaXNbaV09ZTtlbHNle3ZhciBhPW5lKGUpP2U6T2UobmV3IFgoZSxuKS50b1N0cmluZygpKSxzPWEubGVuZ3RoO2ZvcihpPTA7aTxyLXQ7KytpKXRoaXNbaSt0XT1hW2klc119cmV0dXJuIHRoaXN9O3ZhciBDZT0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBQZShlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gT2UoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsbz1udWxsLGk9W10sYT0wO2E8bjsrK2Epe2lmKChyPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFvKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9NjU1MzYrKG8tNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztpLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIERlKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4sbyxpLGE7Tnx8SygpO3ZhciBzPWUubGVuZ3RoO2lmKHMlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO2k9Ij0iPT09ZVtzLTJdPzI6Ij0iPT09ZVtzLTFdPzE6MCxhPW5ldyBCKDMqcy80LWkpLG49aT4wP3MtNDpzO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylvPXFbZS5jaGFyQ29kZUF0KHQpXTw8MTh8cVtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHFbZS5jaGFyQ29kZUF0KHQrMildPDw2fHFbZS5jaGFyQ29kZUF0KHQrMyldLGFbdSsrXT1vPj4xNiYyNTUsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbztyZXR1cm4gMj09PWk/KG89cVtlLmNoYXJDb2RlQXQodCldPDwyfHFbZS5jaGFyQ29kZUF0KHQrMSldPj40LGFbdSsrXT0yNTUmbyk6MT09PWkmJihvPXFbZS5jaGFyQ29kZUF0KHQpXTw8MTB8cVtlLmNoYXJDb2RlQXQodCsxKV08PDR8cVtlLmNoYXJDb2RlQXQodCsyKV0+PjIsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbyksYX0oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShDZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSWUoZSx0LHIsbil7Zm9yKHZhciBvPTA7bzxuJiYhKG8rcj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK3JdPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gVWUoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgTWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLG49MDtuPHIubGVuZ3RoO24rKylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5hcHBseSh0LHIpfX0sTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBqZShlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09TGUuY2FsbChlKX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBxZShlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT09bihlKX1mdW5jdGlvbiBCZShlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUxlLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUxlLmNhbGwoZSl9ZnVuY3Rpb24gS2UoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT09bihlKSYmKGU9W2VdKSxqZShlKSlmb3IodmFyIHI9MCxvPWUubGVuZ3RoO3I8bztyKyspdC5jYWxsKG51bGwsZVtyXSxyLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgRmU9e2lzQXJyYXk6amUsaXNBcnJheUJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09TGUuY2FsbChlKX0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhSGUoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhSGUoZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJmUgaW5zdGFuY2VvZiBGb3JtRGF0YX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OnFlLGlzUGxhaW5PYmplY3Q6QmUsaXNVbmRlZmluZWQ6SGUsaXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUxlLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1MZS5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09TGUuY2FsbChlKX0saXNGdW5jdGlvbjpOZSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gcWUoZSkmJk5lKGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zJiZlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOktlLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7QmUodFtuXSkmJkJlKHIpP3Rbbl09ZSh0W25dLHIpOkJlKHIpP3Rbbl09ZSh7fSxyKTpqZShyKT90W25dPXIuc2xpY2UoKTp0W25dPXJ9Zm9yKHZhciBuPTAsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspS2UoYXJndW1lbnRzW25dLHIpO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBLZSh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/TWUodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIFdlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKEZlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIG89W107RmUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihGZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sRmUuZm9yRWFjaChlLChmdW5jdGlvbihlKXtGZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6RmUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxvLnB1c2goWWUodCkrIj0iK1llKGUpKX0pKSl9KSksbj1vLmpvaW4oIiYiKX1pZihuKXt2YXIgaT1lLmluZGV4T2YoIiMiKTstMSE9PWkmJihlPWUuc2xpY2UoMCxpKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gSmUoKXt0aGlzLmhhbmRsZXJzPVtdfUplLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEplLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sSmUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7RmUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIHplPUplO2Z1bmN0aW9uIFZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gR2UoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciAkZT1WZSxYZT1HZTtmdW5jdGlvbiBaZShlKXtpZigkZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoJGU9PT1WZXx8ISRlKSYmc2V0VGltZW91dClyZXR1cm4gJGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiAkZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gJGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuICRlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIGouc2V0VGltZW91dCYmKCRlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBqLmNsZWFyVGltZW91dCYmKFhlPWNsZWFyVGltZW91dCk7dmFyIFFlLGV0PVtdLHR0PSExLHJ0PS0xO2Z1bmN0aW9uIG50KCl7dHQmJlFlJiYodHQ9ITEsUWUubGVuZ3RoP2V0PVFlLmNvbmNhdChldCk6cnQ9LTEsZXQubGVuZ3RoJiZvdCgpKX1mdW5jdGlvbiBvdCgpe2lmKCF0dCl7dmFyIGU9WmUobnQpO3R0PSEwO2Zvcih2YXIgdD1ldC5sZW5ndGg7dDspe2ZvcihRZT1ldCxldD1bXTsrK3J0PHQ7KVFlJiZRZVtydF0ucnVuKCk7cnQ9LTEsdD1ldC5sZW5ndGh9UWU9bnVsbCx0dD0hMSxmdW5jdGlvbihlKXtpZihYZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChYZT09PUdlfHwhWGUpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFhlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e1hlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gWGUuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBYZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGl0KGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9aXQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIGF0KCl7fXZhciBzdD1hdCx1dD1hdCxjdD1hdCxmdD1hdCxodD1hdCxsdD1hdCxwdD1hdDt2YXIgZHQ9ai5wZXJmb3JtYW5jZXx8e30sdnQ9ZHQubm93fHxkdC5tb3pOb3d8fGR0Lm1zTm93fHxkdC5vTm93fHxkdC53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBndD1uZXcgRGF0ZTt2YXIgeXQ9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07ZXQucHVzaChuZXcgaXQoZSx0KSksMSE9PWV0Lmxlbmd0aHx8dHR8fFplKG90KX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpzdCxhZGRMaXN0ZW5lcjp1dCxvbmNlOmN0LG9mZjpmdCxyZW1vdmVMaXN0ZW5lcjpodCxyZW1vdmVBbGxMaXN0ZW5lcnM6bHQsZW1pdDpwdCxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSp2dC5jYWxsKGR0KSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1ndCkvMWUzfX0sbXQ9eXQsd3Q9ZnVuY3Rpb24oZSx0KXtGZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LGJ0PWZ1bmN0aW9uKGUsdCxyLG4sbyl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPW8sZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxrdD1mdW5jdGlvbihlLHQscixuLG8pe3ZhciBpPW5ldyBFcnJvcihlKTtyZXR1cm4gYnQoaSx0LHIsbixvKX0seHQ9RmUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixvLGkpe3ZhciBhPVtdO2EucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLEZlLmlzTnVtYmVyKHIpJiZhLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxGZS5pc1N0cmluZyhuKSYmYS5wdXNoKCJwYXRoPSIrbiksRmUuaXNTdHJpbmcobykmJmEucHVzaCgiZG9tYWluPSIrbyksITA9PT1pJiZhLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1hLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxfdD1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFN0PUZlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPUZlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxvPWUuaGVhZGVycyxpPWUucmVzcG9uc2VUeXBlO0ZlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgcz1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShzKyI6Iit1KX12YXIgYyxmLGg9KGM9ZS5iYXNlVVJMLGY9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChmKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGYpOmYpO2Z1bmN0aW9uIGwoKXtpZihhKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGE/ZnVuY3Rpb24oZSl7dmFyIHQscixuLG89e307cmV0dXJuIGU/KEZlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PUZlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPUZlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYob1t0XSYmX3QuaW5kZXhPZih0KT49MClyZXR1cm47b1t0XT0ic2V0LWNvb2tpZSI9PT10PyhvW3RdP29bdF06W10pLmNvbmNhdChbcl0pOm9bdF0/b1t0XSsiLCAiK3I6cn19KSksbyk6b30oYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxvPXtkYXRhOmkmJiJ0ZXh0IiE9PWkmJiJqc29uIiE9PWk/YS5yZXNwb25zZTphLnJlc3BvbnNlVGV4dCxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6YX07IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qoa3QoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLG8pLGE9bnVsbH19aWYoYS5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksV2UoaCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gYT9hLm9ubG9hZGVuZD1sOmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YSYmND09PWEucmVhZHlTdGF0ZSYmKDAhPT1hLnN0YXR1c3x8YS5yZXNwb25zZVVSTCYmMD09PWEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQobCl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKGt0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3Ioa3QoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIoa3QodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGEpKSxhPW51bGx9LEZlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBwPShlLndpdGhDcmVkZW50aWFsc3x8U3QoaCkpJiZlLnhzcmZDb29raWVOYW1lP3h0LnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO3AmJihvW2UueHNyZkhlYWRlck5hbWVdPXApfSJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJkZlLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTphLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxGZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChhLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxpJiYianNvbiIhPT1pJiYoYS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7YSYmKGEuYWJvcnQoKSxyKGUpLGE9bnVsbCl9KSksbnx8KG49bnVsbCksYS5zZW5kKG4pfSkpfSxBdD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFR0KGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgUnQsQ3Q9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PW10JiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobXQpKSYmKFJ0PUV0KSxSdCksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gd3QodCwiQWNjZXB0Iiksd3QodCwiQ29udGVudC1UeXBlIiksRmUuaXNGb3JtRGF0YShlKXx8RmUuaXNBcnJheUJ1ZmZlcihlKXx8RmUuaXNCdWZmZXIoZSl8fEZlLmlzU3RyZWFtKGUpfHxGZS5pc0ZpbGUoZSl8fEZlLmlzQmxvYihlKT9lOkZlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkZlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhUdCh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6RmUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhUdCh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEZlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksRmUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihvfHxuJiZGZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKG8pe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgYnQoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07Q3QuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxGZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtDdC5oZWFkZXJzW2VdPXt9fSkpLEZlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7Q3QuaGVhZGVyc1tlXT1GZS5tZXJnZShBdCl9KSk7dmFyIFB0PUN0LE90PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxQdDtyZXR1cm4gRmUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sRHQ9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIEl0KGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBVdD1mdW5jdGlvbihlKXtyZXR1cm4gSXQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPU90LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPUZlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksRmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxQdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gSXQoZSksdC5kYXRhPU90LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIER0KHQpfHwoSXQoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1PdC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxNdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxvPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLGk9WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0sYT1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBGZS5pc1BsYWluT2JqZWN0KGUpJiZGZS5pc1BsYWluT2JqZWN0KHQpP0ZlLm1lcmdlKGUsdCk6RmUuaXNQbGFpbk9iamVjdCh0KT9GZS5tZXJnZSh7fSx0KTpGZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7RmUuaXNVbmRlZmluZWQodFtuXSk/RmUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPXModm9pZCAwLGVbbl0pKTpyW25dPXMoZVtuXSx0W25dKX1GZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe0ZlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1zKHZvaWQgMCx0W2VdKSl9KSksRmUuZm9yRWFjaChvLHUpLEZlLmZvckVhY2goaSwoZnVuY3Rpb24obil7RmUuaXNVbmRlZmluZWQodFtuXSk/RmUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPXModm9pZCAwLGVbbl0pKTpyW25dPXModm9pZCAwLHRbbl0pfSkpLEZlLmZvckVhY2goYSwoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09cyhlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09cyh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KG8pLmNvbmNhdChpKS5jb25jYXQoYSksZj1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIEZlLmZvckVhY2goZix1KSxyfSxMdD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sanQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2p0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiBuKHIpPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBIdD17fSxxdD1MdC52ZXJzaW9uLnNwbGl0KCIuIik7ZnVuY3Rpb24gQnQoZSx0KXtmb3IodmFyIHI9dD90LnNwbGl0KCIuIik6cXQsbj1lLnNwbGl0KCIuIiksbz0wO288MztvKyspe2lmKHJbb10+bltvXSlyZXR1cm4hMDtpZihyW29dPG5bb10pcmV0dXJuITF9cmV0dXJuITF9anQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10JiZCdCh0KTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIltBeGlvcyB2IitMdC52ZXJzaW9uKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksYSl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihvKGksIiBoYXMgYmVlbiByZW1vdmVkIGluICIrdCkpO3JldHVybiBuJiYhSHRbaV0mJihIdFtpXT0hMCxjb25zb2xlLndhcm4obyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKHIsaSxhKX19O3ZhciBOdD17aXNPbGRlclZlcnNpb246QnQsYXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQscil7aWYoIm9iamVjdCIhPT1uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIG89T2JqZWN0LmtleXMoZSksaT1vLmxlbmd0aDtpLS0gPjA7KXt2YXIgYT1vW2ldLHM9dFthXTtpZihzKXt2YXIgdT1lW2FdLGM9dm9pZCAwPT09dXx8cyh1LGEsZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK2ErIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PXIpdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrYSl9fSx2YWxpZGF0b3JzOmp0fSxLdD1OdC52YWxpZGF0b3JzO2Z1bmN0aW9uIEZ0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgemUscmVzcG9uc2U6bmV3IHplfX1GdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGU/KGU9YXJndW1lbnRzWzFdfHx7fSkudXJsPWFyZ3VtZW50c1swXTplPWV8fHt9LChlPU10KHRoaXMuZGVmYXVsdHMsZSkpLm1ldGhvZD9lLm1ldGhvZD1lLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP2UubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6ZS5tZXRob2Q9ImdldCI7dmFyIHQ9ZS50cmFuc2l0aW9uYWw7dm9pZCAwIT09dCYmTnQuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpLdC50cmFuc2l0aW9uYWwoS3QuYm9vbGVhbiwiMS4wLjAiKSxmb3JjZWRKU09OUGFyc2luZzpLdC50cmFuc2l0aW9uYWwoS3QuYm9vbGVhbiwiMS4wLjAiKSxjbGFyaWZ5VGltZW91dEVycm9yOkt0LnRyYW5zaXRpb25hbChLdC5ib29sZWFuLCIxLjAuMCIpfSwhMSk7dmFyIHI9W10sbj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnJ1bldoZW4mJiExPT09dC5ydW5XaGVuKGUpfHwobj1uJiZ0LnN5bmNocm9ub3VzLHIudW5zaGlmdCh0LmZ1bGZpbGxlZCx0LnJlamVjdGVkKSl9KSk7dmFyIG8saT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIW4pe3ZhciBhPVtVdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhLHIpLGE9YS5jb25jYXQoaSksbz1Qcm9taXNlLnJlc29sdmUoZSk7YS5sZW5ndGg7KW89by50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgcz1lO3IubGVuZ3RoOyl7dmFyIHU9ci5zaGlmdCgpLGM9ci5zaGlmdCgpO3RyeXtzPXUocyl9Y2F0Y2goZSl7YyhlKTticmVha319dHJ5e289VXQocyl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7aS5sZW5ndGg7KW89by50aGVuKGkuc2hpZnQoKSxpLnNoaWZ0KCkpO3JldHVybiBvfSxGdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPU10KHRoaXMuZGVmYXVsdHMsZSksV2UoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sRmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe0Z0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0Z0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChNdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgWXQ9RnQ7ZnVuY3Rpb24gV3QoZSl7dGhpcy5tZXNzYWdlPWV9V3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LFd0LnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBKdD1XdDtmdW5jdGlvbiB6dChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpcztlKChmdW5jdGlvbihlKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBKdChlKSx0KHIucmVhc29uKSl9KSl9enQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0senQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgenQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBWdD16dDtmdW5jdGlvbiBHdChlKXt2YXIgdD1uZXcgWXQoZSkscj1NZShZdC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gRmUuZXh0ZW5kKHIsWXQucHJvdG90eXBlLHQpLEZlLmV4dGVuZChyLHQpLHJ9dmFyICR0PUd0KFB0KTskdC5BeGlvcz1ZdCwkdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KE10KCR0LmRlZmF1bHRzLGUpKX0sJHQuQ2FuY2VsPUp0LCR0LkNhbmNlbFRva2VuPVZ0LCR0LmlzQ2FuY2VsPUR0LCR0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LCR0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LCR0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PW4oZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBYdD0kdCxadD0kdDtYdC5kZWZhdWx0PVp0O3ZhciBRdCxlcix0cj1YdDtmdW5jdGlvbiBycihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBucihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1yfHwiU2V0Ij09PXIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoIkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gbnIoZSx0KX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBhPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG5yKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gb3IoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGlyKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP29yKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YihlLHQsclt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6b3IoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fQovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCUNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKCVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQoJcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKCVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICglSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKCUFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKCUlORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQoJTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKCU9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKCVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCgkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLygpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49TyhlKTtpZih0KXt2YXIgbz1PKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsbyl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBDKHRoaXMscil9fWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoZSl7dHJ5e3Uobi5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KG4udGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9dSgobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfShlcj1RdHx8KFF0PXt9KSkuZm9ybVBvc3Q9ImZvcm1fcG9zdCIsZXIucXVlcnk9InF1ZXJ5Ijt2YXIgdXI7IWZ1bmN0aW9uKGUpe2UuQ29uZmlnRGF0YT0iY29uZmlnX2RhdGEiLGUuT0lEQ1Byb3ZpZGVyTWV0YURhdGE9Im9pZGNfcHJvdmlkZXJfbWV0YV9kYXRhIixlLlNlc3Npb25EYXRhPSJzZXNzaW9uX2RhdGEiLGUuVGVtcG9yYXJ5RGF0YT0idGVtcG9yYXJ5X2RhdGEifSh1cnx8KHVyPXt9KSk7dmFyIGNyPSJyZWZyZXNoX3Rva2VuX3RpbWVyIixmcj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcihlLG4sbyxpLGEscyl7dmFyIHU7cmV0dXJuIF8odGhpcyxyKSwodT10LmNhbGwodGhpcyxudWxsIT1pP2k6bnVsbD09cz92b2lkIDA6cy5tZXNzYWdlKSkubmFtZT11LmNvbnN0cnVjdG9yLm5hbWUsdS5jb2RlPWUsdS5maWxlPW4sdS5tZXRob2Q9byx1LmRlc2NyaXB0aW9uPWEsdS5lcnJvcj1zLE9iamVjdC5zZXRQcm90b3R5cGVPZihFKHUpLCh0aGlzIGluc3RhbmNlb2Ygcj90aGlzLmNvbnN0cnVjdG9yOnZvaWQgMCkucHJvdG90eXBlKSx1fXJldHVybiByfShMKEVycm9yKSksaHI9ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoZSxuLG8saSxhLHMsdSxjLGYpe3ZhciBoO3JldHVybiBfKHRoaXMsciksKGg9dC5jYWxsKHRoaXMsZSxuLG8saSxhKSkubmFtZT1oLmNvbnN0cnVjdG9yLm5hbWUsaC5jb2RlPWUsaC5maWxlPW4saC5tZXRob2Q9byxoLmRlc2NyaXB0aW9uPWEsaC5uZXR3b3JrRXJyb3JDb2RlPXMsaC5uZXR3b3JrRXJyb3JNZXNzYWdlPXUsaC5zdGF0dXM9YyxoLm5ldHdvcmtFcnJvckRhdGE9ZixofXJldHVybiByfShmciksbHI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWo/ajoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBwcihlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBkcj12b2lkIDAhPT1qP2o6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHZyPVtdLGdyPVtdLHlyPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG1yPSExO2Z1bmN0aW9uIHdyKCl7bXI9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXZyW3RdPWVbdF0sZ3JbZS5jaGFyQ29kZUF0KHQpXT10O2dyWyItIi5jaGFyQ29kZUF0KDApXT02MixnclsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gYnIoZSx0LHIpe2Zvcih2YXIgbixvLGk9W10sYT10O2E8cjthKz0zKW49KGVbYV08PDE2KSsoZVthKzFdPDw4KStlW2ErMl0saS5wdXNoKHZyWyhvPW4pPj4xOCY2M10rdnJbbz4+MTImNjNdK3ZyW28+PjYmNjNdK3ZyWzYzJm9dKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBrcihlKXt2YXIgdDttcnx8d3IoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsbz0iIixpPVtdLGE9MTYzODMscz0wLHU9ci1uO3M8dTtzKz1hKWkucHVzaChicihlLHMscythPnU/dTpzK2EpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLG8rPXZyW3Q+PjJdLG8rPXZyW3Q8PDQmNjNdLG8rPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0sbys9dnJbdD4+MTBdLG8rPXZyW3Q+PjQmNjNdLG8rPXZyW3Q8PDImNjNdLG8rPSI9IiksaS5wdXNoKG8pLGkuam9pbigiIil9ZnVuY3Rpb24geHIoZSx0LHIsbixvKXt2YXIgaSxhLHM9OCpvLW4tMSx1PSgxPDxzKS0xLGM9dT4+MSxmPS03LGg9cj9vLTE6MCxsPXI/LTE6MSxwPWVbdCtoXTtmb3IoaCs9bCxpPXAmKDE8PC1mKS0xLHA+Pj0tZixmKz1zO2Y+MDtpPTI1NippK2VbdCtoXSxoKz1sLGYtPTgpO2ZvcihhPWkmKDE8PC1mKS0xLGk+Pj0tZixmKz1uO2Y+MDthPTI1NiphK2VbdCtoXSxoKz1sLGYtPTgpO2lmKDA9PT1pKWk9MS1jO2Vsc2V7aWYoaT09PXUpcmV0dXJuIGE/TmFOOjEvMCoocD8tMToxKTthKz1NYXRoLnBvdygyLG4pLGktPWN9cmV0dXJuKHA/LTE6MSkqYSpNYXRoLnBvdygyLGktbil9ZnVuY3Rpb24gX3IoZSx0LHIsbixvLGkpe3ZhciBhLHMsdSxjPTgqaS1vLTEsZj0oMTw8YyktMSxoPWY+PjEsbD0yMz09PW8/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmktMSxkPW4/MTotMSx2PXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsYT1mKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLHUqPTIpLCh0Kz1hK2g+PTE/bC91OmwqTWF0aC5wb3coMiwxLWgpKSp1Pj0yJiYoYSsrLHUvPTIpLGEraD49Zj8ocz0wLGE9Zik6YStoPj0xPyhzPSh0KnUtMSkqTWF0aC5wb3coMixvKSxhKz1oKToocz10Kk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLG8pLGE9MCkpO28+PTg7ZVtyK3BdPTI1NSZzLHArPWQscy89MjU2LG8tPTgpO2ZvcihhPWE8PG98cyxjKz1vO2M+MDtlW3IrcF09MjU1JmEscCs9ZCxhLz0yNTYsYy09OCk7ZVtyK3AtZF18PTEyOCp2fXZhciBTcj17fS50b1N0cmluZyxFcj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1Tci5jYWxsKGUpfTtDci5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PWRyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fGRyLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEFyPVRyKCk7ZnVuY3Rpb24gVHIoKXtyZXR1cm4gQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gUnIoZSx0KXtpZihUcigpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1Dci5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgQ3IodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gQ3IoZSx0LHIpe2lmKCEoQ3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIENyKSlyZXR1cm4gbmV3IENyKGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIERyKHRoaXMsZSl9cmV0dXJuIFByKHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFByKGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUNyLnByb3RvdHlwZTplPUlyKGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhQ3IuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfExyKHQsciksbz0oZT1ScihlLG4pKS53cml0ZSh0LHIpO3JldHVybiBvIT09biYmKGU9ZS5zbGljZSgwLG8pKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihNcih0KSl7dmFyIHI9MHxVcih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1ScihlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/UnIoZSwwKTpJcihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZFcih0LmRhdGEpKXJldHVybiBJcihlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIE9yKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gRHIoZSx0KXtpZihPcih0KSxlPVJyKGUsdDwwPzA6MHxVcih0KSksIUNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSXIoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxVcih0Lmxlbmd0aCk7ZT1ScihlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gVXIoZSl7aWYoZT49VHIoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrVHIoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gTXIoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIExyKGUsdCl7aWYoTXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIGNuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gZm4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gY24oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24ganIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gWHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFZyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gR3IodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuICRyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHpyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFpyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIEhyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gcXIoZSx0LHIsbixvKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1vPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFvKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUNyLmZyb20odCxuKSksTXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpCcihlLHQscixuLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LENyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpCcihlLFt0XSxyLG4sbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gQnIoZSx0LHIsbixvKXt2YXIgaSxhPTEscz1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLHMvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PWE/ZVt0XTplLnJlYWRVSW50MTZCRSh0KmEpfWlmKG8pe3ZhciBmPS0xO2ZvcihpPXI7aTxzO2krKylpZihjKGUsaSk9PT1jKHQsLTE9PT1mPzA6aS1mKSl7aWYoLTE9PT1mJiYoZj1pKSxpLWYrMT09PXUpcmV0dXJuIGYqYX1lbHNlLTEhPT1mJiYoaS09aS1mKSxmPS0xfWVsc2UgZm9yKHIrdT5zJiYocj1zLXUpLGk9cjtpPj0wO2ktLSl7Zm9yKHZhciBoPSEwLGw9MDtsPHU7bCsrKWlmKGMoZSxpK2wpIT09Yyh0LGwpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gTnIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIG89ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+byYmKG49byk6bj1vO3ZhciBpPXQubGVuZ3RoO2lmKGklMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmkvMiYmKG49aS8yKTtmb3IodmFyIGE9MDthPG47KythKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBhO2VbcithXT1zfXJldHVybiBhfWZ1bmN0aW9uIEtyKGUsdCxyLG4pe3JldHVybiBobihjbih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBGcihlLHQscixuKXtyZXR1cm4gaG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBZcihlLHQscixuKXtyZXR1cm4gRnIoZSx0LHIsbil9ZnVuY3Rpb24gV3IoZSx0LHIsbil7cmV0dXJuIGhuKGZuKHQpLGUscixuKX1mdW5jdGlvbiBKcihlLHQscixuKXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixvLGk9W10sYT0wO2E8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrYSluPShyPWUuY2hhckNvZGVBdChhKSk+Pjgsbz1yJTI1NixpLnB1c2gobyksaS5wdXNoKG4pO3JldHVybiBpfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiB6cihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/a3IoZSk6a3IoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBWcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sbz10O288cjspe3ZhciBpLGEscyx1LGM9ZVtvXSxmPW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKG8raDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYoZj1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbbysxXSkpJiYodT0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6aT1lW28rMV0sYT1lW28rMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJmEpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGY9dSk7YnJlYWs7Y2FzZSA0Omk9ZVtvKzFdLGE9ZVtvKzJdLHM9ZVtvKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmYSk8PDZ8NjMmcyk+NjU1MzUmJnU8MTExNDExMiYmKGY9dSl9bnVsbD09PWY/KGY9NjU1MzMsaD0xKTpmPjY1NTM1JiYoZi09NjU1MzYsbi5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfDEwMjMmZiksbi5wdXNoKGYpLG8rPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiBHcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG89dDtvPHI7KytvKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbb10pO3JldHVybiBufWZ1bmN0aW9uICRyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBYcihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBvPSIiLGk9dDtpPHI7KytpKW8rPXVuKGVbaV0pO3JldHVybiBvfWZ1bmN0aW9uIFpyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLG89IiIsaT0wO2k8bi5sZW5ndGg7aSs9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0rMjU2Km5baSsxXSk7cmV0dXJuIG99ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGVuKGUsdCxyLG4sbyxpKXtpZighTXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHRuKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIG89MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsMik7bzxpOysrbyllW3Irb109KHQmMjU1PDw4KihuP286MS1vKSk+Pj44KihuP286MS1vKX1mdW5jdGlvbiBybihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIG89MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7bzxpOysrbyllW3Irb109dD4+PjgqKG4/bzozLW8pJjI1NX1mdW5jdGlvbiBubihlLHQscixuLG8saSl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG9uKGUsdCxyLG4sbyl7cmV0dXJuIG98fG5uKGUsMCxyLDQpLF9yKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIGFuKGUsdCxyLG4sbyl7cmV0dXJuIG98fG5uKGUsMCxyLDgpLF9yKGUsdCxyLG4sNTIsOCkscis4fUNyLnBvb2xTaXplPTgxOTIsQ3IuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUNyLnByb3RvdHlwZSxlfSxDci5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUHIobnVsbCxlLHQscil9LENyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihDci5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLENyLl9fcHJvdG9fXz1VaW50OEFycmF5KSxDci5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBPcih0KSx0PD0wP1JyKGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/UnIoZSx0KS5maWxsKHIsbik6UnIoZSx0KS5maWxsKHIpOlJyKGUsdCl9KG51bGwsZSx0LHIpfSxDci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gRHIobnVsbCxlKX0sQ3IuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBEcihudWxsLGUpfSxDci5pc0J1ZmZlcj1sbixDci5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIU1yKGUpfHwhTXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLG89MCxpPU1hdGgubWluKHIsbik7bzxpOysrbylpZihlW29dIT09dFtvXSl7cj1lW29dLG49dFtvXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LENyLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LENyLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFFcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBDci5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUNyLmFsbG9jVW5zYWZlKHQpLG89MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgaT1lW3JdO2lmKCFNcihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aS5jb3B5KG4sbyksbys9aS5sZW5ndGh9cmV0dXJuIG59LENyLmJ5dGVMZW5ndGg9THIsQ3IucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxDci5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKUhyKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxDci5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KUhyKHRoaXMsdCx0KzMpLEhyKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LENyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpSHIodGhpcyx0LHQrNyksSHIodGhpcyx0KzEsdCs2KSxIcih0aGlzLHQrMix0KzUpLEhyKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LENyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1ZyKHRoaXMsMCxlKTpqci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LENyLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIU1yKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1Dci5jb21wYXJlKHRoaXMsZSl9LENyLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LENyLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sbyl7aWYoIU1yKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49byYmdD49cilyZXR1cm4gMDtpZihuPj1vKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBpPShvPj4+PTApLShuPj4+PTApLGE9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihpLGEpLHU9dGhpcy5zbGljZShuLG8pLGM9ZS5zbGljZSh0LHIpLGY9MDtmPHM7KytmKWlmKHVbZl0hPT1jW2ZdKXtpPXVbZl0sYT1jW2ZdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0sQ3IucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LENyLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcXIodGhpcyxlLHQsciwhMCl9LENyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHFyKHRoaXMsZSx0LHIsITEpfSxDci5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIG89dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5vKSYmKHI9byksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIE5yKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEtyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBGcih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBZcih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIFdyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSnIodGhpcyxlLHQscik7ZGVmYXVsdDppZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxpPSEwfX0sQ3IucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sQ3IucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Q3IucHJvdG90eXBlO2Vsc2V7dmFyIG89dC1lO3I9bmV3IENyKG8sdm9pZCAwKTtmb3IodmFyIGk9MDtpPG87KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxDci5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sbz0xLGk9MDsrK2k8dCYmKG8qPTI1Nik7KW4rPXRoaXNbZStpXSpvO3JldHVybiBufSxDci5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLG89MTt0PjAmJihvKj0yNTYpOyluKz10aGlzW2UrLS10XSpvO3JldHVybiBufSxDci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sQ3IucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxDci5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LENyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxDci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sQ3IucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sbz0xLGk9MDsrK2k8dCYmKG8qPTI1Nik7KW4rPXRoaXNbZStpXSpvO3JldHVybiBuPj0obyo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sQ3IucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFFyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsbz0xLGk9dGhpc1tlKy0tbl07bj4wJiYobyo9MjU2KTspaSs9dGhpc1tlKy0tbl0qbztyZXR1cm4gaT49KG8qPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LENyLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxDci5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxRcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxDci5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxRcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxDci5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LENyLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxRcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sQ3IucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFFyKGUsNCx0aGlzLmxlbmd0aCkseHIodGhpcyxlLCEwLDIzLDQpfSxDci5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw0LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITEsMjMsNCl9LENyLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw4LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITAsNTIsOCl9LENyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UXIoZSw4LHRoaXMubGVuZ3RoKSx4cih0aGlzLGUsITEsNTIsOCl9LENyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxlbih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sQ3IucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGVuKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIG89ci0xLGk9MTtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K3J9LENyLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDEsMjU1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxDci5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDY1NTM1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTp0bih0aGlzLGUsdCwhMCksdCsyfSxDci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDY1NTM1LDApLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTp0bih0aGlzLGUsdCwhMSksdCsyfSxDci5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpybih0aGlzLGUsdCwhMCksdCs0fSxDci5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpybih0aGlzLGUsdCwhMSksdCs0fSxDci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBvPU1hdGgucG93KDIsOCpyLTEpO2VuKHRoaXMsZSx0LHIsby0xLC1vKX12YXIgaT0wLGE9MSxzPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytpPHImJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K2ktMV0mJihzPTEpLHRoaXNbdCtpXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxDci5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBvPU1hdGgucG93KDIsOCpyLTEpO2VuKHRoaXMsZSx0LHIsby0xLC1vKX12YXIgaT1yLTEsYT0xLHM9MDtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKGEqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QraSsxXSYmKHM9MSksdGhpc1t0K2ldPShlL2E+PjApLXMmMjU1O3JldHVybiB0K3J9LENyLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZW4odGhpcyxlLHQsMSwxMjcsLTEyOCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sQ3IucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxlbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnRuKHRoaXMsZSx0LCEwKSx0KzJ9LENyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZW4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLENyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTp0bih0aGlzLGUsdCwhMSksdCsyfSxDci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpybih0aGlzLGUsdCwhMCksdCs0fSxDci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGVuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksQ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpybih0aGlzLGUsdCwhMSksdCs0fSxDci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gb24odGhpcyxlLHQsITAscil9LENyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBvbih0aGlzLGUsdCwhMSxyKX0sQ3IucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhbih0aGlzLGUsdCwhMCxyKX0sQ3IucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhbih0aGlzLGUsdCwhMSxyKX0sQ3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgbyxpPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKG89aS0xO28+PTA7LS1vKWVbbyt0XT10aGlzW28rcl07ZWxzZSBpZihpPDFlM3x8IUNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGk7KytvKWVbbyt0XT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxDci5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgbz1lLmNoYXJDb2RlQXQoMCk7bzwyNTYmJihlPW8pfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhQ3IuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgaTtpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3IoaT10O2k8cjsrK2kpdGhpc1tpXT1lO2Vsc2V7dmFyIGE9TXIoZSk/ZTpjbihuZXcgQ3IoZSxuKS50b1N0cmluZygpKSxzPWEubGVuZ3RoO2ZvcihpPTA7aTxyLXQ7KytpKXRoaXNbaSt0XT1hW2klc119cmV0dXJuIHRoaXN9O3ZhciBzbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiB1bihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gY24oZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsbz1udWxsLGk9W10sYT0wO2E8bjsrK2Epe2lmKChyPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFvKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9NjU1MzYrKG8tNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztpLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4sbyxpLGE7bXJ8fHdyKCk7dmFyIHM9ZS5sZW5ndGg7aWYocyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7aT0iPSI9PT1lW3MtMl0/MjoiPSI9PT1lW3MtMV0/MTowLGE9bmV3IHlyKDMqcy80LWkpLG49aT4wP3MtNDpzO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylvPWdyW2UuY2hhckNvZGVBdCh0KV08PDE4fGdyW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8Z3JbZS5jaGFyQ29kZUF0KHQrMildPDw2fGdyW2UuY2hhckNvZGVBdCh0KzMpXSxhW3UrK109bz4+MTYmMjU1LGFbdSsrXT1vPj44JjI1NSxhW3UrK109MjU1Jm87cmV0dXJuIDI9PT1pPyhvPWdyW2UuY2hhckNvZGVBdCh0KV08PDJ8Z3JbZS5jaGFyQ29kZUF0KHQrMSldPj40LGFbdSsrXT0yNTUmbyk6MT09PWkmJihvPWdyW2UuY2hhckNvZGVBdCh0KV08PDEwfGdyW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxncltlLmNoYXJDb2RlQXQodCsyKV0+PjIsYVt1KytdPW8+PjgmMjU1LGFbdSsrXT0yNTUmbyksYX0oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gaG4oZSx0LHIsbil7Zm9yKHZhciBvPTA7bzxuJiYhKG8rcj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK3JdPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxwbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZwbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgZG49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkNyLElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLENyLmFsbG9jKCtlKX0saXNCdWZmZXI6bG4sa01heExlbmd0aDpBcn0pLHZuPXByKChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxvPTQtcixpPXQrbyxhPUNyLmFsbG9jKGkpO2ZvcihhLndyaXRlKGUpO28tLTspYS53cml0ZSgiPSIsbisrKTtyZXR1cm4gYS50b1N0cmluZygpfX0pKSxnbj1wcigoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksQ3IuaXNCdWZmZXIoZSk/byhlLnRvU3RyaW5nKCJiYXNlNjQiKSk6byhDci5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSx2bi5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBvKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cjtpLmVuY29kZT1yLGkuZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksQ3IuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0saS50b0Jhc2U2ND1uLGkuZnJvbUJhc2U2ND1vLGkudG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIENyLmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1pfSkpLHluPXByKChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Z24uZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksbW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0ocHIoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLG8saSl7Zm9yKHZhciBhLHMsdSxjLGYsaCxsLHAsZCx2LGcseSxtO2k+PTY0Oyl7Zm9yKGE9clswXSxzPXJbMV0sdT1yWzJdLGM9clszXSxmPXJbNF0saD1yWzVdLGw9cls2XSxwPXJbN10sdj0wO3Y8MTY7disrKWc9bys0KnYsZVt2XT0oMjU1Jm5bZ10pPDwyNHwoMjU1Jm5bZysxXSk8PDE2fCgyNTUmbltnKzJdKTw8OHwyNTUmbltnKzNdO2Zvcih2PTE2O3Y8NjQ7disrKXk9KChkPWVbdi0yXSk+Pj4xN3xkPDwxNSleKGQ+Pj4xOXxkPDwxMyleZD4+PjEwLG09KChkPWVbdi0xNV0pPj4+N3xkPDwyNSleKGQ+Pj4xOHxkPDwxNCleZD4+PjMsZVt2XT0oeStlW3YtN118MCkrKG0rZVt2LTE2XXwwKTtmb3Iodj0wO3Y8NjQ7disrKXk9KCgoZj4+PjZ8Zjw8MjYpXihmPj4+MTF8Zjw8MjEpXihmPj4+MjV8Zjw8NykpKyhmJmhefmYmbCl8MCkrKHArKHRbdl0rZVt2XXwwKXwwKXwwLG09KChhPj4+MnxhPDwzMCleKGE+Pj4xM3xhPDwxOSleKGE+Pj4yMnxhPDwxMCkpKyhhJnNeYSZ1XnMmdSl8MCxwPWwsbD1oLGg9ZixmPWMreXwwLGM9dSx1PXMscz1hLGE9eSttfDA7clswXSs9YSxyWzFdKz1zLHJbMl0rPXUsclszXSs9YyxyWzRdKz1mLHJbNV0rPWgscls2XSs9bCxyWzddKz1wLG8rPTY0LGktPTY0fXJldHVybiBvfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsbz10LzUzNjg3MDkxMnwwLGk9dDw8MyxhPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIHM9bisxO3M8YS04O3MrKyl0aGlzLmJ1ZmZlcltzXT0wO3RoaXMuYnVmZmVyW2EtOF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlclthLTddPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbYS02XT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbYS01XT1vPj4+MCYyNTUsdGhpcy5idWZmZXJbYS00XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW2EtM109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlclthLTJdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlclthLTFdPWk+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsYSksdGhpcy5maW5pc2hlZD0hMH1mb3Iocz0wO3M8ODtzKyspZVs0KnMrMF09dGhpcy5zdGF0ZVtzXT4+PjI0JjI1NSxlWzQqcysxXT10aGlzLnN0YXRlW3NdPj4+MTYmMjU1LGVbNCpzKzJdPXRoaXMuc3RhdGVbc10+Pj44JjI1NSxlWzQqcyszXT10aGlzLnN0YXRlW3NdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gaShlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1uZXcgbyhlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCxyLG4pe3ZhciBvPW5bMF07aWYoMD09PW8pdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksbz4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPW8sZS5oYXNoPWksZS5kZWZhdWx0PWksZS5obWFjPWE7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KFsxXSksYz1hKHQsZSksZj1uZXcgbyhjKSxoPW5ldyBVaW50OEFycmF5KGYuZGlnZXN0TGVuZ3RoKSxsPWgubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkobiksZD0wO2Q8bjtkKyspbD09PWgubGVuZ3RoJiYocyhoLGYscixpKSxsPTApLHBbZF09aFtsKytdO3JldHVybiBmLmNsZWFuKCksaC5maWxsKDApLGkuZmlsbCgwKSxwfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGk9bmV3IG8oZSksYT1pLmRpZ2VzdExlbmd0aCxzPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkoYSksYz1uZXcgVWludDhBcnJheShhKSxmPW5ldyBVaW50OEFycmF5KG4pLGg9MDtoKmE8bjtoKyspe3ZhciBsPWgrMTtzWzBdPWw+Pj4yNCYyNTUsc1sxXT1sPj4+MTYmMjU1LHNbMl09bD4+PjgmMjU1LHNbM109bD4+PjAmMjU1LGkucmVzZXQoKSxpLnVwZGF0ZSh0KSxpLnVwZGF0ZShzKSxpLmZpbmlzaChjKTtmb3IodmFyIHA9MDtwPGE7cCsrKXVbcF09Y1twXTtmb3IocD0yO3A8PXI7cCsrKXtpLnJlc2V0KCksaS51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgZD0wO2Q8YTtkKyspdVtkXV49Y1tkXX1mb3IocD0wO3A8YSYmaCphK3A8bjtwKyspZltoKmErcF09dVtwXX1mb3IoaD0wO2g8YTtoKyspdVtoXT1jW2hdPTA7Zm9yKGg9MDtoPDQ7aCsrKXNbaF09MDtyZXR1cm4gaS5jbGVhbigpLGZ9fShuKTt2YXIgbz1uLmRlZmF1bHQ7Zm9yKHZhciBpIGluIG4pb1tpXT1uW2ldO2UuZXhwb3J0cz1vfSgpfSkpKTtmdW5jdGlvbiB3bigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGJuKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIga249d24seG49Ym47ZnVuY3Rpb24gX24oZSl7aWYoa249PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKGtuPT09d258fCFrbikmJnNldFRpbWVvdXQpcmV0dXJuIGtuPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4ga24oZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGtuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBrbi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBkci5zZXRUaW1lb3V0JiYoa249c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIGRyLmNsZWFyVGltZW91dCYmKHhuPWNsZWFyVGltZW91dCk7dmFyIFNuLEVuPVtdLEFuPSExLFRuPS0xO2Z1bmN0aW9uIFJuKCl7QW4mJlNuJiYoQW49ITEsU24ubGVuZ3RoP0VuPVNuLmNvbmNhdChFbik6VG49LTEsRW4ubGVuZ3RoJiZDbigpKX1mdW5jdGlvbiBDbigpe2lmKCFBbil7dmFyIGU9X24oUm4pO0FuPSEwO2Zvcih2YXIgdD1Fbi5sZW5ndGg7dDspe2ZvcihTbj1FbixFbj1bXTsrK1RuPHQ7KVNuJiZTbltUbl0ucnVuKCk7VG49LTEsdD1Fbi5sZW5ndGh9U249bnVsbCxBbj0hMSxmdW5jdGlvbihlKXtpZih4bj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKCh4bj09PWJufHwheG4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIHhuPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e3huKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4geG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiB4bi5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFBuKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9UG4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBPbj1kci5wZXJmb3JtYW5jZXx8e30sRG49KE9uLm5vd3x8T24ubW96Tm93fHxPbi5tc05vd3x8T24ub05vd3x8T24ud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07RW4ucHVzaChuZXcgUG4oZSx0KSksMSE9PUVuLmxlbmd0aHx8QW58fF9uKENuKX0pLEluPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KGRuKSxVbj1wcigoZnVuY3Rpb24oZSx0KXt2YXIgcj1Jbi5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9SW46KG4oSW4sdCksdC5CdWZmZXI9byksbihyLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBvPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP28uZmlsbCh0LG4pOm8uZmlsbCh0KTpvLmZpbGwoMCksb30sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxvLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJbi5TbG93QnVmZmVyKGUpfX0pKSxNbj1wcigoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Vbi5CdWZmZXIsbj1sci5jcnlwdG98fGxyLm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLG8pe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBpPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIGE9MDthPGU7YSs9dCluLmdldFJhbmRvbVZhbHVlcyhpLnNsaWNlKGEsYSt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbz9EbigoZnVuY3Rpb24oKXtvKG51bGwsaSl9KSk6aX06ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKSxMbj1uZXcgVGV4dEVuY29kZXIsam49bmV3IFRleHREZWNvZGVyLEhuPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O3Rocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Iil9KCkscW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PWpuLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpLG5ldyBVaW50OEFycmF5KEhuLmF0b2IodCkuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKX0pKSl9LEJuPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBfKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLG4ubmFtZT1uLmNvbnN0cnVjdG9yLm5hbWUsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKEUobiksbi5jb25zdHJ1Y3Rvciksbn1yZXR1cm4gcn0oTChFcnJvcikpLE5uPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKGUpe3ZhciBuLG89YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtyZXR1cm4gXyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIixuLmNsYWltPW8sbi5yZWFzb249aSxufXJldHVybiByfShCbiksS249ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQiLGV9cmV0dXJuIHJ9KEJuKSxGbj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBfKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQiLGV9cmV0dXJuIHJ9KEJuKSxZbj1mdW5jdGlvbihlKXtUKHIsZSk7dmFyIHQ9YXIocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBfKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCIsZX1yZXR1cm4gcn0oQm4pLFduPWZ1bmN0aW9uKGUpe1QocixlKTt2YXIgdD1hcihyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIF8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXVF9JTlZBTElEIixlfXJldHVybiByfShCbiksSm49ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIixlLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIixlfXJldHVybiByfShCbiksem49ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PWFyKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gXyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldUX0VYUElSRUQiLGV9cmV0dXJuIHJ9KE5uKSxWbj1Ibi5jcnlwdG87ZnVuY3Rpb24gR24oKXtpZighSG4uaXNTZWN1cmVDb250ZXh0JiYhSG4uY3J5cHRvLnN1YnRsZSl0aHJvdyBuZXcgQm4oIldlYiBDcnlwdG9ncmFwaHkgQVBJIGlzIGF2YWlsYWJsZSBvbmx5IGluIFNlY3VyZSBDb250ZXh0cy4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmVfQ29udGV4dHMiKX12YXIgJG49ZnVuY3Rpb24oKXt2YXIgZT14KGkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8sYSxzLHUsYztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1mdW5jdGlvbihlKXt2YXIgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnN1YnN0cigtMykpfSxyPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBGbigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxyPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxyPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LHI9WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zdWJzdHIoLTMpKX0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnN1YnN0cigtMykpfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc3Vic3RyKC0zKSwxMCl8fDEpfSxyPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxyPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBGbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm4oJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpyfX0odCksYT1vLmFsZ29yaXRobSxzPW8ua2V5VXNhZ2VzLHU9Imp3ayIsYz1pcih7fSx0KSxlLmFicnVwdCgicmV0dXJuIiwoZGVsZXRlIGMuYWxnLCJQQktERjIiPT09YS5uYW1lJiYodT0icmF3IixjPXFuKHQuaykpLEduKCksVm4uc3VidGxlLmltcG9ydEtleSh1LGMsYSxudWxsIT09KHI9dC5leHQpJiZ2b2lkIDAhPT1yJiZyLG51bGwhPT0obj10LmtleV9vcHMpJiZ2b2lkIDAhPT1uP246cykpKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZnVuY3Rpb24gWG4oZSl7cmV0dXJuISFlJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fWZ1bmN0aW9uIFpuKGUsdCxyKXtyZXR1cm4gUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFFuKCl7cmV0dXJuIFFuPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihYbih0KSl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7Y2FzZSAyOmlmKHJ8fChyPXQuYWxnKSwic3RyaW5nIj09dHlwZW9mIHImJnIpe2UubmV4dD00O2JyZWFrfXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7Y2FzZSA0OmUudDA9dC5rdHksZS5uZXh0PSJvY3QiPT09ZS50MD83OiJSU0EiPT09ZS50MD8xMDoiRUMiPT09ZS50MHx8Ik9LUCI9PT1lLnQwPzEyOjEzO2JyZWFrO2Nhc2UgNzppZigic3RyaW5nIj09dHlwZW9mIHQuayYmdC5rKXtlLm5leHQ9OTticmVha310aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtjYXNlIDk6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChudWxsIT1ufHwobj0hMCE9PXQuZXh0KSxuPyRuKGlyKGlyKHt9LHQpLHt9LHthbGc6cixleHQ6ITF9KSk6cW4odC5rKSkpO2Nhc2UgMTA6aWYodm9pZCAwPT09dC5vdGgpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgRm4oJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgdW5zdXBwb3J0ZWQnKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwkbihpcihpcih7fSx0KSx7fSx7YWxnOnJ9KSkpO2Nhc2UgMTM6dGhyb3cgbmV3IEZuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBlbz1mdW5jdGlvbigpe3ZhciBlPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuLG8pe3ZhciBhO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKEduKCksIShyIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2UubmV4dD04O2JyZWFrfWlmKHQuc3RhcnRzV2l0aCgiSFMiKSl7ZS5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcigic3ltbWV0cmljIGtleXMgYXJlIG9ubHkgYXBwbGljYWJsZSBmb3IgSE1BQy1iYXNlZCBhbGdvcml0aG1zIik7Y2FzZSAzOnJldHVybiBlLm5leHQ9NSxWbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHIse2hhc2g6IlNIQS0iLmNvbmNhdCh0LnN1YnN0cigtMykpLG5hbWU6IkhNQUMifSwhMSxbInZlcmlmeSJdKTtjYXNlIDU6YT1lLnNlbnQsZS5uZXh0PTk7YnJlYWs7Y2FzZSA4OmE9cjtjYXNlIDk6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChmdW5jdGlvbihlLHQpe2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7dmFyIHI9cGFyc2VJbnQoZS5zdWJzdHIoLTMpLDEwKSxuPXQuYWxnb3JpdGhtLmxlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48cil0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMgc3ltbWV0cmljIGtleXMgdG8gYmUgIikuY29uY2F0KHIsIiBiaXRzIG9yIGxhcmdlciIpKX1pZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7dmFyIG89dC5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIG98fG88MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KHQsYSksVm4uc3VidGxlLnZlcmlmeShmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IkhNQUMifTtjYXNlIkhTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiSE1BQyJ9O2Nhc2UiSFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6MzJ9O2Nhc2UiUFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjQ4fTtjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDo2NH07Y2FzZSJSUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJSUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6cmV0dXJue2hhc2g6IlNIQS0yNTYiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9O2Nhc2UiRVMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifTtjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn07ZGVmYXVsdDp0aHJvdyBuZXcgRm4oImFsZyAiLmNvbmNhdChlLCIgaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWUiKSl9fSh0KSxhLG4sbykpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIsbixvKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHRvPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMCE9PW4uY3JpdCYmdm9pZCAwPT09ci5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFyfHx2b2lkIDA9PT1yLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoci5jcml0KXx8MD09PXIuY3JpdC5sZW5ndGh8fHIuY3JpdC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aH0pKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO3ZhciBvLGk9cnIoci5jcml0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspe3ZhciBhPW8udmFsdWU7aWYoIXQuaGFzKGEpKXRocm93IG5ldyBGbignRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KGEsJyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uJykpO2lmKHZvaWQgMD09PW5bYV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdChhLCciIGlzIG1pc3NpbmcnKSk7aWYodC5nZXQoYSkmJnZvaWQgMD09PXJbYV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdChhLCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0uYmluZCh2b2lkIDAsWW4sbmV3IE1hcChbWyJiNjQiLCEwXV0pKSxybz1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV9KSkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyInLmNvbmNhdChlLCciIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0uYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTtmdW5jdGlvbiBubyhlLHQscil7cmV0dXJuIG9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvbygpe3JldHVybiBvbz14KGkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIG8sYSxzLHUsYyxmLGgsbCxwLGQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoWG4odCkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBZbigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2Nhc2UgMjppZih2b2lkIDAhPT10LnByb3RlY3RlZHx8dm9pZCAwIT09dC5oZWFkZXIpe2UubmV4dD00O2JyZWFrfXRocm93IG5ldyBZbignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7Y2FzZSA0OmlmKHZvaWQgMD09PXQucHJvdGVjdGVkfHwic3RyaW5nIj09dHlwZW9mIHQucHJvdGVjdGVkKXtlLm5leHQ9NjticmVha310aHJvdyBuZXcgWW4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7Y2FzZSA2OmlmKHZvaWQgMCE9PXQucGF5bG9hZCl7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IFluKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7Y2FzZSA4OmlmKCJzdHJpbmciPT10eXBlb2YgdC5zaWduYXR1cmUpe2UubmV4dD0xMDticmVha310aHJvdyBuZXcgWW4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTA6aWYodm9pZCAwPT09dC5oZWFkZXJ8fFhuKHQuaGVhZGVyKSl7ZS5uZXh0PTEyO2JyZWFrfXRocm93IG5ldyBZbigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTI6aWYobz17fSx0LnByb3RlY3RlZCYmKGE9cW4odC5wcm90ZWN0ZWQpLG89SlNPTi5wYXJzZShqbi5kZWNvZGUoYSkpKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuLG89dC5maWx0ZXIoQm9vbGVhbik7aWYoMD09PW8ubGVuZ3RofHwxPT09by5sZW5ndGgpcmV0dXJuITA7dmFyIGksYT1ycihvKTt0cnl7Zm9yKGEucygpOyEoaT1hLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWUsdT1PYmplY3Qua2V5cyhzKTtpZihuJiYwIT09bi5zaXplKXt2YXIgYyxmPXJyKHUpO3RyeXtmb3IoZi5zKCk7IShjPWYubigpKS5kb25lOyl7dmFyIGg9Yy52YWx1ZTtpZihuLmhhcyhoKSlyZXR1cm4hMTtuLmFkZChoKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fWVsc2Ugbj1uZXcgU2V0KHUpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4hMH0obyx0LmhlYWRlcikpe2UubmV4dD0xNjticmVha310aHJvdyBuZXcgWW4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjYXNlIDE2OmlmKHM9aXIoaXIoe30sbyksdC5oZWFkZXIpLHU9ITAsIXRvKG8scykuaGFzKCJiNjQiKXx8ImJvb2xlYW4iPT10eXBlb2YodT1vLmI2NCkpe2UubmV4dD0yMDticmVha310aHJvdyBuZXcgWW4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y2FzZSAyMDppZigic3RyaW5nIj09dHlwZW9mKGM9cy5hbGcpJiZjKXtlLm5leHQ9MjM7YnJlYWt9dGhyb3cgbmV3IFluKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjYXNlIDIzOmlmKCEoZj1uJiZybyhuLmFsZ29yaXRobXMpKXx8Zi5oYXMoYykpe2UubmV4dD0yNjticmVha310aHJvdyBuZXcgS24oJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtjYXNlIDI2OmlmKCF1KXtlLm5leHQ9MzE7YnJlYWt9aWYoInN0cmluZyI9PXR5cGVvZiB0LnBheWxvYWQpe2UubmV4dD0yOTticmVha310aHJvdyBuZXcgWW4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKTtjYXNlIDI5OmUubmV4dD0zMzticmVhaztjYXNlIDMxOmlmKCJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkfHx0LnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtlLm5leHQ9MzM7YnJlYWt9dGhyb3cgbmV3IFluKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtjYXNlIDMzOmlmKGUudDA9ImZ1bmN0aW9uIj09dHlwZW9mIHIsIWUudDApe2UubmV4dD0zODticmVha31yZXR1cm4gZS5uZXh0PTM3LHIobyx0KTtjYXNlIDM3OnI9ZS5zZW50O2Nhc2UgMzg6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8ZS5tYXRjaCgvXkFcZHszfSg/OkdDTSlLVyQvKSl7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJzZWNyZXQiPT09dC50eXBlKXJldHVybjt0aHJvdyBuZXcgVHlwZUVycm9yKCdDcnlwdG9LZXkgb3IgS2V5T2JqZWN0IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgbXVzdCBiZSB1c2VkIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMiKTtpZigic2VjcmV0Ij09PXQudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdDcnlwdG9LZXkgb3IgS2V5T2JqZWN0IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCInKX0oYyxyKSxoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5sZW5ndGh9KSwwKSxvPW5ldyBVaW50OEFycmF5KG4pLGk9MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnNldChlLGkpLGkrPWUubGVuZ3RofSkpLG99KExuLmVuY29kZSh0LnByb3RlY3RlZHx8IiIpLExuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkP0xuLmVuY29kZSh0LnBheWxvYWQpOnQucGF5bG9hZCksbD1xbih0LnNpZ25hdHVyZSksZS5uZXh0PTQyLGVvKGMscixsLGgpO2Nhc2UgNDI6aWYoZS5zZW50KXtlLm5leHQ9NDQ7YnJlYWt9dGhyb3cgbmV3IEpuO2Nhc2UgNDQ6cmV0dXJuIHA9dT9xbih0LnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgdC5wYXlsb2FkP0xuLmVuY29kZSh0LnBheWxvYWQpOnQucGF5bG9hZCxkPXtwYXlsb2FkOnB9LGUuYWJydXB0KCJyZXR1cm4iLCh2b2lkIDAhPT10LnByb3RlY3RlZCYmKGQucHJvdGVjdGVkSGVhZGVyPW8pLHZvaWQgMCE9PXQuaGVhZGVyJiYoZC51bnByb3RlY3RlZEhlYWRlcj10LmhlYWRlciksZCkpO2Nhc2UgNDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksb28uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpbz0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaSxhbz1mdW5jdGlvbihlKXt2YXIgdD1pby5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7dmFyIHI9cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKHIpO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqcik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKnIpO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQoODY0MDAqcik7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpyKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKnIpfX0sc289ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpfSx1bz1mdW5jdGlvbihlLHQpe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9by50eXA7aWYoaSYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHNvKGUudHlwKSE9PXNvKGkpKSl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO3RyeXtyPUpTT04ucGFyc2Uoam4uZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPW4ocil8fCFyfHxBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBXbigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO3ZhciBhPW8uaXNzdWVyO2lmKGEmJiEoInN0cmluZyI9PXR5cGVvZiBhP1thXTphKS5pbmNsdWRlcyhyLmlzcykpdGhyb3cgbmV3IE5uKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7dmFyIHM9by5zdWJqZWN0O2lmKHMmJnIuc3ViIT09cyl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTt2YXIgdSxjLGYsaD1vLmF1ZGllbmNlO2lmKGgmJihjPSJzdHJpbmciPT10eXBlb2YgaD9baF06aCwhKCJzdHJpbmciPT10eXBlb2YodT1yLmF1ZCk/Yy5pbmNsdWRlcyh1KTpjLnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KHUpKSkpKSl0aHJvdyBuZXcgTm4oJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTtzd2l0Y2gobihvLmNsb2NrVG9sZXJhbmNlKSl7Y2FzZSJzdHJpbmciOmY9YW8oby5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmY9by5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Zj0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfXZhciBsLHA9by5jdXJyZW50RGF0ZSxkPShsPXB8fG5ldyBEYXRlLE1hdGguZmxvb3IobC5nZXRUaW1lKCkvMWUzKSk7aWYodm9pZCAwIT09ci5pYXR8fG8ubWF4VG9rZW5BZ2Upe2lmKCJudW1iZXIiIT10eXBlb2Ygci5pYXQpdGhyb3cgbmV3IE5uKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMD09PXIuZXhwJiZyLmlhdD5kK2YpdGhyb3cgbmV3IE5uKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09ci5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2Ygci5uYmYpdGhyb3cgbmV3IE5uKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKHIubmJmPmQrZil0aHJvdyBuZXcgTm4oJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1yLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiByLmV4cCl0aHJvdyBuZXcgTm4oJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoci5leHA8PWQtZil0aHJvdyBuZXcgem4oJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihvLm1heFRva2VuQWdlKXt2YXIgdj1kLXIuaWF0O2lmKHYtZj4oIm51bWJlciI9PXR5cGVvZiBvLm1heFRva2VuQWdlP28ubWF4VG9rZW5BZ2U6YW8oby5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyB6bignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZih2PDAtZil0aHJvdyBuZXcgTm4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gcn07ZnVuY3Rpb24gY28oKXtyZXR1cm4gY289eChpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBvO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixmdW5jdGlvbigpe3ZhciBlPXgoaS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgbyxhLHMsdSxjO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1qbi5kZWNvZGUodCkpLCJzdHJpbmciPT10eXBlb2YgdCl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IFluKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjYXNlIDI6aWYobz10LnNwbGl0KCIuIiksYT1vWzBdLHM9b1sxXSx1PW9bMl0sMz09PW8ubGVuZ3RoKXtlLm5leHQ9NTticmVha310aHJvdyBuZXcgWW4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG5vKHtwYXlsb2FkOnN8fHZvaWQgMCxwcm90ZWN0ZWQ6YXx8dm9pZCAwLHNpZ25hdHVyZTp1fHx2b2lkIDB9LHIsbik7Y2FzZSA3OnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7cGF5bG9hZDpjLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmMucHJvdGVjdGVkSGVhZGVyfSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSh0LHIsbik7Y2FzZSAyOnJldHVybiBvPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7cGF5bG9hZDp1byhvLnByb3RlY3RlZEhlYWRlcixvLnBheWxvYWQsbikscHJvdGVjdGVkSGVhZGVyOm8ucHJvdGVjdGVkSGVhZGVyfSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGNvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiYmFzZTY0VVJMRW5jb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX19LHtrZXk6ImdldENvZGVWZXJpZmllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoTW4oMzIpKX19LHtrZXk6ImdldENvZGVDaGFsbGVuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgWChtbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9fSx7a2V5OiJnZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiUlMyNTYiLCJSUzUxMiIsIlJTMzg0IiwiUFMyNTYiXX19LHtrZXk6ImdldEpXS0ZvclRoZUlkVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1KU09OLnBhcnNlKHluLmRlY29kZShlLCJ1dGY4IikpLG89cnIodCk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKG4ua2lkPT09aS5raWQpcmV0dXJuIFpuKHthbGc6aS5hbGcsZTppLmUsa3R5Omkua3R5LG46aS5ufSl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2lkfSkpLmpvaW4oIiwgIikpKX19LHtrZXk6ImlzVmFsaWRJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLG8saSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY28uYXBwbHkodGhpcyxhcmd1bWVudHMpfShlLHQse2FsZ29yaXRobXM6dGhpcy5nZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCksYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTppLGlzc3VlcjpuLHN1YmplY3Q6b30pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkNSWVBUT19VVElMLUlWSVQtSVYwMiIsImNyeXB0by11dGlscyIsImlzVmFsaWRJZFRva2VuIiwiVmFsaWRhdGluZyBJRCB0b2tlbiBmYWlsZWQiLGUpKX0pKX19LHtrZXk6ImRlY29kZUlEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD15bi5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGZyKCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fV0pLGV9KCksaG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sbz1mby5kZWNvZGVJRFRva2VuKGUpLGk9dGhpcy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT10aGlzLmV4dHJhY3RVc2VyTmFtZShvKSxzPW51bGwhPT0odD1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsdT1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixjPXMmJnU/IiIuY29uY2F0KHMsIiAiKS5jb25jYXQodSk6c3x8dXx8IiIsZj1udWxsIT09KG49by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1uP246YztyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6Zix0ZW5hbnREb21haW46aSx1c2VybmFtZTphfSx0aGlzLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9fSx7a2V5OiJmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LnN1YixudWxsPT10fHxkZWxldGUgdC5hdWQsbnVsbD09dHx8ZGVsZXRlIHQuZXhwLG51bGw9PXR8fGRlbGV0ZSB0LmlhdCxudWxsPT10fHxkZWxldGUgdC5hY3IsbnVsbD09dHx8ZGVsZXRlIHQuYW1yLG51bGw9PXR8fGRlbGV0ZSB0LmF6cCxudWxsPT10fHxkZWxldGUgdC5hdXRoX3RpbWUsbnVsbD09dHx8ZGVsZXRlIHQubm9uY2UsbnVsbD09dHx8ZGVsZXRlIHQuY19oYXNoLG51bGw9PXR8fGRlbGV0ZSB0LmF0X2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQubmJmLG51bGw9PXR8fGRlbGV0ZSB0LmlzayxudWxsPT10fHxkZWxldGUgdC5zaWQ7dmFyIHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXkoZSwyKSxuPXRbMF0sbz10WzFdLGk9bi5zcGxpdCgiXyIpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpXS5jb25jYXQobChlLnNsaWNlKDEpKSkuam9pbigiIil9KSkuam9pbigiIik7cltpXT1vfSkpLHJ9fSx7a2V5OiJnZXRUb2tlblJlcXVlc3RIZWFkZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19XSksZX0oKTtoby5leHRyYWN0VXNlck5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIixyPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yJiZyLnBvcCgpLHIuam9pbih0KX0saG8uZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQCIscj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTt2YXIgbG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Xyh0aGlzLGUpLHRoaXMuX2RhdGFMYXllcj10LHRoaXMuX2NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBzcihyLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT1mdW5jdGlvbigpe3JldHVybiBzcihyLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19cmV0dXJuIHcoZSxbe2tleToicmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2NvbmZpZygpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsdC53ZWxsS25vd25FbmRwb2ludD90LnNlcnZlck9yaWdpbit0LndlbGxLbm93bkVuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIik7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9e30sdC5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybiBuPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIiwobi5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyYmbi5lbmRwb2ludHMmJk9iamVjdC5rZXlzKG4uZW5kcG9pbnRzKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoL1tBLVpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKX0pKTtyW3RdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpKSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9e30sZS5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybihyPWUuc2VudCkuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6ci5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDpyLnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTpyLnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTpyLnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnIuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6ci5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifSxlLmFicnVwdCgicmV0dXJuIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksbikpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToidmFsaWRhdGVJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sbz10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50Lmp3a3NfdXJpLHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTpyZXR1cm4gbj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmMCE9PXIudHJpbSgpLmxlbmd0aD90ci5nZXQocix7d2l0aENyZWRlbnRpYWxzOm51bGw9PW4/dm9pZCAwOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHNyKG8sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGE9dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDppZigyMDA9PT10LnN0YXR1cyl7ci5uZXh0PTI7YnJlYWt9cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULU5SMDIiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpKTtjYXNlIDI6cmV0dXJuIHIubmV4dD00LHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSA0OnJldHVybiBuPXIuc2VudC5pc3N1ZXIsci5uZXh0PTcsdGhpcy5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtjYXNlIDc6cmV0dXJuIG89ci5zZW50LnNwbGl0KCIvLndlbGwta25vd24iKVswXSxyLmFicnVwdCgicmV0dXJuIixuJiZuPT09bz9mby5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSx0LmRhdGEua2V5cykudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHNyKGEsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci50MD1mbyxyLnQxPWUsci50Mj10LHIubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTpyZXR1cm4gci50Mz1yLnNlbnQuY2xpZW50SUQsci50ND1uLHIudDU9Zm8uZGVjb2RlSURUb2tlbihlKS5zdWIsci5uZXh0PTEwLHRoaXMuX2NvbmZpZygpO2Nhc2UgMTA6cmV0dXJuIHIudDY9ci5zZW50LmNsb2NrVG9sZXJhbmNlLHIuYWJydXB0KCJyZXR1cm4iLHIudDAuaXNWYWxpZElkVG9rZW4uY2FsbChyLnQwLHIudDEsci50MixyLnQzLHIudDQsci50NSxyLnQ2KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpfSkpKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLVZJVC1FUzA0IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKX0pKTpQcm9taXNlLnJlc29sdmUoITEpKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGE7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIG49Im9wZW5pZCIsci5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOnJldHVybiBvPXIuc2VudCxyLm5leHQ9Nix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDY6cmV0dXJuIGE9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLChvLnNjb3BlJiZvLnNjb3BlLmxlbmd0aD4wJiYoby5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG8uc2NvcGUucHVzaCgib3BlbmlkIiksbj1vLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLGEuYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLGhvLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhhLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19IixuKS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLG8uY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0odD1vLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXQ/dDoiIikpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyVXNlclNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YSgpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiaGFuZGxlVG9rZW5SZXNwb25zZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuPXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoMjAwPT09ZS5zdGF0dXMpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLUhUUi1OUjAxIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSB0b2tlbiByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKSk7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9jb25maWcoKTtjYXNlIDQ6aWYoIXQuc2VudC52YWxpZGF0ZUlEVG9rZW4pe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLnZhbGlkYXRlSWRUb2tlbihlLmRhdGEuaWRfdG9rZW4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBzcihuLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiByKCl7dmFyIG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYoIXQpe3IubmV4dD01O2JyZWFrfXJldHVybiByLm5leHQ9Myx0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjYXNlIDM6cmV0dXJuIG49e2FjY2Vzc1Rva2VuOmUuZGF0YS5hY2Nlc3NfdG9rZW4sZXhwaXJlc0luOmUuZGF0YS5leHBpcmVzX2luLGlkVG9rZW46ZS5kYXRhLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjplLmRhdGEucmVmcmVzaF90b2tlbixzY29wZTplLmRhdGEuc2NvcGUsdG9rZW5UeXBlOmUuZGF0YS50b2tlbl90eXBlfSxyLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUobikpO2Nhc2UgNTpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSl9KSkpO2Nhc2UgNjpyZXR1cm4gcj17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9LHQubmV4dD05LHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHIpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCkscG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Xyh0aGlzLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBsbyh0KSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gc3Iocix2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc3Iocix2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fXJldHVybiB3KGUsW3trZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixvLGEscyx1LGMsZixoLGwscCxkO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTppZihuPXQuc2VudCxyJiYwIT09ci50cmltKCkubGVuZ3RoKXt0Lm5leHQ9ODticmVha310aHJvdyBuZXcgZnIoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6aWYoKG89bmV3IFVSTChyKSkuc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxvLnNlYXJjaFBhcmFtcy5hcHBlbmQoImNsaWVudF9pZCIsbi5jbGllbnRJRCksYT0ib3BlbmlkIixuLnNjb3BlJiZuLnNjb3BlLmxlbmd0aD4wJiYobi5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG4uc2NvcGUucHVzaCgib3BlbmlkIiksYT1uLnNjb3BlLmpvaW4oIiAiKSksby5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsYSksby5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLG4uc2lnbkluUmVkaXJlY3RVUkwpLG4ucmVzcG9uc2VNb2RlJiZvLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLG4ucmVzcG9uc2VNb2RlKSwhbi5lbmFibGVQS0NFKXt0Lm5leHQ9MTc7YnJlYWt9cmV0dXJuIHM9Zm8uZ2V0Q29kZVZlcmlmaWVyKCksdT1mby5nZXRDb2RlQ2hhbGxlbmdlKHMpLHQubmV4dD0xNSx0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIixzKTtjYXNlIDE1Om8uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG8uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHUpO2Nhc2UgMTc6aWYobi5wcm9tcHQmJm8uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixuLnByb21wdCksYz1lKWZvcihmPTAsaD1PYmplY3QuZW50cmllcyhjKTtmPGgubGVuZ3RoO2YrKylsPXkoaFtmXSwyKSxwPWxbMF0sZD1sWzFdLCIiIT1wJiYiIiE9ZCYmby5zZWFyY2hQYXJhbXMuYXBwZW5kKHAsZC50b1N0cmluZygpKTtyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsby50b1N0cmluZygpKTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixvLGEscyx1PXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBuPXIuc2VudC50b2tlbl9lbmRwb2ludCxyLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYobz1yLnNlbnQsbiYmMCE9PW4udHJpbSgpLmxlbmd0aCl7ci5uZXh0PTg7YnJlYWt9cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDEtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDg6aWYoci50MD10LCFyLnQwKXtyLm5leHQ9MTI7YnJlYWt9cmV0dXJuIHIubmV4dD0xMix0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpO2Nhc2UgMTI6aWYoKGE9W10pLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChvLmNsaWVudElEKSksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmYS5wdXNoKCJjbGllbnRfc2VjcmV0PSIuY29uY2F0KG8uY2xpZW50U2VjcmV0KSkscz1lLGEucHVzaCgiY29kZT0iLmNvbmNhdChzKSksYS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLGEucHVzaCgicmVkaXJlY3RfdXJpPSIuY29uY2F0KG8uc2lnbkluUmVkaXJlY3RVUkwpKSxyLnQxPW8uZW5hYmxlUEtDRSwhci50MSl7ci5uZXh0PTI5O2JyZWFrfXJldHVybiByLnQyPWEsci50Mz0iY29kZV92ZXJpZmllcj0iLHIubmV4dD0yNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIik7Y2FzZSAyNDpyZXR1cm4gci50ND1yLnNlbnQsci50NT1yLnQzLmNvbmNhdC5jYWxsKHIudDMsci50NCksci50Mi5wdXNoLmNhbGwoci50MixyLnQ1KSxyLm5leHQ9MjksdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpO2Nhc2UgMjk6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHRyLnBvc3QobixhLmpvaW4oIiYiKSx7aGVhZGVyczpoby5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHUuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQxLUVTMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIix2b2lkIDAsdm9pZCAwLGUpKX0pKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKSk7Y2FzZSAzMDpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLG8sYT10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQudG9rZW5fZW5kcG9pbnQsZS5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OnJldHVybiByPWUuc2VudCxlLm5leHQ9OCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDg6aWYoKG49ZS5zZW50KS5yZWZyZXNoX3Rva2VuKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSkpO2Nhc2UgMTE6aWYodCYmMCE9PXQudHJpbSgpLmxlbmd0aCl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQyLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVmcmVzaEFjY2Vzc1Rva2VuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDEzOnJldHVybiBvPVtdLGUuYWJydXB0KCJyZXR1cm4iLChvLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChyLmNsaWVudElEKSksby5wdXNoKCJyZWZyZXNoX3Rva2VuPSIuY29uY2F0KG4ucmVmcmVzaF90b2tlbikpLG8ucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksci5jbGllbnRTZWNyZXQmJnIuY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmby5wdXNoKCJjbGllbnRfc2VjcmV0PSIuY29uY2F0KHIuY2xpZW50U2VjcmV0KSksdHIucG9zdCh0LG8uam9pbigiJiIpLHtoZWFkZXJzOmhvLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYS5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBocigiQVVUSF9DT1JFLVJBVDItTlIwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpKSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToicmV2b2tlQWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sbz10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQucmV2b2NhdGlvbl9lbmRwb2ludCxlLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYocj1lLnNlbnQsdCYmMCE9PXQudHJpbSgpLmxlbmd0aCl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKSk7Y2FzZSA4OnJldHVybihuPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoci5jbGllbnRJRCkpLGUudDA9bixlLnQxPSJ0b2tlbj0iLGUubmV4dD0xNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDE0OnJldHVybiBlLnQyPWUuc2VudC5hY2Nlc3NfdG9rZW4sZS50Mz1lLnQxLmNvbmNhdC5jYWxsKGUudDEsZS50MiksZS50MC5wdXNoLmNhbGwoZS50MCxlLnQzKSxuLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKSxlLmFicnVwdCgicmV0dXJuIix0ci5wb3N0KHQsbi5qb2luKCImIikse2hlYWRlcnM6aG8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c30pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQVQzLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KG8uX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksUHJvbWlzZS5yZXNvbHZlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgaHIoIkFVVEhfQ09SRS1SQVQzLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sbyxhLHM9dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTppZihuPXQuc2VudCwobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCkmJjAhPT1vLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgZnIoIkFVVEhfQ09SRS1SQ0ctTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpKTtjYXNlIDg6cmV0dXJuIHQubmV4dD0xMCxQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9eShlLDIpLHI9dFswXSxuPXRbMV07cmV0dXJuIHNyKHMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKG4pO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsIiIuY29uY2F0KHIsIj0iKS5jb25jYXQodCkpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSkpKTtjYXNlIDEwOmlmKHQudDA9dC5zZW50LmpvaW4oIiYiKSx0LnQxPU9iamVjdC5hc3NpZ24oe30saG8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSx0LnQyPW8sdC50Mz1uLnNlbmRDb29raWVzSW5SZXF1ZXN0cyxhPXtkYXRhOnQudDAsaGVhZGVyczp0LnQxLG1ldGhvZDoiUE9TVCIsdXJsOnQudDIsd2l0aENyZWRlbnRpYWxzOnQudDN9LHQudDQ9ZS5hdHRhY2hUb2tlbiwhdC50NCl7dC5uZXh0PTI2O2JyZWFrfXJldHVybiB0LnQ1PU9iamVjdCx0LnQ2PU9iamVjdC5hc3NpZ24oe30sYS5oZWFkZXJzKSx0LnQ3PSJCZWFyZXIgIix0Lm5leHQ9MjIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyMjp0LnQ4PXQuc2VudC5hY2Nlc3NfdG9rZW4sdC50OT10LnQ3LmNvbmNhdC5jYWxsKHQudDcsdC50OCksdC50MTA9e0F1dGhvcml6YXRpb246dC50OX0sYS5oZWFkZXJzPXQudDUuYXNzaWduLmNhbGwodC50NSx0LnQ2LHQudDEwKTtjYXNlIDI2OnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0cihhKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gMjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/cy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBmcigiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSl9KSk6UHJvbWlzZS5yZXNvbHZlKHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBocigiQVVUSF9DT1JFLVJDRy1OUjA0IiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdCBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSkpO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldEJhc2ljVXNlckluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG47cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2Nhc2UgMjpyZXR1cm4gdD1lLnNlbnQscj1oby5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09dD92b2lkIDA6dC5pZF90b2tlbiksbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6ci51c2VybmFtZX0sZS5hYnJ1cHQoInJldHVybiIsKHIuZGlzcGxheU5hbWUmJiIiIT09ci5kaXNwbGF5TmFtZXx8ZGVsZXRlIHIuZGlzcGxheU5hbWUsci50ZW5hbnREb21haW4mJiIiIT09ci50ZW5hbnREb21haW58fGRlbGV0ZSByLnRlbmFudERvbWFpbixuPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSxyKSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOnJldHVybiB0PWUuc2VudC5pZF90b2tlbixlLmFicnVwdCgicmV0dXJuIixmby5kZWNvZGVJRFRva2VuKHQpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQuaWRfdG9rZW4pO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbj10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHQudDA9IWUsIXQudDApe3QubmV4dD01O2JyZWFrfXJldHVybiB0Lm5leHQ9NCx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpO2Nhc2UgNDp0LnQwPXQuc2VudDtjYXNlIDU6aWYoIXQudDApe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoITApKTtjYXNlIDc6cmV0dXJuIHQubmV4dD05LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpO2Nhc2UgOTpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsdHIuZ2V0KHIpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBzcihuLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoMjAwPT09ZS5zdGF0dXMpe3QubmV4dD00O2JyZWFrfXQudDA9UHJvbWlzZS5yZWplY3QobmV3IGZyKCJBVVRIX0NPUkUtR09QTS1OUjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldE9JRENQcm92aWRlck1ldGFEYXRhIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byB0aGUgd2VsbC1rbm93biBlbmRwb2ludCB0byBnZXQgdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpLHQubmV4dD0xMzticmVhaztjYXNlIDQ6cmV0dXJuIHQudDE9dGhpcy5fZGF0YUxheWVyLHQubmV4dD03LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKTtjYXNlIDc6cmV0dXJuIHQudDI9dC5zZW50LHQubmV4dD0xMCx0LnQxLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50MSx0LnQyKTtjYXNlIDEwOnJldHVybiB0Lm5leHQ9MTIsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDEyOnQudDA9UHJvbWlzZS5yZXNvbHZlKCEwKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnQwKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7cmV0dXJuIHNyKG4sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS50MD10aGlzLl9kYXRhTGF5ZXIsZS5uZXh0PTMsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUZhbGxiYWNrRW5kcG9pbnRzKCk7Y2FzZSAzOnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9NixlLnQwLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwoZS50MCxlLnQxKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSA4OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoITApKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHQ9ZS5zZW50LGUudDA9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50LGUudDE9dC5jaGVja19zZXNzaW9uX2lmcmFtZSxlLnQyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQsZS50Mz10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQsZS50ND10Lmlzc3VlcixlLnQ1PXQuandrc191cmksZS50Nj10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCxlLnQ3PXQucmV2b2NhdGlvbl9lbmRwb2ludCxlLnQ4PXQudG9rZW5fZW5kcG9pbnQsZS50OT10LnVzZXJpbmZvX2VuZHBvaW50LGUubmV4dD0xNSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtjYXNlIDE1OnJldHVybiBlLnQxMD1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIse2F1dGhvcml6YXRpb25FbmRwb2ludDplLnQwLGNoZWNrU2Vzc2lvbklmcmFtZTplLnQxLGVuZFNlc3Npb25FbmRwb2ludDplLnQyLGludHJvc3BlY3Rpb25FbmRwb2ludDplLnQzLGlzc3VlcjplLnQ0LGp3a3NVcmk6ZS50NSxyZWdpc3RyYXRpb25FbmRwb2ludDplLnQ2LHJldm9jYXRpb25FbmRwb2ludDplLnQ3LHRva2VuRW5kcG9pbnQ6ZS50OCx1c2VyaW5mb0VuZHBvaW50OmUudDksd2VsbEtub3duRW5kcG9pbnQ6ZS50MTB9KTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTaWduT3V0VVJMIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscjtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBvLGEscyx1O3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjppZihuLnQxPWU9bi5zZW50LG4udDA9bnVsbD09PW4udDEsbi50MCl7bi5uZXh0PTY7YnJlYWt9bi50MD12b2lkIDA9PT1lO2Nhc2UgNjppZighbi50MCl7bi5uZXh0PTEwO2JyZWFrfW4udDI9dm9pZCAwLG4ubmV4dD0xMTticmVhaztjYXNlIDEwOm4udDI9ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludDtjYXNlIDExOnJldHVybiBvPW4udDIsbi5uZXh0PTE0LHRoaXMuX2NvbmZpZygpO2Nhc2UgMTQ6aWYoYT1uLnNlbnQsbyYmMCE9PW8udHJpbSgpLmxlbmd0aCl7bi5uZXh0PTE3O2JyZWFrfXRocm93IG5ldyBmcigiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgMTc6cmV0dXJuIG4ubmV4dD0xOSx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDE5OmlmKG4udDQ9dD1uLnNlbnQsbi50Mz1udWxsPT09bi50NCxuLnQzKXtuLm5leHQ9MjM7YnJlYWt9bi50Mz12b2lkIDA9PT10O2Nhc2UgMjM6aWYoIW4udDMpe24ubmV4dD0yNzticmVha31uLnQ1PXZvaWQgMCxuLm5leHQ9Mjg7YnJlYWs7Y2FzZSAyNzpuLnQ1PXQuaWRfdG9rZW47Y2FzZSAyODppZigocz1uLnQ1KSYmMCE9PXMudHJpbSgpLmxlbmd0aCl7bi5uZXh0PTMxO2JyZWFrfXRocm93IG5ldyBmcigiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2Nhc2UgMzE6aWYoKHU9bnVsbCE9PShyPW51bGw9PWE/dm9pZCAwOmEuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWE/dm9pZCAwOmEuc2lnbkluUmVkaXJlY3RVUkwpJiYwIT09dS50cmltKCkubGVuZ3RoKXtuLm5leHQ9MzQ7YnJlYWt9dGhyb3cgbmV3IGZyKCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtjYXNlIDM0OnJldHVybiBuLmFicnVwdCgicmV0dXJuIiwiIi5jb25jYXQobywiP2lkX3Rva2VuX2hpbnQ9IikuY29uY2F0KHMsIiZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9IikuY29uY2F0KHUsIiZzdGF0ZT1zaWduX291dF9zdWNjZXNzIikpO2Nhc2UgMzU6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNpZ25PdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5nZXRTaWduT3V0VVJMKCk7Y2FzZSAyOnJldHVybiB0PWUuc2VudCxlLmFicnVwdCgicmV0dXJuIiwodGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoKSx0KSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDI6aWYodC50MT1lPXQuc2VudCx0LnQwPW51bGw9PT10LnQxLHQudDApe3QubmV4dD02O2JyZWFrfXQudDA9dm9pZCAwPT09ZTtjYXNlIDY6aWYoIXQudDApe3QubmV4dD0xMDticmVha310LnQyPXZvaWQgMCx0Lm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDp0LnQyPWUuYWNjZXNzX3Rva2VuO2Nhc2UgMTE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDIpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImlzQXV0aGVudGljYXRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnQwPUJvb2xlYW4sZS5uZXh0PTMsdGhpcy5nZXRBY2Nlc3NUb2tlbigpO2Nhc2UgMzpyZXR1cm4gZS50MT1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsKDAsZS50MCkoZS50MSkpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0UEtDRUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIixlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJ1cGRhdGVDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpO2Nhc2UgMjppZighZS5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyl7dC5uZXh0PTEzO2JyZWFrfWlmKHQudDA9bnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMsIXQudDApe3QubmV4dD0xMTticmVha31yZXR1cm4gdC50MT10aGlzLl9kYXRhTGF5ZXIsdC5uZXh0PTgsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSk7Y2FzZSA4OnJldHVybiB0LnQyPXQuc2VudCx0Lm5leHQ9MTEsdC50MS5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDEsdC50Mik7Y2FzZSAxMTp0Lm5leHQ9MTc7YnJlYWs7Y2FzZSAxMzppZih0LnQzPW51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzLCF0LnQzKXt0Lm5leHQ9MTc7YnJlYWt9cmV0dXJuIHQubmV4dD0xNyx0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKTtjYXNlIDE3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCksdm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Xyh0aGlzLGUpLHRoaXMuX2lkPXQsdGhpcy5fc3RvcmU9cn1yZXR1cm4gdyhlLFt7a2V5OiJzZXREYXRhSW5CdWxrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIG8sYSxzLHU7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEoZSk7Y2FzZSAyOmlmKG4udDE9cj1uLnNlbnQsbi50MD1udWxsIT09bi50MSwhbi50MCl7bi5uZXh0PTY7YnJlYWt9bi50MD12b2lkIDAhPT1yO2Nhc2UgNjppZighbi50MCl7bi5uZXh0PTEwO2JyZWFrfW4udDI9cixuLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpuLnQyPW51bGw7Y2FzZSAxMTpyZXR1cm4gbz1uLnQyLGE9byYmSlNPTi5wYXJzZShvKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx0KSx1PUpTT04uc3RyaW5naWZ5KHMpLG4ubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsdSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gbygpe3ZhciBhLHMsdSxjO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKG8pe2Zvcig7Oylzd2l0Y2goby5wcmV2PW8ubmV4dCl7Y2FzZSAwOnJldHVybiBvLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKGUpO2Nhc2UgMjppZihvLnQxPW49by5zZW50LG8udDA9bnVsbCE9PW8udDEsIW8udDApe28ubmV4dD02O2JyZWFrfW8udDA9dm9pZCAwIT09bjtjYXNlIDY6aWYoIW8udDApe28ubmV4dD0xMDticmVha31vLnQyPW4sby5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6by50Mj1udWxsO2Nhc2UgMTE6cmV0dXJuIGE9by50MixzPWEmJkpTT04ucGFyc2UoYSksdT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scyksYih7fSx0LHIpKSxjPUpTT04uc3RyaW5naWZ5KHUpLG8ubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsYyk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0pLG8sdGhpcyl9KSkpfX0se2tleToicmVtb3ZlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgbyxhLHMsdTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YShlKTtjYXNlIDI6aWYobi50MT1yPW4uc2VudCxuLnQwPW51bGwhPT1uLnQxLCFuLnQwKXtuLm5leHQ9NjticmVha31uLnQwPXZvaWQgMCE9PXI7Y2FzZSA2OmlmKCFuLnQwKXtuLm5leHQ9MTA7YnJlYWt9bi50Mj1yLG4ubmV4dD0xMTticmVhaztjYXNlIDEwOm4udDI9bnVsbDtjYXNlIDExOnJldHVybiBvPW4udDIsYT1vJiZKU09OLnBhcnNlKG8pLGRlbGV0ZShzPU9iamVjdC5hc3NpZ24oe30sYSkpW3RdLHU9SlNPTi5zdHJpbmdpZnkocyksbi5uZXh0PTE4LHRoaXMuX3N0b3JlLnNldERhdGEoZSx1KTtjYXNlIDE4OmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJfcmVzb2x2ZUtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiIuY29uY2F0KGUsIi0iKS5jb25jYXQodGhpcy5faWQpfX0se2tleToic2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkodXIuQ29uZmlnRGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDp0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHVyLlRlbXBvcmFyeURhdGEpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkodXIuU2Vzc2lvbkRhdGEpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUpTT04sdC5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9SlNPTix0Lm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldFRlbXBvcmFyeURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC50MD1KU09OLHQubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5UZW1wb3JhcnlEYXRhKSk7Y2FzZSAzOmlmKHQudDI9ZT10LnNlbnQsdC50MT1udWxsIT09dC50MiwhdC50MSl7dC5uZXh0PTc7YnJlYWt9dC50MT12b2lkIDAhPT1lO2Nhc2UgNzppZighdC50MSl7dC5uZXh0PTExO2JyZWFrfXQudDM9ZSx0Lm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTp0LnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gdC50ND10LnQzLHQuYWJydXB0KCJyZXR1cm4iLHQudDAucGFyc2UuY2FsbCh0LnQwLHQudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUpTT04sdC5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSk7Y2FzZSAzOmlmKHQudDI9ZT10LnNlbnQsdC50MT1udWxsIT09dC50MiwhdC50MSl7dC5uZXh0PTc7YnJlYWt9dC50MT12b2lkIDAhPT1lO2Nhc2UgNzppZighdC50MSl7dC5uZXh0PTExO2JyZWFrfXQudDM9ZSx0Lm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTp0LnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gdC50ND10LnQzLHQuYWJydXB0KCJyZXR1cm4iLHQudDAucGFyc2UuY2FsbCh0LnQwLHQudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5Db25maWdEYXRhKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVRlbXBvcmFyeURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlRlbXBvcmFyeURhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5TZXNzaW9uRGF0YSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0Q29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLHImJkpTT04ucGFyc2UocilbZV0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHI7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmSlNPTi5wYXJzZShyKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkodXIuVGVtcG9yYXJ5RGF0YSkpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmSlNPTi5wYXJzZShyKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSk7Y2FzZSAyOnJldHVybiByPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIixyJiZKU09OLnBhcnNlKHIpW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InNldENvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpLGUsdCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJzZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkodXIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleSh1ci5UZW1wb3JhcnlEYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleSh1ci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkodXIuVGVtcG9yYXJ5RGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHVyLlNlc3Npb25EYXRhKSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSksZX0oKSxnbz17Y2xpZW50SG9zdDpvcmlnaW4sY2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOlF0LnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH0seW89ZnVuY3Rpb24oKXsKLyoqCgkgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCgkgICAgICAgKgoJICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgoJICAgICAgICoKCSAgICAgICAqIEBleGFtcGxlCgkgICAgICAgKiBgYGAKCSAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CgkgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CgkgICAgICAgKiBgYGAKCSAgICAgICAqCgkgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKCSAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICovCmZ1bmN0aW9uIGUodCl7Xyh0aGlzLGUpLGUuX2luc3RhbmNlSUQ/ZS5faW5zdGFuY2VJRCs9MTplLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyB2bygiaW5zdGFuY2VfIi5jb25jYXQoZS5faW5zdGFuY2VJRCksdCksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBwbyh0aGlzLl9kYXRhTGF5ZXIpfQovKioKCSAgICAgICAqCgkgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgoJICAgICAgICoKCSAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgoJICAgICAgICoKCSAgICAgICAqIEBleGFtcGxlCgkgICAgICAgKiBjb25zdCBjb25maWcgPSB7CgkgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCgkgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAoJICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCgkgICAgICAgKiB9CgkgICAgICAgKgoJICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CgkgICAgICAgKgoJICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKCSAgICAgICAqCgkgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAqL3JldHVybiB3KGUsW3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxnbyksZSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKCSAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBkYXRhID0gYXV0aC5nZXREYXRhTGF5ZXIoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREYXRhTGF5ZXIKCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXREYXRhTGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCgkgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwoJICAgICAgICAgKiBjdXN0b20gcGF0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGZpZHAgcGFyYW1ldGVyLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLmdldEF1dGhvcml6YXRpb25VUkwoKS50aGVuKCh1cmwpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwoJICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKCSAgICAgICAgICogfSk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbj10aGlzO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBudWxsPT0ocj1PYmplY3QuYXNzaWduKHt9LGUpKXx8ZGVsZXRlIHIuZm9yY2VJbml0LHQubmV4dD00LHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSA0OmlmKCF0LnNlbnQpe3QubmV4dD04O2JyZWFrfXQudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwociksdC5uZXh0PTk7YnJlYWs7Y2FzZSA4OnQudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBuLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTChyKX0pKTtjYXNlIDk6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQoJICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgoJICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKCSAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CgkgICAgICAgICAqIH0pOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuPXRoaXM7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSAyOmlmKCFyLnNlbnQpe3IubmV4dD02O2JyZWFrfXIudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpLHIubmV4dD03O2JyZWFrO2Nhc2UgNjpyLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpfSkpO2Nhc2UgNzpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci50MCk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLnNpZ25PdXQoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzaWduT3V0CgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldE9JRENTZXJ2aWNlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXREZWNvZGVkSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJnZXRJRFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfQovKioKCSAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToiZ2V0QmFzaWNVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CgkgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwoJICAgICAgICAgKiB9KTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJldm9rZUFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKCSAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBhdXRoLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwoJICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CgkgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKCSAgICAgICAgICogfSk7CgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKCSAgICAgICAgICoKCSAgICAgICAgICogQHByZXNlcnZlCgkgICAgICAgICAqL30se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGF1dGguZ2V0QWNjZXNzVG9rZW4oKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBY2Nlc3NUb2tlbgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKCSAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBBeGlvc1Jlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKCSAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKCSAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCgkgICAgICAgICAqICAgZGF0YTogewoJICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAoJICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAoJICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCgkgICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKCSAgICAgICAgICogICB9LAoJICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAoJICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAoJICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAoJICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCgkgICAgICAgICAqIH0KCSAgICAgICAgICoKCSAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKCSAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKCSAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewoJICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CgkgICAgICAgICAqIH0pOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICoKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RDdXN0b21HcmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgoJICAgICAgICAgKgoJICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKCSAgICAgICAgICoKCSAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAoJICAgICAgICAgKgoJICAgICAgICAgKiBAcHJlc2VydmUKCSAgICAgICAgICovfSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZCgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBQS0NFIGNvZGUuCgkgICAgICAgICAqCgkgICAgICAgICAqIEBleGFtcGxlCgkgICAgICAgICAqIGBgYAoJICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6ImdldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRQS0NFQ29kZSgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0KLyoqCgkgICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAZXhhbXBsZQoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqCgkgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gc3IodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KCSAgICAgICAgICoKCSAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCgkgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCgkgICAgICAgICAqCgkgICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgoJICAgICAgICAgKgoJICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi99LHtrZXk6InVwZGF0ZUNvbmZpZyIsdmFsdWU6Ci8qKgoJICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KCSAgICAgICAgICoKCSAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KCSAgICAgICAgICoKCSAgICAgICAgICogQGV4YW1wbGUKCSAgICAgICAgICogYGBgCgkgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKCSAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAoJICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAoJICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKCSAgICAgICAgICogfQoJICAgICAgICAgKgoJICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwoJICAgICAgICAgKiBgYGAKCSAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwoJICAgICAgICAgKgoJICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CgkgICAgICAgICAqCgkgICAgICAgICAqIEBwcmVzZXJ2ZQoJICAgICAgICAgKi8KZnVuY3Rpb24oZSl7cmV0dXJuIHNyKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSxbe2tleToiaXNTaWduT3V0U3VjY2Vzc2Z1bCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJiFufX1dKSxlfSgpO2Z1bmN0aW9uIG1vKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPU8oZSk7aWYodCl7dmFyIG89Tyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLG8pfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gQyh0aGlzLHIpfX12YXIgd28sYm8sa289ZnVuY3Rpb24oZSl7VChyLGUpO3ZhciB0PW1vKHIpO2Z1bmN0aW9uIHIoZSxuLG8saSxhLHMpe3ZhciB1O3JldHVybiBfKHRoaXMsciksKHU9dC5jYWxsKHRoaXMsbnVsbCE9aT9pOm51bGw9PXM/dm9pZCAwOnMubWVzc2FnZSkpLm5hbWU9dS5jb25zdHJ1Y3Rvci5uYW1lLHUuY29kZT1lLHUuZmlsZT1uLHUubWV0aG9kPW8sdS5lcnJvcj1zLHUuZGVzY3JpcHRpb249YSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRSh1KSwodGhpcyBpbnN0YW5jZW9mIHI/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApLnByb3RvdHlwZSksdX1yZXR1cm4gcn0oTChFcnJvcikpLHhvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtfKHRoaXMsZSksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9dCx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmV0dXJuIHcoZSxbe2tleToicmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLG89dGhpcztyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpLnJlZnJlc2hfdG9rZW4pe2UubmV4dD05O2JyZWFrfXJldHVybiByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBhKG8sdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSwxZTMqKHI8PTEwP3I6ci0xMCkpLGUubmV4dD05LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGNyLEpTT04uc3RyaW5naWZ5KG4pKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyUmVmcmVzaFRva2VuVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGNyKTtjYXNlIDI6aWYoIWUuc2VudCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUudDA9SlNPTixlLm5leHQ9Nix0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjcik7Y2FzZSA2OmUudDE9ZS5zZW50LHQ9ZS50MC5wYXJzZS5jYWxsKGUudDAsZS50MSksY2xlYXJUaW1lb3V0KHQpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX1dKSxlfSgpLF9vPSJpbml0IjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KHdvfHwod289e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oYm98fChibz17fSkpO3ZhciBTbyxFbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIHcoZSxudWxsLFt7a2V5OiJnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19fSx7a2V5OiJnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fV0pLGV9KCk7dmFyIEFvPVNvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmF0dGFjaFRva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXJldHVybiB3KGUsW3trZXk6InJlcXVlc3RIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuYXR0YWNoVG9rZW4oZSk7Y2FzZSAyOnJldHVybiBTby5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayhlKSx0LmFicnVwdCgicmV0dXJuIixlKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImVycm9ySGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgU28uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9fSx7a2V5OiJzdWNjZXNzSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFNvLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfX0se2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOlNvLmlzSGFuZGxlckVuYWJsZWQ9ZSx0aGlzLmF0dGFjaFRva2VuPXQ7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJlbmFibGVIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbigpe1NvLmlzSGFuZGxlckVuYWJsZWQ9ITB9fSx7a2V5OiJkaXNhYmxlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXtTby5pc0hhbmRsZXJFbmFibGVkPSExfX0se2tleToiZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06U28uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVDtTby5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7U28uaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfX0se2tleToic2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX19LHtrZXk6InNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fV0sW3trZXk6ImdldEluc3RhbmNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT10ci5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBTbyksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGEoZSx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIodCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKHQpfSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9dHIuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9dHIuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX19XSksZX0oKTtBby5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxBbz1Tbz1mdW5jdGlvbihlLHQscixvKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGgscz1hPDM/dDpudWxsPT09bz9vPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpvO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdD8idW5kZWZpbmVkIjpuKFJlZmxlY3QpKSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG8pO2Vsc2UgZm9yKHZhciB1PWUubGVuZ3RoLTE7dT49MDt1LS0pKGk9ZVt1XSkmJihzPShhPDM/aShzKTphPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIGE+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZnVuY3Rpb24oZSl7fV0sQW8pO3ZhciBUbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSksdGhpcy5fZGF0YT1uZXcgTWFwfXJldHVybiB3KGUsW3trZXk6InNldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnRoaXMuX2RhdGEuc2V0KGUsdCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyO3JldHVybiBhKHRoaXMsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5hYnJ1cHQoInJldHVybiIsbnVsbCE9PShyPW51bGw9PT0odD10aGlzLl9kYXRhKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXQoZSkpJiZ2b2lkIDAhPT1yP3I6Int9Iik7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5fZGF0YS5kZWxldGUoZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCk7ZnVuY3Rpb24gUm8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQ28oZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09cnx8IlNldCI9PT1yKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKCJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIENvKGUsdCl9KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksYT0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gYT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXthfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBDbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBQbyxPbz1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuLG8scyx1LGMsZixoLHAsZCx2LGcseSxtLHcsYixrLHgsXyxTLEUsQSxULFIsQyxQLE8sRCxJLFUsTTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgVG8sbj1uZXcgeW8ociksdC5uZXh0PTQsbi5pbml0aWFsaXplKGUpO2Nhc2UgNDppZihvPW5ldyB4byhuKSxzPW4uZ2V0RGF0YUxheWVyKCksdT1Bby5nZXRJbnN0YW5jZSgpLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSxlKS5hdHRhY2hUb2tlbil7dC5uZXh0PTExO2JyZWFrfXJldHVybiB0LnQwPU9iamVjdCx0LnQxPU9iamVjdC5hc3NpZ24oe30sZS5oZWFkZXJzKSx0LnQyPSJCZWFyZXIgIix0Lm5leHQ9NyxuLmdldEFjY2Vzc1Rva2VuKCk7Y2FzZSA3OnQudDM9dC5zZW50LHQudDQ9dC50Mi5jb25jYXQuY2FsbCh0LnQyLHQudDMpLHQudDU9e0F1dGhvcml6YXRpb246dC50NH0sZS5oZWFkZXJzPXQudDAuYXNzaWduLmNhbGwodC50MCx0LnQxLHQudDUpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LHQudDA9bnVsbD09dT92b2lkIDA6dS5pbml0LCF0LnQwKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIHQubmV4dD0xMix1LmluaXQoITAsYyk7Y2FzZSAxMjpyZXR1cm4gZj1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0saD1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHA9ZnVuY3Rpb24oZSl7KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sZD1mdW5jdGlvbihlKXsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixvLGEsYyxmLGgscCxkO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBjPSExLHQubmV4dD0zLHMuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMzpyZXR1cm4gZj10LnNlbnQsaD0wLHQudDA9W10sdC50MT1sLHQubmV4dD05LHMuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgOTppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTEzO2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDEzOmlmKCF0LnQzKXt0Lm5leHQ9MTc7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTE4O2JyZWFrO2Nhc2UgMTc6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDE4OmlmKHQudDY9bz10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yMjticmVha310LnQyPXZvaWQgMCE9PW87Y2FzZSAyMjppZighdC50Mil7dC5uZXh0PTI2O2JyZWFrfXQudDc9byx0Lm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNjp0LnQ3PVtdO2Nhc2UgMjc6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PWY/dm9pZCAwOmYuc2VydmVyT3JpZ2luXSxwPXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDMxOmlmKCEoaDxwLmxlbmd0aCkpe3QubmV4dD0zOTticmVha31pZihkPXBbaF0sIShudWxsPT09KGE9bnVsbD09ZT92b2lkIDA6ZS51cmwpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgoZCkpKXt0Lm5leHQ9MzY7YnJlYWt9cmV0dXJuIGM9ITAsdC5hYnJ1cHQoImJyZWFrIiwzOSk7Y2FzZSAzNjpoKyssdC5uZXh0PTMxO2JyZWFrO2Nhc2UgMzk6aWYoIWMpe3QubmV4dD00MzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdS5yZXF1ZXN0KGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiA0MDE9PT0obnVsbD09PShyPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB1LnJlcXVlc3QoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGtvKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpfSkpOlByb21pc2UucmVqZWN0KHQpfSkpKTtjYXNlIDQzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSkpO2Nhc2UgNDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbyxhLGMsZixoLHAsZCx2LGcseSxtLHc7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGM9ITAsdC5uZXh0PTMscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAzOmY9dC5zZW50LGg9Um8oZSksdC5wcmV2PTUsaC5zKCk7Y2FzZSA3OmlmKChwPWgubigpKS5kb25lKXt0Lm5leHQ9NTA7YnJlYWt9cmV0dXJuIGQ9cC52YWx1ZSx2PSExLGc9MCx0LnQwPVtdLHQudDE9bCx0Lm5leHQ9MTUscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAxNTppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTE5O2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDE5OmlmKCF0LnQzKXt0Lm5leHQ9MjM7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTI0O2JyZWFrO2Nhc2UgMjM6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDI0OmlmKHQudDY9bz10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yODticmVha310LnQyPXZvaWQgMCE9PW87Y2FzZSAyODppZighdC50Mil7dC5uZXh0PTMyO2JyZWFrfXQudDc9byx0Lm5leHQ9MzM7YnJlYWs7Y2FzZSAzMjp0LnQ3PVtdO2Nhc2UgMzM6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PWY/dm9pZCAwOmYuc2VydmVyT3JpZ2luXSx5PXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDM3OmlmKCEoZzx5Lmxlbmd0aCkpe3QubmV4dD00NTticmVha31pZihtPXlbZ10sIShudWxsPT09KGE9ZC51cmwpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgobSkpKXt0Lm5leHQ9NDI7YnJlYWt9cmV0dXJuIHY9ITAsdC5hYnJ1cHQoImJyZWFrIiw0NSk7Y2FzZSA0MjpnKyssdC5uZXh0PTM3O2JyZWFrO2Nhc2UgNDU6aWYodil7dC5uZXh0PTQ4O2JyZWFrfXJldHVybiBjPSExLHQuYWJydXB0KCJicmVhayIsNTApO2Nhc2UgNDg6dC5uZXh0PTc7YnJlYWs7Y2FzZSA1MDp0Lm5leHQ9NTU7YnJlYWs7Y2FzZSA1Mjp0LnByZXY9NTIsdC50MTE9dC5jYXRjaCg1KSxoLmUodC50MTEpO2Nhc2UgNTU6cmV0dXJuIHQucHJldj01NSxoLmYoKSx0LmZpbmlzaCg1NSk7Y2FzZSA1ODppZih3PVtdLCFjKXt0Lm5leHQ9NjQ7YnJlYWt9cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dy5wdXNoKHUucmVxdWVzdChlKSl9KSksdC5hYnJ1cHQoInJldHVybiIsKG51bGw9PXU/dm9pZCAwOnUuYWxsKSYmdS5hbGwodykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDQwMT09PShudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYWxsJiZ1LmFsbCh3KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSQS1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdEFsbCIsIiIsIiIsZSkpfSkpOlByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDY0OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLUhSQS1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDY1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbNSw1Miw1NSw1OF1dKX0pKSl9LHk9ZnVuY3Rpb24oKXt1LmVuYWJsZUhhbmRsZXImJnUuZW5hYmxlSGFuZGxlcigpfSxtPWZ1bmN0aW9uKCl7dS5kaXNhYmxlSGFuZGxlciYmdS5kaXNhYmxlSGFuZGxlcigpfSx3PWZ1bmN0aW9uKGUpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixuLmdldEF1dGhvcml6YXRpb25VUkwoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9ZSx0Lm5leHQ9MyxuLmdldFBLQ0VDb2RlKCk7Y2FzZSAzOnJldHVybiB0LnQxPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIix7YXV0aG9yaXphdGlvblVSTDp0LnQwLHBrY2U6dC50MX0pO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LGI9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxrPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGEoKXt2YXIgdTtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDpyZXR1cm4gaS5uZXh0PTIscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOmlmKHU9aS5zZW50LCFyfHwhdS5lbmFibGVQS0NFKXtpLm5leHQ9NjticmVha31yZXR1cm4gaS5uZXh0PTYsbi5zZXRQS0NFQ29kZShyKTtjYXNlIDY6aWYoIWUpe2kubmV4dD04O2JyZWFrfXJldHVybiBpLmFicnVwdCgicmV0dXJuIixuLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG51bGwhPXQ/dDoiIikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKSk7Y2FzZSA4OnJldHVybiBpLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLVJBVDEtTkYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBpLnN0b3AoKX19KSxhKX0pKSl9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxlLm5leHQ9MyxuLnNpZ25PdXQoKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxfPWZ1bmN0aW9uKCl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLG4uZ2V0U2lnbk91dFVSTCgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LFM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsdSxjLGYsaCxwLGQsdixnO3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBmPSEwLGg9ITEsdC5uZXh0PTQscy5nZXRDb25maWdEYXRhKCk7Y2FzZSA0OmlmKHA9dC5zZW50LCEobnVsbD09ZT92b2lkIDA6ZS50b2tlbkVuZHBvaW50KSl7dC5uZXh0PTQyO2JyZWFrfXJldHVybiBmPSExLGQ9MCx0LnQwPVtdLHQudDE9bCx0Lm5leHQ9MTIscy5nZXRDb25maWdEYXRhKCk7Y2FzZSAxMjppZih0LnQ0PXI9dC5zZW50LHQudDM9bnVsbD09PXQudDQsdC50Myl7dC5uZXh0PTE2O2JyZWFrfXQudDM9dm9pZCAwPT09cjtjYXNlIDE2OmlmKCF0LnQzKXt0Lm5leHQ9MjA7YnJlYWt9dC50NT12b2lkIDAsdC5uZXh0PTIxO2JyZWFrO2Nhc2UgMjA6dC50NT1yLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDIxOmlmKHQudDY9dT10LnQ1LHQudDI9bnVsbCE9PXQudDYsIXQudDIpe3QubmV4dD0yNTticmVha310LnQyPXZvaWQgMCE9PXU7Y2FzZSAyNTppZighdC50Mil7dC5uZXh0PTI5O2JyZWFrfXQudDc9dSx0Lm5leHQ9MzA7YnJlYWs7Y2FzZSAyOTp0LnQ3PVtdO2Nhc2UgMzA6dC50OD10LnQ3LHQudDk9KDAsdC50MSkodC50OCksdC50MTA9W251bGw9PXA/dm9pZCAwOnAuc2VydmVyT3JpZ2luXSx2PXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDM0OmlmKCEoZDx2Lmxlbmd0aCkpe3QubmV4dD00MjticmVha31pZihnPXZbZF0sIShudWxsPT09KGM9ZS50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zdGFydHNXaXRoKGcpKSl7dC5uZXh0PTM5O2JyZWFrfXJldHVybiBoPSEwLHQuYWJydXB0KCJicmVhayIsNDIpO2Nhc2UgMzk6ZCsrLHQubmV4dD0zNDticmVhaztjYXNlIDQyOmlmKCFmJiYhaCl7dC5uZXh0PTQ2O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixuLnJlcXVlc3RDdXN0b21HcmFudChlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDppZighZS5yZXR1cm5zU2Vzc2lvbil7ci5uZXh0PTU7YnJlYWt9cmV0dXJuIG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLHIuYWJydXB0KCJyZXR1cm4iLG4uZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDU6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHQpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDQ2OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcga28oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKSk7Y2FzZSA0NzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sRT1mdW5jdGlvbigpe3JldHVybiBuLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSl9LEE9ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpfSxUPWZ1bmN0aW9uKCl7cmV0dXJuIGEodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG4uZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LFI9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbi5nZXREZWNvZGVkSURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEM9ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbi5nZXRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sUD1mdW5jdGlvbigpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sTz1mdW5jdGlvbigpe3JldHVybiBuLmdldEFjY2Vzc1Rva2VuKCl9LEQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5pc0F1dGhlbnRpY2F0ZWQoKX0sST1mdW5jdGlvbihlKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIscy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxVPWZ1bmN0aW9uKGUpe3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixuLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LE09ZnVuY3Rpb24oKXtyZXR1cm4gYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5nZXRDb25maWdEYXRhKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sdC5hYnJ1cHQoInJldHVybiIse2Rpc2FibGVIdHRwSGFuZGxlcjptLGVuYWJsZUh0dHBIYW5kbGVyOnksZ2V0QWNjZXNzVG9rZW46TyxnZXRBdXRob3JpemF0aW9uVVJMOncsZ2V0QmFzaWNVc2VySW5mbzpULGdldENvbmZpZ0RhdGE6TSxnZXREZWNvZGVkSURUb2tlbjpSLGdldElEVG9rZW46QyxnZXRPSURDU2VydmljZUVuZHBvaW50czpQLGdldFNpZ25PdXRVUkw6XyxodHRwUmVxdWVzdDp2LGh0dHBSZXF1ZXN0QWxsOmcsaXNBdXRoZW50aWNhdGVkOkQscmVmcmVzaEFjY2Vzc1Rva2VuOkUscmVxdWVzdEFjY2Vzc1Rva2VuOmsscmVxdWVzdEN1c3RvbUdyYW50OlMscmV2b2tlQWNjZXNzVG9rZW46QSxzZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s6ZCxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOnAsc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmYsc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6aCxzZXRTZXNzaW9uU3RhdGU6SSxzaWduT3V0Ongsc3RhcnRBdXRvUmVmcmVzaFRva2VuOmIsdXBkYXRlQ29uZmlnOlV9KTtjYXNlIDM4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxEbz1zZWxmO0RvLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEscj1lLnBvcnRzO3JldHVybiBhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciBuLG8sYSxzLHU7cmV0dXJuIGkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocz1yWzBdLHQudHlwZT09PV9vfHxQbyl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcga28oIkNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsImNsaWVudC53b3JrZXIiLHQudHlwZSwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OmUudDA9dC50eXBlLGUubmV4dD1lLnQwPT09X28/NzoiZ2V0X2F1dGhfdXJsIj09PWUudDA/MjM6InJlcXVlc3RfZ2V0X3Rva2VuIj09PWUudDA/MjU6Imh0dHAtcmVxdWVzdCI9PT1lLnQwPzI3OiJodHRwLXJlcXVlc3QtYWxsIj09PWUudDA/Mjk6InNpZ24tb3V0Ij09PWUudDA/MzE6InJlcXVlc3QtY3VzdG9tLWdyYW50Ij09PWUudDA/NDU6InJldm9rZS1hY2Nlc3MtdG9rZW4iPT09ZS50MD80NzoiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiPT09ZS50MD80OToiZ2V0LWJhc2ljLXVzZXItaW5mbyI9PT1lLnQwPzYzOiJnZXQtZGVjb2RlZC1pZC10b2tlbiI9PT1lLnQwPzc3OiJnZXRfaWRfdG9rZW4iPT09ZS50MD85MToiZW5hYmxlX2h0dHBfaGFuZGxlciI9PT1lLnQwPzEwNToiZGlzYWJsZV9odHRwX2hhbmRsZXIiPT09ZS50MD8xMDg6ImlzX2F1dGhlbnRpY2F0ZWQiPT09ZS50MD8xMTE6ImdldF9zaWduX291dF91cmwiPT09ZS50MD8xMjU6InJlZnJlc2hfYWNjZXNzLXRva2VuIj09PWUudDA/MTM5OiJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iPT09ZS50MD8xNTM6InNldF9zZXNzaW9uX3N0YXRlIj09PWUudDA/MTU1OiJ1cGRhdGVfY29uZmlnIj09PWUudDA/MTY5OiJnZXRfY29uZmlnX2RhdGEiPT09ZS50MD8xODM6MTk3O2JyZWFrO2Nhc2UgNzpyZXR1cm4gZS5wcmV2PTcsdT1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSksZS5uZXh0PTExLE9vKHUpO2Nhc2UgMTE6KFBvPWUuc2VudCkuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKExvKSxQby5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKE1vKSxQby5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soSW8pLFBvLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKFVvKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMTk6ZS5wcmV2PTE5LGUudDE9ZS5jYXRjaCg3KSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MSkpO2Nhc2UgMjI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDIzOnJldHVybiBQby5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAyNTpyZXR1cm4gUG8ucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0obj1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvZGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2Vzc2lvblN0YXRlLG51bGw9PT0oYT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBrY2UpLnRoZW4oKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMjc6cmV0dXJuIFBvLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAyOTpyZXR1cm4gUG8uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDMxOnJldHVybiBlLnByZXY9MzEsZS50Mj1zLGUudDM9RW8sZS5uZXh0PTM2LFBvLnNpZ25PdXQoKTtjYXNlIDM2OmUudDQ9ZS5zZW50LGUudDU9ZS50My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MyxlLnQ0KSxlLnQyLnBvc3RNZXNzYWdlLmNhbGwoZS50MixlLnQ1KSxlLm5leHQ9NDQ7YnJlYWs7Y2FzZSA0MTplLnByZXY9NDEsZS50Nj1lLmNhdGNoKDMxKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50NikpO2Nhc2UgNDQ6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDQ1OnJldHVybiBQby5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDQ3OnJldHVybiBQby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgNDk6cmV0dXJuIGUucHJldj00OSxlLnQ3PXMsZS50OD1FbyxlLm5leHQ9NTQsUG8uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTtjYXNlIDU0OmUudDk9ZS5zZW50LGUudDEwPWUudDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDgsZS50OSksZS50Ny5wb3N0TWVzc2FnZS5jYWxsKGUudDcsZS50MTApLGUubmV4dD02MjticmVhaztjYXNlIDU5OmUucHJldj01OSxlLnQxMT1lLmNhdGNoKDQ5KSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MTEpKTtjYXNlIDYyOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSA2MzpyZXR1cm4gZS5wcmV2PTYzLGUudDEyPXMsZS50MTM9RW8sZS5uZXh0PTY4LFBvLmdldEJhc2ljVXNlckluZm8oKTtjYXNlIDY4OmUudDE0PWUuc2VudCxlLnQxNT1lLnQxMy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MTMsZS50MTQpLGUudDEyLnBvc3RNZXNzYWdlLmNhbGwoZS50MTIsZS50MTUpLGUubmV4dD03NjticmVhaztjYXNlIDczOmUucHJldj03MyxlLnQxNj1lLmNhdGNoKDYzKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MTYpKTtjYXNlIDc2OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSA3NzpyZXR1cm4gZS5wcmV2PTc3LGUudDE3PXMsZS50MTg9RW8sZS5uZXh0PTgyLFBvLmdldERlY29kZWRJRFRva2VuKCk7Y2FzZSA4MjplLnQxOT1lLnNlbnQsZS50MjA9ZS50MTguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDE4LGUudDE5KSxlLnQxNy5wb3N0TWVzc2FnZS5jYWxsKGUudDE3LGUudDIwKSxlLm5leHQ9OTA7YnJlYWs7Y2FzZSA4NzplLnByZXY9ODcsZS50MjE9ZS5jYXRjaCg3Nykscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDIxKSk7Y2FzZSA5MDpyZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgOTE6cmV0dXJuIGUucHJldj05MSxlLnQyMj1zLGUudDIzPUVvLGUubmV4dD05NixQby5nZXRJRFRva2VuKCk7Y2FzZSA5NjplLnQyND1lLnNlbnQsZS50MjU9ZS50MjMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDIzLGUudDI0KSxlLnQyMi5wb3N0TWVzc2FnZS5jYWxsKGUudDIyLGUudDI1KSxlLm5leHQ9MTA0O2JyZWFrO2Nhc2UgMTAxOmUucHJldj0xMDEsZS50MjY9ZS5jYXRjaCg5MSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDI2KSk7Y2FzZSAxMDQ6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDEwNTpyZXR1cm4gUG8uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTA4OnJldHVybiBQby5kaXNhYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTExOnJldHVybiBlLnByZXY9MTExLGUudDI3PXMsZS50Mjg9RW8sZS5uZXh0PTExNixQby5pc0F1dGhlbnRpY2F0ZWQoKTtjYXNlIDExNjplLnQyOT1lLnNlbnQsZS50MzA9ZS50MjguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDI4LGUudDI5KSxlLnQyNy5wb3N0TWVzc2FnZS5jYWxsKGUudDI3LGUudDMwKSxlLm5leHQ9MTI0O2JyZWFrO2Nhc2UgMTIxOmUucHJldj0xMjEsZS50MzE9ZS5jYXRjaCgxMTEpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQzMSkpO2Nhc2UgMTI0OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxMjU6cmV0dXJuIGUucHJldj0xMjUsZS50MzI9cyxlLnQzMz1FbyxlLm5leHQ9MTMwLFBvLmdldFNpZ25PdXRVUkwoKTtjYXNlIDEzMDplLnQzND1lLnNlbnQsZS50MzU9ZS50MzMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDMzLGUudDM0KSxlLnQzMi5wb3N0TWVzc2FnZS5jYWxsKGUudDMyLGUudDM1KSxlLm5leHQ9MTM4O2JyZWFrO2Nhc2UgMTM1OmUucHJldj0xMzUsZS50MzY9ZS5jYXRjaCgxMjUpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQzNikpO2Nhc2UgMTM4OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxMzk6cmV0dXJuIGUucHJldj0xMzksZS50Mzc9cyxlLnQzOD1FbyxlLm5leHQ9MTQ0LFBvLnJlZnJlc2hBY2Nlc3NUb2tlbigpO2Nhc2UgMTQ0OmUudDM5PWUuc2VudCxlLnQ0MD1lLnQzOC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50MzgsZS50MzkpLGUudDM3LnBvc3RNZXNzYWdlLmNhbGwoZS50MzcsZS50NDApLGUubmV4dD0xNTI7YnJlYWs7Y2FzZSAxNDk6ZS5wcmV2PTE0OSxlLnQ0MT1lLmNhdGNoKDEzOSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDQxKSk7Y2FzZSAxNTI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE1Mzp0cnl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKFBvLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1yZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTgpO2Nhc2UgMTU1OnJldHVybiBlLnByZXY9MTU1LGUudDQyPXMsZS50NDM9RW8sZS5uZXh0PTE2MCxQby5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKTtjYXNlIDE2MDplLnQ0ND1lLnNlbnQsZS50NDU9ZS50NDMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDQzLGUudDQ0KSxlLnQ0Mi5wb3N0TWVzc2FnZS5jYWxsKGUudDQyLGUudDQ1KSxlLm5leHQ9MTY4O2JyZWFrO2Nhc2UgMTY1OmUucHJldj0xNjUsZS50NDY9ZS5jYXRjaCgxNTUpLHMucG9zdE1lc3NhZ2UoRW8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQ0NikpO2Nhc2UgMTY4OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5OCk7Y2FzZSAxNjk6cmV0dXJuIGUucHJldj0xNjksZS50NDc9cyxlLnQ0OD1FbyxlLm5leHQ9MTc0LFBvLnVwZGF0ZUNvbmZpZyhudWxsPT10P3ZvaWQgMDp0LmRhdGEpO2Nhc2UgMTc0OmUudDQ5PWUuc2VudCxlLnQ1MD1lLnQ0OC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50NDgsZS50NDkpLGUudDQ3LnBvc3RNZXNzYWdlLmNhbGwoZS50NDcsZS50NTApLGUubmV4dD0xODI7YnJlYWs7Y2FzZSAxNzk6ZS5wcmV2PTE3OSxlLnQ1MT1lLmNhdGNoKDE2OSkscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDUxKSk7Y2FzZSAxODI6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE4MzpyZXR1cm4gZS5wcmV2PTE4MyxlLnQ1Mj1zLGUudDUzPUVvLGUubmV4dD0xODgsUG8uZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMTg4OmUudDU0PWUuc2VudCxlLnQ1NT1lLnQ1My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50NTMsZS50NTQpLGUudDUyLnBvc3RNZXNzYWdlLmNhbGwoZS50NTIsZS50NTUpLGUubmV4dD0xOTY7YnJlYWs7Y2FzZSAxOTM6ZS5wcmV2PTE5MyxlLnQ1Nj1lLmNhdGNoKDE4Mykscy5wb3N0TWVzc2FnZShFby5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDU2KSk7Y2FzZSAxOTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk4KTtjYXNlIDE5NzpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEVvLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGtvKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsIlRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICIuY29uY2F0KHQudHlwZSwiLCBpcyBpbnZhbGlkLiIpKSkpO2Nhc2UgMTk4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNywxOV0sWzMxLDQxXSxbNDksNTldLFs2Myw3M10sWzc3LDg3XSxbOTEsMTAxXSxbMTExLDEyMV0sWzEyNSwxMzVdLFsxMzksMTQ5XSxbMTU1LDE2NV0sWzE2OSwxNzldLFsxODMsMTkzXV0pfSkpKX07dmFyIElvPWZ1bmN0aW9uKCl7RG8ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LFVvPWZ1bmN0aW9uKGUpe0RvLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxNbz1mdW5jdGlvbigpe0RvLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtkZWxldGUgdC50b0pTT04sRG8ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9dD90OiIiKSx0eXBlOiJyZXF1ZXN0LWVycm9yIn0pfTtyZXR1cm57fX0oKTsKCg==",WV=null,vV=!1,function(t){return SV=SV||fV(VV,WV,vV),new Worker(SV,t)}),YV=function(e){var n,i,r=null!==(n=null==e?void 0:e.requestTimeout)&&void 0!==n?n:6e4,c=hV((function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={type:Kf},t.prev=1,t.next=4,o(e);case 4:return n=t.sent,t.abrupt("return",n);case 8:return t.prev=8,t.t0=t.catch(1),t.abrupt("return",mV.getSignOutURL());case 11:case"end":return t.stop()}}),t,null,[[1,8]])})))}),e.storage,(function(t){return a(t)})),l=new CV,o=function(t){var e=new MessageChannel;return l.postMessage(t,[e.port2]),new Promise((function(t,n){var i=setTimeout((function(){n(new dV("WEB_WORKER_CLIENT-COM-TO-01","web-worker-client","communicate","Operation timed out.","No response was received from the web worker for "+r/1e3+" since dispatching the request"))}),r);return e.port1.onmessage=function(e){var r=e.data;if(clearTimeout(i),null==r?void 0:r.success){var c=(null==r?void 0:r.data)?JSON.parse(null==r?void 0:r.data):null;(null==r?void 0:r.blob)&&(c.data=null==r?void 0:r.blob),t(c)}else n(r.error?JSON.parse(r.error):null)}}))},a=function(t){return o({data:t,type:"set_session_state"})},u=function(){return o({type:"start_auto_refresh_token"})},d=function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r,l,o;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,m();case 2:return l=t.sent,t.next=5,h();case 5:o=t.sent,c.initialize(o.clientID,null!==(e=l.checkSessionIframe)&&void 0!==e?e:"",(function(){return yy(void 0,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Z();case 2:return t.abrupt("return",t.sent.sessionState);case 3:case"end":return t.stop()}}),t)})))}),null!==(n=o.checkSessionInterval)&&void 0!==n?n:3,null!==(i=o.sessionRefreshInterval)&&void 0!==i?i:300,o.signInRedirectURL,null!==(r=l.authorizationEndpoint)&&void 0!==r?r:"",o.enablePKCE);case 7:case"end":return t.stop()}}),t)})))},s=function(t,e){return yy(void 0,void 0,void 0,py.mark((function n(){var i,r;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,h();case 2:return i=n.sent,r={data:{code:t,pkce:i.enablePKCE?mV.getPKCE():void 0,sessionState:e},type:"request_get_token"},i.enablePKCE&&mV.removePKCE(),n.abrupt("return",o(r).then((function(t){return o({type:"get_sign_out_url"}).then((function(e){return mV.setSignOutURL(e),i.enableOIDCSessionManagement&&d(),u(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(t)})));case 6:case"end":return n.stop()}}),n)})))},m=function(){return o({type:"get-oidc-service-endpoints"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},h=function(){return o({type:"get_config_data"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},Z=function(){return o({type:"get-basic-user-info"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},b=function(){return o({type:"is_authenticated"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))};return{disableHttpHandler:function(){return o({type:"disable_http_handler"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},enableHttpHandler:function(){return o({type:"enable_http_handler"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},getBasicUserInfo:Z,getDecodedIDToken:function(){return o({type:"get-decoded-id-token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},getIDToken:function(){return o({type:"get_id_token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},getOIDCServiceEndpoints:m,httpRequest:function(t){return o({data:t,type:"http-request"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},httpRequestAll:function(t){return o({data:t,type:"http-request-all"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},initialize:function(){return i={requestErrorCallback:function(){return null},requestFinishCallback:function(){return null},requestStartCallback:function(){return null},requestSuccessCallback:function(){return null}},l.onmessage=function(t){var e=t.data;switch(e.type){case"request-error":(null==i?void 0:i.requestErrorCallback)&&(null==i||i.requestErrorCallback(e.data?JSON.parse(e.data):null));break;case"request-finish":(null==i?void 0:i.requestFinishCallback)&&(null==i||i.requestFinishCallback());break;case"request-start":(null==i?void 0:i.requestStartCallback)&&(null==i||i.requestStartCallback());break;case"request-success":(null==i?void 0:i.requestSuccessCallback)&&(null==i||i.requestSuccessCallback(e.data?JSON.parse(e.data):null))}},o({data:e,type:"init"}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},isAuthenticated:b,refreshAccessToken:function(){return o({type:"refresh_access-token"})},requestCustomGrant:function(t){return o({data:t,type:"request-custom-grant"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},revokeAccessToken:function(){return o({type:"revoke-access-token"}).then((function(t){return c.reset(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},setHttpRequestErrorCallback:function(t){t&&"function"==typeof t&&(i.requestErrorCallback=t)},setHttpRequestFinishCallback:function(t){t&&"function"==typeof t&&(i.requestFinishCallback=t)},setHttpRequestStartCallback:function(t){t&&"function"==typeof t&&(i.requestStartCallback=t)},setHttpRequestSuccessCallback:function(t){t&&"function"==typeof t&&(i.requestSuccessCallback=t)},signIn:function(e,n,i){return yy(void 0,void 0,void 0,py.mark((function r(){var l,m,p,y,I,X,G,g,f;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,h();case 2:return p=r.sent,r.next=5,c.receivePromptNoneResponse((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",a(t));case 1:case"end":return e.stop()}}),e)})))}));case 5:if(!r.sent){r.next=8;break}return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 8:if(mV.wasSilentSignInCalled()&&mV.setIsInitializedSilentSignIn(),y=new URL(window.location.href).searchParams.get(jf),I=new URL(window.location.href).searchParams.get(Bf),!y){r.next=17;break}return(X=new URL(window.location.href)).searchParams.delete(jf),X.searchParams.delete(Bf),history.pushState(null,document.title,X.toString()),r.abrupt("return",Promise.reject(new dV("WEB_WORKER_CLIENT-SI-BE","web-worker-client","signIn",y,null!=I?I:"")));case 17:return r.next=19,b();case 19:if(!r.sent){r.next=24;break}return r.next=22,u();case 22:return p.enableOIDCSessionManagement&&d(),r.abrupt("return",Z());case 24:if((null==p?void 0:p.responseMode)===t.ResponseMode.formPost&&n?(G=n,g=null!=i?i:""):(G=null!==(l=new URL(window.location.href).searchParams.get(IG))&&void 0!==l?l:"",g=null!==(m=new URL(window.location.href).searchParams.get(XG))&&void 0!==m?m:"",mV.removeAuthorizationCode()),!G){r.next=27;break}return r.abrupt("return",s(G,g));case 27:return f={data:e,type:Lf},r.abrupt("return",o(f).then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.pkce&&p.enablePKCE&&mV.setPKCE(t.pkce),location.href=t.authorizationURL,e.next=4,mV.waitTillPageRedirect();case 4:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 5:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 29:case"end":return r.stop()}}),r)})))},signOut:function(){return b().then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=5;break}return n={type:Kf},e.abrupt("return",o(n).then((function(t){return yy(void 0,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return window.location.href=t,e.next=3,mV.waitTillPageRedirect();case 3:return e.abrupt("return",Promise.resolve(!0));case 4:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 5:return window.location.href=mV.getSignOutURL(),e.next=8,mV.waitTillPageRedirect();case 8:return e.abrupt("return",Promise.resolve(!0));case 9:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)}))},trySignInSilently:function(){return yy(void 0,void 0,void 0,py.mark((function t(){var e,n,i,r,l,a,u,d,m;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,h();case 2:if(n=t.sent,!mV.setIsInitializedSilentSignIn()){t.next=7;break}return t.next=6,c.receivePromptNoneResponse();case 6:return t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 7:if(!mV.isStatePresentInURL()){t.next=10;break}return mV.setIsInitializedSilentSignIn(),t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""}));case 10:return i=document.getElementById(Hf),r=null===(e=null==i?void 0:i.contentDocument)||void 0===e?void 0:e.getElementById(kf),l={data:{prompt:"none",state:wf},type:Lf},t.prev=13,t.next=16,o(l);case 16:(a=t.sent).pkce&&n.enablePKCE&&mV.setPKCE(a.pkce),u=a.authorizationURL,(d=new URL(u)).searchParams.set("response_mode","query"),m=d.toString(),r.src=m,t.next=28;break;case 25:return t.prev=25,t.t0=t.catch(13),t.abrupt("return",Promise.reject(t.t0));case 28:return t.abrupt("return",new Promise((function(t,e){window.addEventListener("message",(function n(i){return yy(void 0,void 0,void 0,py.mark((function r(){var c,l,o,a,u;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:a=i.data,u=setTimeout((function(){t(!1)}),1e4),(null==a?void 0:a.type)==xf&&(window.removeEventListener("message",n),clearTimeout(u),t(!1)),(null==a?void 0:a.type)==Jf&&(null===(c=null==a?void 0:a.data)||void 0===c?void 0:c.code)&&s(null===(l=null==a?void 0:a.data)||void 0===l?void 0:l.code,null===(o=null==a?void 0:a.data)||void 0===o?void 0:o.sessionState).then((function(e){window.removeEventListener("message",n),t(e)})).catch((function(t){window.removeEventListener("message",n),e(t)})).finally((function(){clearTimeout(u)}));case 4:case"end":return r.stop()}}),r)})))}))})));case 29:case"end":return t.stop()}}),t,null,[[13,25]])})))},updateConfig:function(t){return yy(void 0,void 0,void 0,py.mark((function e(){var n,i,r,l;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,h();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),r=Object.assign(Object.assign({},n),t),l={data:r,type:"update_config"},e.next=8,o(l);case 8:r.enableOIDCSessionManagement&&i&&(c.reset(),d());case 9:case"end":return e.stop()}}),e)})))}}},RV={checkSessionInterval:3,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:t.Storage.SessionStorage},KV="primaryInstance",LV=function(){function e(t){hy(this,e),this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=function(){return null},this._onSignOutCallback=function(){return null},this._onEndUserSession=function(){return null},this._onInitialize=function(){return null},this._onCustomGrant=new Map,this._instanceID=t}return by(e,[{key:"_isInitialized",value:function(){return yy(this,void 0,void 0,py.mark((function t(){var e,n;return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._startedInitialize){t.next=2;break}return t.abrupt("return",!1);case 2:e=0,n=function(){return new Promise((function(t){return setTimeout(t,1e3)}))};case 4:if(this._initialized){t.next=11;break}return 10===e&&console.warn("It is taking longer than usual for the object to be initialized"),t.next=8,n();case 8:e++,t.next=4;break;case 11:return t.abrupt("return",!0);case 12:case"end":return t.stop()}}),t,this)})))}},{key:"_validateMethod",value:function(){return yy(this,void 0,void 0,py.mark((function t(){return py.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:if(t.sent){t.next=4;break}return t.abrupt("return",Promise.reject());case 4:return t.next=6,this.isAuthenticated();case 6:if(t.sent){t.next=8;break}return t.abrupt("return",Promise.reject());case 8:return t.abrupt("return",!0);case 9:case"end":return t.stop()}}),t,this)})))}
394
394
  /**
395
395
  * This method returns the instance of the singleton class.
396
396
  *
@@ -429,7 +429,7 @@ function(t){return bG(this,void 0,void 0,py.mark((function e(){return py.wrap((f
429
429
  *
430
430
  * @preserve
431
431
  */
432
- function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o=this;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(this._storage=null!==(n=e.storage)&&void 0!==n?n:t.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,this._storage===t.Storage.WebWorker){i.next=15;break}if(this._client){i.next=10;break}return r=e,c=Object.assign({},vV),i.next=9,yV(Object.assign(Object.assign({},c),r));case 9:this._client=i.sent;case 10:return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),i.abrupt("return",Promise.resolve(!0));case 15:if(this._client){i.next=19;break}return l=e,this._client=WV(Object.assign(Object.assign({},vV),l)),i.abrupt("return",this._client.initialize().then((function(){return o._onInitialize&&o._onInitialize(!0),o._initialized=!0,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)})));case 19:return i.abrupt("return",Promise.resolve(!0));case 20:case"end":return i.stop()}}),i,this)})))}
432
+ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o=this;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(this._storage=null!==(n=e.storage)&&void 0!==n?n:t.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,this._storage===t.Storage.WebWorker){i.next=15;break}if(this._client){i.next=10;break}return r=e,c=Object.assign({},RV),i.next=9,gV(Object.assign(Object.assign({},c),r));case 9:this._client=i.sent;case 10:return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),i.abrupt("return",Promise.resolve(!0));case 15:if(this._client){i.next=19;break}return l=e,this._client=YV(Object.assign(Object.assign({},RV),l)),i.abrupt("return",this._client.initialize().then((function(){return o._onInitialize&&o._onInitialize(!0),o._initialized=!0,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)})));case 19:return i.abrupt("return",Promise.resolve(!0));case 20:case"end":return i.stop()}}),i,this)})))}
433
433
  /**
434
434
  * This method returns a Promise that resolves with the basic user information obtained from the ID token.
435
435
  *
@@ -482,7 +482,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
482
482
  * @memberof AsgardeoSPAClient
483
483
  *
484
484
  * @preserve
485
- */},{key:"signIn",value:function(t,e,n){var i;return yy(this,void 0,void 0,py.mark((function r(){var c=this;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._isInitialized();case 2:if(aV.setInitializedSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect))||aV.isStatePresentInURL()){r.next=4;break}return r.abrupt("return");case 4:return null==t||delete t.callOnlyOnRedirect,r.abrupt("return",null===(i=this._client)||void 0===i?void 0:i.signIn(t,e,n).then((function(t){return c._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&c._onSignInCallback(t),t})));case 6:case"end":return r.stop()}}),r,this)})))}},{key:"trySignInSilently",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){var n=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:if(!aV.wasSignInCalled()){e.next=4;break}return e.abrupt("return");case 4:return aV.setInitializedSignIn(!1),e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then((function(t){if(n._onSignInCallback&&t){var e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&n._onSignInCallback(e)}return t})));case 6:case"end":return e.stop()}}),e,this)})))}
485
+ */},{key:"signIn",value:function(t,e,n){var i;return yy(this,void 0,void 0,py.mark((function r(){var c=this;return py.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._isInitialized();case 2:if(mV.setInitializedSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect))||mV.isStatePresentInURL()){r.next=4;break}return r.abrupt("return");case 4:return null==t||delete t.callOnlyOnRedirect,r.abrupt("return",null===(i=this._client)||void 0===i?void 0:i.signIn(t,e,n).then((function(t){return c._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&c._onSignInCallback(t),t})));case 6:case"end":return r.stop()}}),r,this)})))}},{key:"trySignInSilently",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){var n=this;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:if(!mV.wasSignInCalled()){e.next=4;break}return e.abrupt("return");case 4:return mV.setInitializedSignIn(!1),e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then((function(t){if(n._onSignInCallback&&t){var e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&n._onSignInCallback(e)}return t})));case 6:case"end":return e.stop()}}),e,this)})))}
486
486
  /**
487
487
  * This method initiates the sign-out flow.
488
488
  *
@@ -617,7 +617,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
617
617
  * @memberof AsgardeoSPAClient
618
618
  *
619
619
  * @preserve
620
- */},{key:"requestCustomGrant",value:function(t){var e,n;return yy(this,void 0,void 0,py.mark((function i(){var r,c;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(!t.signInRequired){i.next=5;break}return i.next=3,this._validateMethod();case 3:i.next=7;break;case 5:return i.next=7,this._validateMethod();case 7:if(t.id){i.next=9;break}return i.abrupt("return",Promise.reject(new lV("AUTH_CLIENT-RCG-NF01","client","requestCustomGrant","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value.")));case 9:return i.next=11,null===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t);case 11:return r=i.sent,(c=this._onCustomGrant.get(t.id))&&c(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(t.id)),i.abrupt("return",r);case 15:case"end":return i.stop()}}),i,this)})))}
620
+ */},{key:"requestCustomGrant",value:function(t){var e,n;return yy(this,void 0,void 0,py.mark((function i(){var r,c;return py.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(!t.signInRequired){i.next=5;break}return i.next=3,this._validateMethod();case 3:i.next=7;break;case 5:return i.next=7,this._validateMethod();case 7:if(t.id){i.next=9;break}return i.abrupt("return",Promise.reject(new dV("AUTH_CLIENT-RCG-NF01","client","requestCustomGrant","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value.")));case 9:return i.next=11,null===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t);case 11:return r=i.sent,(c=this._onCustomGrant.get(t.id))&&c(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(t.id)),i.abrupt("return",r);case 15:case"end":return i.stop()}}),i,this)})))}
621
621
  /**
622
622
  * This method ends a user session. The access token is revoked and the session information is destroyed.
623
623
  *
@@ -637,7 +637,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
637
637
  * @memberof AsgardeoSPAClient
638
638
  *
639
639
  * @preserve
640
- */},{key:"revokeAccessToken",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.next=4,null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();case 4:return n=e.sent,this._onEndUserSession&&this._onEndUserSession(n),e.abrupt("return",n);case 7:case"end":return e.stop()}}),e,this)})))}
640
+ */},{key:"revokeAccessToken",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.next=4,null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();case 4:if(n=e.sent,e.t0=this._onEndUserSession,!e.t0){e.next=9;break}return e.next=9,this._onEndUserSession(n);case 9:return e.abrupt("return",n);case 10:case"end":return e.stop()}}),e,this)})))}
641
641
  /**
642
642
  * This method returns a Promise that resolves with an object containing the service endpoints.
643
643
  *
@@ -666,7 +666,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
666
666
  * @memberof AsgardeoSPAClient
667
667
  *
668
668
  * @preserve
669
- */},{key:"getHttpClient",value:function(){if(this._client){if(this._storage!==t.Storage.WebWorker)return this._client.getHttpClient();throw new lV("AUTH_CLIENT-GHC-IV01","client","getHttpClient","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new lV("AUTH_CLIENT-GHC-NF02","client","getHttpClient","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK suing the initialize method before calling this method.")}
669
+ */},{key:"getHttpClient",value:function(){if(this._client){if(this._storage!==t.Storage.WebWorker)return this._client.getHttpClient();throw new dV("AUTH_CLIENT-GHC-IV01","client","getHttpClient","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new dV("AUTH_CLIENT-GHC-NF02","client","getHttpClient","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK suing the initialize method before calling this method.")}
670
670
  /**
671
671
  * This method decodes the payload of the id token and returns it.
672
672
  *
@@ -724,7 +724,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
724
724
  * @memberof AsgardeoSPAClient
725
725
  *
726
726
  * @preserve
727
- */},{key:"getAccessToken",value:function(){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:if(!this._storage||![(t.Storage.WebWorker,t.Storage.BrowserMemory)].includes(this._storage)){e.next=4;break}return e.abrupt("return",Promise.reject(new lV("AUTH_CLIENT-GAT-IV01","client","getAccessToken","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")));case 4:return n=this._client,e.abrupt("return",n.getAccessToken());case 6:case"end":return e.stop()}}),e,this)})))}
727
+ */},{key:"getAccessToken",value:function(){return yy(this,void 0,void 0,py.mark((function e(){var n;return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:if(!this._storage||![(t.Storage.WebWorker,t.Storage.BrowserMemory)].includes(this._storage)){e.next=4;break}return e.abrupt("return",Promise.reject(new dV("AUTH_CLIENT-GAT-IV01","client","getAccessToken","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")));case 4:return n=this._client,e.abrupt("return",n.getAccessToken());case 6:case"end":return e.stop()}}),e,this)})))}
728
728
  /**
729
729
  * This method refreshes the access token.
730
730
  *
@@ -754,7 +754,7 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
754
754
  * @memberof AsgardeoSPAClient
755
755
  *
756
756
  * @preserve
757
- */},{key:"isAuthenticated",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.isAuthenticated());case 3:case"end":return e.stop()}}),e,this)})))}},{key:"on",value:function(e,n,i){var r,c,l,o;return yy(this,void 0,void 0,py.mark((function a(){return py.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,this._isInitialized();case 2:if(!n||"function"!=typeof n){a.next=28;break}a.t0=e,a.next=a.t0===t.Hooks.SignIn?6:a.t0===t.Hooks.SignOut?8:a.t0===t.Hooks.RevokeAccessToken?11:a.t0===t.Hooks.Initialize?13:a.t0===t.Hooks.HttpRequestError?15:a.t0===t.Hooks.HttpRequestFinish?17:a.t0===t.Hooks.HttpRequestStart?19:a.t0===t.Hooks.HttpRequestSuccess?21:a.t0===t.Hooks.CustomGrant?23:25;break;case 6:return this._onSignInCallback=n,a.abrupt("break",26);case 8:return this._onSignOutCallback=n,aV.isSignOutSuccessful()&&this._onSignOutCallback(),a.abrupt("break",26);case 11:return this._onEndUserSession=n,a.abrupt("break",26);case 13:return this._onInitialize=n,a.abrupt("break",26);case 15:return null===(r=this._client)||void 0===r||r.setHttpRequestErrorCallback(n),a.abrupt("break",26);case 17:return null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n),a.abrupt("break",26);case 19:return null===(l=this._client)||void 0===l||l.setHttpRequestStartCallback(n),a.abrupt("break",26);case 21:return null===(o=this._client)||void 0===o||o.setHttpRequestSuccessCallback(n),a.abrupt("break",26);case 23:return i&&this._onCustomGrant.set(i,n),a.abrupt("break",26);case 25:throw new lV("AUTH_CLIENT-ON-IV01","client","on","Invalid hook.","The provided hook is invalid.");case 26:a.next=29;break;case 28:throw new lV("AUTH_CLIENT-ON-IV02","client","on","Invalid callback function.","The provided callback function is invalid.");case 29:case"end":return a.stop()}}),a,this)})))}
757
+ */},{key:"isAuthenticated",value:function(){var t;return yy(this,void 0,void 0,py.mark((function e(){return py.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.isAuthenticated());case 3:case"end":return e.stop()}}),e,this)})))}},{key:"on",value:function(e,n,i){var r,c,l,o;return yy(this,void 0,void 0,py.mark((function a(){return py.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,this._isInitialized();case 2:if(!n||"function"!=typeof n){a.next=28;break}a.t0=e,a.next=a.t0===t.Hooks.SignIn?6:a.t0===t.Hooks.SignOut?8:a.t0===t.Hooks.RevokeAccessToken?11:a.t0===t.Hooks.Initialize?13:a.t0===t.Hooks.HttpRequestError?15:a.t0===t.Hooks.HttpRequestFinish?17:a.t0===t.Hooks.HttpRequestStart?19:a.t0===t.Hooks.HttpRequestSuccess?21:a.t0===t.Hooks.CustomGrant?23:25;break;case 6:return this._onSignInCallback=n,a.abrupt("break",26);case 8:return this._onSignOutCallback=n,mV.isSignOutSuccessful()&&this._onSignOutCallback(),a.abrupt("break",26);case 11:return this._onEndUserSession=n,a.abrupt("break",26);case 13:return this._onInitialize=n,a.abrupt("break",26);case 15:return null===(r=this._client)||void 0===r||r.setHttpRequestErrorCallback(n),a.abrupt("break",26);case 17:return null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n),a.abrupt("break",26);case 19:return null===(l=this._client)||void 0===l||l.setHttpRequestStartCallback(n),a.abrupt("break",26);case 21:return null===(o=this._client)||void 0===o||o.setHttpRequestSuccessCallback(n),a.abrupt("break",26);case 23:return i&&this._onCustomGrant.set(i,n),a.abrupt("break",26);case 25:throw new dV("AUTH_CLIENT-ON-IV01","client","on","Invalid hook.","The provided hook is invalid.");case 26:a.next=29;break;case 28:throw new dV("AUTH_CLIENT-ON-IV02","client","on","Invalid callback function.","The provided callback function is invalid.");case 29:case"end":return a.stop()}}),a,this)})))}
758
758
  /**
759
759
  * This method enables callback functions attached to the http client.
760
760
  *
@@ -806,5 +806,5 @@ function(e){var n;return yy(this,void 0,void 0,py.mark((function i(){var r,c,l,o
806
806
  * @memberof AsgardeoAuthClient
807
807
  *
808
808
  * @preserve
809
- */},{key:"updateConfig",value:function(e){return yy(this,void 0,void 0,py.mark((function n(){var i,r;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._isInitialized();case 2:if(this._storage!==t.Storage.WebWorker){n.next=8;break}return i=this._client,n.next=6,i.updateConfig(e);case 6:n.next=11;break;case 8:return r=this._client,n.next=11,r.updateConfig(e);case 11:return n.abrupt("return");case 12:case"end":return n.stop()}}),n,this)})))}}],[{key:"getInstance",value:function(t){var n,i;return t&&(null===(n=this._instances)||void 0===n?void 0:n.get(t))?this._instances.get(t):!t&&(null===(i=this._instances)||void 0===i?void 0:i.get(SV))?this._instances.get(SV):t?(this._instances.set(t,new e(t)),this._instances.get(t)):(this._instances.set(SV,new e(SV)),this._instances.get(SV))}}]),e}();function YV(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return Ty(this,n)}}CV._instances=new Map;var RV=function(t){ky(n,t);var e=YV(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).onmessage=function(){return null},t}return n}(Ay(Worker));t.AUTHORIZATION_CODE=IG,t.AsgardeoAuthClient=Rf,t.AsgardeoSPAClient=CV,t.CLIENT_ID_TAG="{{clientID}}",t.CLIENT_SECRET_TAG="{{clientSecret}}",t.OIDC_SCOPE="openid",t.PKCE_CODE_VERIFIER=yG,t.REFRESH_TOKEN_TIMER=pG,t.SCOPE_TAG="{{scope}}",t.SESSION_STATE=XG,t.SIGN_OUT_SUCCESS_PARAM="sign_out_success",t.SIGN_OUT_URL=GG,t.SPAUtils=aV,t.TOKEN_TAG="{{token}}",t.USERNAME_TAG="{{username}}",t.WebWorkerClass=RV,Object.defineProperty(t,"__esModule",{value:!0})}));
809
+ */},{key:"updateConfig",value:function(e){return yy(this,void 0,void 0,py.mark((function n(){var i,r;return py.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._isInitialized();case 2:if(this._storage!==t.Storage.WebWorker){n.next=8;break}return i=this._client,n.next=6,i.updateConfig(e);case 6:n.next=11;break;case 8:return r=this._client,n.next=11,r.updateConfig(e);case 11:return n.abrupt("return");case 12:case"end":return n.stop()}}),n,this)})))}}],[{key:"getInstance",value:function(t){var n,i;return t&&(null===(n=this._instances)||void 0===n?void 0:n.get(t))?this._instances.get(t):!t&&(null===(i=this._instances)||void 0===i?void 0:i.get(KV))?this._instances.get(KV):t?(this._instances.set(t,new e(t)),this._instances.get(t)):(this._instances.set(KV,new e(KV)),this._instances.get(KV))}}]),e}();function JV(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,i=Fy(t);if(e){var r=Fy(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return wy(this,n)}}LV._instances=new Map;var xV=function(t){ky(n,t);var e=JV(n);function n(){var t;return hy(this,n),(t=e.apply(this,arguments)).onmessage=function(){return null},t}return n}(Ay(Worker));t.AUTHORIZATION_CODE=IG,t.AsgardeoAuthClient=Rf,t.AsgardeoSPAClient=LV,t.CLIENT_ID_TAG="{{clientID}}",t.CLIENT_SECRET_TAG="{{clientSecret}}",t.OIDC_SCOPE="openid",t.PKCE_CODE_VERIFIER=yG,t.REFRESH_TOKEN_TIMER=pG,t.SCOPE_TAG="{{scope}}",t.SESSION_STATE=XG,t.SIGN_OUT_SUCCESS_PARAM="sign_out_success",t.SIGN_OUT_URL=GG,t.SPAUtils=mV,t.TOKEN_TAG="{{token}}",t.USERNAME_TAG="{{username}}",t.WebWorkerClass=xV,Object.defineProperty(t,"__esModule",{value:!0})}));
810
810
  //# sourceMappingURL=asgardeo-spa.production.js.map