@asgardeo/auth-spa 3.0.0 → 3.0.2

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 (38) hide show
  1. package/dist/asgardeo-spa.production.esm.js +3 -3
  2. package/dist/asgardeo-spa.production.esm.js.map +1 -1
  3. package/dist/asgardeo-spa.production.js +3 -3
  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 +6 -6
  8. package/dist/polyfilled/asgardeo-spa.production.esm.js.map +1 -1
  9. package/dist/polyfilled/asgardeo-spa.production.js +3 -3
  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 +1 -1
  14. package/dist/src/client.d.ts.map +1 -1
  15. package/dist/src/client.js +2 -2
  16. package/dist/src/client.js.map +1 -1
  17. package/dist/src/clients/main-thread-client.d.ts.map +1 -1
  18. package/dist/src/clients/main-thread-client.js +4 -7
  19. package/dist/src/clients/main-thread-client.js.map +1 -1
  20. package/dist/src/clients/web-worker-client.d.ts.map +1 -1
  21. package/dist/src/clients/web-worker-client.js +4 -7
  22. package/dist/src/clients/web-worker-client.js.map +1 -1
  23. package/dist/src/helpers/authentication-helper.d.ts +1 -1
  24. package/dist/src/helpers/authentication-helper.d.ts.map +1 -1
  25. package/dist/src/helpers/authentication-helper.js +2 -2
  26. package/dist/src/helpers/authentication-helper.js.map +1 -1
  27. package/dist/src/helpers/session-management-helper.js +1 -1
  28. package/dist/src/helpers/session-management-helper.js.map +1 -1
  29. package/dist/src/models/client.d.ts +2 -2
  30. package/dist/src/models/client.d.ts.map +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +1 -1
  33. package/src/client.ts +4 -2
  34. package/src/clients/main-thread-client.ts +10 -4
  35. package/src/clients/web-worker-client.ts +10 -4
  36. package/src/helpers/authentication-helper.ts +4 -3
  37. package/src/helpers/session-management-helper.ts +1 -1
  38. package/src/models/client.ts +2 -2
@@ -1,2 +1,2 @@
1
- var AsgardeoAuth=function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),a=o,r=function(e){try{return!!e()}catch(e){return!0}},c=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),s=c,d=Function.prototype,u=d.bind,h=d.call,Z=s&&u.bind(h,h),b=s?function(e){return e&&Z(e)}:function(e){return e&&function(){return h.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},y=p,G=Object,X=function(e){return G(y(e))},W=X,V=b({}.hasOwnProperty),I=Object.hasOwn||function(e,t){return V(W(e),t)},g={},S={exports:{}},f=o,R=Object.defineProperty,v=function(e,t){try{R(f,e,{value:t,configurable:!0,writable:!0})}catch(i){f[e]=t}return t},Y=v,K="__core-js_shared__",N=o[K]||Y(K,{}),C=N;(S.exports=function(e,t){return C[e]||(C[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var L,U,k=b,J=0,T=Math.random(),H=k(1..toString),x=function(e){return"Symbol("+(void 0===e?"":e)+")_"+H(++J+T,36)},w=function(e){return"function"==typeof e},F=o,z=w,P=function(e){return z(e)?e:void 0},B=function(e,t){return arguments.length<2?P(F[e]):F[e]&&F[e][t]},M=B("navigator","userAgent")||"",j=o,Q=M,E=j.process,D=j.Deno,O=E&&E.versions||D&&D.version,A=O&&O.v8;A&&(U=(L=A.split("."))[0]>0&&L[0]<4?1:+(L[0]+L[1])),!U&&Q&&(!(L=Q.match(/Edge\/(\d+)/))||L[1]>=74)&&(L=Q.match(/Chrome\/(\d+)/))&&(U=+L[1]);var _=U,q=_,$=r,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=S.exports,le=I,oe=x,ae=ee,re=te,ce=ne("wks"),se=ie.Symbol,de=se&&se.for,ue=re?se:se&&se.withoutSetter||oe,he=function(e){if(!le(ce,e)||!ae&&"string"!=typeof ce[e]){var t="Symbol."+e;ae&&le(se,e)?ce[e]=se[e]:ce[e]=re&&de?de(t):ue(t)}return ce[e]},Ze=he;g.f=Ze;var be={},me=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=w,ye=function(e){return"object"==typeof e?null!==e:pe(e)},Ge=ye,Xe=o.document,We=Ge(Xe)&&Ge(Xe.createElement),Ve=function(e){return We?Xe.createElement(e):{}},Ie=Ve,ge=!me&&!r((function(){return 7!=Object.defineProperty(Ie("div"),"a",{get:function(){return 7}}).a})),Se=me&&r((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),fe=ye,Re=String,ve=TypeError,Ye=function(e){if(fe(e))return e;throw ve(Re(e)+" is not an object")},Ke=c,Ne=Function.prototype.call,Ce=Ke?Ne.bind(Ne):function(){return Ne.apply(Ne,arguments)},Le=b({}.isPrototypeOf),Ue=B,ke=w,Je=Le,Te=Object,He=te?function(e){return"symbol"==typeof e}:function(e){var t=Ue("Symbol");return ke(t)&&Je(t.prototype,Te(e))},xe=String,we=function(e){try{return xe(e)}catch(e){return"Object"}},Fe=w,ze=we,Pe=TypeError,Be=function(e){if(Fe(e))return e;throw Pe(ze(e)+" is not a function")},Me=Be,je=function(e,t){var i=e[t];return null==i?void 0:Me(i)},Qe=Ce,Ee=w,De=ye,Oe=TypeError,Ae=Ce,_e=ye,qe=He,$e=je,et=function(e,t){var i,n;if("string"===t&&Ee(i=e.toString)&&!De(n=Qe(i,e)))return n;if(Ee(i=e.valueOf)&&!De(n=Qe(i,e)))return n;if("string"!==t&&Ee(i=e.toString)&&!De(n=Qe(i,e)))return n;throw Oe("Can't convert object to primitive value")},tt=TypeError,it=he("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Ae(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=He,at=function(e){var t=lt(e,"string");return ot(t)?t:t+""},rt=me,ct=ge,st=Se,dt=Ye,ut=at,ht=TypeError,Zt=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",yt="writable";be.f=rt?st?function(e,t,i){if(dt(e),t=ut(t),dt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&yt in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return Zt(e,t,i)}:Zt:function(e,t,i){if(dt(e),t=ut(t),dt(i),ct)try{return Zt(e,t,i)}catch(e){}if("get"in i||"set"in i)throw ht("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var Gt=a,Xt=I,Wt=g,Vt=be.f,It=function(e){var t=Gt.Symbol||(Gt.Symbol={});Xt(t,e)||Vt(t,e,{value:Wt.f(e)})};It("matchAll");var gt={},St={},ft={}.propertyIsEnumerable,Rt=Object.getOwnPropertyDescriptor,vt=Rt&&!ft.call({1:2},1);St.f=vt?function(e){var t=Rt(this,e);return!!t&&t.enumerable}:ft;var Yt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Kt=b,Nt=Kt({}.toString),Ct=Kt("".slice),Lt=function(e){return Ct(Nt(e),8,-1)},Ut=r,kt=Lt,Jt=Object,Tt=b("".split),Ht=Ut((function(){return!Jt("z").propertyIsEnumerable(0)}))?function(e){return"String"==kt(e)?Tt(e,""):Jt(e)}:Jt,xt=Ht,wt=p,Ft=function(e){return xt(wt(e))},zt=me,Pt=Ce,Bt=St,Mt=Yt,jt=Ft,Qt=at,Et=I,Dt=ge,Ot=Object.getOwnPropertyDescriptor;gt.f=zt?Ot:function(e,t){if(e=jt(e),t=Qt(t),Dt)try{return Ot(e,t)}catch(e){}if(Et(e,t))return Mt(!Pt(Bt.f,e,t),e[t])};var At=be,_t=Yt,qt=me?function(e,t,i){return At.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=I,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ai=w,ri=N,ci=b(Function.toString);ai(ri.inspectSource)||(ri.inspectSource=function(e){return ci(e)});var si,di,ui,hi=ri.inspectSource,Zi=w,bi=hi,mi=o.WeakMap,pi=Zi(mi)&&/native code/.test(bi(mi)),yi=S.exports,Gi=x,Xi=yi("keys"),Wi=function(e){return Xi[e]||(Xi[e]=Gi(e))},Vi={},Ii=pi,gi=o,Si=b,fi=ye,Ri=qt,vi=I,Yi=N,Ki=Wi,Ni=Vi,Ci="Object already initialized",Li=gi.TypeError,Ui=gi.WeakMap;if(Ii||Yi.state){var ki=Yi.state||(Yi.state=new Ui),Ji=Si(ki.get),Ti=Si(ki.has),Hi=Si(ki.set);si=function(e,t){if(Ti(ki,e))throw new Li(Ci);return t.facade=e,Hi(ki,e,t),t},di=function(e){return Ji(ki,e)||{}},ui=function(e){return Ti(ki,e)}}else{var xi=Ki("state");Ni[xi]=!0,si=function(e,t){if(vi(e,xi))throw new Li(Ci);return t.facade=e,Ri(e,xi,t),t},di=function(e){return vi(e,xi)?e[xi]:{}},ui=function(e){return vi(e,xi)}}var wi={set:si,get:di,has:ui,enforce:function(e){return ui(e)?di(e):si(e,{})},getterFor:function(e){return function(t){var i;if(!fi(t)||(i=di(t)).type!==e)throw Li("Incompatible receiver, "+e+" required");return i}}},Fi=r,zi=w,Pi=I,Bi=me,Mi=oi.CONFIGURABLE,ji=hi,Qi=wi.enforce,Ei=wi.get,Di=Object.defineProperty,Oi=Bi&&!Fi((function(){return 8!==Di((function(){}),"length",{value:8}).length})),Ai=String(String).split("String"),_i=$t.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!Pi(e,"name")||Mi&&e.name!==t)&&(Bi?Di(e,"name",{value:t,configurable:!0}):e.name=t),Oi&&i&&Pi(i,"arity")&&e.length!==i.arity&&Di(e,"length",{value:i.arity});try{i&&Pi(i,"constructor")&&i.constructor?Bi&&Di(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Qi(e);return Pi(n,"source")||(n.source=Ai.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return zi(this)&&Ei(this).source||ji(this)}),"toString");var qi=w,$i=be,en=$t.exports,tn=v,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,an=Math.floor,rn=Math.trunc||function(e){var t=+e;return(t>0?an:on)(t)},cn=rn,sn=function(e){var t=+e;return t!=t||0===t?0:cn(t)},dn=sn,un=Math.max,hn=Math.min,Zn=function(e,t){var i=dn(e);return i<0?un(i+t,0):hn(i,t)},bn=sn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},yn=pn,Gn=function(e){return yn(e.length)},Xn=Ft,Wn=Zn,Vn=Gn,In=function(e){return function(t,i,n){var l,o=Xn(t),a=Vn(o),r=Wn(n,a);if(e&&i!=i){for(;a>r;)if((l=o[r++])!=l)return!0}else for(;a>r;r++)if((e||r in o)&&o[r]===i)return e||r||0;return!e&&-1}},gn={includes:In(!0),indexOf:In(!1)},Sn=I,fn=Ft,Rn=gn.indexOf,vn=Vi,Yn=b([].push),Kn=function(e,t){var i,n=fn(e),l=0,o=[];for(i in n)!Sn(vn,i)&&Sn(n,i)&&Yn(o,i);for(;t.length>l;)Sn(n,i=t[l++])&&(~Rn(o,i)||Yn(o,i));return o},Nn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Cn=Kn,Ln=Nn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Cn(e,Ln)};var Un={};Un.f=Object.getOwnPropertySymbols;var kn=B,Jn=ln,Tn=Un,Hn=Ye,xn=b([].concat),wn=kn("Reflect","ownKeys")||function(e){var t=Jn.f(Hn(e)),i=Tn.f;return i?xn(t,i(e)):t},Fn=I,zn=wn,Pn=gt,Bn=be,Mn=r,jn=w,Qn=/#|\.prototype\./,En=function(e,t){var i=On[Dn(e)];return i==_n||i!=An&&(jn(t)?Mn(t):!!t)},Dn=En.normalize=function(e){return String(e).replace(Qn,".").toLowerCase()},On=En.data={},An=En.NATIVE="N",_n=En.POLYFILL="P",qn=En,$n=o,el=gt.f,tl=qt,il=nn,nl=v,ll=function(e,t,i){for(var n=zn(t),l=Bn.f,o=Pn.f,a=0;a<n.length;a++){var r=n[a];Fn(e,r)||i&&Fn(i,r)||l(e,r,o(t,r))}},ol=qn,al=function(e,t){var i,n,l,o,a,r=e.target,c=e.global,s=e.stat;if(i=c?$n:s?$n[r]||nl(r,{}):($n[r]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(a=el(i,n))&&a.value:i[n],!ol(c?n:r+(s?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},rl={},cl=Kn,sl=Nn,dl=Object.keys||function(e){return cl(e,sl)},ul=me,hl=Se,Zl=be,bl=Ye,ml=Ft,pl=dl;rl.f=ul&&!hl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,a=0;o>a;)Zl.f(e,i=l[a++],n[i]);return e};var yl,Gl=B("document","documentElement"),Xl=Ye,Wl=rl,Vl=Nn,Il=Vi,gl=Gl,Sl=Ve,fl=Wi("IE_PROTO"),Rl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},Yl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Kl=function(){try{yl=new ActiveXObject("htmlfile")}catch(e){}var e,t;Kl="undefined"!=typeof document?document.domain&&yl?Yl(yl):((t=Sl("iframe")).style.display="none",gl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):Yl(yl);for(var i=Vl.length;i--;)delete Kl.prototype[Vl[i]];return Kl()};Il[fl]=!0;var Nl=Object.create||function(e,t){var i;return null!==e?(Rl.prototype=Xl(e),i=new Rl,Rl.prototype=null,i[fl]=e):i=Kl(),void 0===t?i:Wl.f(i,t)},Cl=he,Ll=Nl,Ul=be.f,kl=Cl("unscopables"),Jl=Array.prototype;null==Jl[kl]&&Ul(Jl,kl,{configurable:!0,value:Ll(null)});var Tl=function(e){Jl[kl][e]=!0},Hl=gn.includes,xl=Tl;al({target:"Array",proto:!0,forced:r((function(){return!Array(1).includes()}))},{includes:function(e){return Hl(this,e,arguments.length>1?arguments[1]:void 0)}}),xl("includes"),Tl("flat"),Tl("flatMap");var wl={},Fl=Be,zl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Fl(t),this.reject=Fl(i)};wl.f=function(e){return new zl(e)};var Pl=Be,Bl=c,Ml=b(b.bind),jl=function(e,t){return Pl(e),void 0===t?e:Bl?Ml(e,t):function(){return e.apply(t,arguments)}},Ql={},El=Ql,Dl=he("iterator"),Ol=Array.prototype,Al=function(e){return void 0!==e&&(El.Array===e||Ol[Dl]===e)},_l={};_l[he("toStringTag")]="z";var ql="[object z]"===String(_l),$l=w,eo=Lt,to=he("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,ao=je,ro=Ql,co=he("iterator"),so=function(e){if(null!=e)return ao(e,co)||ao(e,"@@iterator")||ro[oo(e)]},uo=Ce,ho=Be,Zo=Ye,bo=we,mo=so,po=TypeError,yo=function(e,t){var i=arguments.length<2?mo(e):t;if(ho(i))return Zo(uo(i,e));throw po(bo(e)+" is not iterable")},Go=Ce,Xo=Ye,Wo=je,Vo=function(e,t,i){var n,l;Xo(e);try{if(!(n=Wo(e,"return"))){if("throw"===t)throw i;return i}n=Go(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return Xo(n),i},Io=jl,go=Ce,So=Ye,fo=we,Ro=Al,vo=Gn,Yo=Le,Ko=yo,No=so,Co=Vo,Lo=TypeError,Uo=function(e,t){this.stopped=e,this.result=t},ko=Uo.prototype,Jo=Ce,To=Be,Ho=wl,xo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},wo=function(e,t,i){var n,l,o,a,r,c,s,d=i&&i.that,u=!(!i||!i.AS_ENTRIES),h=!(!i||!i.IS_RECORD),Z=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Io(t,d),p=function(e){return n&&Co(n,"normal",e),new Uo(!0,e)},y=function(e){return u?(So(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(h)n=e.iterator;else if(Z)n=e;else{if(!(l=No(e)))throw Lo(fo(e)+" is not iterable");if(Ro(l)){for(o=0,a=vo(e);a>o;o++)if((r=y(e[o]))&&Yo(ko,r))return r;return new Uo(!1)}n=Ko(e,l)}for(c=h?e.next:n.next;!(s=go(c,n)).done;){try{r=y(s.value)}catch(e){Co(n,"throw",e)}if("object"==typeof r&&r&&Yo(ko,r))return r}return new Uo(!1)};al({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Ho.f(t),n=i.resolve,l=i.reject,o=xo((function(){var i=To(t.resolve),l=[],o=0,a=1;wo(e,(function(e){var r=o++,c=!1;a++,Jo(i,t,e).then((function(e){c||(c=!0,l[r]={status:"fulfilled",value:e},--a||n(l))}),(function(e){c||(c=!0,l[r]={status:"rejected",reason:e},--a||n(l))}))})),--a||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,zo=b,Po=r,Bo=w,Mo=lo,jo=hi,Qo=function(){},Eo=[],Do=B("Reflect","construct"),Oo=/^\s*(?:class|function)\b/,Ao=zo(Oo.exec),_o=!Oo.exec(Qo),qo=function(e){if(!Bo(e))return!1;try{return Do(Qo,Eo,e),!0}catch(e){return!1}},$o=function(e){if(!Bo(e))return!1;switch(Mo(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Ao(Oo,jo(e))}catch(e){return!0}};$o.sham=!0;var ea=!Do||Po((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,ta=ea,ia=we,na=TypeError,la=function(e){if(ta(e))return e;throw na(ia(e)+" is not a constructor")},oa=Ye,aa=la,ra=he("species"),ca=function(e,t){var i,n=oa(e).constructor;return void 0===n||null==(i=oa(n)[ra])?t:aa(i)},sa=Ye,da=ye,ua=wl,ha=al,Za=Fo,ba=r,ma=B,pa=w,ya=ca,Ga=function(e,t){if(sa(e),da(t)&&t.constructor===e)return t;var i=ua.f(e);return(0,i.resolve)(t),i.promise},Xa=nn,Wa=Za&&Za.prototype;if(ha({target:"Promise",proto:!0,real:!0,forced:!!Za&&ba((function(){Wa.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=ya(this,ma("Promise")),i=pa(e);return this.then(i?function(i){return Ga(t,e()).then((function(){return i}))}:e,i?function(i){return Ga(t,e()).then((function(){throw i}))}:e)}}),pa(Za)){var Va=ma("Promise").prototype.finally;Wa.finally!==Va&&Xa(Wa,"finally",Va,{unsafe:!0})}var Ia=$t.exports,ga=be,Sa=function(e,t,i){return i.get&&Ia(i.get,t,{getter:!0}),i.set&&Ia(i.set,t,{setter:!0}),ga.f(e,t,i)},fa=Ye,Ra=function(){var e=fa(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},va=me,Ya=Sa,Ka=Ra,Na=r,Ca=o.RegExp,La=Ca.prototype,Ua=va&&Na((function(){var e=!0;try{Ca(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var a in e&&(o.hasIndices="d"),o)l(a,o[a]);return Object.getOwnPropertyDescriptor(La,"flags").get.call(t)!==n||i!==n}));Ua&&Ya(La,"flags",{configurable:!0,get:Ka});var ka,Ja,Ta,Ha=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),xa=I,wa=w,Fa=X,za=Ha,Pa=Wi("IE_PROTO"),Ba=Object,Ma=Ba.prototype,ja=za?Ba.getPrototypeOf:function(e){var t=Fa(e);if(xa(t,Pa))return t[Pa];var i=t.constructor;return wa(i)&&t instanceof i?i.prototype:t instanceof Ba?Ma:null},Qa=r,Ea=w,Da=ja,Oa=nn,Aa=he("iterator"),_a=!1;[].keys&&("next"in(Ta=[].keys())?(Ja=Da(Da(Ta)))!==Object.prototype&&(ka=Ja):_a=!0);var qa=null==ka||Qa((function(){var e={};return ka[Aa].call(e)!==e}));qa&&(ka={}),Ea(ka[Aa])||Oa(ka,Aa,(function(){return this}));var $a,er,tr={IteratorPrototype:ka,BUGGY_SAFARI_ITERATORS:_a},ir=be.f,nr=I,lr=he("toStringTag"),or=function(e,t,i){e&&!i&&(e=e.prototype),e&&!nr(e,lr)&&ir(e,lr,{configurable:!0,value:t})},ar=tr.IteratorPrototype,rr=Nl,cr=Yt,sr=or,dr=Ql,ur=function(){return this},hr=function(e,t,i,n){var l=t+" Iterator";return e.prototype=rr(ar,{next:cr(+!n,i)}),sr(e,l,!1),dr[l]=ur,e},Zr=lo,br=String,mr=function(e){if("Symbol"===Zr(e))throw TypeError("Cannot convert a Symbol value to a string");return br(e)},pr=ye,yr=Lt,Gr=he("match"),Xr=Ce,Wr=I,Vr=Le,Ir=Ra,gr=RegExp.prototype,Sr=b,fr=sn,Rr=mr,vr=p,Yr=Sr("".charAt),Kr=Sr("".charCodeAt),Nr=Sr("".slice),Cr=function(e){return function(t,i){var n,l,o=Rr(vr(t)),a=fr(i),r=o.length;return a<0||a>=r?e?"":void 0:(n=Kr(o,a))<55296||n>56319||a+1===r||(l=Kr(o,a+1))<56320||l>57343?e?Yr(o,a):n:e?Nr(o,a,a+2):l-56320+(n-55296<<10)+65536}},Lr={codeAt:Cr(!1),charAt:Cr(!0)},Ur=Lr.charAt,kr=function(e,t,i){return t+(i?Ur(e,t).length:1)},Jr=r,Tr=o.RegExp,Hr=Jr((function(){var e=Tr("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),xr=Hr||Jr((function(){return!Tr("a","y").sticky})),wr={BROKEN_CARET:Hr||Jr((function(){var e=Tr("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:xr,UNSUPPORTED_Y:Hr},Fr=r,zr=o.RegExp,Pr=Fr((function(){var e=zr(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Br=r,Mr=o.RegExp,jr=Br((function(){var e=Mr("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Qr=Ce,Er=b,Dr=mr,Or=Ra,Ar=wr,_r=S.exports,qr=Nl,$r=wi.get,ec=Pr,tc=jr,ic=_r("native-string-replace",String.prototype.replace),nc=RegExp.prototype.exec,lc=nc,oc=Er("".charAt),ac=Er("".indexOf),rc=Er("".replace),cc=Er("".slice),sc=(er=/b*/g,Qr(nc,$a=/a/,"a"),Qr(nc,er,"a"),0!==$a.lastIndex||0!==er.lastIndex),dc=Ar.BROKEN_CARET,uc=void 0!==/()??/.exec("")[1];(sc||uc||dc||ec||tc)&&(lc=function(e){var t,i,n,l,o,a,r,c=this,s=$r(c),d=Dr(e),u=s.raw;if(u)return u.lastIndex=c.lastIndex,t=Qr(lc,u,d),c.lastIndex=u.lastIndex,t;var h=s.groups,Z=dc&&c.sticky,b=Qr(Or,c),m=c.source,p=0,y=d;if(Z&&(b=rc(b,"y",""),-1===ac(b,"g")&&(b+="g"),y=cc(d,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&"\n"!==oc(d,c.lastIndex-1))&&(m="(?: "+m+")",y=" "+y,p++),i=new RegExp("^(?:"+m+")",b)),uc&&(i=new RegExp("^"+m+"$(?!\\s)",b)),sc&&(n=c.lastIndex),l=Qr(nc,Z?i:c,y),Z?l?(l.input=cc(l.input,p),l[0]=cc(l[0],p),l.index=c.lastIndex,c.lastIndex+=l[0].length):c.lastIndex=0:sc&&l&&(c.lastIndex=c.global?l.index+l[0].length:n),uc&&l&&l.length>1&&Qr(ic,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&h)for(l.groups=a=qr(null),o=0;o<h.length;o++)a[(r=h[o])[0]]=l[r[1]];return l});var hc=lc,Zc=Ce,bc=Ye,mc=w,pc=Lt,yc=hc,Gc=TypeError,Xc=function(e,t){var i=e.exec;if(mc(i)){var n=Zc(i,e,t);return null!==n&&bc(n),n}if("RegExp"===pc(e))return Zc(yc,e,t);throw Gc("RegExp#exec called on incompatible receiver")},Wc=al,Vc=Ce,Ic=b,gc=hr,Sc=p,fc=pn,Rc=mr,vc=Ye,Yc=function(e){var t;return pr(e)&&(void 0!==(t=e[Gr])?!!t:"RegExp"==yr(e))},Kc=function(e){var t=e.flags;return void 0!==t||"flags"in gr||Wr(e,"flags")||!Vr(gr,e)?t:Xr(Ir,e)},Nc=je,Cc=nn,Lc=r,Uc=ca,kc=kr,Jc=Xc,Tc=wi,Hc=he("matchAll"),xc="RegExp String",wc="RegExp String Iterator",Fc=Tc.set,zc=Tc.getterFor(wc),Pc=RegExp.prototype,Bc=TypeError,Mc=Ic("".indexOf),jc=Ic("".matchAll),Qc=!!jc&&!Lc((function(){jc("a",/./)})),Ec=gc((function(e,t,i,n){Fc(this,{type:wc,regexp:e,string:t,global:i,unicode:n,done:!1})}),xc,(function(){var e=zc(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=Jc(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===Rc(n[0])&&(t.lastIndex=kc(i,fc(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Dc=function(e){var t,i,n,l=vc(this),o=Rc(e),a=Uc(l,RegExp),r=Rc(Kc(l));return t=new a(a===RegExp?l.source:l,r),i=!!~Mc(r,"g"),n=!!~Mc(r,"u"),t.lastIndex=fc(l.lastIndex),new Ec(t,o,i,n)};Wc({target:"String",proto:!0,forced:Qc},{matchAll:function(e){var t,i,n,l=Sc(this);if(null!=e){if(Yc(e)&&(t=Rc(Sc(Kc(e))),!~Mc(t,"g")))throw Bc("`.matchAll` does not allow non-global regexes");if(Qc)return jc(l,e);if(n=Nc(e,Hc))return Vc(n,e,l)}else if(Qc)return jc(l,e);return i=Rc(l),new RegExp(e,"g")[Hc](i)}}),Hc in Pc||Cc(Pc,Hc,Dc);var Oc=c,Ac=Function.prototype,_c=Ac.apply,qc=Ac.call,$c="object"==typeof Reflect&&Reflect.apply||(Oc?qc.bind(_c):function(){return qc.apply(_c,arguments)});al({target:"RegExp",proto:!0,forced:/./.exec!==hc},{exec:hc});var es=b,ts=nn,is=hc,ns=r,ls=he,os=qt,as=ls("species"),rs=RegExp.prototype,cs=b,ss=X,ds=Math.floor,us=cs("".charAt),hs=cs("".replace),Zs=cs("".slice),bs=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ms=/\$([$&'`]|\d{1,2})/g,ps=$c,ys=Ce,Gs=b,Xs=function(e,t,i,n){var l=ls(e),o=!ns((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),a=o&&!ns((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[as]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!a||i){var r=es(/./[l]),c=t(l,""[e],(function(e,t,i,n,l){var a=es(e),c=t.exec;return c===is||c===rs.exec?o&&!l?{done:!0,value:r(t,i,n)}:{done:!0,value:a(i,t,n)}:{done:!1}}));ts(String.prototype,e,c[0]),ts(rs,l,c[1])}n&&os(rs[l],"sham",!0)},Ws=r,Vs=Ye,Is=w,gs=sn,Ss=pn,fs=mr,Rs=p,vs=kr,Ys=je,Ks=function(e,t,i,n,l,o){var a=i+e.length,r=n.length,c=ms;return void 0!==l&&(l=ss(l),c=bs),hs(o,c,(function(o,c){var s;switch(us(c,0)){case"$":return"$";case"&":return e;case"`":return Zs(t,0,i);case"'":return Zs(t,a);case"<":s=l[Zs(c,1,-1)];break;default:var d=+c;if(0===d)return o;if(d>r){var u=ds(d/10);return 0===u?o:u<=r?void 0===n[u-1]?us(c,1):n[u-1]+us(c,1):o}s=n[d-1]}return void 0===s?"":s}))},Ns=Xc,Cs=he("replace"),Ls=Math.max,Us=Math.min,ks=Gs([].concat),Js=Gs([].push),Ts=Gs("".indexOf),Hs=Gs("".slice),xs="$0"==="a".replace(/./,"$0"),ws=!!/./[Cs]&&""===/./[Cs]("a","$0");Xs("replace",(function(e,t,i){var n=ws?"$":"$0";return[function(e,i){var n=Rs(this),l=null==e?void 0:Ys(e,Cs);return l?ys(l,e,n,i):ys(t,fs(n),e,i)},function(e,l){var o=Vs(this),a=fs(e);if("string"==typeof l&&-1===Ts(l,n)&&-1===Ts(l,"$<")){var r=i(t,o,a,l);if(r.done)return r.value}var c=Is(l);c||(l=fs(l));var s=o.global;if(s){var d=o.unicode;o.lastIndex=0}for(var u=[];;){var h=Ns(o,a);if(null===h)break;if(Js(u,h),!s)break;""===fs(h[0])&&(o.lastIndex=vs(a,Ss(o.lastIndex),d))}for(var Z,b="",m=0,p=0;p<u.length;p++){for(var y=fs((h=u[p])[0]),G=Ls(Us(gs(h.index),a.length),0),X=[],W=1;W<h.length;W++)Js(X,void 0===(Z=h[W])?Z:String(Z));var V=h.groups;if(c){var I=ks([y],X,G,a);void 0!==V&&Js(I,V);var g=fs(ps(l,void 0,I))}else g=Ks(y,a,G,X,V,l);G>=m&&(b+=Hs(a,m,G)+g,m=G+y.length)}return b+Hs(a,m)}]}),!!Ws((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!xs||ws);var Fs={exports:{}},zs=he("iterator"),Ps=!1;try{var Bs=0,Ms={next:function(){return{done:!!Bs++}},return:function(){Ps=!0}};Ms[zs]=function(){return this},Array.from(Ms,(function(){throw 2}))}catch(e){}var js,Qs,Es,Ds="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Os=w,As=String,_s=TypeError,qs=b,$s=Ye,ed=function(e){if("object"==typeof e||Os(e))return e;throw _s("Can't set "+As(e)+" as a prototype")},td=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $s(i),ed(n),t?e(i,n):i.__proto__=n,i}}():void 0),id=Ds,nd=me,ld=o,od=w,ad=ye,rd=I,cd=lo,sd=we,dd=qt,ud=nn,hd=be.f,Zd=Le,bd=ja,md=td,pd=he,yd=x,Gd=wi.enforce,Xd=wi.get,Wd=ld.Int8Array,Vd=Wd&&Wd.prototype,Id=ld.Uint8ClampedArray,gd=Id&&Id.prototype,Sd=Wd&&bd(Wd),fd=Vd&&bd(Vd),Rd=Object.prototype,vd=ld.TypeError,Yd=pd("toStringTag"),Kd=yd("TYPED_ARRAY_TAG"),Nd="TypedArrayConstructor",Cd=id&&!!md&&"Opera"!==cd(ld.opera),Ld=!1,Ud={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},kd={BigInt64Array:8,BigUint64Array:8},Jd=function(e){var t=bd(e);if(ad(t)){var i=Xd(t);return i&&rd(i,Nd)?i.TypedArrayConstructor:Jd(t)}},Td=function(e){if(!ad(e))return!1;var t=cd(e);return rd(Ud,t)||rd(kd,t)};for(js in Ud)(Es=(Qs=ld[js])&&Qs.prototype)?Gd(Es).TypedArrayConstructor=Qs:Cd=!1;for(js in kd)(Es=(Qs=ld[js])&&Qs.prototype)&&(Gd(Es).TypedArrayConstructor=Qs);if((!Cd||!od(Sd)||Sd===Function.prototype)&&(Sd=function(){throw vd("Incorrect invocation")},Cd))for(js in Ud)ld[js]&&md(ld[js],Sd);if((!Cd||!fd||fd===Rd)&&(fd=Sd.prototype,Cd))for(js in Ud)ld[js]&&md(ld[js].prototype,fd);if(Cd&&bd(gd)!==fd&&md(gd,fd),nd&&!rd(fd,Yd))for(js in Ld=!0,hd(fd,Yd,{get:function(){return ad(this)?this[Kd]:void 0}}),Ud)ld[js]&&dd(ld[js],Kd,js);var Hd={NATIVE_ARRAY_BUFFER_VIEWS:Cd,TYPED_ARRAY_TAG:Ld&&Kd,aTypedArray:function(e){if(Td(e))return e;throw vd("Target is not a typed array")},aTypedArrayConstructor:function(e){if(od(e)&&(!md||Zd(Sd,e)))return e;throw vd(sd(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(nd){if(i)for(var l in Ud){var o=ld[l];if(o&&rd(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}fd[e]&&!i||ud(fd,e,i?t:Cd&&Vd[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(nd){if(md){if(i)for(n in Ud)if((l=ld[n])&&rd(l,e))try{delete l[e]}catch(e){}if(Sd[e]&&!i)return;try{return ud(Sd,e,i?t:Cd&&Sd[e]||t)}catch(e){}}for(n in Ud)!(l=ld[n])||l[e]&&!i||ud(l,e,t)}},getTypedArrayConstructor:Jd,isView:function(e){if(!ad(e))return!1;var t=cd(e);return"DataView"===t||rd(Ud,t)||rd(kd,t)},isTypedArray:Td,TypedArray:Sd,TypedArrayPrototype:fd},xd=o,wd=r,Fd=function(e,t){if(!t&&!Ps)return!1;var i=!1;try{var n={};n[zs]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},zd=Hd.NATIVE_ARRAY_BUFFER_VIEWS,Pd=xd.ArrayBuffer,Bd=xd.Int8Array,Md=!zd||!wd((function(){Bd(1)}))||!wd((function(){new Bd(-1)}))||!Fd((function(e){new Bd,new Bd(null),new Bd(1.5),new Bd(e)}),!0)||wd((function(){return 1!==new Bd(new Pd(2),1,void 0).length})),jd=nn,Qd=function(e,t,i){for(var n in t)jd(e,n,t[n],i);return e},Ed=Le,Dd=TypeError,Od=function(e,t){if(Ed(t,e))return e;throw Dd("Incorrect invocation")},Ad=sn,_d=pn,qd=RangeError,$d=function(e){if(void 0===e)return 0;var t=Ad(e),i=_d(t);if(t!==i)throw qd("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,au={pack:function(e,t,i){var n,l,o,a=eu(i),r=8*i-t-1,c=(1<<r)-1,s=c>>1,d=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,h=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=c):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+s>=1?d/o:d*iu(2,1-s))*o>=2&&(n++,o/=2),n+s>=c?(l=0,n=c):n+s>=1?(l=(e*o-1)*iu(2,t),n+=s):(l=e*iu(2,s-1)*iu(2,t),n=0));t>=8;)a[h++]=255&l,l/=256,t-=8;for(n=n<<t|l,r+=t;r>0;)a[h++]=255&n,n/=256,r-=8;return a[--h]|=128*u,a},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,a=o>>1,r=l-7,c=n-1,s=e[c--],d=127&s;for(s>>=7;r>0;)d=256*d+e[c--],r-=8;for(i=d&(1<<-r)-1,d>>=-r,r+=t;r>0;)i=256*i+e[c--],r-=8;if(0===d)d=1-a;else{if(d===o)return i?NaN:s?-1/0:1/0;i+=iu(2,t),d-=a}return(s?-1:1)*i*iu(2,d-t)}},ru=X,cu=Zn,su=Gn,du=function(e){for(var t=ru(this),i=su(t),n=arguments.length,l=cu(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,a=void 0===o?i:cu(o,i);a>l;)t[l++]=e;return t},uu=at,hu=be,Zu=Yt,bu=function(e,t,i){var n=uu(t);n in e?hu.f(e,n,Zu(0,i)):e[n]=i},mu=Zn,pu=Gn,yu=bu,Gu=Array,Xu=Math.max,Wu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),a=Gu(Xu(o-l,0)),r=0;l<o;l++,r++)yu(a,r,e[l]);return a.length=r,a},Vu=o,Iu=b,gu=me,Su=Ds,fu=oi,Ru=qt,vu=Qd,Yu=r,Ku=Od,Nu=sn,Cu=pn,Lu=$d,Uu=au,ku=ja,Ju=td,Tu=ln.f,Hu=be.f,xu=du,wu=Wu,Fu=or,zu=fu.PROPER,Pu=fu.CONFIGURABLE,Bu=wi.get,Mu=wi.set,ju="ArrayBuffer",Qu="DataView",Eu="Wrong index",Du=Vu.ArrayBuffer,Ou=Du,Au=Ou&&Ou.prototype,_u=Vu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eh=Vu.Array,th=Vu.RangeError,ih=Iu(xu),nh=Iu([].reverse),lh=Uu.pack,oh=Uu.unpack,ah=function(e){return[255&e]},rh=function(e){return[255&e,e>>8&255]},ch=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},sh=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},dh=function(e){return lh(e,23,4)},uh=function(e){return lh(e,52,8)},hh=function(e,t){Hu(e.prototype,t,{get:function(){return Bu(this)[t]}})},Zh=function(e,t,i,n){var l=Lu(i),o=Bu(e);if(l+t>o.byteLength)throw th(Eu);var a=Bu(o.buffer).bytes,r=l+o.byteOffset,c=wu(a,r,r+t);return n?c:nh(c)},bh=function(e,t,i,n,l,o){var a=Lu(i),r=Bu(e);if(a+t>r.byteLength)throw th(Eu);for(var c=Bu(r.buffer).bytes,s=a+r.byteOffset,d=n(+l),u=0;u<t;u++)c[s+u]=d[o?u:t-u-1]};if(Su){var mh=zu&&Du.name!==ju;if(Yu((function(){Du(1)}))&&Yu((function(){new Du(-1)}))&&!Yu((function(){return new Du,new Du(1.5),new Du(NaN),mh&&!Pu})))mh&&Pu&&Ru(Du,"name",ju);else{(Ou=function(e){return Ku(this,Au),new Du(Lu(e))}).prototype=Au;for(var ph,yh=Tu(Du),Gh=0;yh.length>Gh;)(ph=yh[Gh++])in Ou||Ru(Ou,ph,Du[ph]);Au.constructor=Ou}Ju&&ku(qu)!==$u&&Ju(qu,$u);var Xh=new _u(new Ou(2)),Wh=Iu(qu.setInt8);Xh.setInt8(0,2147483648),Xh.setInt8(1,2147483649),!Xh.getInt8(0)&&Xh.getInt8(1)||vu(qu,{setInt8:function(e,t){Wh(this,e,t<<24>>24)},setUint8:function(e,t){Wh(this,e,t<<24>>24)}},{unsafe:!0})}else Ou=function(e){Ku(this,Au);var t=Lu(e);Mu(this,{bytes:ih(eh(t),0),byteLength:t}),gu||(this.byteLength=t)},Au=Ou.prototype,_u=function(e,t,i){Ku(this,qu),Ku(e,Au);var n=Bu(e).byteLength,l=Nu(t);if(l<0||l>n)throw th("Wrong offset");if(l+(i=void 0===i?n-l:Cu(i))>n)throw th("Wrong length");Mu(this,{buffer:e,byteLength:i,byteOffset:l}),gu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,gu&&(hh(Ou,"byteLength"),hh(_u,"buffer"),hh(_u,"byteLength"),hh(_u,"byteOffset")),vu(qu,{getInt8:function(e){return Zh(this,1,e)[0]<<24>>24},getUint8:function(e){return Zh(this,1,e)[0]},getInt16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oh(Zh(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bh(this,1,e,ah,t)},setUint8:function(e,t){bh(this,1,e,ah,t)},setInt16:function(e,t){bh(this,2,e,rh,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bh(this,2,e,rh,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bh(this,4,e,ch,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bh(this,4,e,ch,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bh(this,4,e,dh,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bh(this,8,e,uh,t,arguments.length>2?arguments[2]:void 0)}});Fu(Ou,ju),Fu(_u,Qu);var Vh={ArrayBuffer:Ou,DataView:_u},Ih=ye,gh=Math.floor,Sh=Number.isInteger||function(e){return!Ih(e)&&isFinite(e)&&gh(e)===e},fh=sn,Rh=RangeError,vh=function(e){var t=fh(e);if(t<0)throw Rh("The argument can't be less than 0");return t},Yh=RangeError,Kh=function(e,t){var i=vh(e);if(i%t)throw Yh("Wrong offset");return i},Nh=jl,Ch=Ce,Lh=la,Uh=X,kh=Gn,Jh=yo,Th=so,Hh=Al,xh=Hd.aTypedArrayConstructor,wh=function(e){var t,i,n,l,o,a,r=Lh(this),c=Uh(e),s=arguments.length,d=s>1?arguments[1]:void 0,u=void 0!==d,h=Th(c);if(h&&!Hh(h))for(a=(o=Jh(c,h)).next,c=[];!(l=Ch(a,o)).done;)c.push(l.value);for(u&&s>2&&(d=Nh(d,arguments[2])),i=kh(c),n=new(xh(r))(i),t=0;i>t;t++)n[t]=u?d(c[t],t):c[t];return n},Fh=Lt,zh=Array.isArray||function(e){return"Array"==Fh(e)},Ph=ea,Bh=ye,Mh=he("species"),jh=Array,Qh=function(e){var t;return zh(e)&&(t=e.constructor,(Ph(t)&&(t===jh||zh(t.prototype))||Bh(t)&&null===(t=t[Mh]))&&(t=void 0)),void 0===t?jh:t},Eh=jl,Dh=Ht,Oh=X,Ah=Gn,_h=function(e,t){return new(Qh(e))(0===t?0:t)},qh=b([].push),$h=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,a=7==e,r=5==e||o;return function(c,s,d,u){for(var h,Z,b=Oh(c),m=Dh(b),p=Eh(s,d),y=Ah(m),G=0,X=u||_h,W=t?X(c,y):i||a?X(c,0):void 0;y>G;G++)if((r||G in m)&&(Z=p(h=m[G],G,b),e))if(t)W[G]=Z;else if(Z)switch(e){case 3:return!0;case 5:return h;case 6:return G;case 2:qh(W,h)}else switch(e){case 4:return!1;case 7:qh(W,h)}return o?-1:n||l?l:W}},eZ={forEach:$h(0),map:$h(1),filter:$h(2),some:$h(3),every:$h(4),find:$h(5),findIndex:$h(6),filterReject:$h(7)},tZ=B,iZ=be,nZ=me,lZ=he("species"),oZ=w,aZ=ye,rZ=td,cZ=al,sZ=o,dZ=Ce,uZ=me,hZ=Md,ZZ=Hd,bZ=Vh,mZ=Od,pZ=Yt,yZ=qt,GZ=Sh,XZ=pn,WZ=$d,VZ=Kh,IZ=at,gZ=I,SZ=lo,fZ=ye,RZ=He,vZ=Nl,YZ=Le,KZ=td,NZ=ln.f,CZ=wh,LZ=eZ.forEach,UZ=function(e){var t=tZ(e),i=iZ.f;nZ&&t&&!t[lZ]&&i(t,lZ,{configurable:!0,get:function(){return this}})},kZ=be,JZ=gt,TZ=function(e,t,i){var n,l;return rZ&&oZ(n=t.constructor)&&n!==i&&aZ(l=n.prototype)&&l!==i.prototype&&rZ(e,l),e},HZ=wi.get,xZ=wi.set,wZ=wi.enforce,FZ=kZ.f,zZ=JZ.f,PZ=Math.round,BZ=sZ.RangeError,MZ=bZ.ArrayBuffer,jZ=MZ.prototype,QZ=bZ.DataView,EZ=ZZ.NATIVE_ARRAY_BUFFER_VIEWS,DZ=ZZ.TYPED_ARRAY_TAG,OZ=ZZ.TypedArray,AZ=ZZ.TypedArrayPrototype,_Z=ZZ.aTypedArrayConstructor,qZ=ZZ.isTypedArray,$Z="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_Z(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){FZ(e,t,{get:function(){return HZ(this)[t]}})},nb=function(e){var t;return YZ(jZ,e)||"ArrayBuffer"==(t=SZ(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qZ(e)&&!RZ(t)&&t in e&&GZ(+t)&&t>=0},ob=function(e,t){return t=IZ(t),lb(e,t)?pZ(2,e[t]):zZ(e,t)},ab=function(e,t,i){return t=IZ(t),!(lb(e,t)&&fZ(i)&&gZ(i,"value"))||gZ(i,"get")||gZ(i,"set")||i.configurable||gZ(i,"writable")&&!i.writable||gZ(i,"enumerable")&&!i.enumerable?FZ(e,t,i):(e[t]=i.value,e)};uZ?(EZ||(JZ.f=ob,kZ.f=ab,ib(AZ,"buffer"),ib(AZ,"byteOffset"),ib(AZ,"byteLength"),ib(AZ,"length")),cZ({target:"Object",stat:!0,forced:!EZ},{getOwnPropertyDescriptor:ob,defineProperty:ab}),Fs.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,a="set"+e,r=sZ[l],c=r,s=c&&c.prototype,d={},u=function(e,t){FZ(e,t,{get:function(){return function(e,t){var i=HZ(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=HZ(e);i&&(l=(l=PZ(l))<0?0:l>255?255:255&l),o.view[a](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};EZ?hZ&&(c=t((function(e,t,i,l){return mZ(e,s),TZ(fZ(t)?nb(t)?void 0!==l?new r(t,VZ(i,n),l):void 0!==i?new r(t,VZ(i,n)):new r(t):qZ(t)?tb(c,t):dZ(CZ,c,t):new r(WZ(t)),e,c)})),KZ&&KZ(c,OZ),LZ(NZ(r),(function(e){e in c||yZ(c,e,r[e])})),c.prototype=s):(c=t((function(e,t,i,l){mZ(e,s);var o,a,r,d=0,h=0;if(fZ(t)){if(!nb(t))return qZ(t)?tb(c,t):dZ(CZ,c,t);o=t,h=VZ(i,n);var Z=t.byteLength;if(void 0===l){if(Z%n)throw BZ(eb);if((a=Z-h)<0)throw BZ(eb)}else if((a=XZ(l)*n)+h>Z)throw BZ(eb);r=a/n}else r=WZ(t),o=new MZ(a=r*n);for(xZ(e,{buffer:o,byteOffset:h,byteLength:a,length:r,view:new QZ(o)});d<r;)u(e,d++)})),KZ&&KZ(c,OZ),s=c.prototype=vZ(AZ)),s.constructor!==c&&yZ(s,"constructor",c),wZ(s).TypedArrayConstructor=c,DZ&&yZ(s,DZ,l);var h=c!=r;d[l]=c,cZ({global:!0,constructor:!0,forced:h,sham:!EZ},d),$Z in c||yZ(c,$Z,n),$Z in s||yZ(s,$Z,n),UZ(l)}):Fs.exports=function(){},(0,Fs.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fs.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var rb=nt,cb=TypeError,sb=du,db=function(e){var t=rb(e,"number");if("number"==typeof t)throw cb("Can't convert number to bigint");return BigInt(t)},ub=lo,hb=Ce,Zb=r,bb=Hd.aTypedArray,mb=Hd.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?db(e):+e;return hb(sb,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),Zb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Hd.exportTypedArrayStaticMethod)("from",wh,Md);var yb=Hd.aTypedArrayConstructor;(0,Hd.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(yb(this))(t);t>e;)i[e]=arguments[e++];return i}),Md);var Gb=o,Xb=Ce,Wb=Hd,Vb=Gn,Ib=Kh,gb=X,Sb=r,fb=Gb.RangeError,Rb=Gb.Int8Array,vb=Rb&&Rb.prototype,Yb=vb&&vb.set,Kb=Wb.aTypedArray,Nb=Wb.exportTypedArrayMethod,Cb=!Sb((function(){var e=new Uint8ClampedArray(2);return Xb(Yb,e,{length:1,0:3},1),3!==e[1]})),Lb=Cb&&Wb.NATIVE_ARRAY_BUFFER_VIEWS&&Sb((function(){var e=new Rb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Nb("set",(function(e){Kb(this);var t=Ib(arguments.length>1?arguments[1]:void 0,1),i=gb(e);if(Cb)return Xb(Yb,this,i,t);var n=this.length,l=Vb(i),o=0;if(l+t>n)throw fb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Cb||Lb);var Ub=Wu,kb=Math.floor,Jb=function(e,t){var i=e.length,n=kb(i/2);return i<8?Tb(e,t):Hb(e,Jb(Ub(e,0,n),t),Jb(Ub(e,n),t),t)},Tb=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Hb=function(e,t,i,n){for(var l=t.length,o=i.length,a=0,r=0;a<l||r<o;)e[a+r]=a<l&&r<o?n(t[a],i[r])<=0?t[a++]:i[r++]:a<l?t[a++]:i[r++];return e},xb=Jb,wb=M.match(/firefox\/(\d+)/i),Fb=!!wb&&+wb[1],zb=/MSIE|Trident/.test(M),Pb=M.match(/AppleWebKit\/(\d+)\./),Bb=!!Pb&&+Pb[1],Mb=b,jb=r,Qb=Be,Eb=xb,Db=Fb,Ob=zb,Ab=_,_b=Bb,qb=Hd.aTypedArray,$b=Hd.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&Mb(em.prototype.sort),im=!(!tm||jb((function(){tm(new em(2),null)}))&&jb((function(){tm(new em(2),{})}))),nm=!!tm&&!jb((function(){if(Ab)return Ab<74;if(Db)return Db<67;if(Ob)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Qb(e),nm?tm(this,e):Eb(qb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!nm||im);var lm=Ve("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,am=om===Object.prototype?void 0:om,rm=al,cm=Ce,sm=w,dm=hr,um=ja,hm=td,Zm=or,bm=qt,mm=nn,pm=Ql,ym=oi.PROPER,Gm=oi.CONFIGURABLE,Xm=tr.IteratorPrototype,Wm=tr.BUGGY_SAFARI_ITERATORS,Vm=he("iterator"),Im="keys",gm="values",Sm="entries",fm=function(){return this},Rm=function(e,t,i,n,l,o,a){dm(i,t,n);var r,c,s,d=function(e){if(e===l&&m)return m;if(!Wm&&e in Z)return Z[e];switch(e){case Im:case gm:case Sm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",h=!1,Z=e.prototype,b=Z[Vm]||Z["@@iterator"]||l&&Z[l],m=!Wm&&b||d(l),p="Array"==t&&Z.entries||b;if(p&&(r=um(p.call(new e)))!==Object.prototype&&r.next&&(um(r)!==Xm&&(hm?hm(r,Xm):sm(r[Vm])||mm(r,Vm,fm)),Zm(r,u,!0)),ym&&l==gm&&b&&b.name!==gm&&(Gm?bm(Z,"name",gm):(h=!0,m=function(){return cm(b,this)})),l)if(c={values:d(gm),keys:o?m:d(Im),entries:d(Sm)},a)for(s in c)(Wm||h||!(s in Z))&&mm(Z,s,c[s]);else rm({target:t,proto:!0,forced:Wm||h},c);return Z[Vm]!==m&&mm(Z,Vm,m,{name:l}),pm[t]=m,c},vm=Ft,Ym=Tl,Km=Ql,Nm=wi,Cm=be.f,Lm=Rm,Um=me,km="Array Iterator",Jm=Nm.set,Tm=Nm.getterFor(km),Hm=Lm(Array,"Array",(function(e,t){Jm(this,{type:km,target:vm(e),index:0,kind:t})}),(function(){var e=Tm(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),xm=Km.Arguments=Km.Array;if(Ym("keys"),Ym("values"),Ym("entries"),Um&&"values"!==xm.name)try{Cm(xm,"name",{value:"values"})}catch(e){}var wm=o,Fm={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},zm=am,Pm=Hm,Bm=qt,Mm=he,jm=Mm("iterator"),Qm=Mm("toStringTag"),Em=Pm.values,Dm=function(e,t){if(e){if(e[jm]!==Em)try{Bm(e,jm,Em)}catch(t){e[jm]=Em}if(e[Qm]||Bm(e,Qm,t),Fm[t])for(var i in Pm)if(e[i]!==Pm[i])try{Bm(e,i,Pm[i])}catch(t){e[i]=Pm[i]}}};for(var Om in Fm)Dm(wm[Om]&&wm[Om].prototype,Om);Dm(zm,"DOMTokenList");var Am,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(M),lp="process"==Lt(o.process),op=o,ap=$c,rp=jl,cp=w,sp=I,dp=r,up=Gl,hp=ep,Zp=Ve,bp=ip,mp=np,pp=lp,yp=op.setImmediate,Gp=op.clearImmediate,Xp=op.process,Wp=op.Dispatch,Vp=op.Function,Ip=op.MessageChannel,gp=op.String,Sp=0,fp={},Rp="onreadystatechange";try{Am=op.location}catch(e){}var vp=function(e){if(sp(fp,e)){var t=fp[e];delete fp[e],t()}},Yp=function(e){return function(){vp(e)}},Kp=function(e){vp(e.data)},Np=function(e){op.postMessage(gp(e),Am.protocol+"//"+Am.host)};yp&&Gp||(yp=function(e){bp(arguments.length,1);var t=cp(e)?e:Vp(e),i=hp(arguments,1);return fp[++Sp]=function(){ap(t,void 0,i)},_m(Sp),Sp},Gp=function(e){delete fp[e]},pp?_m=function(e){Xp.nextTick(Yp(e))}:Wp&&Wp.now?_m=function(e){Wp.now(Yp(e))}:Ip&&!mp?($m=(qm=new Ip).port2,qm.port1.onmessage=Kp,_m=rp($m.postMessage,$m)):op.addEventListener&&cp(op.postMessage)&&!op.importScripts&&Am&&"file:"!==Am.protocol&&!dp(Np)?(_m=Np,op.addEventListener("message",Kp,!1)):_m=Rp in Zp("script")?function(e){up.appendChild(Zp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(Yp(e),0)});var Cp={set:yp,clear:Gp},Lp=Cp.clear;al({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Lp},{clearImmediate:Lp});var Up=Cp.set;al({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==Up},{setImmediate:Up});var kp=Lr.charAt,Jp=mr,Tp=wi,Hp=Rm,xp="String Iterator",wp=Tp.set,Fp=Tp.getterFor(xp);Hp(String,"String",(function(e){wp(this,{type:xp,string:Jp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=kp(i,n),t.index+=e.length,{value:e,done:!1})}));var zp=r,Pp=he("iterator"),Bp=!zp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[Pp]||"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"!==i||"x"!==new URL("http://x",void 0).host})),Mp=me,jp=b,Qp=Ce,Ep=r,Dp=dl,Op=Un,Ap=St,_p=X,qp=Ht,$p=Object.assign,ey=Object.defineProperty,ty=jp([].concat),iy=!$p||Ep((function(){if(Mp&&1!==$p({b:1},$p(ey({},"a",{enumerable:!0,get:function(){ey(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[i]||Dp($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Op.f,a=Ap.f;n>l;)for(var r,c=qp(arguments[l++]),s=o?ty(Dp(c),o(c)):Dp(c),d=s.length,u=0;d>u;)r=s[u++],Mp&&!Qp(a,c,r)||(i[r]=c[r]);return i}:$p,ny=Ye,ly=Vo,oy=jl,ay=Ce,ry=X,cy=function(e,t,i,n){try{return n?t(ny(i)[0],i[1]):t(i)}catch(t){ly(e,"throw",t)}},sy=Al,dy=ea,uy=Gn,hy=bu,Zy=yo,by=so,my=Array,py=b,yy=2147483647,Gy=/[^\0-\u007E]/,Xy=/[.\u3002\uFF0E\uFF61]/g,Wy="Overflow: input needs wider integers to process",Vy=RangeError,Iy=py(Xy.exec),gy=Math.floor,Sy=String.fromCharCode,fy=py("".charCodeAt),Ry=py([].join),vy=py([].push),Yy=py("".replace),Ky=py("".split),Ny=py("".toLowerCase),Cy=function(e){return e+22+75*(e<26)},Ly=function(e,t,i){var n=0;for(e=i?gy(e/700):e>>1,e+=gy(e/t);e>455;)e=gy(e/35),n+=36;return gy(n+36*e/(e+38))},Uy=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=fy(e,i++);if(l>=55296&&l<=56319&&i<n){var o=fy(e,i++);56320==(64512&o)?vy(t,((1023&l)<<10)+(1023&o)+65536):(vy(t,l),i--)}else vy(t,l)}return t}(e);var i,n,l=e.length,o=128,a=0,r=72;for(i=0;i<e.length;i++)(n=e[i])<128&&vy(t,Sy(n));var c=t.length,s=c;for(c&&vy(t,"-");s<l;){var d=yy;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<d&&(d=n);var u=s+1;if(d-o>gy((yy-a)/u))throw Vy(Wy);for(a+=(d-o)*u,o=d,i=0;i<e.length;i++){if((n=e[i])<o&&++a>yy)throw Vy(Wy);if(n==o){for(var h=a,Z=36;;){var b=Z<=r?1:Z>=r+26?26:Z-r;if(h<b)break;var m=h-b,p=36-b;vy(t,Sy(Cy(b+m%p))),h=gy(m/p),Z+=36}vy(t,Sy(Cy(h))),r=Ly(a,u,s==c),a=0,s++}}a++,o++}return Ry(t,"")},ky=al,Jy=o,Ty=Ce,Hy=b,xy=me,wy=Bp,Fy=nn,zy=Qd,Py=or,By=hr,My=wi,jy=Od,Qy=w,Ey=I,Dy=jl,Oy=lo,Ay=Ye,_y=ye,qy=mr,$y=Nl,eG=Yt,tG=yo,iG=so,nG=ip,lG=xb,oG=he("iterator"),aG="URLSearchParams",rG="URLSearchParamsIterator",cG=My.set,sG=My.getterFor(aG),dG=My.getterFor(rG),uG=Object.getOwnPropertyDescriptor,hG=function(e){if(!xy)return Jy[e];var t=uG(Jy,e);return t&&t.value},ZG=hG("fetch"),bG=hG("Request"),mG=hG("Headers"),pG=bG&&bG.prototype,yG=mG&&mG.prototype,GG=Jy.RegExp,XG=Jy.TypeError,WG=Jy.decodeURIComponent,VG=Jy.encodeURIComponent,IG=Hy("".charAt),gG=Hy([].join),SG=Hy([].push),fG=Hy("".replace),RG=Hy([].shift),vG=Hy([].splice),YG=Hy("".split),KG=Hy("".slice),NG=/\+/g,CG=Array(4),LG=function(e){return CG[e-1]||(CG[e-1]=GG("((?:%[\\da-f]{2}){"+e+"})","gi"))},UG=function(e){try{return WG(e)}catch(t){return e}},kG=function(e){var t=fG(e,NG," "),i=4;try{return WG(t)}catch(e){for(;i;)t=fG(t,LG(i--),UG);return t}},JG=/[!'()~]|%20/g,TG={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},HG=function(e){return TG[e]},xG=function(e){return fG(VG(e),JG,HG)},wG=By((function(e,t){cG(this,{type:rG,iterator:tG(sG(e).entries),kind:t})}),"Iterator",(function(){var e=dG(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),FG=function(e){this.entries=[],this.url=null,void 0!==e&&(_y(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===IG(e,0)?KG(e,1):e:qy(e)))};FG.prototype={type:aG,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,a,r,c=iG(e);if(c)for(i=(t=tG(e,c)).next;!(n=Ty(i,t)).done;){if(o=(l=tG(Ay(n.value))).next,(a=Ty(o,l)).done||(r=Ty(o,l)).done||!Ty(o,l).done)throw XG("Expected sequence with length 2");SG(this.entries,{key:qy(a.value),value:qy(r.value)})}else for(var s in e)Ey(e,s)&&SG(this.entries,{key:s,value:qy(e[s])})},parseQuery:function(e){if(e)for(var t,i,n=YG(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=YG(t,"="),SG(this.entries,{key:kG(RG(i)),value:kG(gG(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],SG(i,xG(e.key)+"="+xG(e.value));return gG(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var zG=function(){jy(this,PG);var e=arguments.length>0?arguments[0]:void 0;cG(this,new FG(e))},PG=zG.prototype;if(zy(PG,{append:function(e,t){nG(arguments.length,2);var i=sG(this);SG(i.entries,{key:qy(e),value:qy(t)}),i.updateURL()},delete:function(e){nG(arguments.length,1);for(var t=sG(this),i=t.entries,n=qy(e),l=0;l<i.length;)i[l].key===n?vG(i,l,1):l++;t.updateURL()},get:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=[],l=0;l<t.length;l++)t[l].key===i&&SG(n,t[l].value);return n},has:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){nG(arguments.length,1);for(var i,n=sG(this),l=n.entries,o=!1,a=qy(e),r=qy(t),c=0;c<l.length;c++)(i=l[c]).key===a&&(o?vG(l,c--,1):(o=!0,i.value=r));o||SG(l,{key:a,value:r}),n.updateURL()},sort:function(){var e=sG(this);lG(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=sG(this).entries,n=Dy(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new wG(this,"keys")},values:function(){return new wG(this,"values")},entries:function(){return new wG(this,"entries")}},{enumerable:!0}),Fy(PG,oG,PG.entries,{name:"entries"}),Fy(PG,"toString",(function(){return sG(this).serialize()}),{enumerable:!0}),Py(zG,aG),ky({global:!0,constructor:!0,forced:!wy},{URLSearchParams:zG}),!wy&&Qy(mG)){var BG=Hy(yG.has),MG=Hy(yG.set),jG=function(e){if(_y(e)){var t,i=e.body;if(Oy(i)===aG)return t=e.headers?new mG(e.headers):new mG,BG(t,"content-type")||MG(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$y(e,{body:eG(0,qy(i)),headers:eG(0,t)})}return e};if(Qy(ZG)&&ky({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return ZG(e,arguments.length>1?jG(arguments[1]):{})}}),Qy(bG)){var QG=function(e){return jy(this,pG),new bG(e,arguments.length>1?jG(arguments[1]):{})};pG.constructor=QG,QG.prototype=pG,ky({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:QG})}}var EG,DG=al,OG=me,AG=Bp,_G=o,qG=jl,$G=b,eX=nn,tX=Sa,iX=Od,nX=I,lX=iy,oX=function(e){var t=ry(e),i=dy(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oy(l,n>2?arguments[2]:void 0));var a,r,c,s,d,u,h=by(t),Z=0;if(!h||this===my&&sy(h))for(a=uy(t),r=i?new this(a):my(a);a>Z;Z++)u=o?l(t[Z],Z):t[Z],hy(r,Z,u);else for(d=(s=Zy(t,h)).next,r=i?new this:[];!(c=ay(d,s)).done;Z++)u=o?cy(s,l,[c.value,Z],!0):c.value,hy(r,Z,u);return r.length=Z,r},aX=Wu,rX=Lr.codeAt,cX=function(e){var t,i,n=[],l=Ky(Yy(Ny(e),Xy,"."),".");for(t=0;t<l.length;t++)i=l[t],vy(n,Iy(Gy,i)?"xn--"+Uy(i):i);return Ry(n,".")},sX=mr,dX=or,uX=ip,hX={URLSearchParams:zG,getState:sG},ZX=wi,bX=ZX.set,mX=ZX.getterFor("URL"),pX=hX.URLSearchParams,yX=hX.getState,GX=_G.URL,XX=_G.TypeError,WX=_G.parseInt,VX=Math.floor,IX=Math.pow,gX=$G("".charAt),SX=$G(/./.exec),fX=$G([].join),RX=$G(1..toString),vX=$G([].pop),YX=$G([].push),KX=$G("".replace),NX=$G([].shift),CX=$G("".split),LX=$G("".slice),UX=$G("".toLowerCase),kX=$G([].unshift),JX="Invalid scheme",TX="Invalid host",HX="Invalid port",xX=/[a-z]/i,wX=/[\d+-.a-z]/i,FX=/\d/,zX=/^0x/i,PX=/^[0-7]+$/,BX=/^\d+$/,MX=/^[\da-f]+$/i,jX=/[\0\t\n\r #%/:<>?@[\\\]^|]/,QX=/[\0\t\n\r #/:<>?@[\\\]^|]/,EX=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,DX=/[\t\n\r]/g,OX=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)kX(t,e%256),e=VX(e/256);return fX(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=RX(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},AX={},_X=lX({},AX,{" ":1,'"':1,"<":1,">":1,"`":1}),qX=lX({},_X,{"#":1,"?":1,"{":1,"}":1}),$X=lX({},qX,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eW=function(e,t){var i=rX(e,0);return i>32&&i<127&&!nX(t,e)?e:encodeURIComponent(e)},tW={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iW=function(e,t){var i;return 2==e.length&&SX(xX,gX(e,0))&&(":"==(i=gX(e,1))||!t&&"|"==i)},nW=function(e){var t;return e.length>1&&iW(LX(e,0,2))&&(2==e.length||"/"===(t=gX(e,2))||"\\"===t||"?"===t||"#"===t)},lW=function(e){return"."===e||"%2e"===UX(e)},oW={},aW={},rW={},cW={},sW={},dW={},uW={},hW={},ZW={},bW={},mW={},pW={},yW={},GW={},XW={},WW={},VW={},IW={},gW={},SW={},fW={},RW=function(e,t,i){var n,l,o,a=sX(e);if(t){if(l=this.parse(a))throw XX(l);this.searchParams=null}else{if(void 0!==i&&(n=new RW(i,!0)),l=this.parse(a,null,n))throw XX(l);(o=yX(new pX)).bindURL(this),this.searchParams=o}};RW.prototype={type:"URL",parse:function(e,t,i){var n,l,o,a,r,c=this,s=t||oW,d=0,u="",h=!1,Z=!1,b=!1;for(e=sX(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=KX(e,EX,"")),e=KX(e,DX,""),n=oX(e);d<=n.length;){switch(l=n[d],s){case oW:if(!l||!SX(xX,l)){if(t)return JX;s=rW;continue}u+=UX(l),s=aW;break;case aW:if(l&&(SX(wX,l)||"+"==l||"-"==l||"."==l))u+=UX(l);else{if(":"!=l){if(t)return JX;u="",s=rW,d=0;continue}if(t&&(c.isSpecial()!=nX(tW,u)||"file"==u&&(c.includesCredentials()||null!==c.port)||"file"==c.scheme&&!c.host))return;if(c.scheme=u,t)return void(c.isSpecial()&&tW[c.scheme]==c.port&&(c.port=null));u="","file"==c.scheme?s=GW:c.isSpecial()&&i&&i.scheme==c.scheme?s=cW:c.isSpecial()?s=hW:"/"==n[d+1]?(s=sW,d++):(c.cannotBeABaseURL=!0,YX(c.path,""),s=gW)}break;case rW:if(!i||i.cannotBeABaseURL&&"#"!=l)return JX;if(i.cannotBeABaseURL&&"#"==l){c.scheme=i.scheme,c.path=aX(i.path),c.query=i.query,c.fragment="",c.cannotBeABaseURL=!0,s=fW;break}s="file"==i.scheme?GW:dW;continue;case cW:if("/"!=l||"/"!=n[d+1]){s=dW;continue}s=ZW,d++;break;case sW:if("/"==l){s=bW;break}s=IW;continue;case dW:if(c.scheme=i.scheme,l==EG)c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query=i.query;else if("/"==l||"\\"==l&&c.isSpecial())s=uW;else if("?"==l)c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query="",s=SW;else{if("#"!=l){c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.path.length--,s=IW;continue}c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query=i.query,c.fragment="",s=fW}break;case uW:if(!c.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,s=IW;continue}s=bW}else s=ZW;break;case hW:if(s=ZW,"/"!=l||"/"!=gX(u,d+1))continue;d++;break;case ZW:if("/"!=l&&"\\"!=l){s=bW;continue}break;case bW:if("@"==l){h&&(u="%40"+u),h=!0,o=oX(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var y=eW(p,$X);b?c.password+=y:c.username+=y}else b=!0}u=""}else if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()){if(h&&""==u)return"Invalid authority";d-=oX(u).length+1,u="",s=mW}else u+=l;break;case mW:case pW:if(t&&"file"==c.scheme){s=WW;continue}if(":"!=l||Z){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()){if(c.isSpecial()&&""==u)return TX;if(t&&""==u&&(c.includesCredentials()||null!==c.port))return;if(a=c.parseHost(u))return a;if(u="",s=VW,t)return;continue}"["==l?Z=!0:"]"==l&&(Z=!1),u+=l}else{if(""==u)return TX;if(a=c.parseHost(u))return a;if(u="",s=yW,t==pW)return}break;case yW:if(!SX(FX,l)){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()||t){if(""!=u){var G=WX(u,10);if(G>65535)return HX;c.port=c.isSpecial()&&G===tW[c.scheme]?null:G,u=""}if(t)return;s=VW;continue}return HX}u+=l;break;case GW:if(c.scheme="file","/"==l||"\\"==l)s=XW;else{if(!i||"file"!=i.scheme){s=IW;continue}if(l==EG)c.host=i.host,c.path=aX(i.path),c.query=i.query;else if("?"==l)c.host=i.host,c.path=aX(i.path),c.query="",s=SW;else{if("#"!=l){nW(fX(aX(n,d),""))||(c.host=i.host,c.path=aX(i.path),c.shortenPath()),s=IW;continue}c.host=i.host,c.path=aX(i.path),c.query=i.query,c.fragment="",s=fW}}break;case XW:if("/"==l||"\\"==l){s=WW;break}i&&"file"==i.scheme&&!nW(fX(aX(n,d),""))&&(iW(i.path[0],!0)?YX(c.path,i.path[0]):c.host=i.host),s=IW;continue;case WW:if(l==EG||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iW(u))s=IW;else if(""==u){if(c.host="",t)return;s=VW}else{if(a=c.parseHost(u))return a;if("localhost"==c.host&&(c.host=""),t)return;u="",s=VW}continue}u+=l;break;case VW:if(c.isSpecial()){if(s=IW,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=EG&&(s=IW,"/"!=l))continue}else c.fragment="",s=fW;else c.query="",s=SW;break;case IW:if(l==EG||"/"==l||"\\"==l&&c.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(r=UX(r=u))||"%2e."===r||".%2e"===r||"%2e%2e"===r?(c.shortenPath(),"/"==l||"\\"==l&&c.isSpecial()||YX(c.path,"")):lW(u)?"/"==l||"\\"==l&&c.isSpecial()||YX(c.path,""):("file"==c.scheme&&!c.path.length&&iW(u)&&(c.host&&(c.host=""),u=gX(u,0)+":"),YX(c.path,u)),u="","file"==c.scheme&&(l==EG||"?"==l||"#"==l))for(;c.path.length>1&&""===c.path[0];)NX(c.path);"?"==l?(c.query="",s=SW):"#"==l&&(c.fragment="",s=fW)}else u+=eW(l,qX);break;case gW:"?"==l?(c.query="",s=SW):"#"==l?(c.fragment="",s=fW):l!=EG&&(c.path[0]+=eW(l,AX));break;case SW:t||"#"!=l?l!=EG&&("'"==l&&c.isSpecial()?c.query+="%27":c.query+="#"==l?"%23":eW(l,AX)):(c.fragment="",s=fW);break;case fW:l!=EG&&(c.fragment+=eW(l,_X))}d++}},parseHost:function(e){var t,i,n;if("["==gX(e,0)){if("]"!=gX(e,e.length-1))return TX;if(t=function(e){var t,i,n,l,o,a,r,c=[0,0,0,0,0,0,0,0],s=0,d=null,u=0,h=function(){return gX(e,u)};if(":"==h()){if(":"!=gX(e,1))return;u+=2,d=++s}for(;h();){if(8==s)return;if(":"!=h()){for(t=i=0;i<4&&SX(MX,h());)t=16*t+WX(h(),16),u++,i++;if("."==h()){if(0==i)return;if(u-=i,s>6)return;for(n=0;h();){if(l=null,n>0){if(!("."==h()&&n<4))return;u++}if(!SX(FX,h()))return;for(;SX(FX,h());){if(o=WX(h(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}c[s]=256*c[s]+l,2!=++n&&4!=n||s++}if(4!=n)return;break}if(":"==h()){if(u++,!h())return}else if(h())return;c[s++]=t}else{if(null!==d)return;u++,d=++s}}if(null!==d)for(a=s-d,s=7;0!=s&&a>0;)r=c[s],c[s--]=c[d+a-1],c[d+--a]=r;else if(8!=s)return;return c}(LX(e,1,-1)),!t)return TX;this.host=t}else if(this.isSpecial()){if(e=cX(e),SX(jX,e))return TX;if(t=function(e){var t,i,n,l,o,a,r,c=CX(e,".");if(c.length&&""==c[c.length-1]&&c.length--,(t=c.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=c[n]))return e;if(o=10,l.length>1&&"0"==gX(l,0)&&(o=SX(zX,l)?16:8,l=LX(l,8==o?1:2)),""===l)a=0;else{if(!SX(10==o?BX:8==o?PX:MX,l))return e;a=WX(l,o)}YX(i,a)}for(n=0;n<t;n++)if(a=i[n],n==t-1){if(a>=IX(256,5-t))return null}else if(a>255)return null;for(r=vX(i),n=0;n<i.length;n++)r+=i[n]*IX(256,3-n);return r}(e),null===t)return TX;this.host=t}else{if(SX(QX,e))return TX;for(t="",i=oX(e),n=0;n<i.length;n++)t+=eW(i[n],AX);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return nX(tW,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iW(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,a=e.path,r=e.query,c=e.fragment,s=t+":";return null!==l?(s+="//",e.includesCredentials()&&(s+=i+(n?":"+n:"")+"@"),s+=OX(l),null!==o&&(s+=":"+o)):"file"==t&&(s+="//"),s+=e.cannotBeABaseURL?a[0]:a.length?"/"+fX(a,"/"):"",null!==r&&(s+="?"+r),null!==c&&(s+="#"+c),s},setHref:function(e){var t=this.parse(e);if(t)throw XX(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vW(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+OX(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(sX(e)+":",oW)},getUsername:function(){return this.username},setUsername:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=eW(t[i],$X)}},getPassword:function(){return this.password},setPassword:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=eW(t[i],$X)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?OX(e):OX(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mW)},getHostname:function(){var e=this.host;return null===e?"":OX(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pW)},getPort:function(){var e=this.port;return null===e?"":sX(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=sX(e))?this.port=null:this.parse(e,yW))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+fX(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,VW))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=sX(e))?this.query=null:("?"==gX(e,0)&&(e=LX(e,1)),this.query="",this.parse(e,SW)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=sX(e))?("#"==gX(e,0)&&(e=LX(e,1)),this.fragment="",this.parse(e,fW)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vW=function(e){var t=iX(this,YW),i=uX(arguments.length,1)>1?arguments[1]:void 0,n=bX(t,new RW(e,!1,i));OG||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},YW=vW.prototype,KW=function(e,t){return{get:function(){return mX(this)[e]()},set:t&&function(e){return mX(this)[t](e)},configurable:!0,enumerable:!0}};if(OG&&(tX(YW,"href",KW("serialize","setHref")),tX(YW,"origin",KW("getOrigin")),tX(YW,"protocol",KW("getProtocol","setProtocol")),tX(YW,"username",KW("getUsername","setUsername")),tX(YW,"password",KW("getPassword","setPassword")),tX(YW,"host",KW("getHost","setHost")),tX(YW,"hostname",KW("getHostname","setHostname")),tX(YW,"port",KW("getPort","setPort")),tX(YW,"pathname",KW("getPathname","setPathname")),tX(YW,"search",KW("getSearch","setSearch")),tX(YW,"searchParams",KW("getSearchParams")),tX(YW,"hash",KW("getHash","setHash"))),eX(YW,"toJSON",(function(){return mX(this).serialize()}),{enumerable:!0}),eX(YW,"toString",(function(){return mX(this).serialize()}),{enumerable:!0}),GX){var NW=GX.createObjectURL,CW=GX.revokeObjectURL;NW&&eX(vW,"createObjectURL",qG(NW,GX)),CW&&eX(vW,"revokeObjectURL",qG(CW,GX))}dX(vW,"URL"),DG({global:!0,constructor:!0,forced:!AG,sham:!OG},{URL:vW});var LW=Ce;function UW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))}function kW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))}al({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return LW(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const JW="refresh_token_timer",TW=["RS256","RS512","RS384","PS256"],HW="code",xW="session_state",wW="sign_out_url",FW="sign_out_success",zW="state";var PW;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(PW||(PW={}));class BW{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class MW{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}MW.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class jW{constructor(e,t){this._dataLayer=e,this._config=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return kW(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return kW(this,void 0,void 0,(function*(){const e={},t=yield this._config();if(!t.endpoints||!["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"].every((e=>!!t.endpoints&&Object.keys(t.endpoints).some((t=>t.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())))===e)))))throw new BW("JS-AUTH_HELPER-REE-NF01","Required endpoints missing","Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return kW(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new BW("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){var t;return kW(this,void 0,void 0,(function*(){const i=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!i||0===i.trim().length)throw new BW("JS_AUTH_HELPER-VIT-NF01","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.");let l;try{l=yield fetch(i,{credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin})}catch(i){throw new BW("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=i?i:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new BW("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(l.statusText,")."),yield l.json());const o=(yield this._oidcProviderMetaData()).issuer,{keys:a}=yield l.json(),r=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],a);return this._cryptoHelper.isValidIdToken(e,r,(yield this._config()).clientID,null!=o?o:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance,null===(t=(yield this._config()).validateIDTokenIssuer)||void 0===t||t)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),a=MW.getTenantDomainFromIdTokenPayload(o),r=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",c=null!==(i=o.given_name)&&void 0!==i?i:"",s=null!==(n=o.family_name)&&void 0!==n?n:"",d=c&&s?"".concat(c," ").concat(s):c||s||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:d;return Object.assign({displayName:u,tenantDomain:a,username:r},MW.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return kW(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return kW(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new BW("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>kW(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return kW(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class QW{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new BW("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o,a){return this._cryptoUtils.verifyJwt(e,t,TW,i,n,l,o,a).then((e=>e?Promise.resolve(!0):Promise.reject(new BW("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new BW("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class EW{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new QW(t),this._authenticationHelper=new jW(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(e,t){var i,n,l;return kW(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),a=yield this._config();if(!o||0===o.trim().length)throw new BW("JS-AUTH_CORE-GAU-NF01","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.");const r=new URL(o),c=new Map;c.set("response_type","code"),c.set("client_id",a.clientID);let s="openid";a.scope&&a.scope.length>0&&(a.scope.includes("openid")||a.scope.push("openid"),s=a.scope.join(" ")),c.set("scope",s),c.set("redirect_uri",a.signInRedirectURL),a.responseMode&&c.set("response_mode",a.responseMode);const d=yield this._authenticationHelper.generatePKCEKey(t);if(a.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(d,e,t),c.set("code_challenge_method","S256"),c.set("code_challenge",l)}a.prompt&&c.set("prompt",a.prompt);const u=e;if(u)for(const[e,t]of Object.entries(u))""!=e&&""!=t&&"state"!==e&&c.set(e,t.toString());c.set("state",MW.generateStateParamForRequestCorrelation(d,u?null===(l=u.state)||void 0===l?void 0:l.toString():""));for(const[e,t]of c.entries())r.searchParams.append(e,t);return r.toString()}))}requestAccessToken(e,t,i,n){return kW(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-RAT1-NF01","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.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const a=new URLSearchParams;a.set("client_id",o.clientID),o.clientSecret&&o.clientSecret.trim().length>0&&a.set("client_secret",o.clientSecret);const r=e;let c;a.set("code",r),a.set("grant_type","authorization_code"),a.set("redirect_uri",o.signInRedirectURL),o.enablePKCE&&(a.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(i),n));try{c=yield fetch(l,{body:a,credentials:o.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(l){throw new BW("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=l?l:"The request to get the access token from the server failed.")}if(!c.ok)throw new BW("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(c.statusText),yield c.json());return yield this._authenticationHelper.handleTokenResponse(c,n)}))}refreshAccessToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new BW("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-RAT2-NF02","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.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new BW("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-RAT3-NF01","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.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new BW("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return kW(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-RCG-NF01","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.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return kW(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let a=Object.assign({},MW.getTokenRequestHeaders());e.attachToken&&(a=Object.assign(Object.assign({},a),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const r={body:o.join("&"),credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(a),method:"POST"};let c;try{c=yield fetch(l,r)}catch(e){throw new BW("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==c.status||!c.ok)throw new BW("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(c.statusText,")"),yield c.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(c,t):Promise.resolve(yield c.json())}))}getBasicUserInfo(e){return kW(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return kW(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new BW("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new BW("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,a,r,c,s;return kW(this,void 0,void 0,(function*(){const d=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=d.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=d.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=d.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=d.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=d.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=d.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(a=d.registration_endpoint)&&void 0!==a?a:"",revocationEndpoint:null!==(r=d.revocation_endpoint)&&void 0!==r?r:"",tokenEndpoint:null!==(c=d.token_endpoint)&&void 0!==c?c:"",userinfoEndpoint:null!==(s=d.userinfo_endpoint)&&void 0!==s?s:""}}))}getSignOutURL(e){var t,i,n;return kW(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF01","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.");const a=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!a||0===a.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF03","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. ");const r=new URLSearchParams;if(r.set("post_logout_redirect_uri",a),o.sendIdTokenInLogoutRequest){const t=null===(n=yield this._dataLayer.getSessionData(e))||void 0===n?void 0:n.id_token;if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");r.set("id_token_hint",t)}else r.set("client_id",o.clientID);return r.set("state","sign_out_success"),"".concat(l,"?").concat(r.toString())}))}clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}getCreatedAt(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.created_at}))}getExpiresIn(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.expires_in}))}isAuthenticated(e){return kW(this,void 0,void 0,(function*(){const t=Boolean(yield this.getAccessToken(e)),i=yield this.getCreatedAt(e),n=yield this.getExpiresIn(e);if(!n)return!1;const l=1e3*parseInt(n),o=(new Date).getTime();return t&&i+l>o}))}getPKCECode(e,t){return kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return kW(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return kW(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class DW{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return kW(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),a=JSON.stringify(o);yield this._store.setData(e,a)}))}setValue(e,t,i){var n;return kW(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),a=Object.assign(Object.assign({},o),{[t]:i}),r=JSON.stringify(a);yield this._store.setData(e,r)}))}removeValue(e,t){var i;return kW(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const a=JSON.stringify(o);yield this._store.setData(e,a)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}isLocalStorageAvailable(){try{const e="__ASGARDEO_AUTH_CORE_LOCAL_STORAGE_TEST__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return!1}}setConfigData(t){return kW(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}setSessionStatus(e){this.isLocalStorageAvailable()&&localStorage.setItem("asgardeo-session-active",e)}getSessionStatus(){var e;return this.isLocalStorageAvailable()&&null!==(e=localStorage.getItem("asgardeo-session-active"))&&void 0!==e?e:""}removeSessionStatus(){this.isLocalStorageAvailable()&&localStorage.removeItem("asgardeo-session-active")}removeConfigData(){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return kW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return kW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return kW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return kW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const OW={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class AW{constructor(){}initialize(e,t,i,n){var l,o,a;return kW(this,void 0,void 0,(function*(){const r=e.clientID;AW._instanceID?AW._instanceID+=1:AW._instanceID=0,n&&(AW._instanceID=n),this._dataLayer=new DW(r?"instance_".concat(AW._instanceID,"-").concat(r):"instance_".concat(AW._instanceID),t),this._authenticationCore=new EW(this._dataLayer,i),AW._authenticationCore=new EW(this._dataLayer,i),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},OW),e),{scope:[...null!==(l=OW.scope)&&void 0!==l?l:[],...null!==(a=null===(o=e.scope)||void 0===o?void 0:o.filter((e=>{var t;return!(null===(t=null==OW?void 0:OW.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==a?a:[]]}))}))}getDataLayer(){return this._dataLayer}getInstanceID(){return AW._instanceID}getAuthorizationURL(e,t){return kW(this,void 0,void 0,(function*(){const i=Object.assign({},e);return null==i||delete i.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(i,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURL(i,t)))}))}requestAccessToken(e,t,i,n){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(e,t,i,n):this._authenticationCore.getOIDCProviderMetaData(!1).then((()=>this._authenticationCore.requestAccessToken(e,t,i,n)))}))}getSignOutURL(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL(e)}))}getOIDCServiceEndpoints(){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}getDecodedIDToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken(e)}))}getIDToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken(e)}))}getBasicUserInfo(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo(e)}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getCryptoHelper()}))}revokeAccessToken(e){return this._authenticationCore.revokeAccessToken(e)}refreshAccessToken(e){return this._authenticationCore.refreshAccessToken(e)}getAccessToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken(e)}))}requestCustomGrant(e,t){return this._authenticationCore.requestCustomGrant(e,t)}isAuthenticated(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated(e)}))}getPKCECode(e,t){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode(e,t)}))}setPKCECode(e,t,i){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(e,t,i)}))}static isSignOutSuccessful(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&!n}static didSignOutFail(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&n}updateConfig(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _W(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,a=l.substring(o)+(n?"//# sourceMappingURL="+n:""),r=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(r)}var qW,$W,eV,tV,iV=(qW="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0LmVuZHBvaW50c3x8IVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0uZXZlcnkoKGU9PiEhdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5zb21lKCh0PT50LnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpPT09ZSkpKSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiUmVxdWlyZWQgZW5kcG9pbnRzIG1pc3NpbmciLCJTb21lIG9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBtaXNzaW5nIGluIHRoZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBgZW5kcG9pbnRzYCBhdHRyaWJ1dGUgb2YgdGhlYEF1dGhDb25maWdgIG9iamVjdC4iKTtyZXR1cm4gdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LGUpfSkpfXJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKSxuPXQuYmFzZVVybDtpZighbil0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKTtjb25zdCByPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IGk7dHJ5e2k9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7Y29uc3Qgbz0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOnN9PXlpZWxkIGkuanNvbigpLHU9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLHMpO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSx1LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9bz9vOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlLG51bGw9PT0obj0oeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbklzc3Vlcil8fHZvaWQgMD09PW58fG4pfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyxhKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLG4scixpLHMsYSkudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKSIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUmJmwuc2V0KGUsdC50b1N0cmluZygpKTtsLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsZj9udWxsPT09KG89Zi5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpO2Zvcihjb25zdFtlLHRdb2YgbC5lbnRyaWVzKCkpYS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdCk7cmV0dXJuIGEudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IHM9bmV3IFVSTFNlYXJjaFBhcmFtcztzLnNldCgiY2xpZW50X2lkIixvLmNsaWVudElEKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnNldCgiY2xpZW50X3NlY3JldCIsby5jbGllbnRTZWNyZXQpO2NvbnN0IGw9ZTtsZXQgZDtzLnNldCgiY29kZSIsbCkscy5zZXQoImdyYW50X3R5cGUiLCJhdXRob3JpemF0aW9uX2NvZGUiKSxzLnNldCgicmVkaXJlY3RfdXJpIixvLnNpZ25JblJlZGlyZWN0VVJMKSxvLmVuYWJsZVBLQ0UmJihzLnNldCgiY29kZV92ZXJpZmllciIsIiIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTpzLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWQub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChkLnN0YXR1c1RleHQpLHlpZWxkIGQuanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShkLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCkscj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIXIucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQobi5jbGllbnRJRCkpLGkucHVzaCgicmVmcmVzaF90b2tlbj0iLmNvbmNhdChyLnJlZnJlc2hfdG9rZW4pKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChuLmNsaWVudFNlY3JldCkpO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsIlJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICIuY29uY2F0KG8uc3RhdHVzVGV4dCkseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPVtdO2xldCBpO3IucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxyLnB1c2goInRva2VuPSIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbikpLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6ci5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoaS5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKGU9PntsZXRbcixpXT1lO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoaSxuKTtyZXR1cm4iIi5jb25jYXQociwiPSIpLmNvbmNhdChlKX0pKX0pKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKSkuYWNjZXNzX3Rva2VuKX0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgiLmNvbmNhdChoLnN0YXR1c1RleHQsIikiKSx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7Y29uc3QgYT1uZXcgVVJMU2VhcmNoUGFyYW1zO2lmKGEuc2V0KCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLHMpLG8uc2VuZElkVG9rZW5JbkxvZ291dFJlcXVlc3Qpe2NvbnN0IHQ9bnVsbD09PShpPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWRfdG9rZW47aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7YS5zZXQoImlkX3Rva2VuX2hpbnQiLHQpfWVsc2UgYS5zZXQoImNsaWVudF9pZCIsby5jbGllbnRJRCk7cmV0dXJuIGEuc2V0KCJzdGF0ZSIsInNpZ25fb3V0X3N1Y2Nlc3MiKSwiIi5jb25jYXQodCwiPyIpLmNvbmNhdChhLnRvU3RyaW5nKCkpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWdldENyZWF0ZWRBdChlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jcmVhdGVkX2F0fSkpfWdldEV4cGlyZXNJbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5leHBpcmVzX2lufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9Qm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKSxuPXlpZWxkIHRoaXMuZ2V0Q3JlYXRlZEF0KGUpLHI9eWllbGQgdGhpcy5nZXRFeHBpcmVzSW4oZSk7aWYoIXIpcmV0dXJuITE7Y29uc3QgaT0xZTMqcGFyc2VJbnQociksbz0obmV3IERhdGUpLmdldFRpbWUoKTtyZXR1cm4gdCYmbitpPm99KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9aXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKXt0cnl7Y29uc3QgZT0iX19BU0dBUkRFT19BVVRIX0NPUkVfTE9DQUxfU1RPUkFHRV9URVNUX18iO3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLGUpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBne2NvbnN0cnVjdG9yKCl7fWluaXRpYWxpemUoZSxuLHIsaSl7dmFyIG8scyxhO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1lLmNsaWVudElEO2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsaSYmKGcuX2luc3RhbmNlSUQ9aSksdGhpcy5fZGF0YUxheWVyPW5ldyBmKHQ/Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQsIi0iKS5jb25jYXQodCk6Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQpLG4pLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsciksZy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcixyKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSxlKSx7c2NvcGU6Wy4uLm51bGwhPT0obz1wLnNjb3BlKSYmdm9pZCAwIT09bz9vOltdLC4uLm51bGwhPT0oYT1udWxsPT09KHM9ZS5zY29wZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09cD92b2lkIDA6cC5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09YT9hOltdXX0pKX0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWdldEluc3RhbmNlSUQoKXtyZXR1cm4gZy5faW5zdGFuY2VJRH1nZXRBdXRob3JpemF0aW9uVVJMKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pKSl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfWdldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Z2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX1nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlZnJlc2hBY2Nlc3NUb2tlbihlKX1nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsdCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KX1pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX1nZXRQS0NFQ29kZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRQS0NFQ29kZShlLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmIXJ9c3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJnJ9dXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO2NsYXNzIEV7Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19Y2xhc3MgVHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlLHQsbil7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdChuLCItIikuY29uY2F0KHQpLGUpfXN0YXRpYyBnZXRTaWduT3V0VVJMKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChzLCItaW5zdGFuY2VfIikuY29uY2F0KHQsIi0iKS5jb25jYXQoZSkpKSYmdm9pZCAwIT09bj9uOiIifXN0YXRpYyByZW1vdmVQS0NFKGUpe3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZSl9c3RhdGljIGNhbkNvbnRpbnVlU2lnbkluKGUsdCl7cmV0dXJuIShlJiYhVC5oYXNFcnJvckluVVJMKCkmJiFULmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gVC5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl9c3RhdGljIHdhc1NpZ25JbkNhbGxlZCgpe3JldHVybiEoIVQuaGFzRXJyb3JJblVSTCgpJiYhVC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fWNsYXNzIEF7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dCx0aGlzLl9pbnN0YW5jZUlEPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEluc3RhbmNlSUQoKX1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe2NvbnN0IHQ9e3R5cGU6InJlZnJlc2gtYWNjZXNzLXRva2VuLWVycm9yIn07cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZSh0KSxQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1ULmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KFQuc2V0U2lnbk91dFVSTCh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCkscy5jbGllbnRJRCx0aGlzLl9pbnN0YW5jZUlEKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyKXt2YXIgaTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKFQuaXNJbml0aWFsaXplZFNpbGVudFNpZ25JbigpKXJldHVybiB5aWVsZCByLnJlY2VpdmVQcm9tcHROb25lUmVzcG9uc2UoKSxQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJycElGcmFtZSIpLHM9bnVsbD09PShpPW51bGw9PW8/dm9pZCAwOm8uY29udGVudERvY3VtZW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRFbGVtZW50QnlJZCgicHJvbXB0Tm9uZUlGcmFtZSIpO3RyeXtjb25zdCBlPXlpZWxkIHQoKTtzLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxvPXM9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxhLGMsdTtjb25zdCBsPXMuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvZGUsbnVsbD09PShjPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc2Vzc2lvblN0YXRlLG51bGw9PT0odT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXRlKS50aGVuKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHQoZSl9KSkuY2F0Y2goKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihlKX0pKS5maW5hbGx5KCgoKT0+e2NsZWFyVGltZW91dChpKX0pKX0pKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyl9KSl9KSl9aGFuZGxlU2lnbkluKHQsbixyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZih5aWVsZCB0KCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2lmKGUuc3RvcmFnZSE9PXkuV2ViV29ya2VyJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpKXJldHVybiB0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksZS5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJm4oKSxQcm9taXNlLnJlc29sdmUoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTtjb25zdCBpPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXyksbz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFMpO2lmKGkpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7dGhyb3cgZS5zZWFyY2hQYXJhbXMuZGVsZXRlKF8pLGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShTKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGRvY3VtZW50LnRpdGxlLGUudG9TdHJpbmcoKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1TSS1TRTAxIixpLG51bGwhPW8/bzoiIil9aWYoZS5zdG9yYWdlPT09eS5XZWJXb3JrZXImJnIpe2NvbnN0IGU9eWllbGQgcigpO2lmKGUpcmV0dXJuIGV9fSkpfWF0dGFjaFRva2VuVG9SZXF1ZXN0Q29uZmlnKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCk7ZS5hdHRhY2hUb2tlbiYmKGUuc2hvdWxkQXR0YWNoSURQQWNjZXNzVG9rZW4/dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoeWllbGQgdGhpcy5nZXRJRFBBY2Nlc3NUb2tlbigpKX0pOnQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSl9KSl9KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0RGVjb2RlZElEUElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldENyeXB0b0hlbHBlcigpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRJRFRva2VuKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfWdldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX0pKX1nZXRJRFBBY2Nlc3NUb2tlbigpe3ZhciB0O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0odD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuYWNjZXNzX3Rva2VufSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fWNsYXNzIFJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYobi5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KG4uZXhwaXJlc19pbiksbz1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShvKSl9fSkpfWdldFJlZnJlc2hUaW1lb3V0VGltZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk/SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk6LTF9KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodClyZXR1cm4gdm9pZCBjbGVhclRpbWVvdXQodCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTstMSE9PWUmJmNsZWFyVGltZW91dChlKX0pKX19dmFyIEM9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBEKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gUChlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sci5nZXQ/cjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtuXX19KX0pKSx0fXZhciBJPXtleHBvcnRzOnt9fSxPPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxyPTA7cjxuLmxlbmd0aDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGUuYXBwbHkodCxuKX19LFU9TyxMPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gSChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBNKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGooZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUwuY2FsbChlKX1mdW5jdGlvbiBOKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHEoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1MLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24geChlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09TC5jYWxsKGUpfWZ1bmN0aW9uIEsoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxIKGUpKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LmNhbGwobnVsbCxlW25dLG4sZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBCPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpqLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIU0oZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhTShlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUwuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmaihlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpOLGlzUGxhaW5PYmplY3Q6cSxpc1VuZGVmaW5lZDpNLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1MLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1MLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1MLmNhbGwoZSl9LGlzRnVuY3Rpb246eCxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTihlKSYmeChlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUwuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpLLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiBuKG4scil7cSh0W3JdKSYmcShuKT90W3JdPWUodFtyXSxuKTpxKG4pP3Rbcl09ZSh7fSxuKTpIKG4pP3Rbcl09bi5zbGljZSgpOnRbcl09bn1mb3IodmFyIHI9MCxpPWFyZ3VtZW50cy5sZW5ndGg7cjxpO3IrKylLKGFyZ3VtZW50c1tyXSxuKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSyh0LChmdW5jdGlvbih0LHIpe2Vbcl09biYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/VSh0LG4pOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxKPUI7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgVz1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIHI7aWYobilyPW4odCk7ZWxzZSBpZihKLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXI9dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107Si5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKEouaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLEouZm9yRWFjaChlLChmdW5jdGlvbihlKXtKLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpKLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKEYodCkrIj0iK0YoZSkpfSkpKX0pKSxyPWkuam9pbigiJiIpfWlmKHIpe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStyfXJldHVybiBlfSx6PUI7ZnVuY3Rpb24gWSgpe3RoaXMuaGFuZGxlcnM9W119WS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhbiYmbi5zeW5jaHJvbm91cyxydW5XaGVuOm4/bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxZLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sWS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt6LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBWPVksRz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIFgoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgWj1YLFE9JDtmdW5jdGlvbiBlZShlKXtpZihaPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChaPT09WHx8IVopJiZzZXRUaW1lb3V0KXJldHVybiBaPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWi5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBHLnNldFRpbWVvdXQmJihaPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBHLmNsZWFyVGltZW91dCYmKFE9Y2xlYXJUaW1lb3V0KTt2YXIgdGUsbmU9W10scmU9ITEsaWU9LTE7ZnVuY3Rpb24gb2UoKXtyZSYmdGUmJihyZT0hMSx0ZS5sZW5ndGg/bmU9dGUuY29uY2F0KG5lKTppZT0tMSxuZS5sZW5ndGgmJnNlKCkpfWZ1bmN0aW9uIHNlKCl7aWYoIXJlKXt2YXIgZT1lZShvZSk7cmU9ITA7Zm9yKHZhciB0PW5lLmxlbmd0aDt0Oyl7Zm9yKHRlPW5lLG5lPVtdOysraWU8dDspdGUmJnRlW2llXS5ydW4oKTtpZT0tMSx0PW5lLmxlbmd0aH10ZT1udWxsLHJlPSExLGZ1bmN0aW9uKGUpe2lmKFE9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoUT09PSR8fCFRKSYmY2xlYXJUaW1lb3V0KXJldHVybiBRPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e1EoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBRLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gUS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGFlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9YWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIGNlKCl7fXZhciB1ZT1jZSxsZT1jZSxkZT1jZSxoZT1jZSxmZT1jZSxwZT1jZSxnZT1jZTt2YXIgdmU9Ry5wZXJmb3JtYW5jZXx8e30seWU9dmUubm93fHx2ZS5tb3pOb3d8fHZlLm1zTm93fHx2ZS5vTm93fHx2ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBtZT1uZXcgRGF0ZTt2YXIgd2U9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07bmUucHVzaChuZXcgYWUoZSx0KSksMSE9PW5lLmxlbmd0aHx8cmV8fGVlKHNlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjp1ZSxhZGRMaXN0ZW5lcjpsZSxvbmNlOmRlLG9mZjpoZSxyZW1vdmVMaXN0ZW5lcjpmZSxyZW1vdmVBbGxMaXN0ZW5lcnM6cGUsZW1pdDpnZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSp5ZS5jYWxsKHZlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1tZSkvMWUzfX0sX2U9d2UsU2U9QixiZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sa2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LEVlPWJlLFRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBFZShvLHQsbixyLGkpfSxBZT1UZSxSZT1CLENlPVJlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxSZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksUmUuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLFJlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sRGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sUGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sSWU9QixPZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFVlPUIsTGU9VWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49VWUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBIZShlKXt0aGlzLm1lc3NhZ2U9ZX1IZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSGUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE1lPUhlLGplPUIsTmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChBZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxxZT1DZSx4ZT1XLEtlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFEZSh0KT9QZShlLHQpOnR9LEJlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhJZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1JZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1JZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJk9lLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LEplPUxlLEZlPVRlLFdlPWtlLHplPU1lLFllPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9amUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPUtlKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9CZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtOZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHhlKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobihGZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKEZlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8V2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oRmUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxqZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fEplKGQpKSYmZS54c3JmQ29va2llTmFtZT9xZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZqZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksamUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgemUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxWZT1CLEdlPWZ1bmN0aW9uKGUsdCl7U2UuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSxYZT1iZSwkZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFplKGUsdCl7IVZlLmlzVW5kZWZpbmVkKGUpJiZWZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgUWUsZXQ9e3RyYW5zaXRpb25hbDprZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09X2UmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfZSkpJiYoUWU9WWUpLFFlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBHZSh0LCJBY2NlcHQiKSxHZSh0LCJDb250ZW50LVR5cGUiKSxWZS5pc0Zvcm1EYXRhKGUpfHxWZS5pc0FycmF5QnVmZmVyKGUpfHxWZS5pc0J1ZmZlcihlKXx8VmUuaXNTdHJlYW0oZSl8fFZlLmlzRmlsZShlKXx8VmUuaXNCbG9iKGUpP2U6VmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6VmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFplKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpWZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFplKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoVmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxWZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8ZXQudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmVmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93IFhlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07VmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7ZXQuaGVhZGVyc1tlXT17fX0pKSxWZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2V0LmhlYWRlcnNbZV09VmUubWVyZ2UoJGUpfSkpO3ZhciB0dD1ldCxudD1CLHJ0PXR0LGl0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSxvdD1CLHN0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxydDtyZXR1cm4gbnQuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0sYXQ9aXQsY3Q9dHQsdXQ9TWU7ZnVuY3Rpb24gbHQoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHV0KCJjYW5jZWxlZCIpfXZhciBkdD1CLGh0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGR0LmlzUGxhaW5PYmplY3QoZSkmJmR0LmlzUGxhaW5PYmplY3QodCk/ZHQubWVyZ2UoZSx0KTpkdC5pc1BsYWluT2JqZWN0KHQpP2R0Lm1lcmdlKHt9LHQpOmR0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gZHQuaXNVbmRlZmluZWQodFtuXSk/ZHQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFkdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gZHQuaXNVbmRlZmluZWQodFtuXSk/ZHQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gZHQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTtkdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LGZ0PSIwLjI2LjEiLHB0PWZ0LGd0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtndFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIHZ0PXt9O2d0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrcHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhdnRbaV0mJih2dFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciB5dD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmd0fSxtdD1CLHd0PVcsX3Q9VixTdD1mdW5jdGlvbihlKXtyZXR1cm4gbHQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPXN0LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPW90Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksb3QuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxjdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gbHQoZSksdC5kYXRhPXN0LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGF0KHQpfHwobHQoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1zdC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxidD1odCxrdD15dCxFdD1rdC52YWxpZGF0b3JzO2Z1bmN0aW9uIFR0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgX3QscmVzcG9uc2U6bmV3IF90fX1UdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1idCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJmt0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6RXQudHJhbnNpdGlvbmFsKEV0LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkV0LnRyYW5zaXRpb25hbChFdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkV0LnRyYW5zaXRpb25hbChFdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1bU3Qsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPVN0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sVHQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1idCh0aGlzLmRlZmF1bHRzLGUpLHd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LG10LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtUdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGJ0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksbXQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtUdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QoYnQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIEF0PVR0LFJ0PU1lO2Z1bmN0aW9uIEN0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBSdChlKSx0KG4ucmVhc29uKSl9KSl9Q3QucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sQ3QucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sQ3QucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxDdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBDdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIER0PUN0LFB0PUIsSXQ9QixPdD1PLFV0PUF0LEx0PWh0O3ZhciBIdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBVdCh0KSxyPU90KFV0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBJdC5leHRlbmQocixVdC5wcm90b3R5cGUsbiksSXQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoTHQodCxuKSl9LHJ9KHR0KTtIdC5BeGlvcz1VdCxIdC5DYW5jZWw9TWUsSHQuQ2FuY2VsVG9rZW49RHQsSHQuaXNDYW5jZWw9aXQsSHQuVkVSU0lPTj1mdCxIdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxIdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxIdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxJLmV4cG9ydHM9SHQsSS5leHBvcnRzLmRlZmF1bHQ9SHQ7dmFyIE10LGp0PUkuZXhwb3J0cztsZXQgTnQ9TXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9anQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgTXQpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPWp0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPWp0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxNdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBNdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gTXQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCgpe2xldCB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe010LmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPW59KSl9ZW5hYmxlSGFuZGxlcigpe010LmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtNdC5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06TXQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVDtNdC5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57TXQuaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtOdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxOdD1NdD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLHIpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LG4scyk6aSh0LG4pKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixzKSxzfShbZT0+e31dLE50KTtjbGFzcyBxdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQsbil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LG4pfSkpfWdldERhdGEodCl7dmFyIG4scjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KHI9bnVsbD09PShuPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldCh0KSkmJnZvaWQgMCE9PXI/cjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19dmFyIHh0PVtdLEt0PVtdLEJ0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LEp0PSExO2Z1bmN0aW9uIEZ0KCl7SnQ9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXh0W3RdPWVbdF0sS3RbZS5jaGFyQ29kZUF0KHQpXT10O0t0WyItIi5jaGFyQ29kZUF0KDApXT02MixLdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gV3QoZSx0LG4pe2Zvcih2YXIgcixpLG89W10scz10O3M8bjtzKz0zKXI9KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKHh0WyhpPXIpPj4xOCY2M10reHRbaT4+MTImNjNdK3h0W2k+PjYmNjNdK3h0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiB6dChlKXt2YXIgdDtKdHx8RnQoKTtmb3IodmFyIG49ZS5sZW5ndGgscj1uJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLGM9bi1yO2E8YzthKz1zKW8ucHVzaChXdChlLGEsYStzPmM/YzphK3MpKTtyZXR1cm4gMT09PXI/KHQ9ZVtuLTFdLGkrPXh0W3Q+PjJdLGkrPXh0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0saSs9eHRbdD4+MTBdLGkrPXh0W3Q+PjQmNjNdLGkrPXh0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gWXQoZSx0LG4scixpKXt2YXIgbyxzLGE9OCppLXItMSxjPSgxPDxhKS0xLHU9Yz4+MSxsPS03LGQ9bj9pLTE6MCxoPW4/LTE6MSxmPWVbdCtkXTtmb3IoZCs9aCxvPWYmKDE8PC1sKS0xLGY+Pj0tbCxsKz1hO2w+MDtvPTI1NipvK2VbdCtkXSxkKz1oLGwtPTgpO2ZvcihzPW8mKDE8PC1sKS0xLG8+Pj0tbCxsKz1yO2w+MDtzPTI1NipzK2VbdCtkXSxkKz1oLGwtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PWMpcmV0dXJuIHM/TmFOOjEvMCooZj8tMToxKTtzKz1NYXRoLnBvdygyLHIpLG8tPXV9cmV0dXJuKGY/LTE6MSkqcypNYXRoLnBvdygyLG8tcil9ZnVuY3Rpb24gVnQoZSx0LG4scixpLG8pe3ZhciBzLGEsYyx1PTgqby1pLTEsbD0oMTw8dSktMSxkPWw+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGY9cj8wOm8tMSxwPXI/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1sKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihjPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLGMqPTIpLCh0Kz1zK2Q+PTE/aC9jOmgqTWF0aC5wb3coMiwxLWQpKSpjPj0yJiYocysrLGMvPTIpLHMrZD49bD8oYT0wLHM9bCk6cytkPj0xPyhhPSh0KmMtMSkqTWF0aC5wb3coMixpKSxzKz1kKTooYT10Kk1hdGgucG93KDIsZC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtuK2ZdPTI1NSZhLGYrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSx1Kz1pO3U+MDtlW24rZl09MjU1JnMsZis9cCxzLz0yNTYsdS09OCk7ZVtuK2YtcF18PTEyOCpnfXZhciBHdD17fS50b1N0cmluZyxYdD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1HdC5jYWxsKGUpfTtlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PUcuVFlQRURfQVJSQVlfU1VQUE9SVHx8Ry5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciAkdD1adCgpO2Z1bmN0aW9uIFp0KCl7cmV0dXJuIGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIFF0KGUsdCl7aWYoWnQoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189ZW4ucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IGVuKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIGVuKGUsdCxuKXtpZighKGVuLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBlbikpcmV0dXJuIG5ldyBlbihlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBybih0aGlzLGUpfXJldHVybiB0bih0aGlzLGUsdCxuKX1mdW5jdGlvbiB0bihlLHQsbixyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQsbixyKXtpZih0LmJ5dGVMZW5ndGgsbjwwfHx0LmJ5dGVMZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxuKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09biYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsbik6bmV3IFVpbnQ4QXJyYXkodCxuLHIpO2VuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPWVuLnByb3RvdHlwZTplPW9uKGUsdCk7cmV0dXJuIGV9KGUsdCxuLHIpOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQsbil7InN0cmluZyI9PXR5cGVvZiBuJiYiIiE9PW58fChuPSJ1dGY4Iik7aWYoIWVuLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxjbih0LG4pLGk9KGU9UXQoZSxyKSkud3JpdGUodCxuKTtpIT09ciYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LG4pOmZ1bmN0aW9uKGUsdCl7aWYoYW4odCkpe3ZhciBuPTB8c24odC5sZW5ndGgpO3JldHVybiAwPT09KGU9UXQoZSxuKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsbiksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KHI9dC5sZW5ndGgpIT1yP1F0KGUsMCk6b24oZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmWHQodC5kYXRhKSlyZXR1cm4gb24oZSx0LmRhdGEpfXZhciByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBubihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHJuKGUsdCl7aWYobm4odCksZT1RdChlLHQ8MD8wOjB8c24odCkpLCFlbi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248dDsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIG9uKGUsdCl7dmFyIG49dC5sZW5ndGg8MD8wOjB8c24odC5sZW5ndGgpO2U9UXQoZSxuKTtmb3IodmFyIHI9MDtyPG47cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIHNuKGUpe2lmKGU+PVp0KCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1p0KCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGFuKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBjbihlLHQpe2lmKGFuKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBIbihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIE1uKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIEhuKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIHVuKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIEVuKHRoaXMsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIGJuKHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBrbih0aGlzLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiB3bih0aGlzLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBUbih0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBsbihlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIGRuKGUsdCxuLHIsaSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49aT8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighaSlyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1lbi5mcm9tKHQscikpLGFuKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6aG4oZSx0LG4scixpKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6aG4oZSxbdF0sbixyLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGhuKGUsdCxuLHIsaSl7dmFyIG8scz0xLGE9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoInVjczIiPT09KHI9U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09cnx8InV0ZjE2bGUiPT09cnx8InV0Zi0xNmxlIj09PXIpKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3M9MixhLz0yLGMvPTIsbi89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1zP2VbdF06ZS5yZWFkVUludDE2QkUodCpzKX1pZihpKXt2YXIgbD0tMTtmb3Iobz1uO288YTtvKyspaWYodShlLG8pPT09dSh0LC0xPT09bD8wOm8tbCkpe2lmKC0xPT09bCYmKGw9byksby1sKzE9PT1jKXJldHVybiBsKnN9ZWxzZS0xIT09bCYmKG8tPW8tbCksbD0tMX1lbHNlIGZvcihuK2M+YSYmKG49YS1jKSxvPW47bz49MDtvLS0pe2Zvcih2YXIgZD0hMCxoPTA7aDxjO2grKylpZih1KGUsbytoKSE9PXUodCxoKSl7ZD0hMTticmVha31pZihkKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPmkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7cj5vLzImJihyPW8vMik7Zm9yKHZhciBzPTA7czxyOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW24rc109YX1yZXR1cm4gc31mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gam4oSG4odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIGpuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fSh0KSxlLG4scil9ZnVuY3Rpb24gdm4oZSx0LG4scil7cmV0dXJuIGduKGUsdCxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuLHIpe3JldHVybiBqbihNbih0KSxlLG4scil9ZnVuY3Rpb24gbW4oZSx0LG4scil7cmV0dXJuIGpuKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpcj0obj1lLmNoYXJDb2RlQXQocykpPj44LGk9biUyNTYsby5wdXNoKGkpLG8ucHVzaChyKTtyZXR1cm4gb30odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gd24oZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP3p0KGUpOnp0KGUuc2xpY2UodCxuKSl9ZnVuY3Rpb24gX24oZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciByPVtdLGk9dDtpPG47KXt2YXIgbyxzLGEsYyx1PWVbaV0sbD1udWxsLGQ9dT4yMzk/NDp1PjIyMz8zOnU+MTkxPzI6MTtpZihpK2Q8PW4pc3dpdGNoKGQpe2Nhc2UgMTp1PDEyOCYmKGw9dSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKGM9KDMxJnUpPDw2fDYzJm8pPjEyNyYmKGw9Yyk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoYz0oMTUmdSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihsPWMpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYoYz0oMTUmdSk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZjPDExMTQxMTImJihsPWMpfW51bGw9PT1sPyhsPTY1NTMzLGQ9MSk6bD42NTUzNSYmKGwtPTY1NTM2LHIucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLHIucHVzaChsKSxpKz1kfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1TbilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIG49IiIscj0wO2Zvcig7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9U24pKTtyZXR1cm4gbn0ocil9ZW4ucG9vbFNpemU9ODE5Mixlbi5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189ZW4ucHJvdG90eXBlLGV9LGVuLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0bihudWxsLGUsdCxuKX0sZW4uVFlQRURfQVJSQVlfU1VQUE9SVCYmKGVuLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsZW4uX19wcm90b19fPVVpbnQ4QXJyYXkpLGVuLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5uKHQpLHQ8PTA/UXQoZSx0KTp2b2lkIDAhPT1uPyJzdHJpbmciPT10eXBlb2Ygcj9RdChlLHQpLmZpbGwobixyKTpRdChlLHQpLmZpbGwobik6UXQoZSx0KX0obnVsbCxlLHQsbil9LGVuLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBybihudWxsLGUpfSxlbi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHJuKG51bGwsZSl9LGVuLmlzQnVmZmVyPU5uLGVuLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighYW4oZSl8fCFhbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsaT0wLG89TWF0aC5taW4obixyKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtuPWVbaV0scj10W2ldO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0sZW4uaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sZW4uY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIVh0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGVuLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9ZW4uYWxsb2NVbnNhZmUodCksaT0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBvPWVbbl07aWYoIWFuKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkocixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gcn0sZW4uYnl0ZUxlbmd0aD1jbixlbi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGVuLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpbG4odGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGVuLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpbG4odGhpcyx0LHQrMyksbG4odGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sZW4ucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClsbih0aGlzLHQsdCs3KSxsbih0aGlzLHQrMSx0KzYpLGxuKHRoaXMsdCsyLHQrNSksbG4odGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sZW4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/X24odGhpcywwLGUpOnVuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZW4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWVuLmNvbXBhcmUodGhpcyxlKX0sZW4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sZW4ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixpKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8bj5lLmxlbmd0aHx8cjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPj1pJiZ0Pj1uKXJldHVybiAwO2lmKHI+PWkpcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKHI+Pj49MCkscz0obj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKHIsaSksdT1lLnNsaWNlKHQsbiksbD0wO2w8YTsrK2wpaWYoY1tsXSE9PXVbbF0pe289Y1tsXSxzPXVbbF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxlbi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0sZW4ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkbih0aGlzLGUsdCxuLCEwKX0sZW4ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZG4odGhpcyxlLHQsbiwhMSl9LGVuLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQsbixyKXtpZih2b2lkIDA9PT10KXI9InV0ZjgiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmInN0cmluZyI9PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShuKT8obnw9MCx2b2lkIDA9PT1yJiYocj0idXRmOCIpKToocj1uLG49dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPmkpJiYobj1pKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3J8fChyPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKHIpe2Nhc2UiaGV4IjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBtbih0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxlbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgU249NDA5NjtmdW5jdGlvbiBibihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGtuKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBFbihlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7Zm9yKHZhciBpPSIiLG89dDtvPG47KytvKWkrPUxuKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIFRuKGUsdCxuKXtmb3IodmFyIHI9ZS5zbGljZSh0LG4pLGk9IiIsbz0wO288ci5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbb10rMjU2KnJbbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQW4oZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFJuKGUsdCxuLHIsaSxvKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIENuKGUsdCxuLHIpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sMik7aTxvOysraSllW24raV09KHQmMjU1PDw4KihyP2k6MS1pKSk+Pj44KihyP2k6MS1pKX1mdW5jdGlvbiBEbihlLHQsbixyKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sNCk7aTxvOysraSllW24raV09dD4+PjgqKHI/aTozLWkpJjI1NX1mdW5jdGlvbiBQbihlLHQsbixyLGksbyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEluKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFBuKGUsMCxuLDQpLFZ0KGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIE9uKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFBuKGUsMCxuLDgpLFZ0KGUsdCxuLHIsNTIsOCksbis4fWVuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLCh0PXZvaWQgMD09PXQ/cjp+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksdDxlJiYodD1lKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUKShuPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPWVuLnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtuPW5ldyBlbihpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbyluW29dPXRoaXNbbytlXX1yZXR1cm4gbn0sZW4ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sZW4ucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspcis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gcn0sZW4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGVuLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sZW4ucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxlbi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZW4ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGVuLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcj49KGkqPTEyOCkmJihyLT1NYXRoLnBvdygyLDgqdCkpLHJ9LGVuLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LGk9MSxvPXRoaXNbZSstLXJdO3I+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLXJdKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxlbi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sZW4ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QW4oZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZW4ucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8QW4oZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZW4ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxlbi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LGVuLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDQsdGhpcy5sZW5ndGgpLFl0KHRoaXMsZSwhMCwyMyw0KX0sZW4ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCExLDIzLDQpfSxlbi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsOCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCEwLDUyLDgpfSxlbi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsOCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCExLDUyLDgpfSxlbi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxSbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8Um4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT1uLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsMSwyNTUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsNjU1MzUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkNuKHRoaXMsZSx0LCEwKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsNjU1MzUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkNuKHRoaXMsZSx0LCExKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkRuKHRoaXMsZSx0LCEwKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkRuKHRoaXMsZSx0LCExKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Um4odGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LGVuLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Um4odGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPW4tMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxSbih0aGlzLGUsdCwxLDEyNywtMTI4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxlbi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Q24odGhpcyxlLHQsITApLHQrMn0sZW4ucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxSbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkNuKHRoaXMsZSx0LCExKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkRuKHRoaXMsZSx0LCEwKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkRuKHRoaXMsZSx0LCExKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBJbih0aGlzLGUsdCwhMCxuKX0sZW4ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEluKHRoaXMsZSx0LCExLG4pfSxlbi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE9uKHRoaXMsZSx0LCEwLG4pfSxlbi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE9uKHRoaXMsZSx0LCExLG4pfSxlbi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1uJiYocj1lLmxlbmd0aC10K24pO3ZhciBpLG89ci1uO2lmKHRoaXM9PT1lJiZuPHQmJnQ8cilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStuXTtlbHNlIGlmKG88MWUzfHwhZW4uVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLG4rbyksdCk7cmV0dXJuIG99LGVuLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09ciYmInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHImJiFlbi5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxuOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz1hbihlKT9lOkhuKG5ldyBlbihlLHIpLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPG4tdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIFVuPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIExuKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBIbihlLHQpe3ZhciBuO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxyOysrcyl7aWYoKG49ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1yKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj02NTUzNisoaS01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scztKdHx8RnQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgQnQoMyphLzQtbykscj1vPjA/YS00OmE7dmFyIGM9MDtmb3IodD0wLG49MDt0PHI7dCs9NCxuKz0zKWk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MTh8S3RbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxLdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8S3RbZS5jaGFyQ29kZUF0KHQrMyldLHNbYysrXT1pPj4xNiYyNTUsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MnxLdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1tjKytdPTI1NSZpKToxPT09byYmKGk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MTB8S3RbZS5jaGFyQ29kZUF0KHQrMSldPDw0fEt0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKFVuLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBqbihlLHQsbixyKXtmb3IodmFyIGk9MDtpPHImJiEoaStuPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krbl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBObihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fHFuKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJnFuKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBxbihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciB4bj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6ZW4sSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksZW4uYWxsb2MoK2UpfSxpc0J1ZmZlcjpObixrTWF4TGVuZ3RoOiR0fSksS249e2V4cG9ydHM6e319LEJuPXt9LEpuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSm4uZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQlNDtpZighbilyZXR1cm4gZTt2YXIgcj10LGk9NC1uLG89dCtpLHM9ZW4uYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixyKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZuPUpuO2Z1bmN0aW9uIFduKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksZW4uaXNCdWZmZXIoZSk/WW4oZS50b1N0cmluZygiYmFzZTY0IikpOlluKGVuLmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxGbi5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBZbihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIFZuLEduPVduO0duLmVuY29kZT1XbixHbi5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxlbi5mcm9tKHpuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sR24udG9CYXNlNjQ9em4sR24uZnJvbUJhc2U2ND1ZbixHbi50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gZW4uZnJvbSh6bihlKSwiYmFzZTY0Iil9LEJuLmRlZmF1bHQ9R24sKFZuPUtuKS5leHBvcnRzPUJuLmRlZmF1bHQsVm4uZXhwb3J0cy5kZWZhdWx0PVZuLmV4cG9ydHM7dmFyIFhuPUtuLmV4cG9ydHMsJG49e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxuKXt2YXIgcj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gbihlLG4scixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx2LHksbTtvPj02NDspe2ZvcihzPW5bMF0sYT1uWzFdLGM9blsyXSx1PW5bM10sbD1uWzRdLGQ9bls1XSxoPW5bNl0sZj1uWzddLGc9MDtnPDE2O2crKyl2PWkrNCpnLGVbZ109KDI1NSZyW3ZdKTw8MjR8KDI1NSZyW3YrMV0pPDwxNnwoMjU1JnJbdisyXSk8PDh8MjU1JnJbdiszXTtmb3IoZz0xNjtnPDY0O2crKyl5PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHkrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl5PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3l8MCx1PWMsYz1hLGE9cyxzPXkrbXwwO25bMF0rPXMsblsxXSs9YSxuWzJdKz1jLG5bM10rPXUsbls0XSs9bCxuWzVdKz1kLG5bNl0rPWgsbls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIHI9MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYobih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihyPW4odGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxyLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxyPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltyXT0xMjg7Zm9yKHZhciBhPXIrMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUsbih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLnN0YXRlLmxlbmd0aDtuKyspdGhpcy5zdGF0ZVtuXT1lW25dO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IHIsdGhpcy5vdXRlcj1uZXcgcix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyByKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0W25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyByKS51cGRhdGUoZSksbj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49bmV3IGkoZSkudXBkYXRlKHQpLHI9bi5kaWdlc3QoKTtyZXR1cm4gbi5jbGVhbigpLHJ9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgaT1yWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksbiYmdC51cGRhdGUobiksdC51cGRhdGUociksdC5maW5pc2goZSksclswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PXImJihyPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShyKSxwPTA7cDxyO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxuLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQsbixyKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KHIpLGQ9MDtkKnM8cjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PW47ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8cjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0ocik7dmFyIGk9ci5kZWZhdWx0O2Zvcih2YXIgbyBpbiByKWlbb109cltvXTtlLmV4cG9ydHM9aX0oKX0oJG4pO3ZhciBabj1EKCRuLmV4cG9ydHMpLFFuPWNyeXB0bztjb25zdCBlcj1lPT5lIGluc3RhbmNlb2YgQ3J5cHRvS2V5LHRyPW5ldyBUZXh0RW5jb2Rlcixucj1uZXcgVGV4dERlY29kZXI7Y29uc3QgcnI9ZT0+e2xldCB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PW5yLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4oZT0+e2NvbnN0IHQ9YXRvYihlKSxuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluW2VdPXQuY2hhckNvZGVBdChlKTtyZXR1cm4gbn0pKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19O2NsYXNzIGlyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7dmFyIHQ7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0odD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PXR8fHQuY2FsbChFcnJvcix0aGlzLHRoaXMuY29uc3RydWN0b3IpfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19Y2xhc3Mgb3IgZXh0ZW5kcyBpcntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1jbGFzcyBzciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1jbGFzcyBhciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fWNsYXNzIGNyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyB1ciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIGxyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3MgZHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fWNsYXNzIGhyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIix0aGlzLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19Y2xhc3MgZnIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIix0aGlzLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19Y2xhc3MgcHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fWZ1bmN0aW9uIGdyKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gdnIoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhbGdvcml0aG0ubmFtZSI7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgIi5jb25jYXQodCwiIG11c3QgYmUgIikuY29uY2F0KGUpKX1mdW5jdGlvbiB5cihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIG1yKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHdyKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19ZnVuY3Rpb24gX3IoZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgodD0+ZS51c2FnZXMuaW5jbHVkZXModCkpKSl7bGV0IGU9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IG49dC5wb3AoKTtlKz0ib25lIG9mICIuY29uY2F0KHQuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQobiwiLiIpfWVsc2UgMj09PXQubGVuZ3RoP2UrPSJvbmUgb2YgIi5jb25jYXQodFswXSwiIG9yICIpLmNvbmNhdCh0WzFdLCIuIik6ZSs9IiIuY29uY2F0KHRbMF0sIi4iKTt0aHJvdyBuZXcgVHlwZUVycm9yKGUpfX12YXIgU3I9ZnVuY3Rpb24oZSl7bGV0IHQ9IktleSBtdXN0IGJlICI7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO2lmKHIubGVuZ3RoPjIpe2NvbnN0IGU9ci5wb3AoKTt0Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoci5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChlLCIuIil9ZWxzZSAyPT09ci5sZW5ndGg/dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHJbMF0sIiBvciAiKS5jb25jYXQoclsxXSwiLiIpOnQrPSJvZiB0eXBlICIuY29uY2F0KHJbMF0sIi4iKTtyZXR1cm4gbnVsbD09ZT90Kz0iIFJlY2VpdmVkICIuY29uY2F0KGUpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/dCs9IiBSZWNlaXZlZCBmdW5jdGlvbiAiLmNvbmNhdChlLm5hbWUpOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYodCs9IiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAiLmNvbmNhdChlLmNvbnN0cnVjdG9yLm5hbWUpKSx0fSxicj1lPT5lcihlKTtjb25zdCBrcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIEVyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IFRyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGNyKCIiLmNvbmNhdChlLmFsZywiIGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXMiKSk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MSl9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGdyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgY3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gUW4uc3VidGxlLmltcG9ydEtleSgicmF3IixycihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsUW4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBBcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighYnIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihTcihlLC4uLmtyLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpfX0pKHQpOigoZSx0KT0+e2lmKCFicihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFNyKGUsLi4ua3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpfSkodCxuKX07ZnVuY3Rpb24gUnIoZSx0LG4pe2lmKGVyKHQpKXJldHVybiBmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgdnIoIkhNQUMiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKG1yKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyB2cigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOntpZigheXIoZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgdnIoIlJTQVNTQS1QS0NTMS12MV81Iik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihtcihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgdnIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgdnIoIlJTQS1QU1MiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKG1yKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyB2cigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UgZ3IoKSYmIkVkRFNBIjppZigheXIoZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IHZyKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IHZyKCJFQ0RTQSIpO2NvbnN0IG49d3IodCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PW4pdGhyb3cgdnIobiwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO19yKGUscil9KHQsZSxuKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3IoU3IodCwuLi5rcikpO3JldHVybiBRbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSksbmFtZToiSE1BQyJ9LCExLFtuXSl9dGhyb3cgbmV3IFR5cGVFcnJvcihTcih0LC4uLmtyLCJVaW50OEFycmF5IikpfWNvbnN0IENyPWFzeW5jKGUsdCxuLHIpPT57Y29uc3QgaT1hd2FpdCBScihlLHQsInZlcmlmeSIpOygoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXtjb25zdHttb2R1bHVzTGVuZ3RoOm59PXQuYWxnb3JpdGhtO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8bjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGUsIiByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyIikpfX0pKGUsaSk7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSk7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlIGdyKCkmJiJFZERTQSI6Y29uc3R7bmFtZWRDdXJ2ZTpyfT10O3JldHVybntuYW1lOnIsbmFtZWRDdXJ2ZTpyfTtkZWZhdWx0OnRocm93IG5ldyBjcigiYWxnICIuY29uY2F0KGUsIiBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lIikpfX0oZSxpLmFsZ29yaXRobSk7dHJ5e3JldHVybiBhd2FpdCBRbi5zdWJ0bGUudmVyaWZ5KG8saSxuLHIpfWNhdGNoKGUpe3JldHVybiExfX07YXN5bmMgZnVuY3Rpb24gRHIoZSx0LG4pe3ZhciByO2lmKCFFcihlKSl0aHJvdyBuZXcgdXIoIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih2b2lkIDA9PT1lLnByb3RlY3RlZCYmdm9pZCAwPT09ZS5oZWFkZXIpdGhyb3cgbmV3IHVyKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtpZih2b2lkIDAhPT1lLnByb3RlY3RlZCYmInN0cmluZyIhPXR5cGVvZiBlLnByb3RlY3RlZCl0aHJvdyBuZXcgdXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwPT09ZS5wYXlsb2FkKXRocm93IG5ldyB1cigiSldTIFBheWxvYWQgbWlzc2luZyIpO2lmKCJzdHJpbmciIT10eXBlb2YgZS5zaWduYXR1cmUpdGhyb3cgbmV3IHVyKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDAhPT1lLmhlYWRlciYmIUVyKGUuaGVhZGVyKSl0aHJvdyBuZXcgdXIoIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtsZXQgaT17fTtpZihlLnByb3RlY3RlZCl7Y29uc3QgdD1ycihlLnByb3RlY3RlZCk7dHJ5e2k9SlNPTi5wYXJzZShuci5kZWNvZGUodCkpfWNhdGNoKGUpe3Rocm93IG5ldyB1cigiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpfX1pZighZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtjb25zdCByPXQuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXJldHVybiEwO2xldCBpO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYoaSYmMCE9PWkuc2l6ZSlmb3IoY29uc3QgZSBvZiB0KXtpZihpLmhhcyhlKSlyZXR1cm4hMTtpLmFkZChlKX1lbHNlIGk9bmV3IFNldCh0KX1yZXR1cm4hMH0oaSxlLmhlYWRlcikpdGhyb3cgbmV3IHVyKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3Qgbz17Li4uaSwuLi5lLmhlYWRlcn0scz1mdW5jdGlvbihlLHQsbixyLGkpe2lmKHZvaWQgMCE9PWkuY3JpdCYmdm9pZCAwPT09ci5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFyfHx2b2lkIDA9PT1yLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoci5jcml0KXx8MD09PXIuY3JpdC5sZW5ndGh8fHIuY3JpdC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7bGV0IG87bz12b2lkIDAhPT1uP25ldyBNYXAoWy4uLk9iamVjdC5lbnRyaWVzKG4pLC4uLnQuZW50cmllcygpXSk6dDtmb3IoY29uc3QgdCBvZiByLmNyaXQpe2lmKCFvLmhhcyh0KSl0aHJvdyBuZXcgY3IoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG5vdCByZWNvZ25pemVkJykpO2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG1pc3NpbmcnKSk7aWYoby5nZXQodCkmJnZvaWQgMD09PXJbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfSh1cixuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09bj92b2lkIDA6bi5jcml0LGksbyk7bGV0IGE9ITA7aWYocy5oYXMoImI2NCIpJiYoYT1pLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBhKSl0aHJvdyBuZXcgdXIoJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOmN9PW87aWYoInN0cmluZyIhPXR5cGVvZiBjfHwhYyl0aHJvdyBuZXcgdXIoJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IHU9biYmKChlLHQpPT57aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciJy5jb25jYXQoZSwnIiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9KSgiYWxnb3JpdGhtcyIsbi5hbGdvcml0aG1zKTtpZih1JiYhdS5oYXMoYykpdGhyb3cgbmV3IGFyKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYoYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHVyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgdXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2xldCBsPSExOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KGksZSksbD0hMCksQXIoYyx0LCJ2ZXJpZnkiKTtjb25zdCBkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LnJlZHVjZSgoKGUsdCk9PntsZXR7bGVuZ3RoOm59PXQ7cmV0dXJuIGUrbn0pLDApLGk9bmV3IFVpbnQ4QXJyYXkocik7bGV0IG89MDtyZXR1cm4gdC5mb3JFYWNoKChlPT57aS5zZXQoZSxvKSxvKz1lLmxlbmd0aH0pKSxpfSh0ci5lbmNvZGUobnVsbCE9PShyPWUucHJvdGVjdGVkKSYmdm9pZCAwIT09cj9yOiIiKSx0ci5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD90ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQpLGg9cnIoZS5zaWduYXR1cmUpO2lmKCFhd2FpdCBDcihjLHQsaCxkKSl0aHJvdyBuZXcgcHI7bGV0IGY7Zj1hP3JyKGUucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/dHIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkO2NvbnN0IHA9e3BheWxvYWQ6Zn07cmV0dXJuIHZvaWQgMCE9PWUucHJvdGVjdGVkJiYocC5wcm90ZWN0ZWRIZWFkZXI9aSksdm9pZCAwIT09ZS5oZWFkZXImJihwLnVucHJvdGVjdGVkSGVhZGVyPWUuaGVhZGVyKSxsP3suLi5wLGtleTp0fTpwfXZhciBQcj1lPT5NYXRoLmZsb29yKGUuZ2V0VGltZSgpLzFlMyk7Y29uc3QgSXI9ODY0MDAsT3I9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIFVyPWU9Pntjb25zdCB0PU9yLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qSXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IExyPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpLEhyPShlLHQpPT4ic3RyaW5nIj09dHlwZW9mIGU/dC5pbmNsdWRlcyhlKTohIUFycmF5LmlzQXJyYXkoZSkmJnQuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoZSkpKTthc3luYyBmdW5jdGlvbiBNcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPW5yLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB1cigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IERyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBscigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0e3R5cDpyfT1uO2lmKHImJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxMcihlLnR5cCkhPT1McihyKSkpdGhyb3cgbmV3IG9yKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTtsZXQgaTt0cnl7aT1KU09OLnBhcnNlKG5yLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCFFcihpKSl0aHJvdyBuZXcgbHIoIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309bjtpZihvJiYhKEFycmF5LmlzQXJyYXkobyk/bzpbb10pLmluY2x1ZGVzKGkuaXNzKSl0aHJvdyBuZXcgb3IoJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTtjb25zdHtzdWJqZWN0OnN9PW47aWYocyYmaS5zdWIhPT1zKXRocm93IG5ldyBvcigndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e2F1ZGllbmNlOmF9PW47aWYoYSYmIUhyKGkuYXVkLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSkpdGhyb3cgbmV3IG9yKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7bGV0IGM7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6Yz1VcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6Yz1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpjPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6dX09bixsPVByKHV8fG5ldyBEYXRlKTtpZigodm9pZCAwIT09aS5pYXR8fG4ubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBvcignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgb3IoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+bCtjKXRocm93IG5ldyBvcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBvcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9bC1jKXRocm93IG5ldyBzcignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKG4ubWF4VG9rZW5BZ2Upe2NvbnN0IGU9bC1pLmlhdDtpZihlLWM+KCJudW1iZXIiPT10eXBlb2Ygbi5tYXhUb2tlbkFnZT9uLm1heFRva2VuQWdlOlVyKG4ubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc3IoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWMpdGhyb3cgbmV3IG9yKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9KGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxzPXtwYXlsb2FkOm8scHJvdGVjdGVkSGVhZGVyOmkucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4ucyxrZXk6aS5rZXl9OnN9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIEVyKGUpfWNsYXNzIE5ye2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoanIpfShlKSl0aHJvdyBuZXcgZHIoIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHQ7dGhpcy5fandrcz0odD1lLCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHQpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpKX1hc3luYyBnZXRLZXkoZSx0KXtjb25zdHthbGc6bixraWQ6cn09ey4uLmUsLi4udC5oZWFkZXJ9LGk9ZnVuY3Rpb24oZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fShuKSxvPXRoaXMuX2p3a3Mua2V5cy5maWx0ZXIoKGU9PntsZXQgdD1pPT09ZS5rdHk7aWYodCYmInN0cmluZyI9PXR5cGVvZiByJiYodD1yPT09ZS5raWQpLHQmJiJzdHJpbmciPT10eXBlb2YgZS5hbGcmJih0PW49PT1lLmFsZyksdCYmInN0cmluZyI9PXR5cGVvZiBlLnVzZSYmKHQ9InNpZyI9PT1lLnVzZSksdCYmQXJyYXkuaXNBcnJheShlLmtleV9vcHMpJiYodD1lLmtleV9vcHMuaW5jbHVkZXMoInZlcmlmeSIpKSx0JiYiRWREU0EiPT09biYmKHQ9IkVkMjU1MTkiPT09ZS5jcnZ8fCJFZDQ0OCI9PT1lLmNydiksdClzd2l0Y2gobil7Y2FzZSJFUzI1NiI6dD0iUC0yNTYiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzI1NksiOnQ9InNlY3AyNTZrMSI9PT1lLmNydjticmVhaztjYXNlIkVTMzg0Ijp0PSJQLTM4NCI9PT1lLmNydjticmVhaztjYXNlIkVTNTEyIjp0PSJQLTUyMSI9PT1lLmNydn1yZXR1cm4gdH0pKSx7MDpzLGxlbmd0aDphfT1vO2lmKDA9PT1hKXRocm93IG5ldyBocjtpZigxIT09YSl0aHJvdyBuZXcgZnI7Y29uc3QgYz10aGlzLl9jYWNoZWQuZ2V0KHMpfHx0aGlzLl9jYWNoZWQuc2V0KHMse30pLmdldChzKTtpZih2b2lkIDA9PT1jW25dKXtjb25zdCBlPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZighRXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodHx8KHQ9ZS5hbGcpLCJzdHJpbmciIT10eXBlb2YgdHx8IXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImFsZyIgYXJndW1lbnQgaXMgcmVxdWlyZWQgd2hlbiAiandrLmFsZyIgaXMgbm90IHByZXNlbnQnKTtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0IjppZigic3RyaW5nIiE9dHlwZW9mIGUua3x8IWUuayl0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtyZXR1cm4gbnVsbCE9bnx8KG49ITAhPT1lLmV4dCksbj9Ucih7Li4uZSxhbGc6dCxleHQ6ITF9KTpycihlLmspO2Nhc2UiUlNBIjppZih2b2lkIDAhPT1lLm90aCl0aHJvdyBuZXcgY3IoJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCcpO2Nhc2UiRUMiOmNhc2UiT0tQIjpyZXR1cm4gVHIoey4uLmUsYWxnOnR9KTtkZWZhdWx0OnRocm93IG5ldyBjcignVW5zdXBwb3J0ZWQgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX19KHsuLi5zLGV4dDohMH0sbik7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJwdWJsaWMiIT09ZS50eXBlKXRocm93IG5ldyBkcigiSlNPTiBXZWIgS2V5IFNldCBtZW1iZXJzIG11c3QgYmUgcHVibGljIGtleXMiKTtjW25dPWV9cmV0dXJuIGNbbl19fXZhciBxcj17ZXhwb3J0czp7fX0seHI9e2V4cG9ydHM6e319LEtyPVAoeG4pOyFmdW5jdGlvbihlLHQpe3ZhciBuPUtyLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oeHIseHIuZXhwb3J0cyk7dmFyIEJyPTY1NTM2LEpyPTQyOTQ5NjcyOTU7dmFyIEZyPXhyLmV4cG9ydHMuQnVmZmVyLFdyPUMuY3J5cHRvfHxDLm1zQ3J5cHRvO1dyJiZXci5nZXRSYW5kb21WYWx1ZXM/cXIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+SnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj1Gci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5Ccilmb3IodmFyIHI9MDtyPGU7cis9QnIpV3IuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK0JyKSk7ZWxzZSBXci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIF9lLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06cXIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIHpyPXFyLmV4cG9ydHM7Y2xhc3MgWXJ7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBYbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gWG4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gZW4uZnJvbShabigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiB6cihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyxhKXtjb25zdCB1PXthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLHN1YmplY3Q6b307cmV0dXJuKG51bGw9PWF8fGEpJiYodS5pc3N1ZXI9aSksTXIoZSwobD17a2V5czpbdF19LE5yLnByb3RvdHlwZS5nZXRLZXkuYmluZChuZXcgTnIobCkpKSx1KS50aGVuKCgoKT0+UHJvbWlzZS5yZXNvbHZlKCEwKSkpLmNhdGNoKChlPT57dmFyIHQ7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQ1JZUFRPLVVUSUxTLVZKLUlWMDEiLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLnJlYXNvbikmJnZvaWQgMCE9PXQ/dDpKU09OLnN0cmluZ2lmeShlKSwiIi5jb25jYXQobnVsbD09ZT92b2lkIDA6ZS5jb2RlLCIgIikuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pKSl9KSk7dmFyIGx9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPW49PntsZXR7ZGF0YTphLHBvcnRzOnV9PW47cmV0dXJuIGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGwsZCxoLGYscDtjb25zdCB5PXVbMF07aWYoYS50eXBlPT09dnx8cilzd2l0Y2goYS50eXBlKXtjYXNlIHY6dHJ5e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSxhLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IHF0LGk9bmV3IFlyLG89bmV3IGc7eWllbGQgby5pbml0aWFsaXplKHQscixpKTtjb25zdCBzPW5ldyBSKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PU50LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGEuYXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLHkucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6ci5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0obD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGEsdD1udWxsPT1lP3ZvaWQgMDplLmRhdGE7aWYoITA9PT0obnVsbD09PShwPW51bGw9PT0oZj1hLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmRhdGEpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmZvcm1EYXRhKSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IGUgaW4gdCkiZm9ybURhdGEiIT09ZSYmbi5hcHBlbmQoZSx0W2VdKTtlLmRhdGE9bn1yLmh0dHBSZXF1ZXN0KGUpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWt9Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpyLmh0dHBSZXF1ZXN0QWxsKGEuZGF0YSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zaWduT3V0KCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZXF1ZXN0LWN1c3RvbS1ncmFudCI6ci5yZXF1ZXN0Q3VzdG9tR3JhbnQoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6ci5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1iYXNpYy11c2VyLWluZm8iOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldENyeXB0b0hlbHBlcigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJlbmFibGVfaHR0cF9oYW5kbGVyIjpyLmVuYWJsZUh0dHBIYW5kbGVyKCkseS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6ci5kaXNhYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmlzQXV0aGVudGljYXRlZCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2Uoci5zdGFydEF1dG9SZWZyZXNoVG9rZW4oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09YT92b2lkIDA6YS5kYXRhKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnVwZGF0ZUNvbmZpZyhudWxsPT1hP3ZvaWQgMDphLmRhdGEpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDb25maWdEYXRhKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT15fHx5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLCJUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAiLmNvbmNhdChhLnR5cGUsIiwgaXMgaW52YWxpZC4iKSkpKX1lbHNlIHkucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBjKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKX0pKX07Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBBKGUsdCkpKTtyZXR1cm57fX0oKTsKCg==",$W=null,eV=!1,function(e){return tV=tV||_W(qW,$W,eV),new Worker(tV,e)});const nV="init",lV="sign-out",oV="http-request",aV="http-request-all",rV="request-custom-grant",cV="revoke-access-token",sV="request-start",dV="request-success",uV="request-finish",hV="get-oidc-service-endpoints",ZV="get-basic-user-info",bV="get-decoded-id-token",mV="get-crypto-helper",pV="enable_http_handler",yV="disable_http_handler",GV="get_auth_url",XV="request_get_token",WV="is_authenticated",VV="get_sign_out_url",IV="refresh_access-token",gV="refresh-access-token-error",SV="set_session_state",fV="start_auto_refresh_token",RV="update_config",vV="get_id_token",YV="check_session_signed_in",KV="check_session_signed_out",NV="get_config_data",CV="set_session_state_from_iframe";var LV,UV;e.Storage=void 0,(LV=e.Storage||(e.Storage={})).LocalStorage="localStorage",LV.SessionStorage="sessionStorage",LV.WebWorker="webWorker",LV.BrowserMemory="browserMemory",e.Hooks=void 0,(UV=e.Hooks||(e.Hooks={})).SignIn="sign-in",UV.SignOut="sign-out",UV.Initialize="initialize",UV.HttpRequestStart="http-request-start",UV.HttpRequestFinish="http-request-finish",UV.HttpRequestError="http-request-error",UV.HttpRequestSuccess="http-request-success",UV.RevokeAccessToken="revoke-access-token",UV.CustomGrant="custom-grant",UV.SignOutFailed="sign-out-failed";const kV="rpIFrame",JV="promptNoneIFrame",TV="Y2hlY2tTZXNzaW9u",HV="sign-in-silently",xV="initialized-silent-sign-in",wV="promptNoneRequestSent",FV="error",zV="error_description",PV="custom_grant_config",BV="state",MV="Access token is invalid";class jV{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class QV{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e,t,i){sessionStorage.setItem("".concat(wW,"-instance_").concat(i,"-").concat(t),e)}static getSignOutURL(e,t){var i;return null!==(i=sessionStorage.getItem("".concat(wW,"-instance_").concat(t,"-").concat(e)))&&void 0!==i?i:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!QV.hasErrorInURL()&&!QV.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return QV.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!QV.hasErrorInURL()&&!QV.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(xV),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return UW(this,void 0,void 0,(function*(){if(AW.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield AW.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(AW.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(FV),i=e.searchParams.get(zV),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(HV))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get(FV)&&t.searchParams.get(BV)!==FW}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(wV);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(wV,JSON.stringify(e))}static waitTillPageRedirect(e){return UW(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}class EV{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._instanceID=this._authenticationClient.getInstanceID()}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,a,r;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(a=e.checkSessionInterval)&&void 0!==a?a:3,null!==(r=e.sessionRefreshInterval)&&void 0!==r?r:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return UW(this,void 0,void 0,(function*(){let o=!0,a=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){a=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(PV,JSON.stringify(e)),o||a?this._authenticationClient.requestCustomGrant(e).then((i=>UW(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-MAIN_THREAD_CLIENT-RCG-IV01","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`"))}))}getCustomGrantConfigData(){return UW(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(PV);return e?JSON.parse(e):null}))}refreshAccessToken(e){return UW(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){const t={type:gV};return window.postMessage(t),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var a,r;return UW(this,void 0,void 0,(function*(){let c=!1;const s=yield this._dataLayer.getConfigData();for(const e of[...null!==(a=yield null==s?void 0:s.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(e&&(null===(r=null==t?void 0:t.url)||void 0===r?void 0:r.startsWith(e))){c=!0;break}return c?e.request(t).then((e=>Promise.resolve(e))).catch((a=>UW(this,void 0,void 0,(function*(){var r,c,s;if(401===(null===(r=null==a?void 0:a.response)||void 0===r?void 0:r.status)||!(null==a?void 0:a.response)){let r;try{r=yield this.refreshAccessToken(o)}catch(e){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},a),{code:MV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HR-SE01",null!==(c=null==e?void 0:e.name)&&void 0!==c?c:"Refresh token request failed.",null!==(s=null==e?void 0:e.message)&&void 0!==s?s:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(r)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(a)),"function"==typeof l&&l()),Promise.reject(a)})))):Promise.reject(new BW("SPA-AUTH_HELPER-HR-IV02","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`"))}))}httpRequestAll(e,t,i,n,l){var o,a,r;return UW(this,void 0,void 0,(function*(){let c=!0;const s=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(a=null===(o=yield s)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(i&&(null===(r=t.url)||void 0===r?void 0:r.startsWith(i))){e=!0;break}if(!e){c=!1;break}}const d=[];if(c)return e.forEach((e=>{d.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>UW(this,void 0,void 0,(function*(){var o,a,r;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:MV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HRA-SE01",null!==(a=null==t?void 0:t.name)&&void 0!==a?a:"Refresh token request failed.",null!==(r=null==t?void 0:t.message)&&void 0!==r?r:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>UW(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new BW("SPA-AUTH_HELPER-HRA-IV02","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`")}))}requestAccessToken(t,i,n,l,o){return UW(this,void 0,void 0,(function*(){const a=yield this._dataLayer.getConfigData();if(a.storage===e.Storage.BrowserMemory&&a.enablePKCE&&i){const e=QV.getPKCE(MW.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(MW.extractPKCEKeyFromStateParam(i),e)}else a.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"").then((()=>UW(this,void 0,void 0,(function*(){return a.storage!==e.Storage.WebWorker?(QV.setSignOutURL(yield this._authenticationClient.getSignOutURL(),a.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&a.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i){var n;return UW(this,void 0,void 0,(function*(){if(QV.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById(kV),o=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.getElementById(JV);try{const t=yield e();o.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),l=o=>UW(this,void 0,void 0,(function*(){var a,r,c,s;const d=o.data;(null==d?void 0:d.type)==KV&&(window.removeEventListener("message",l),clearTimeout(n),e(!1)),(null==d?void 0:d.type)==YV&&(null===(a=null==d?void 0:d.data)||void 0===a?void 0:a.code)&&t(null===(r=null==d?void 0:d.data)||void 0===r?void 0:r.code,null===(c=null==d?void 0:d.data)||void 0===c?void 0:c.sessionState,null===(s=null==d?void 0:d.data)||void 0===s?void 0:s.state).then((t=>{window.removeEventListener("message",l),e(t)})).catch((e=>{window.removeEventListener("message",l),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",l)}))}))}handleSignIn(t,i,n){return UW(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(FV),a=new URL(window.location.href).searchParams.get(zV);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(FV),e.searchParams.delete(zV),history.pushState(null,document.title,e.toString()),new BW("SPA-AUTH_HELPER-SI-SE01",o,null!=a?a:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}attachTokenToRequestConfig(e){return UW(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return UW(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class DV{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){return UW(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout((()=>UW(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(JW,JSON.stringify(n))}}))}getRefreshTimeoutTimer(){return UW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(JW))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(JW)):-1}))}clearRefreshTokenTimeout(e){return UW(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const OV=(()=>{let t,i,n,l,o,a,r,c,s,d,u;const h=(e,r,c,s,d,h,b)=>{t=e,i=r,n=c,l=s,o=h,a=d,u=b,l>-1&&Z(),a>-1&&(d=setInterval((()=>{p()}),1e3*a))},Z=()=>UW(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const a="opIFrame";const r=document.getElementById(kV);(null===(e=null==r?void 0:r.contentDocument)||void 0===e?void 0:e.getElementById(a)).src=i+"?client_id="+t+"&redirect_uri="+o,c=setInterval((function(){var e;return UW(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(kV),r=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(a)).contentWindow;null==r||r.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(c),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return UW(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===CV||"unchanged"===e.data||("error"===e.data?window.location.href=yield r():"changed"===e.data&&p())}))}),!1)},p=()=>UW(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(kV),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(JV);if(QV.canSendPromptNoneRequest()){QV.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===CV&&(d(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};s!==e.Storage.BrowserMemory&&s!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",responseMode:"query",state:TV});n.src=i}})),y=t=>UW(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(BV),o=new URL(window.location.href).searchParams.get(xW),a=window.parent.parent;if(null!==l&&(l.includes(TV)||l.includes(HV))){const c=new URL(window.location.href).searchParams.get("code");if(null!==c&&0!==c.length){if(l.includes(HV)){const e={data:{code:c,sessionState:null!=o?o:"",state:l},type:YV};return sessionStorage.setItem(xV,"false"),a.postMessage(e,a.origin),QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}const r=new URL(window.location.href).searchParams.get("session_state");if(s===e.Storage.LocalStorage||s===e.Storage.SessionStorage)t&&(yield t(r));else{const e={data:null!=r?r:"",type:CV};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}{if(l.includes(HV)){const e={type:KV};return window.parent.parent.postMessage(e,a.origin),QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}QV.setPromptNoneRequestSent(!1);const e=yield r();return yield AW.clearUserSessionData(),a.location.href=e,window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>UW(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",kV),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(kV);const a=null==l?void 0:l.contentDocument,r=null==a?void 0:a.createElement("iframe");r&&(r.setAttribute("id","opIFrame"),r.style.display="none");const c=null==a?void 0:a.createElement("iframe");c&&(c.setAttribute("id",JV),c.style.display="none"),r&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(r)),c&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(c)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),r=e,s=t,d=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:h,receivePromptNoneResponse:y,reset:b}}))})();var AV={exports:{}},_V=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},qV=_V,$V=Object.prototype.toString;function eI(e){return Array.isArray(e)}function tI(e){return void 0===e}function iI(e){return"[object ArrayBuffer]"===$V.call(e)}function nI(e){return null!==e&&"object"==typeof e}function lI(e){if("[object Object]"!==$V.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function oI(e){return"[object Function]"===$V.call(e)}function aI(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),eI(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var rI={isArray:eI,isArrayBuffer:iI,isBuffer:function(e){return null!==e&&!tI(e)&&null!==e.constructor&&!tI(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===$V.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&iI(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:nI,isPlainObject:lI,isUndefined:tI,isDate:function(e){return"[object Date]"===$V.call(e)},isFile:function(e){return"[object File]"===$V.call(e)},isBlob:function(e){return"[object Blob]"===$V.call(e)},isFunction:oI,isStream:function(e){return nI(e)&&oI(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===$V.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:aI,merge:function e(){var t={};function i(i,n){lI(t[n])&&lI(i)?t[n]=e(t[n],i):lI(i)?t[n]=e({},i):eI(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)aI(arguments[n],i);return t},extend:function(e,t,i){return aI(t,(function(t,n){e[n]=i&&"function"==typeof t?qV(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},cI=rI;function sI(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var dI=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(cI.isURLSearchParams(t))n=t.toString();else{var l=[];cI.forEach(t,(function(e,t){null!=e&&(cI.isArray(e)?t+="[]":e=[e],cI.forEach(e,(function(e){cI.isDate(e)?e=e.toISOString():cI.isObject(e)&&(e=JSON.stringify(e)),l.push(sI(t)+"="+sI(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},uI=rI;function hI(){this.handlers=[]}hI.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},hI.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},hI.prototype.forEach=function(e){uI.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var ZI=hI,bI="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function mI(){throw new Error("setTimeout has not been defined")}function pI(){throw new Error("clearTimeout has not been defined")}var yI=mI,GI=pI;function XI(e){if(yI===setTimeout)return setTimeout(e,0);if((yI===mI||!yI)&&setTimeout)return yI=setTimeout,setTimeout(e,0);try{return yI(e,0)}catch(t){try{return yI.call(null,e,0)}catch(t){return yI.call(this,e,0)}}}"function"==typeof bI.setTimeout&&(yI=setTimeout),"function"==typeof bI.clearTimeout&&(GI=clearTimeout);var WI,VI=[],II=!1,gI=-1;function SI(){II&&WI&&(II=!1,WI.length?VI=WI.concat(VI):gI=-1,VI.length&&fI())}function fI(){if(!II){var e=XI(SI);II=!0;for(var t=VI.length;t;){for(WI=VI,VI=[];++gI<t;)WI&&WI[gI].run();gI=-1,t=VI.length}WI=null,II=!1,function(e){if(GI===clearTimeout)return clearTimeout(e);if((GI===pI||!GI)&&clearTimeout)return GI=clearTimeout,clearTimeout(e);try{GI(e)}catch(t){try{return GI.call(null,e)}catch(t){return GI.call(this,e)}}}(e)}}function RI(e,t){this.fun=e,this.array=t}RI.prototype.run=function(){this.fun.apply(null,this.array)};function vI(){}var YI=vI,KI=vI,NI=vI,CI=vI,LI=vI,UI=vI,kI=vI;var JI=bI.performance||{},TI=JI.now||JI.mozNow||JI.msNow||JI.oNow||JI.webkitNow||function(){return(new Date).getTime()};var HI=new Date;var xI={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];VI.push(new RI(e,t)),1!==VI.length||II||XI(fI)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:YI,addListener:KI,once:NI,off:CI,removeListener:LI,removeAllListeners:UI,emit:kI,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*TI.call(JI),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-HI)/1e3}},wI=xI,FI=rI,zI=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.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,status:this.response&&this.response.status?this.response.status:null}},e},PI={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},BI=zI,MI=function(e,t,i,n,l){var o=new Error(e);return BI(o,t,i,n,l)},jI=MI,QI=rI,EI=QI.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var a=[];a.push(e+"="+encodeURIComponent(t)),QI.isNumber(i)&&a.push("expires="+new Date(i).toGMTString()),QI.isString(n)&&a.push("path="+n),QI.isString(l)&&a.push("domain="+l),!0===o&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},DI=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},OI=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},AI=rI,_I=["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"],qI=rI,$I=qI.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=qI.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function eg(e){this.message=e}eg.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},eg.prototype.__CANCEL__=!0;var tg=eg,ig=rI,ng=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(jI("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},lg=EI,og=dI,ag=function(e,t){return e&&!DI(t)?OI(e,t):t},rg=function(e){var t,i,n,l={};return e?(AI.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=AI.trim(e.substr(0,n)).toLowerCase(),i=AI.trim(e.substr(n+1)),t){if(l[t]&&_I.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},cg=$I,sg=MI,dg=PI,ug=tg,hg=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,a=e.responseType;function r(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}ig.isFormData(l)&&delete o["Content-Type"];var c=new XMLHttpRequest;if(e.auth){var s=e.auth.username||"",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(s+":"+d)}var u=ag(e.baseURL,e.url);function h(){if(c){var n="getAllResponseHeaders"in c?rg(c.getAllResponseHeaders()):null,l={data:a&&"text"!==a&&"json"!==a?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:n,config:e,request:c};ng((function(e){t(e),r()}),(function(e){i(e),r()}),l),c=null}}if(c.open(e.method.toUpperCase(),og(u,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=h:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(h)},c.onabort=function(){c&&(i(sg("Request aborted",e,"ECONNABORTED",c)),c=null)},c.onerror=function(){i(sg("Network Error",e,null,c)),c=null},c.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||dg;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(sg(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",c)),c=null},ig.isStandardBrowserEnv()){var Z=(e.withCredentials||cg(u))&&e.xsrfCookieName?lg.read(e.xsrfCookieName):void 0;Z&&(o[e.xsrfHeaderName]=Z)}"setRequestHeader"in c&&ig.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:c.setRequestHeader(t,e)})),ig.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),a&&"json"!==a&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){c&&(i(!e||e&&e.type?new ug("canceled"):e),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),c.send(l)}))},Zg=rI,bg=function(e,t){FI.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},mg=zI,pg={"Content-Type":"application/x-www-form-urlencoded"};function yg(e,t){!Zg.isUndefined(e)&&Zg.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var Gg,Xg={transitional:PI,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==wI&&"[object process]"===Object.prototype.toString.call(wI))&&(Gg=hg),Gg),transformRequest:[function(e,t){return bg(t,"Accept"),bg(t,"Content-Type"),Zg.isFormData(e)||Zg.isArrayBuffer(e)||Zg.isBuffer(e)||Zg.isStream(e)||Zg.isFile(e)||Zg.isBlob(e)?e:Zg.isArrayBufferView(e)?e.buffer:Zg.isURLSearchParams(e)?(yg(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):Zg.isObject(e)||t&&"application/json"===t["Content-Type"]?(yg(t,"application/json"),function(e,t,i){if(Zg.isString(e))try{return(t||JSON.parse)(e),Zg.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||Xg.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&Zg.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw mg(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Zg.forEach(["delete","get","head"],(function(e){Xg.headers[e]={}})),Zg.forEach(["post","put","patch"],(function(e){Xg.headers[e]=Zg.merge(pg)}));var Wg=Xg,Vg=rI,Ig=Wg,gg=function(e){return!(!e||!e.__CANCEL__)},Sg=rI,fg=function(e,t,i){var n=this||Ig;return Vg.forEach(i,(function(i){e=i.call(n,e,t)})),e},Rg=gg,vg=Wg,Yg=tg;function Kg(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Yg("canceled")}var Ng=rI,Cg=function(e,t){t=t||{};var i={};function n(e,t){return Ng.isPlainObject(e)&&Ng.isPlainObject(t)?Ng.merge(e,t):Ng.isPlainObject(t)?Ng.merge({},t):Ng.isArray(t)?t.slice():t}function l(i){return Ng.isUndefined(t[i])?Ng.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!Ng.isUndefined(t[e]))return n(void 0,t[e])}function a(i){return Ng.isUndefined(t[i])?Ng.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function r(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var c={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:r};return Ng.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||l,n=t(e);Ng.isUndefined(n)&&t!==r||(i[e]=n)})),i},Lg="0.26.1",Ug=Lg,kg={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){kg[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var Jg={};kg.transitional=function(e,t,i){function n(e,t){return"[Axios v"+Ug+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!Jg[l]&&(Jg[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var Tg={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],a=t[o];if(a){var r=e[o],c=void 0===r||a(r,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:kg},Hg=rI,xg=dI,wg=ZI,Fg=function(e){return Kg(e),e.headers=e.headers||{},e.data=fg.call(e,e.data,e.headers,e.transformRequest),e.headers=Sg.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),Sg.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||vg.adapter)(e).then((function(t){return Kg(e),t.data=fg.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return Rg(t)||(Kg(e),t&&t.response&&(t.response.data=fg.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},zg=Cg,Pg=Tg,Bg=Pg.validators;function Mg(e){this.defaults=e,this.interceptors={request:new wg,response:new wg}}Mg.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=zg(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&Pg.assertOptions(i,{silentJSONParsing:Bg.transitional(Bg.boolean),forcedJSONParsing:Bg.transitional(Bg.boolean),clarifyTimeoutError:Bg.transitional(Bg.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!l){var r=[Fg,void 0];for(Array.prototype.unshift.apply(r,n),r=r.concat(a),o=Promise.resolve(t);r.length;)o=o.then(r.shift(),r.shift());return o}for(var c=t;n.length;){var s=n.shift(),d=n.shift();try{c=s(c)}catch(e){d(e);break}}try{o=Fg(c)}catch(e){return Promise.reject(e)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},Mg.prototype.getUri=function(e){return e=zg(this.defaults,e),xg(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},Hg.forEach(["delete","get","head","options"],(function(e){Mg.prototype[e]=function(t,i){return this.request(zg(i||{},{method:e,url:t,data:(i||{}).data}))}})),Hg.forEach(["post","put","patch"],(function(e){Mg.prototype[e]=function(t,i,n){return this.request(zg(n||{},{method:e,url:t,data:i}))}}));var jg=Mg,Qg=tg;function Eg(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new Qg(e),t(i.reason))}))}Eg.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Eg.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},Eg.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},Eg.source=function(){var e,t=new Eg((function(t){e=t}));return{token:t,cancel:e}};var Dg=Eg,Og=rI,Ag=rI,_g=_V,qg=jg,$g=Cg;var eS=function e(t){var i=new qg(t),n=_g(qg.prototype.request,i);return Ag.extend(n,qg.prototype,i),Ag.extend(n,i),n.create=function(i){return e($g(t,i))},n}(Wg);eS.Axios=qg,eS.Cancel=tg,eS.CancelToken=Dg,eS.isCancel=gg,eS.VERSION=Lg,eS.all=function(e){return Promise.all(e)},eS.spread=function(e){return function(t){return e.apply(null,t)}},eS.isAxiosError=function(e){return Og.isObject(e)&&!0===e.isAxiosError},AV.exports=eS,AV.exports.default=eS;var tS,iS=AV.exports;let nS=tS=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>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)}static getInstance(){return this.axiosInstance||(this.axiosInstance=iS.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new tS),this.axiosInstance.interceptors.request.use((e=>UW(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=iS.all,this.axiosInstance.spread=iS.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}requestHandler(e){return UW(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),tS.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw tS.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return tS.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return UW(this,void 0,void 0,(function*(){tS.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){tS.isHandlerEnabled=!0}disableHandler(){tS.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tS.DEFAULT_HANDLER_DISABLE_TIMEOUT;tS.isHandlerEnabled=!1,setTimeout((()=>{tS.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};nS.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,nS=tS=function(e,t,i,n){var l,o=arguments.length,a=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,n);else for(var r=e.length-1;r>=0;r--)(l=e[r])&&(a=(o<3?l(a):o>3?l(t,i,a):l(t,i))||a);return o>3&&a&&Object.defineProperty(t,i,a),a}([e=>{}],nS);class lS{setData(e,t){return UW(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return UW(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class oS{constructor(){this._data=new Map}setData(e,t){return UW(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return UW(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class aS{setData(e,t){return UW(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return UW(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var rS=[],cS=[],sS="undefined"!=typeof Uint8Array?Uint8Array:Array,dS=!1;function uS(){dS=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)rS[t]=e[t],cS[e.charCodeAt(t)]=t;cS["-".charCodeAt(0)]=62,cS["_".charCodeAt(0)]=63}function hS(e,t,i){for(var n,l,o=[],a=t;a<i;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],o.push(rS[(l=n)>>18&63]+rS[l>>12&63]+rS[l>>6&63]+rS[63&l]);return o.join("")}function ZS(e){var t;dS||uS();for(var i=e.length,n=i%3,l="",o=[],a=16383,r=0,c=i-n;r<c;r+=a)o.push(hS(e,r,r+a>c?c:r+a));return 1===n?(t=e[i-1],l+=rS[t>>2],l+=rS[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=rS[t>>10],l+=rS[t>>4&63],l+=rS[t<<2&63],l+="="),o.push(l),o.join("")}function bS(e,t,i,n,l){var o,a,r=8*l-n-1,c=(1<<r)-1,s=c>>1,d=-7,u=i?l-1:0,h=i?-1:1,Z=e[t+u];for(u+=h,o=Z&(1<<-d)-1,Z>>=-d,d+=r;d>0;o=256*o+e[t+u],u+=h,d-=8);for(a=o&(1<<-d)-1,o>>=-d,d+=n;d>0;a=256*a+e[t+u],u+=h,d-=8);if(0===o)o=1-s;else{if(o===c)return a?NaN:1/0*(Z?-1:1);a+=Math.pow(2,n),o-=s}return(Z?-1:1)*a*Math.pow(2,o-n)}function mS(e,t,i,n,l,o){var a,r,c,s=8*o-l-1,d=(1<<s)-1,u=d>>1,h=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,Z=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(r=isNaN(t)?1:0,a=d):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+u>=1?h/c:h*Math.pow(2,1-u))*c>=2&&(a++,c/=2),a+u>=d?(r=0,a=d):a+u>=1?(r=(t*c-1)*Math.pow(2,l),a+=u):(r=t*Math.pow(2,u-1)*Math.pow(2,l),a=0));l>=8;e[i+Z]=255&r,Z+=b,r/=256,l-=8);for(a=a<<l|r,s+=l;s>0;e[i+Z]=255&a,Z+=b,a/=256,s-=8);e[i+Z-b]|=128*m}var pS={}.toString,yS=Array.isArray||function(e){return"[object Array]"==pS.call(e)};VS.TYPED_ARRAY_SUPPORT=void 0===bI.TYPED_ARRAY_SUPPORT||bI.TYPED_ARRAY_SUPPORT;var GS=XS();function XS(){return VS.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function WS(e,t){if(XS()<t)throw new RangeError("Invalid typed array length");return VS.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=VS.prototype:(null===e&&(e=new VS(t)),e.length=t),e}function VS(e,t,i){if(!(VS.TYPED_ARRAY_SUPPORT||this instanceof VS))return new VS(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return SS(this,e)}return IS(this,e,t,i)}function IS(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);VS.TYPED_ARRAY_SUPPORT?(e=t).__proto__=VS.prototype:e=fS(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!VS.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|YS(t,i),l=(e=WS(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(vS(t)){var i=0|RS(t.length);return 0===(e=WS(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?WS(e,0):fS(e,t);if("Buffer"===t.type&&yS(t.data))return fS(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function gS(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function SS(e,t){if(gS(t),e=WS(e,t<0?0:0|RS(t)),!VS.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function fS(e,t){var i=t.length<0?0:0|RS(t.length);e=WS(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function RS(e){if(e>=XS())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+XS().toString(16)+" bytes");return 0|e}function vS(e){return!(null==e||!e._isBuffer)}function YS(e,t){if(vS(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return tf(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return nf(e).length;default:if(n)return tf(e).length;t=(""+t).toLowerCase(),n=!0}}function KS(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return MS(this,t,i);case"utf8":case"utf-8":return FS(this,t,i);case"ascii":return PS(this,t,i);case"latin1":case"binary":return BS(this,t,i);case"base64":return wS(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return jS(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function NS(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function CS(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=VS.from(t,n)),vS(t))return 0===t.length?-1:LS(e,t,i,n,l);if("number"==typeof t)return t&=255,VS.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):LS(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function LS(e,t,i,n,l){var o,a=1,r=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,r/=2,c/=2,i/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(l){var d=-1;for(o=i;o<r;o++)if(s(e,o)===s(t,-1===d?0:o-d)){if(-1===d&&(d=o),o-d+1===c)return d*a}else-1!==d&&(o-=o-d),d=-1}else for(i+c>r&&(i=r-c),o=i;o>=0;o--){for(var u=!0,h=0;h<c;h++)if(s(e,o+h)!==s(t,h)){u=!1;break}if(u)return o}return-1}function US(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var r=parseInt(t.substr(2*a,2),16);if(isNaN(r))return a;e[i+a]=r}return a}function kS(e,t,i,n){return lf(tf(t,e.length-i),e,i,n)}function JS(e,t,i,n){return lf(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function TS(e,t,i,n){return JS(e,t,i,n)}function HS(e,t,i,n){return lf(nf(t),e,i,n)}function xS(e,t,i,n){return lf(function(e,t){for(var i,n,l,o=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(i=e.charCodeAt(a))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function wS(e,t,i){return 0===t&&i===e.length?ZS(e):ZS(e.slice(t,i))}function FS(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,a,r,c,s=e[l],d=null,u=s>239?4:s>223?3:s>191?2:1;if(l+u<=i)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(o=e[l+1]))&&(c=(31&s)<<6|63&o)>127&&(d=c);break;case 3:o=e[l+1],a=e[l+2],128==(192&o)&&128==(192&a)&&(c=(15&s)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(d=c);break;case 4:o=e[l+1],a=e[l+2],r=e[l+3],128==(192&o)&&128==(192&a)&&128==(192&r)&&(c=(15&s)<<18|(63&o)<<12|(63&a)<<6|63&r)>65535&&c<1114112&&(d=c)}null===d?(d=65533,u=1):d>65535&&(d-=65536,n.push(d>>>10&1023|55296),d=56320|1023&d),n.push(d),l+=u}return function(e){var t=e.length;if(t<=zS)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=zS));return i}(n)}VS.poolSize=8192,VS._augment=function(e){return e.__proto__=VS.prototype,e},VS.from=function(e,t,i){return IS(null,e,t,i)},VS.TYPED_ARRAY_SUPPORT&&(VS.prototype.__proto__=Uint8Array.prototype,VS.__proto__=Uint8Array),VS.alloc=function(e,t,i){return function(e,t,i,n){return gS(t),t<=0?WS(e,t):void 0!==i?"string"==typeof n?WS(e,t).fill(i,n):WS(e,t).fill(i):WS(e,t)}(null,e,t,i)},VS.allocUnsafe=function(e){return SS(null,e)},VS.allocUnsafeSlow=function(e){return SS(null,e)},VS.isBuffer=of,VS.compare=function(e,t){if(!vS(e)||!vS(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},VS.isEncoding=function(e){switch(String(e).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}},VS.concat=function(e,t){if(!yS(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return VS.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=VS.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!vS(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},VS.byteLength=YS,VS.prototype._isBuffer=!0,VS.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)NS(this,t,t+1);return this},VS.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)NS(this,t,t+3),NS(this,t+1,t+2);return this},VS.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)NS(this,t,t+7),NS(this,t+1,t+6),NS(this,t+2,t+5),NS(this,t+3,t+4);return this},VS.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?FS(this,0,e):KS.apply(this,arguments)},VS.prototype.equals=function(e){if(!vS(e))throw new TypeError("Argument must be a Buffer");return this===e||0===VS.compare(this,e)},VS.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},VS.prototype.compare=function(e,t,i,n,l){if(!vS(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),a=(i>>>=0)-(t>>>=0),r=Math.min(o,a),c=this.slice(n,l),s=e.slice(t,i),d=0;d<r;++d)if(c[d]!==s[d]){o=c[d],a=s[d];break}return o<a?-1:a<o?1:0},VS.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},VS.prototype.indexOf=function(e,t,i){return CS(this,e,t,i,!0)},VS.prototype.lastIndexOf=function(e,t,i){return CS(this,e,t,i,!1)},VS.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return US(this,e,t,i);case"utf8":case"utf-8":return kS(this,e,t,i);case"ascii":return JS(this,e,t,i);case"latin1":case"binary":return TS(this,e,t,i);case"base64":return HS(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return xS(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},VS.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var zS=4096;function PS(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function BS(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function MS(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=ef(e[o]);return l}function jS(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function QS(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function ES(e,t,i,n,l,o){if(!vS(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function DS(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function OS(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function AS(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function _S(e,t,i,n,l){return l||AS(e,0,i,4),mS(e,t,i,n,23,4),i+4}function qS(e,t,i,n,l){return l||AS(e,0,i,8),mS(e,t,i,n,52,8),i+8}VS.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),VS.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=VS.prototype;else{var l=t-e;i=new VS(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},VS.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},VS.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},VS.prototype.readUInt8=function(e,t){return t||QS(e,1,this.length),this[e]},VS.prototype.readUInt16LE=function(e,t){return t||QS(e,2,this.length),this[e]|this[e+1]<<8},VS.prototype.readUInt16BE=function(e,t){return t||QS(e,2,this.length),this[e]<<8|this[e+1]},VS.prototype.readUInt32LE=function(e,t){return t||QS(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},VS.prototype.readUInt32BE=function(e,t){return t||QS(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},VS.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},VS.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},VS.prototype.readInt8=function(e,t){return t||QS(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},VS.prototype.readInt16LE=function(e,t){t||QS(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},VS.prototype.readInt16BE=function(e,t){t||QS(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},VS.prototype.readInt32LE=function(e,t){return t||QS(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},VS.prototype.readInt32BE=function(e,t){return t||QS(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},VS.prototype.readFloatLE=function(e,t){return t||QS(e,4,this.length),bS(this,e,!0,23,4)},VS.prototype.readFloatBE=function(e,t){return t||QS(e,4,this.length),bS(this,e,!1,23,4)},VS.prototype.readDoubleLE=function(e,t){return t||QS(e,8,this.length),bS(this,e,!0,52,8)},VS.prototype.readDoubleBE=function(e,t){return t||QS(e,8,this.length),bS(this,e,!1,52,8)},VS.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||ES(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},VS.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||ES(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},VS.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,1,255,0),VS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},VS.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,65535,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):DS(this,e,t,!0),t+2},VS.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,65535,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):DS(this,e,t,!1),t+2},VS.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,4294967295,0),VS.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):OS(this,e,t,!0),t+4},VS.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,4294967295,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):OS(this,e,t,!1),t+4},VS.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);ES(this,e,t,i,l-1,-l)}var o=0,a=1,r=0;for(this[t]=255&e;++o<i&&(a*=256);)e<0&&0===r&&0!==this[t+o-1]&&(r=1),this[t+o]=(e/a>>0)-r&255;return t+i},VS.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);ES(this,e,t,i,l-1,-l)}var o=i-1,a=1,r=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===r&&0!==this[t+o+1]&&(r=1),this[t+o]=(e/a>>0)-r&255;return t+i},VS.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,1,127,-128),VS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},VS.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,32767,-32768),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):DS(this,e,t,!0),t+2},VS.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,32767,-32768),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):DS(this,e,t,!1),t+2},VS.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,2147483647,-2147483648),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):OS(this,e,t,!0),t+4},VS.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):OS(this,e,t,!1),t+4},VS.prototype.writeFloatLE=function(e,t,i){return _S(this,e,t,!0,i)},VS.prototype.writeFloatBE=function(e,t,i){return _S(this,e,t,!1,i)},VS.prototype.writeDoubleLE=function(e,t,i){return qS(this,e,t,!0,i)},VS.prototype.writeDoubleBE=function(e,t,i){return qS(this,e,t,!1,i)},VS.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!VS.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},VS.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!VS.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var a=vS(e)?e:tf(new VS(e,n).toString()),r=a.length;for(o=0;o<i-t;++o)this[o+t]=a[o%r]}return this};var $S=/[^+\/0-9A-Za-z-_]/g;function ef(e){return e<16?"0"+e.toString(16):e.toString(16)}function tf(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],a=0;a<n;++a){if((i=e.charCodeAt(a))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function nf(e){return function(e){var t,i,n,l,o,a;dS||uS();var r=e.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[r-2]?2:"="===e[r-1]?1:0,a=new sS(3*r/4-o),n=o>0?r-4:r;var c=0;for(t=0,i=0;t<n;t+=4,i+=3)l=cS[e.charCodeAt(t)]<<18|cS[e.charCodeAt(t+1)]<<12|cS[e.charCodeAt(t+2)]<<6|cS[e.charCodeAt(t+3)],a[c++]=l>>16&255,a[c++]=l>>8&255,a[c++]=255&l;return 2===o?(l=cS[e.charCodeAt(t)]<<2|cS[e.charCodeAt(t+1)]>>4,a[c++]=255&l):1===o&&(l=cS[e.charCodeAt(t)]<<10|cS[e.charCodeAt(t+1)]<<4|cS[e.charCodeAt(t+2)]>>2,a[c++]=l>>8&255,a[c++]=255&l),a}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace($S,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function lf(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function of(e){return null!=e&&(!!e._isBuffer||af(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&af(e.slice(0,0))}(e))}function af(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var rf=Object.freeze({__proto__:null,Buffer:VS,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),VS.alloc(+e)},isBuffer:of,kMaxLength:GS}),cf={exports:{}},sf={},df={};Object.defineProperty(df,"__esModule",{value:!0}),df.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,a=VS.alloc(o);for(a.write(e);l--;)a.write("=",n++);return a.toString()},Object.defineProperty(sf,"__esModule",{value:!0});var uf=df;function hf(e,t){return void 0===t&&(t="utf8"),VS.isBuffer(e)?bf(e.toString("base64")):bf(VS.from(e,t).toString("base64"))}function Zf(e){return e=e.toString(),uf.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function bf(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var mf,pf=hf;pf.encode=hf,pf.decode=function(e,t){return void 0===t&&(t="utf8"),VS.from(Zf(e),"base64").toString(t)},pf.toBase64=Zf,pf.fromBase64=bf,pf.toBuffer=function(e){return VS.from(Zf(e),"base64")},sf.default=pf,(mf=cf).exports=sf.default,mf.exports.default=mf.exports;var yf=cf.exports,Gf={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=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 i(e,i,n,l,o){for(var a,r,c,s,d,u,h,Z,b,m,p,y,G;o>=64;){for(a=i[0],r=i[1],c=i[2],s=i[3],d=i[4],u=i[5],h=i[6],Z=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)y=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,G=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(y+e[m-7]|0)+(G+e[m-16]|0);for(m=0;m<64;m++)y=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&u^~d&h)|0)+(Z+(t[m]+e[m]|0)|0)|0,G=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+(a&r^a&c^r&c)|0,Z=h,h=u,u=d,d=s+y|0,s=c,c=r,r=a,a=y+G|0;i[0]+=a,i[1]+=r,i[2]+=c,i[3]+=s,i[4]+=d,i[5]+=u,i[6]+=h,i[7]+=Z,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.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 t.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},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,a=t%64<56?64:128;this.buffer[n]=128;for(var r=n+1;r<a-8;r++)this.buffer[r]=0;this.buffer[a-8]=l>>>24&255,this.buffer[a-7]=l>>>16&255,this.buffer[a-6]=l>>>8&255,this.buffer[a-5]=l>>>0&255,this.buffer[a-4]=o>>>24&255,this.buffer[a-3]=o>>>16&255,this.buffer[a-2]=o>>>8&255,this.buffer[a-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,a),this.finished=!0}for(r=0;r<8;r++)e[4*r+0]=this.state[r]>>>24&255,e[4*r+1]=this.state[r]>>>16&255,e[4*r+2]=this.state[r]>>>8&255,e[4*r+3]=this.state[r]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function a(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function r(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=a;var c=new Uint8Array(e.digestLength);function s(e,t,i,n){void 0===t&&(t=c),void 0===n&&(n=32);for(var o=new Uint8Array([1]),s=a(t,e),d=new l(s),u=new Uint8Array(d.digestLength),h=u.length,Z=new Uint8Array(n),b=0;b<n;b++)h===u.length&&(r(u,d,i,o),h=0),Z[b]=u[h++];return d.clean(),u.fill(0),o.fill(0),Z}function d(e,t,i,n){for(var o=new l(e),a=o.digestLength,r=new Uint8Array(4),c=new Uint8Array(a),s=new Uint8Array(a),d=new Uint8Array(n),u=0;u*a<n;u++){var h=u+1;r[0]=h>>>24&255,r[1]=h>>>16&255,r[2]=h>>>8&255,r[3]=h>>>0&255,o.reset(),o.update(t),o.update(r),o.finish(s);for(var Z=0;Z<a;Z++)c[Z]=s[Z];for(Z=2;Z<=i;Z++){o.reset(),o.update(s).finish(s);for(var b=0;b<a;b++)c[b]^=s[b]}for(Z=0;Z<a&&u*a+Z<n;Z++)d[u*a+Z]=c[Z]}for(u=0;u<a;u++)c[u]=s[u]=0;for(u=0;u<4;u++)r[u]=0;return o.clean(),d}e.hkdf=s,e.pbkdf2=d}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(Gf);var Xf=i(Gf.exports),Wf=crypto;const Vf=e=>e instanceof CryptoKey,If=new TextEncoder,gf=new TextDecoder;const Sf=e=>{let t=e;t instanceof Uint8Array&&(t=gf.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class ff extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class Rf extends ff{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class vf extends ff{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class Yf extends ff{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class Kf extends ff{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class Nf extends ff{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class Cf extends ff{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class Lf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class Uf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class kf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class Jf extends ff{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function Tf(){return"function"==typeof WebSocketPair}function Hf(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function xf(e,t){return e.name===t}function wf(e){return parseInt(e.name.slice(4),10)}function Ff(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function zf(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var Pf=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},Bf=e=>Vf(e);const Mf=["CryptoKey"];function jf(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const Qf=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new Kf("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Tf()&&"OKP":if("EdDSA"!==e.alg)throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new Kf('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new Kf('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return Wf.subtle.importKey("raw",Sf(e.k),...o);const a={...e};return delete a.alg,Wf.subtle.importKey("jwk",a,...o)};const Ef=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!Bf(e))throw new TypeError(Pf(e,...Mf,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!Bf(e))throw new TypeError(Pf(e,...Mf));if("secret"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function Df(e,t,i){if(Vf(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!xf(e.algorithm,"HMAC"))throw Hf("HMAC");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!xf(e.algorithm,"RSASSA-PKCS1-v1_5"))throw Hf("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!xf(e.algorithm,"RSA-PSS"))throw Hf("RSA-PSS");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case Tf()&&"EdDSA":if(!xf(e.algorithm,"NODE-ED25519"))throw Hf("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!xf(e.algorithm,"ECDSA"))throw Hf("ECDSA");const i=Ff(t);if(e.algorithm.namedCurve!==i)throw Hf(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];zf(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(Pf(t,...Mf));return Wf.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(Pf(t,...Mf,"Uint8Array"))}const Of=async(e,t,i,n)=>{const l=await Df(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case Tf()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new Kf("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await Wf.subtle.verify(o,l,i,n)}catch(e){return!1}};async function Af(e,t,i){var n;if(!jf(e))throw new Nf("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new Nf('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new Nf("JWS Protected Header incorrect type");if(void 0===e.payload)throw new Nf("JWS Payload missing");if("string"!=typeof e.signature)throw new Nf("JWS Signature missing or incorrect type");if(void 0!==e.header&&!jf(e.header))throw new Nf("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=Sf(e.protected);try{l=JSON.parse(gf.decode(t))}catch(e){throw new Nf("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new Nf("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},a=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"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((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new Kf('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(Nf,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let r=!0;if(a.has("b64")&&(r=l.b64,"boolean"!=typeof r))throw new Nf('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:c}=o;if("string"!=typeof c||!c)throw new Nf('JWS "alg" (Algorithm) Header Parameter missing or invalid');const s=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(s&&!s.has(c))throw new Yf('"alg" (Algorithm) Header Parameter not allowed');if(r){if("string"!=typeof e.payload)throw new Nf("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new Nf("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof t&&(t=await t(l,e),d=!0),Ef(c,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(If.encode(null!==(n=e.protected)&&void 0!==n?n:""),If.encode("."),"string"==typeof e.payload?If.encode(e.payload):e.payload),h=Sf(e.signature);if(!await Of(c,t,h,u))throw new Jf;let Z;Z=r?Sf(e.payload):"string"==typeof e.payload?If.encode(e.payload):e.payload;const b={payload:Z};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),d?{...b,key:t}:b}var _f=e=>Math.floor(e.getTime()/1e3);const qf=86400,$f=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var eR=e=>{const t=$f.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(i*qf);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const tR=e=>e.toLowerCase().replace(/^application\//,""),iR=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function nR(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=gf.decode(e)),"string"!=typeof e)throw new Nf("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:a}=e.split(".");if(3!==a)throw new Nf("Invalid Compact JWS");const r=await Af({payload:l,protected:n,signature:o},t,i),c={payload:r.payload,protectedHeader:r.protectedHeader};return"function"==typeof t?{...c,key:r.key}:c}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new Cf("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||tR(e.typ)!==tR(n)))throw new Rf('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(gf.decode(t))}catch(e){}if(!jf(l))throw new Cf("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new Rf('unexpected "iss" claim value',"iss","check_failed");const{subject:a}=i;if(a&&l.sub!==a)throw new Rf('unexpected "sub" claim value',"sub","check_failed");const{audience:r}=i;if(r&&!iR(l.aud,"string"==typeof r?[r]:r))throw new Rf('unexpected "aud" claim value',"aud","check_failed");let c;switch(typeof i.clockTolerance){case"string":c=eR(i.clockTolerance);break;case"number":c=i.clockTolerance;break;case"undefined":c=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=i,d=_f(s||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new Rf('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new Rf('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>d+c)throw new Rf('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new Rf('"exp" claim must be a number',"exp","invalid");if(l.exp<=d-c)throw new vf('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=d-l.iat;if(e-c>("number"==typeof i.maxTokenAge?i.maxTokenAge:eR(i.maxTokenAge)))throw new vf('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-c)throw new Rf('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),a={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...a,key:l.key}:a}function lR(e){return jf(e)}class oR{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(lR)}(e))throw new Lf("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new Kf('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:a,length:r}=o;if(0===r)throw new Uf;if(1!==r)throw new kf;const c=this._cached.get(a)||this._cached.set(a,{}).get(a);if(void 0===c[i]){const e=await async function(e,t,i){if(!jf(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?Qf({...e,alg:t,ext:!1}):Sf(e.k);case"RSA":if(void 0!==e.oth)throw new Kf('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Qf({...e,alg:t});default:throw new Kf('Unsupported "kty" (Key Type) Parameter value')}}({...a,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new Lf("JSON Web Key Set members must be public keys");c[i]=e}return c[i]}}var aR={exports:{}},rR={exports:{}},cR=n(rf);!function(e,t){var i=cR,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(rR,rR.exports);var sR=65536,dR=4294967295;var uR=rR.exports.Buffer,hR=t.crypto||t.msCrypto;hR&&hR.getRandomValues?aR.exports=function(e,t){if(e>dR)throw new RangeError("requested too many random bytes");var i=uR.allocUnsafe(e);if(e>0)if(e>sR)for(var n=0;n<e;n+=sR)hR.getRandomValues(i.slice(n,n+sR));else hR.getRandomValues(i);if("function"==typeof t)return wI.nextTick((function(){t(null,i)}));return i}:aR.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var ZR=aR.exports;class bR{base64URLEncode(e){return yf.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return yf.decode(e).toString()}hashSha256(e){return VS.from(Xf((new TextEncoder).encode(e)))}generateRandomBytes(e){return ZR(e)}verifyJwt(e,t,i,n,l,o,a,r){const c={algorithms:i,audience:n,clockTolerance:a,subject:o};return(null==r||r)&&(c.issuer=l),nR(e,(s={keys:[t]},oR.prototype.getKey.bind(new oR(s))),c).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new BW("SPA-CRYPTO-UTILS-VJ-IV01",null!==(t=null==e?void 0:e.reason)&&void 0!==t?t:JSON.stringify(e),"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))}));var s}}const mR=(t,i,n)=>UW(void 0,void 0,void 0,(function*(){var l;const o=(t=>{switch(t){case e.Storage.LocalStorage:return new lS;case e.Storage.SessionStorage:return new aS;case e.Storage.BrowserMemory:return new oS;default:return new aS}})(i.storage),a=new bR,r=new AW;yield r.initialize(i,o,a,t);const c=new DV(r),s=r.getDataLayer(),d=yield OV((()=>UW(void 0,void 0,void 0,(function*(){return r.getSignOutURL()}))),null!==(l=i.storage)&&void 0!==l?l:e.Storage.SessionStorage,(e=>s.setSessionDataParameter(xW,null!=e?e:""))),u=n(r,c);let h=!1;const Z=nS.getInstance();let b,m,p=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>UW(void 0,void 0,void 0,(function*(){yield u.attachTokenToRequestConfig(e)})))));const y=()=>UW(void 0,void 0,void 0,(function*(){const e=yield r.getOIDCServiceEndpoints(),t=yield s.getConfigData();u.initializeSessionManger(t,e,(()=>UW(void 0,void 0,void 0,(function*(){return(yield r.getBasicUserInfo()).sessionState}))),(e=>UW(void 0,void 0,void 0,(function*(){return r.getAuthorizationURL(e)}))),d)})),G=()=>UW(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>UW(void 0,void 0,void 0,(function*(){yield s.setSessionDataParameter(xW,null!=e?e:"")}))))})),X=e=>{e.preventSignOutURLUpdate&&(h=!0)},W=(e,t,i)=>UW(void 0,void 0,void 0,(function*(){return yield u.requestAccessToken(e,t,y,void 0,i)})),V=()=>UW(void 0,void 0,void 0,(function*(){const t=yield s.getConfigData(),i=yield r.getAuthorizationURL({prompt:"none",state:HV}),n=new URL(i);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===e.Storage.BrowserMemory&&t.enablePKCE){const e=n.searchParams.get(zW);QV.setPKCE(MW.extractPKCEKeyFromStateParam(null!=e?e:""),yield r.getPKCECode(null!=e?e:""))}return l}));return{disableHttpHandler:()=>(u.disableHttpHandler(Z),p=!1,!0),enableHttpHandler:()=>(u.enableHttpHandler(Z),p=!0,!0),getAccessToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getAccessToken()})),getBasicUserInfo:()=>UW(void 0,void 0,void 0,(function*(){return u.getBasicUserInfo()})),getCryptoHelper:()=>UW(void 0,void 0,void 0,(function*(){return u.getCryptoHelper()})),getDataLayer:()=>UW(void 0,void 0,void 0,(function*(){return u.getDataLayer()})),getDecodedIDToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getIDToken()})),getOIDCServiceEndpoints:()=>UW(void 0,void 0,void 0,(function*(){return u.getOIDCServiceEndpoints()})),httpRequest:e=>UW(void 0,void 0,void 0,(function*(){return yield u.httpRequest(Z,e,p,b,m)})),httpRequestAll:e=>UW(void 0,void 0,void 0,(function*(){return yield u.httpRequestAll(e,Z,p,b,m)})),isAuthenticated:()=>UW(void 0,void 0,void 0,(function*(){return u.isAuthenticated()})),isSessionActive:()=>UW(void 0,void 0,void 0,(function*(){return"true"===(yield s.getSessionStatus())})),refreshAccessToken:()=>UW(void 0,void 0,void 0,(function*(){try{return yield u.refreshAccessToken(X)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>UW(void 0,void 0,void 0,(function*(){return yield u.requestCustomGrant(e,X)})),revokeAccessToken:()=>UW(void 0,void 0,void 0,(function*(){const e=yield c.getRefreshTimeoutTimer();return r.revokeAccessToken().then((()=>(d.reset(),c.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{b=e},setHttpRequestFinishCallback:e=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(e)},signIn:(t,n,l,o)=>UW(void 0,void 0,void 0,(function*(){var a,c,d;const h=yield u.handleSignIn(G,y);if(h)return h;{let u,h,b;return(null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(u=n,h=null!=l?l:"",b=null!=o?o:""):(u=null!==(a=new URL(window.location.href).searchParams.get(HW))&&void 0!==a?a:"",h=null!==(c=new URL(window.location.href).searchParams.get(xW))&&void 0!==c?c:"",b=null!==(d=new URL(window.location.href).searchParams.get(zW))&&void 0!==d?d:"",QV.removeAuthorizationCode()),u&&b?(Z="true",UW(void 0,void 0,void 0,(function*(){yield s.setSessionStatus(Z)})),W(u,h,b)):r.getAuthorizationURL(t).then((t=>UW(void 0,void 0,void 0,(function*(){if(i.storage===e.Storage.BrowserMemory&&i.enablePKCE){const e=MW.extractPKCEKeyFromStateParam(b);QV.setPKCE(e,yield r.getPKCECode(b))}return location.href=t,yield QV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var Z})),signOut:()=>UW(void 0,void 0,void 0,(function*(){return(yield r.isAuthenticated())&&!h?location.href=yield r.getSignOutURL():location.href=QV.getSignOutURL(i.clientID,t),c.clearRefreshTokenTimeout(),yield s.removeOIDCProviderMetaData(),yield s.removeTemporaryData(),yield s.removeSessionData(),yield s.removeSessionStatus(),yield QV.waitTillPageRedirect(),!0})),trySignInSilently:()=>UW(void 0,void 0,void 0,(function*(){return yield u.trySignInSilently(V,W,d)})),updateConfig:e=>UW(void 0,void 0,void 0,(function*(){const t=yield s.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield r.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),y())}))}})),pR=(t,i,n,l)=>UW(void 0,void 0,void 0,(function*(){var o;let a;const r=null!==(o=null==i?void 0:i.requestTimeout)&&void 0!==o?o:6e4;let c=!0,s=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new lS;case e.Storage.SessionStorage:return new aS;case e.Storage.BrowserMemory:return new oS;default:return new aS}})(i.storage),u=new bR,h=new AW;yield h.initialize(i,d,u,t);const Z=new DV(h),b=yield OV((()=>UW(void 0,void 0,void 0,(function*(){const e={type:lV};try{return yield y(e)}catch(e){return QV.getSignOutURL(i.clientID,t)}}))),i.storage,(e=>G(e))),m=l(h,Z),p=new n,y=e=>{const t=new MessageChannel;return p.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new BW("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+r/1e3+" since dispatching the request"))}),r);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(n),t.port1.close(),t.port2.close(),null==o?void 0:o.success){const t=(null==o?void 0:o.data)?JSON.parse(null==o?void 0:o.data):null;(null==o?void 0:o.blob)&&(t.data=null==o?void 0:o.blob),e(t)}else i(o.error?JSON.parse(o.error):null)}}))},G=e=>y({data:e,type:SV}),X=()=>y({type:fV}),W=()=>UW(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield v();m.initializeSessionManger(t,e,(()=>UW(void 0,void 0,void 0,(function*(){return(yield Y()).sessionState}))),(e=>UW(void 0,void 0,void 0,(function*(){return(yield I(e)).authorizationURL}))),b)})),V=()=>UW(void 0,void 0,void 0,(function*(){var e;const t=yield v(),i={data:{prompt:"none",state:HV},type:GV},n=yield y(i),l=MW.extractPKCEKeyFromStateParam(null!==(e=new URL(n.authorizationURL).searchParams.get(zW))&&void 0!==e?e:"");n.pkce&&t.enablePKCE&&QV.setPKCE(l,n.pkce);const o=n.authorizationURL,a=new URL(o);a.searchParams.set("response_mode","query");return a.toString()})),I=e=>UW(void 0,void 0,void 0,(function*(){const t=yield v();return y({data:e,type:GV}).then((e=>UW(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=MW.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(zW))&&void 0!==i?i:"");QV.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),g=(e,i,n)=>UW(void 0,void 0,void 0,(function*(){const l=yield v(),o=MW.extractPKCEKeyFromStateParam(n),a={data:{code:e,pkce:l.enablePKCE?QV.getPKCE(o):void 0,sessionState:i,state:n},type:XV};return l.enablePKCE&&QV.removePKCE(o),y(a).then((e=>y({type:VV}).then((i=>(QV.setSignOutURL(i,l.clientID,t),l.enableOIDCSessionManagement&&W(),X(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),S=()=>UW(void 0,void 0,void 0,(function*(){return yield b.receivePromptNoneResponse((e=>UW(void 0,void 0,void 0,(function*(){return G(e)}))))})),f=()=>UW(void 0,void 0,void 0,(function*(){if(yield K())return yield X(),i.enableOIDCSessionManagement&&W(),Y()})),R=()=>y({type:hV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>y({type:NV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),Y=()=>y({type:ZV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),K=()=>y({type:WV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>y({type:yV}).then((()=>(c=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>y({type:pV}).then((()=>(c=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:Y,getCryptoHelper:()=>y({type:mV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>y({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>y({type:bV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>y({type:vV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>{(null==e?void 0:e.data)&&(null==e?void 0:e.data)instanceof FormData&&(e.data=Object.assign(Object.assign({},Object.fromEntries(null==e?void 0:e.data.entries())),{formData:!0}));return y({data:e,type:oV}).then((e=>Promise.resolve(e))).catch((e=>UW(void 0,void 0,void 0,(function*(){return c&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>y({data:e,type:aV}).then((e=>Promise.resolve(e))).catch((e=>UW(void 0,void 0,void 0,(function*(){return c&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{a||(a={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),p.onmessage=e=>{let{data:t}=e;switch(t.type){case uV:(null==a?void 0:a.requestFinishCallback)&&(null==a||a.requestFinishCallback());break;case sV:(null==a?void 0:a.requestStartCallback)&&(null==a||a.requestStartCallback());break;case dV:(null==a?void 0:a.requestSuccessCallback)&&(null==a||a.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return y({data:i,type:nV}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:K,refreshAccessToken:()=>y({type:IV}),requestCustomGrant:e=>y({data:e,type:rV}).then((t=>(e.preventSignOutURLUpdate&&(s=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>y({type:cV}).then((e=>(b.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(a.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(a.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(a.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(a.requestSuccessCallback=e)},signIn:(t,n,l,o)=>UW(void 0,void 0,void 0,(function*(){var a,r,c;const s=yield m.handleSignIn(S,W,f);if(s)return s;{let s,d,u;return(null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(s=n,d=null!=l?l:"",u=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(HW))&&void 0!==a?a:"",d=null!==(r=new URL(window.location.href).searchParams.get(xW))&&void 0!==r?r:"",u=null!==(c=new URL(window.location.href).searchParams.get(zW))&&void 0!==c?c:"",QV.removeAuthorizationCode()),s&&u?g(s,d,u):I(t).then((e=>UW(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield QV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>K().then((e=>UW(void 0,void 0,void 0,(function*(){if(e&&!s){return y({type:lV}).then((e=>UW(void 0,void 0,void 0,(function*(){return window.location.href=e,yield QV.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e)))}return window.location.href=QV.getSignOutURL(i.clientID,t),yield QV.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e))),trySignInSilently:()=>UW(void 0,void 0,void 0,(function*(){return yield m.trySignInSilently(V,g,b)})),updateConfig:e=>UW(void 0,void 0,void 0,(function*(){const t=yield v(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:RV};yield y(l),n.enableOIDCSessionManagement&&i&&(b.reset(),W())}))}})),yR={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage};class GR{constructor(e){this._authHelper=EV,this._worker=iV,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||EV}instantiateWorker(e){this._worker=e||iV}_isInitialized(){return UW(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return UW(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new BW("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new BW("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}static getInstance(e){var t,i;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(i=this._instances)||void 0===i?void 0:i.get(0))?this._instances.get(0):e?(this._instances.set(e,new GR(e)),this._instances.get(e)):(this._instances.set(0,new GR(0)),this._instances.get(0))}initialize(t,i,n){var l;return UW(this,void 0,void 0,(function*(){if(this._storage=null!==(l=t.storage)&&void 0!==l?l:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,i&&this.instantiateAuthHelper(i),n&&this.instantiateWorker(n),this._storage!==e.Storage.WebWorker){if(!this._client){const e=t,i=Object.assign({},yR);this._client=yield mR(this._instanceID,Object.assign(Object.assign({},i),e),((e,t)=>new this._authHelper(e,t)))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),window.addEventListener("message",(e=>{var t;(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===gV&&this.signOut()})),Promise.resolve(!0)}if(!this._client){const e=t;return this._client=yield pR(this._instanceID,Object.assign(Object.assign({},yR),e),this._worker,((e,t)=>new this._authHelper(e,t))),this._client.initialize().then((()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e)))}return Promise.resolve(!0)}))}getBasicUserInfo(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo()}))}signIn(e,t,i,n){var l;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),QV.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t))return null==e||delete e.callOnlyOnRedirect,null===(l=this._client)||void 0===l?void 0:l.signIn(e,t,i,n).then((e=>(this._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e),e)))}))}trySignInSilently(){var e;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!QV.wasSignInCalled())return null===(e=this._client)||void 0===e?void 0:e.trySignInSilently().then((e=>{if(this._onSignInCallback&&e){const t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t)}return e}))}))}signOut(){var e,t;return UW(this,void 0,void 0,(function*(){yield this._validateMethod();return null!==(t=yield null===(e=this._client)||void 0===e?void 0:e.signOut())&&void 0!==t&&t}))}httpRequest(e){var t;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(e.attachToken),null===(t=this._client)||void 0===t?void 0:t.httpRequest(e)}))}httpRequestAll(e){var t;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e)}))}requestCustomGrant(e){var t,i;return UW(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new BW("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(i=this._onCustomGrant)||void 0===i?void 0:i.get(e.id)),n}))}revokeAccessToken(){var e;return UW(this,void 0,void 0,(function*(){yield this._validateMethod();const t=yield null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(t)),t}))}getOIDCServiceEndpoints(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints()}))}getHttpClient(){if(this._client){if(this._storage!==e.Storage.WebWorker){return this._client.getHttpClient()}throw new BW("SPA-AUTH_CLIENT-GHC-IV01","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new BW("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}getDecodedIDToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken()}))}getCryptoHelper(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getCryptoHelper()}))}getIDToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getIDToken()}))}getAccessToken(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}getIDPAccessToken(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}getDataLayer(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getDataLayer()}))}refreshAccessToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken()}))}isAuthenticated(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.isAuthenticated()}))}isSessionActive(){return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-ISA-IV01","The active session cannot be returned.","The active session cannot be returned when the storage type is set to webWorker or browserMemory."));const t=this._client;return null==t?void 0:t.isSessionActive()}))}on(t,i,n){var l,o,a,r;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!i||"function"!=typeof i)throw new BW("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case e.Hooks.SignIn:this._onSignInCallback=i;break;case e.Hooks.SignOut:this._onSignOutCallback=i,(yield QV.isSignOutSuccessful())&&this._onSignOutCallback();break;case e.Hooks.RevokeAccessToken:this._onEndUserSession=i;break;case e.Hooks.Initialize:this._onInitialize=i;break;case e.Hooks.HttpRequestError:null===(l=this._client)||void 0===l||l.setHttpRequestErrorCallback(i);break;case e.Hooks.HttpRequestFinish:null===(o=this._client)||void 0===o||o.setHttpRequestFinishCallback(i);break;case e.Hooks.HttpRequestStart:null===(a=this._client)||void 0===a||a.setHttpRequestStartCallback(i);break;case e.Hooks.HttpRequestSuccess:null===(r=this._client)||void 0===r||r.setHttpRequestSuccessCallback(i);break;case e.Hooks.CustomGrant:n&&this._onCustomGrant.set(n,i);break;case e.Hooks.SignOutFailed:{this._onSignOutFailedCallback=i;const e=QV.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new BW("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}enableHttpHandler(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler()}))}disableHttpHandler(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler()}))}updateConfig(t){return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===e.Storage.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}GR._instances=new Map;class XR extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}return e.ASGARDEO_SESSION_ACTIVE="asgardeo-session-active",e.AUTHORIZATION_CODE=HW,e.AsgardeoAuthClient=AW,e.AsgardeoAuthException=BW,e.AsgardeoSPAClient=GR,e.AuthenticationHelper=EV,e.AuthenticationUtils=MW,e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.CryptoHelper=QW,e.DataLayer=DW,e.MainThreadClient=mR,e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=JW,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=xW,e.SIGN_OUT_SUCCESS_PARAM=FW,e.SIGN_OUT_URL=wW,e.SPAHelper=DV,e.SPAUtils=QV,e.STATE=zW,e.SUPPORTED_SIGNATURE_ALGORITHMS=TW,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=XR,e.WebWorkerClient=pR,e.workerReceiver=e=>{const t=self;let i;t.onmessage=t=>{let{data:a,ports:r}=t;return UW(void 0,void 0,void 0,(function*(){var t,c,s,d,u,h;const Z=r[0];if(a.type===nV||i)switch(a.type){case nV:try{const t=Object.assign({},a.data);i=yield((e,t)=>UW(void 0,void 0,void 0,(function*(){const i=new oS,n=new bR,l=new AW;yield l.initialize(e,i,n);const o=new DV(l),a=t(l,o),r=l.getDataLayer(),c=nS.getInstance();return(null==c?void 0:c.init)&&(yield c.init(!0,(e=>UW(void 0,void 0,void 0,(function*(){yield a.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{a.disableHttpHandler(c)},enableHttpHandler:()=>{a.enableHttpHandler(c)},getAccessToken:()=>a.getAccessToken(),getAuthorizationURL:e=>UW(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>UW(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(zW))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>UW(void 0,void 0,void 0,(function*(){return a.getBasicUserInfo()})),getConfigData:()=>UW(void 0,void 0,void 0,(function*(){return r.getConfigData()})),getCryptoHelper:()=>UW(void 0,void 0,void 0,(function*(){return a.getCryptoHelper()})),getDecodedIDPIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getDecodedIDPIDToken()})),getDecodedIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getDecodedIDToken()})),getIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getIDToken()})),getOIDCServiceEndpoints:()=>UW(void 0,void 0,void 0,(function*(){return a.getOIDCServiceEndpoints()})),getSignOutURL:()=>UW(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>UW(void 0,void 0,void 0,(function*(){return yield a.httpRequest(c,e)})),httpRequestAll:e=>UW(void 0,void 0,void 0,(function*(){return yield a.httpRequestAll(e,c)})),isAuthenticated:()=>a.isAuthenticated(),refreshAccessToken:()=>UW(void 0,void 0,void 0,(function*(){try{return yield a.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>UW(void 0,void 0,void 0,(function*(){return yield a.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>UW(void 0,void 0,void 0,(function*(){return yield a.requestCustomGrant(e)})),revokeAccessToken:()=>UW(void 0,void 0,void 0,(function*(){const e=yield o.getRefreshTimeoutTimer();return l.revokeAccessToken().then((()=>(o.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestFinishCallback:e=>{(null==c?void 0:c.setHttpRequestFinishCallback)&&c.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==c?void 0:c.setHttpRequestStartCallback)&&c.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==c?void 0:c.setHttpRequestSuccessCallback)&&c.setHttpRequestSuccessCallback(e)},setSessionState:e=>UW(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(xW,e)})),signOut:()=>UW(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>UW(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(a)})),updateConfig:e=>UW(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),Z.postMessage(jV.generateSuccessMessage())}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case GV:i.getAuthorizationURL(null==a?void 0:a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case XV:i.requestAccessToken(null===(t=null==a?void 0:a.data)||void 0===t?void 0:t.code,null===(c=null==a?void 0:a.data)||void 0===c?void 0:c.sessionState,null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.pkce,null===(d=null==a?void 0:a.data)||void 0===d?void 0:d.state).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case oV:{const e=a.data,t=null==e?void 0:e.data;if(!0===(null===(h=null===(u=a.data)||void 0===u?void 0:u.data)||void 0===h?void 0:h.formData)){const i=new FormData;for(const e in t)"formData"!==e&&i.append(e,t[e]);e.data=i}i.httpRequest(e).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break}case aV:i.httpRequestAll(a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case lV:try{Z.postMessage(jV.generateSuccessMessage(yield i.signOut()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case rV:i.requestCustomGrant(a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case cV:i.revokeAccessToken().then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case hV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case ZV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case bV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case mV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case vV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getIDToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case pV:i.enableHttpHandler(),Z.postMessage(jV.generateSuccessMessage());break;case yV:i.disableHttpHandler(),Z.postMessage(jV.generateSuccessMessage());break;case WV:try{Z.postMessage(jV.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case VV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case IV:try{Z.postMessage(jV.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case fV:try{Z.postMessage(jV.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case SV:try{Z.postMessage(jV.generateSuccessMessage(yield i.setSessionState(null==a?void 0:a.data)))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case RV:try{Z.postMessage(jV.generateSuccessMessage(yield i.updateConfig(null==a?void 0:a.data)))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case NV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getConfigData()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;default:null==Z||Z.postMessage(jV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(a.type,", is invalid."))))}else Z.postMessage(jV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}))};const n=()=>{t.postMessage({type:sV})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:dV})},o=()=>{t.postMessage({type:uV})}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
1
+ var AsgardeoAuth=function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),a=o,r=function(e){try{return!!e()}catch(e){return!0}},c=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),s=c,d=Function.prototype,u=d.bind,h=d.call,Z=s&&u.bind(h,h),b=s?function(e){return e&&Z(e)}:function(e){return e&&function(){return h.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},y=p,G=Object,X=function(e){return G(y(e))},W=X,V=b({}.hasOwnProperty),I=Object.hasOwn||function(e,t){return V(W(e),t)},g={},S={exports:{}},f=o,R=Object.defineProperty,v=function(e,t){try{R(f,e,{value:t,configurable:!0,writable:!0})}catch(i){f[e]=t}return t},Y=v,K="__core-js_shared__",N=o[K]||Y(K,{}),C=N;(S.exports=function(e,t){return C[e]||(C[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var L,U,k=b,J=0,T=Math.random(),H=k(1..toString),x=function(e){return"Symbol("+(void 0===e?"":e)+")_"+H(++J+T,36)},w=function(e){return"function"==typeof e},F=o,z=w,P=function(e){return z(e)?e:void 0},B=function(e,t){return arguments.length<2?P(F[e]):F[e]&&F[e][t]},M=B("navigator","userAgent")||"",j=o,Q=M,E=j.process,D=j.Deno,O=E&&E.versions||D&&D.version,A=O&&O.v8;A&&(U=(L=A.split("."))[0]>0&&L[0]<4?1:+(L[0]+L[1])),!U&&Q&&(!(L=Q.match(/Edge\/(\d+)/))||L[1]>=74)&&(L=Q.match(/Chrome\/(\d+)/))&&(U=+L[1]);var _=U,q=_,$=r,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=S.exports,le=I,oe=x,ae=ee,re=te,ce=ne("wks"),se=ie.Symbol,de=se&&se.for,ue=re?se:se&&se.withoutSetter||oe,he=function(e){if(!le(ce,e)||!ae&&"string"!=typeof ce[e]){var t="Symbol."+e;ae&&le(se,e)?ce[e]=se[e]:ce[e]=re&&de?de(t):ue(t)}return ce[e]},Ze=he;g.f=Ze;var be={},me=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=w,ye=function(e){return"object"==typeof e?null!==e:pe(e)},Ge=ye,Xe=o.document,We=Ge(Xe)&&Ge(Xe.createElement),Ve=function(e){return We?Xe.createElement(e):{}},Ie=Ve,ge=!me&&!r((function(){return 7!=Object.defineProperty(Ie("div"),"a",{get:function(){return 7}}).a})),Se=me&&r((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),fe=ye,Re=String,ve=TypeError,Ye=function(e){if(fe(e))return e;throw ve(Re(e)+" is not an object")},Ke=c,Ne=Function.prototype.call,Ce=Ke?Ne.bind(Ne):function(){return Ne.apply(Ne,arguments)},Le=b({}.isPrototypeOf),Ue=B,ke=w,Je=Le,Te=Object,He=te?function(e){return"symbol"==typeof e}:function(e){var t=Ue("Symbol");return ke(t)&&Je(t.prototype,Te(e))},xe=String,we=function(e){try{return xe(e)}catch(e){return"Object"}},Fe=w,ze=we,Pe=TypeError,Be=function(e){if(Fe(e))return e;throw Pe(ze(e)+" is not a function")},Me=Be,je=function(e,t){var i=e[t];return null==i?void 0:Me(i)},Qe=Ce,Ee=w,De=ye,Oe=TypeError,Ae=Ce,_e=ye,qe=He,$e=je,et=function(e,t){var i,n;if("string"===t&&Ee(i=e.toString)&&!De(n=Qe(i,e)))return n;if(Ee(i=e.valueOf)&&!De(n=Qe(i,e)))return n;if("string"!==t&&Ee(i=e.toString)&&!De(n=Qe(i,e)))return n;throw Oe("Can't convert object to primitive value")},tt=TypeError,it=he("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Ae(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=He,at=function(e){var t=lt(e,"string");return ot(t)?t:t+""},rt=me,ct=ge,st=Se,dt=Ye,ut=at,ht=TypeError,Zt=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",yt="writable";be.f=rt?st?function(e,t,i){if(dt(e),t=ut(t),dt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&yt in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return Zt(e,t,i)}:Zt:function(e,t,i){if(dt(e),t=ut(t),dt(i),ct)try{return Zt(e,t,i)}catch(e){}if("get"in i||"set"in i)throw ht("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var Gt=a,Xt=I,Wt=g,Vt=be.f,It=function(e){var t=Gt.Symbol||(Gt.Symbol={});Xt(t,e)||Vt(t,e,{value:Wt.f(e)})};It("matchAll");var gt={},St={},ft={}.propertyIsEnumerable,Rt=Object.getOwnPropertyDescriptor,vt=Rt&&!ft.call({1:2},1);St.f=vt?function(e){var t=Rt(this,e);return!!t&&t.enumerable}:ft;var Yt=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Kt=b,Nt=Kt({}.toString),Ct=Kt("".slice),Lt=function(e){return Ct(Nt(e),8,-1)},Ut=r,kt=Lt,Jt=Object,Tt=b("".split),Ht=Ut((function(){return!Jt("z").propertyIsEnumerable(0)}))?function(e){return"String"==kt(e)?Tt(e,""):Jt(e)}:Jt,xt=Ht,wt=p,Ft=function(e){return xt(wt(e))},zt=me,Pt=Ce,Bt=St,Mt=Yt,jt=Ft,Qt=at,Et=I,Dt=ge,Ot=Object.getOwnPropertyDescriptor;gt.f=zt?Ot:function(e,t){if(e=jt(e),t=Qt(t),Dt)try{return Ot(e,t)}catch(e){}if(Et(e,t))return Mt(!Pt(Bt.f,e,t),e[t])};var At=be,_t=Yt,qt=me?function(e,t,i){return At.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=I,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ai=w,ri=N,ci=b(Function.toString);ai(ri.inspectSource)||(ri.inspectSource=function(e){return ci(e)});var si,di,ui,hi=ri.inspectSource,Zi=w,bi=hi,mi=o.WeakMap,pi=Zi(mi)&&/native code/.test(bi(mi)),yi=S.exports,Gi=x,Xi=yi("keys"),Wi=function(e){return Xi[e]||(Xi[e]=Gi(e))},Vi={},Ii=pi,gi=o,Si=b,fi=ye,Ri=qt,vi=I,Yi=N,Ki=Wi,Ni=Vi,Ci="Object already initialized",Li=gi.TypeError,Ui=gi.WeakMap;if(Ii||Yi.state){var ki=Yi.state||(Yi.state=new Ui),Ji=Si(ki.get),Ti=Si(ki.has),Hi=Si(ki.set);si=function(e,t){if(Ti(ki,e))throw new Li(Ci);return t.facade=e,Hi(ki,e,t),t},di=function(e){return Ji(ki,e)||{}},ui=function(e){return Ti(ki,e)}}else{var xi=Ki("state");Ni[xi]=!0,si=function(e,t){if(vi(e,xi))throw new Li(Ci);return t.facade=e,Ri(e,xi,t),t},di=function(e){return vi(e,xi)?e[xi]:{}},ui=function(e){return vi(e,xi)}}var wi={set:si,get:di,has:ui,enforce:function(e){return ui(e)?di(e):si(e,{})},getterFor:function(e){return function(t){var i;if(!fi(t)||(i=di(t)).type!==e)throw Li("Incompatible receiver, "+e+" required");return i}}},Fi=r,zi=w,Pi=I,Bi=me,Mi=oi.CONFIGURABLE,ji=hi,Qi=wi.enforce,Ei=wi.get,Di=Object.defineProperty,Oi=Bi&&!Fi((function(){return 8!==Di((function(){}),"length",{value:8}).length})),Ai=String(String).split("String"),_i=$t.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!Pi(e,"name")||Mi&&e.name!==t)&&(Bi?Di(e,"name",{value:t,configurable:!0}):e.name=t),Oi&&i&&Pi(i,"arity")&&e.length!==i.arity&&Di(e,"length",{value:i.arity});try{i&&Pi(i,"constructor")&&i.constructor?Bi&&Di(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Qi(e);return Pi(n,"source")||(n.source=Ai.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return zi(this)&&Ei(this).source||ji(this)}),"toString");var qi=w,$i=be,en=$t.exports,tn=v,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,an=Math.floor,rn=Math.trunc||function(e){var t=+e;return(t>0?an:on)(t)},cn=rn,sn=function(e){var t=+e;return t!=t||0===t?0:cn(t)},dn=sn,un=Math.max,hn=Math.min,Zn=function(e,t){var i=dn(e);return i<0?un(i+t,0):hn(i,t)},bn=sn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},yn=pn,Gn=function(e){return yn(e.length)},Xn=Ft,Wn=Zn,Vn=Gn,In=function(e){return function(t,i,n){var l,o=Xn(t),a=Vn(o),r=Wn(n,a);if(e&&i!=i){for(;a>r;)if((l=o[r++])!=l)return!0}else for(;a>r;r++)if((e||r in o)&&o[r]===i)return e||r||0;return!e&&-1}},gn={includes:In(!0),indexOf:In(!1)},Sn=I,fn=Ft,Rn=gn.indexOf,vn=Vi,Yn=b([].push),Kn=function(e,t){var i,n=fn(e),l=0,o=[];for(i in n)!Sn(vn,i)&&Sn(n,i)&&Yn(o,i);for(;t.length>l;)Sn(n,i=t[l++])&&(~Rn(o,i)||Yn(o,i));return o},Nn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Cn=Kn,Ln=Nn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Cn(e,Ln)};var Un={};Un.f=Object.getOwnPropertySymbols;var kn=B,Jn=ln,Tn=Un,Hn=Ye,xn=b([].concat),wn=kn("Reflect","ownKeys")||function(e){var t=Jn.f(Hn(e)),i=Tn.f;return i?xn(t,i(e)):t},Fn=I,zn=wn,Pn=gt,Bn=be,Mn=r,jn=w,Qn=/#|\.prototype\./,En=function(e,t){var i=On[Dn(e)];return i==_n||i!=An&&(jn(t)?Mn(t):!!t)},Dn=En.normalize=function(e){return String(e).replace(Qn,".").toLowerCase()},On=En.data={},An=En.NATIVE="N",_n=En.POLYFILL="P",qn=En,$n=o,el=gt.f,tl=qt,il=nn,nl=v,ll=function(e,t,i){for(var n=zn(t),l=Bn.f,o=Pn.f,a=0;a<n.length;a++){var r=n[a];Fn(e,r)||i&&Fn(i,r)||l(e,r,o(t,r))}},ol=qn,al=function(e,t){var i,n,l,o,a,r=e.target,c=e.global,s=e.stat;if(i=c?$n:s?$n[r]||nl(r,{}):($n[r]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(a=el(i,n))&&a.value:i[n],!ol(c?n:r+(s?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},rl={},cl=Kn,sl=Nn,dl=Object.keys||function(e){return cl(e,sl)},ul=me,hl=Se,Zl=be,bl=Ye,ml=Ft,pl=dl;rl.f=ul&&!hl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,a=0;o>a;)Zl.f(e,i=l[a++],n[i]);return e};var yl,Gl=B("document","documentElement"),Xl=Ye,Wl=rl,Vl=Nn,Il=Vi,gl=Gl,Sl=Ve,fl=Wi("IE_PROTO"),Rl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},Yl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Kl=function(){try{yl=new ActiveXObject("htmlfile")}catch(e){}var e,t;Kl="undefined"!=typeof document?document.domain&&yl?Yl(yl):((t=Sl("iframe")).style.display="none",gl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):Yl(yl);for(var i=Vl.length;i--;)delete Kl.prototype[Vl[i]];return Kl()};Il[fl]=!0;var Nl=Object.create||function(e,t){var i;return null!==e?(Rl.prototype=Xl(e),i=new Rl,Rl.prototype=null,i[fl]=e):i=Kl(),void 0===t?i:Wl.f(i,t)},Cl=he,Ll=Nl,Ul=be.f,kl=Cl("unscopables"),Jl=Array.prototype;null==Jl[kl]&&Ul(Jl,kl,{configurable:!0,value:Ll(null)});var Tl=function(e){Jl[kl][e]=!0},Hl=gn.includes,xl=Tl;al({target:"Array",proto:!0,forced:r((function(){return!Array(1).includes()}))},{includes:function(e){return Hl(this,e,arguments.length>1?arguments[1]:void 0)}}),xl("includes"),Tl("flat"),Tl("flatMap");var wl={},Fl=Be,zl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Fl(t),this.reject=Fl(i)};wl.f=function(e){return new zl(e)};var Pl=Be,Bl=c,Ml=b(b.bind),jl=function(e,t){return Pl(e),void 0===t?e:Bl?Ml(e,t):function(){return e.apply(t,arguments)}},Ql={},El=Ql,Dl=he("iterator"),Ol=Array.prototype,Al=function(e){return void 0!==e&&(El.Array===e||Ol[Dl]===e)},_l={};_l[he("toStringTag")]="z";var ql="[object z]"===String(_l),$l=w,eo=Lt,to=he("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,ao=je,ro=Ql,co=he("iterator"),so=function(e){if(null!=e)return ao(e,co)||ao(e,"@@iterator")||ro[oo(e)]},uo=Ce,ho=Be,Zo=Ye,bo=we,mo=so,po=TypeError,yo=function(e,t){var i=arguments.length<2?mo(e):t;if(ho(i))return Zo(uo(i,e));throw po(bo(e)+" is not iterable")},Go=Ce,Xo=Ye,Wo=je,Vo=function(e,t,i){var n,l;Xo(e);try{if(!(n=Wo(e,"return"))){if("throw"===t)throw i;return i}n=Go(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return Xo(n),i},Io=jl,go=Ce,So=Ye,fo=we,Ro=Al,vo=Gn,Yo=Le,Ko=yo,No=so,Co=Vo,Lo=TypeError,Uo=function(e,t){this.stopped=e,this.result=t},ko=Uo.prototype,Jo=Ce,To=Be,Ho=wl,xo=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},wo=function(e,t,i){var n,l,o,a,r,c,s,d=i&&i.that,u=!(!i||!i.AS_ENTRIES),h=!(!i||!i.IS_RECORD),Z=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Io(t,d),p=function(e){return n&&Co(n,"normal",e),new Uo(!0,e)},y=function(e){return u?(So(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(h)n=e.iterator;else if(Z)n=e;else{if(!(l=No(e)))throw Lo(fo(e)+" is not iterable");if(Ro(l)){for(o=0,a=vo(e);a>o;o++)if((r=y(e[o]))&&Yo(ko,r))return r;return new Uo(!1)}n=Ko(e,l)}for(c=h?e.next:n.next;!(s=go(c,n)).done;){try{r=y(s.value)}catch(e){Co(n,"throw",e)}if("object"==typeof r&&r&&Yo(ko,r))return r}return new Uo(!1)};al({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Ho.f(t),n=i.resolve,l=i.reject,o=xo((function(){var i=To(t.resolve),l=[],o=0,a=1;wo(e,(function(e){var r=o++,c=!1;a++,Jo(i,t,e).then((function(e){c||(c=!0,l[r]={status:"fulfilled",value:e},--a||n(l))}),(function(e){c||(c=!0,l[r]={status:"rejected",reason:e},--a||n(l))}))})),--a||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,zo=b,Po=r,Bo=w,Mo=lo,jo=hi,Qo=function(){},Eo=[],Do=B("Reflect","construct"),Oo=/^\s*(?:class|function)\b/,Ao=zo(Oo.exec),_o=!Oo.exec(Qo),qo=function(e){if(!Bo(e))return!1;try{return Do(Qo,Eo,e),!0}catch(e){return!1}},$o=function(e){if(!Bo(e))return!1;switch(Mo(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Ao(Oo,jo(e))}catch(e){return!0}};$o.sham=!0;var ea=!Do||Po((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,ta=ea,ia=we,na=TypeError,la=function(e){if(ta(e))return e;throw na(ia(e)+" is not a constructor")},oa=Ye,aa=la,ra=he("species"),ca=function(e,t){var i,n=oa(e).constructor;return void 0===n||null==(i=oa(n)[ra])?t:aa(i)},sa=Ye,da=ye,ua=wl,ha=al,Za=Fo,ba=r,ma=B,pa=w,ya=ca,Ga=function(e,t){if(sa(e),da(t)&&t.constructor===e)return t;var i=ua.f(e);return(0,i.resolve)(t),i.promise},Xa=nn,Wa=Za&&Za.prototype;if(ha({target:"Promise",proto:!0,real:!0,forced:!!Za&&ba((function(){Wa.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=ya(this,ma("Promise")),i=pa(e);return this.then(i?function(i){return Ga(t,e()).then((function(){return i}))}:e,i?function(i){return Ga(t,e()).then((function(){throw i}))}:e)}}),pa(Za)){var Va=ma("Promise").prototype.finally;Wa.finally!==Va&&Xa(Wa,"finally",Va,{unsafe:!0})}var Ia=$t.exports,ga=be,Sa=function(e,t,i){return i.get&&Ia(i.get,t,{getter:!0}),i.set&&Ia(i.set,t,{setter:!0}),ga.f(e,t,i)},fa=Ye,Ra=function(){var e=fa(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},va=me,Ya=Sa,Ka=Ra,Na=r,Ca=o.RegExp,La=Ca.prototype,Ua=va&&Na((function(){var e=!0;try{Ca(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var a in e&&(o.hasIndices="d"),o)l(a,o[a]);return Object.getOwnPropertyDescriptor(La,"flags").get.call(t)!==n||i!==n}));Ua&&Ya(La,"flags",{configurable:!0,get:Ka});var ka,Ja,Ta,Ha=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),xa=I,wa=w,Fa=X,za=Ha,Pa=Wi("IE_PROTO"),Ba=Object,Ma=Ba.prototype,ja=za?Ba.getPrototypeOf:function(e){var t=Fa(e);if(xa(t,Pa))return t[Pa];var i=t.constructor;return wa(i)&&t instanceof i?i.prototype:t instanceof Ba?Ma:null},Qa=r,Ea=w,Da=ja,Oa=nn,Aa=he("iterator"),_a=!1;[].keys&&("next"in(Ta=[].keys())?(Ja=Da(Da(Ta)))!==Object.prototype&&(ka=Ja):_a=!0);var qa=null==ka||Qa((function(){var e={};return ka[Aa].call(e)!==e}));qa&&(ka={}),Ea(ka[Aa])||Oa(ka,Aa,(function(){return this}));var $a,er,tr={IteratorPrototype:ka,BUGGY_SAFARI_ITERATORS:_a},ir=be.f,nr=I,lr=he("toStringTag"),or=function(e,t,i){e&&!i&&(e=e.prototype),e&&!nr(e,lr)&&ir(e,lr,{configurable:!0,value:t})},ar=tr.IteratorPrototype,rr=Nl,cr=Yt,sr=or,dr=Ql,ur=function(){return this},hr=function(e,t,i,n){var l=t+" Iterator";return e.prototype=rr(ar,{next:cr(+!n,i)}),sr(e,l,!1),dr[l]=ur,e},Zr=lo,br=String,mr=function(e){if("Symbol"===Zr(e))throw TypeError("Cannot convert a Symbol value to a string");return br(e)},pr=ye,yr=Lt,Gr=he("match"),Xr=Ce,Wr=I,Vr=Le,Ir=Ra,gr=RegExp.prototype,Sr=b,fr=sn,Rr=mr,vr=p,Yr=Sr("".charAt),Kr=Sr("".charCodeAt),Nr=Sr("".slice),Cr=function(e){return function(t,i){var n,l,o=Rr(vr(t)),a=fr(i),r=o.length;return a<0||a>=r?e?"":void 0:(n=Kr(o,a))<55296||n>56319||a+1===r||(l=Kr(o,a+1))<56320||l>57343?e?Yr(o,a):n:e?Nr(o,a,a+2):l-56320+(n-55296<<10)+65536}},Lr={codeAt:Cr(!1),charAt:Cr(!0)},Ur=Lr.charAt,kr=function(e,t,i){return t+(i?Ur(e,t).length:1)},Jr=r,Tr=o.RegExp,Hr=Jr((function(){var e=Tr("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),xr=Hr||Jr((function(){return!Tr("a","y").sticky})),wr={BROKEN_CARET:Hr||Jr((function(){var e=Tr("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:xr,UNSUPPORTED_Y:Hr},Fr=r,zr=o.RegExp,Pr=Fr((function(){var e=zr(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Br=r,Mr=o.RegExp,jr=Br((function(){var e=Mr("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Qr=Ce,Er=b,Dr=mr,Or=Ra,Ar=wr,_r=S.exports,qr=Nl,$r=wi.get,ec=Pr,tc=jr,ic=_r("native-string-replace",String.prototype.replace),nc=RegExp.prototype.exec,lc=nc,oc=Er("".charAt),ac=Er("".indexOf),rc=Er("".replace),cc=Er("".slice),sc=(er=/b*/g,Qr(nc,$a=/a/,"a"),Qr(nc,er,"a"),0!==$a.lastIndex||0!==er.lastIndex),dc=Ar.BROKEN_CARET,uc=void 0!==/()??/.exec("")[1];(sc||uc||dc||ec||tc)&&(lc=function(e){var t,i,n,l,o,a,r,c=this,s=$r(c),d=Dr(e),u=s.raw;if(u)return u.lastIndex=c.lastIndex,t=Qr(lc,u,d),c.lastIndex=u.lastIndex,t;var h=s.groups,Z=dc&&c.sticky,b=Qr(Or,c),m=c.source,p=0,y=d;if(Z&&(b=rc(b,"y",""),-1===ac(b,"g")&&(b+="g"),y=cc(d,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&"\n"!==oc(d,c.lastIndex-1))&&(m="(?: "+m+")",y=" "+y,p++),i=new RegExp("^(?:"+m+")",b)),uc&&(i=new RegExp("^"+m+"$(?!\\s)",b)),sc&&(n=c.lastIndex),l=Qr(nc,Z?i:c,y),Z?l?(l.input=cc(l.input,p),l[0]=cc(l[0],p),l.index=c.lastIndex,c.lastIndex+=l[0].length):c.lastIndex=0:sc&&l&&(c.lastIndex=c.global?l.index+l[0].length:n),uc&&l&&l.length>1&&Qr(ic,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&h)for(l.groups=a=qr(null),o=0;o<h.length;o++)a[(r=h[o])[0]]=l[r[1]];return l});var hc=lc,Zc=Ce,bc=Ye,mc=w,pc=Lt,yc=hc,Gc=TypeError,Xc=function(e,t){var i=e.exec;if(mc(i)){var n=Zc(i,e,t);return null!==n&&bc(n),n}if("RegExp"===pc(e))return Zc(yc,e,t);throw Gc("RegExp#exec called on incompatible receiver")},Wc=al,Vc=Ce,Ic=b,gc=hr,Sc=p,fc=pn,Rc=mr,vc=Ye,Yc=function(e){var t;return pr(e)&&(void 0!==(t=e[Gr])?!!t:"RegExp"==yr(e))},Kc=function(e){var t=e.flags;return void 0!==t||"flags"in gr||Wr(e,"flags")||!Vr(gr,e)?t:Xr(Ir,e)},Nc=je,Cc=nn,Lc=r,Uc=ca,kc=kr,Jc=Xc,Tc=wi,Hc=he("matchAll"),xc="RegExp String",wc="RegExp String Iterator",Fc=Tc.set,zc=Tc.getterFor(wc),Pc=RegExp.prototype,Bc=TypeError,Mc=Ic("".indexOf),jc=Ic("".matchAll),Qc=!!jc&&!Lc((function(){jc("a",/./)})),Ec=gc((function(e,t,i,n){Fc(this,{type:wc,regexp:e,string:t,global:i,unicode:n,done:!1})}),xc,(function(){var e=zc(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=Jc(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===Rc(n[0])&&(t.lastIndex=kc(i,fc(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Dc=function(e){var t,i,n,l=vc(this),o=Rc(e),a=Uc(l,RegExp),r=Rc(Kc(l));return t=new a(a===RegExp?l.source:l,r),i=!!~Mc(r,"g"),n=!!~Mc(r,"u"),t.lastIndex=fc(l.lastIndex),new Ec(t,o,i,n)};Wc({target:"String",proto:!0,forced:Qc},{matchAll:function(e){var t,i,n,l=Sc(this);if(null!=e){if(Yc(e)&&(t=Rc(Sc(Kc(e))),!~Mc(t,"g")))throw Bc("`.matchAll` does not allow non-global regexes");if(Qc)return jc(l,e);if(n=Nc(e,Hc))return Vc(n,e,l)}else if(Qc)return jc(l,e);return i=Rc(l),new RegExp(e,"g")[Hc](i)}}),Hc in Pc||Cc(Pc,Hc,Dc);var Oc=c,Ac=Function.prototype,_c=Ac.apply,qc=Ac.call,$c="object"==typeof Reflect&&Reflect.apply||(Oc?qc.bind(_c):function(){return qc.apply(_c,arguments)});al({target:"RegExp",proto:!0,forced:/./.exec!==hc},{exec:hc});var es=b,ts=nn,is=hc,ns=r,ls=he,os=qt,as=ls("species"),rs=RegExp.prototype,cs=b,ss=X,ds=Math.floor,us=cs("".charAt),hs=cs("".replace),Zs=cs("".slice),bs=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ms=/\$([$&'`]|\d{1,2})/g,ps=$c,ys=Ce,Gs=b,Xs=function(e,t,i,n){var l=ls(e),o=!ns((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),a=o&&!ns((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[as]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!a||i){var r=es(/./[l]),c=t(l,""[e],(function(e,t,i,n,l){var a=es(e),c=t.exec;return c===is||c===rs.exec?o&&!l?{done:!0,value:r(t,i,n)}:{done:!0,value:a(i,t,n)}:{done:!1}}));ts(String.prototype,e,c[0]),ts(rs,l,c[1])}n&&os(rs[l],"sham",!0)},Ws=r,Vs=Ye,Is=w,gs=sn,Ss=pn,fs=mr,Rs=p,vs=kr,Ys=je,Ks=function(e,t,i,n,l,o){var a=i+e.length,r=n.length,c=ms;return void 0!==l&&(l=ss(l),c=bs),hs(o,c,(function(o,c){var s;switch(us(c,0)){case"$":return"$";case"&":return e;case"`":return Zs(t,0,i);case"'":return Zs(t,a);case"<":s=l[Zs(c,1,-1)];break;default:var d=+c;if(0===d)return o;if(d>r){var u=ds(d/10);return 0===u?o:u<=r?void 0===n[u-1]?us(c,1):n[u-1]+us(c,1):o}s=n[d-1]}return void 0===s?"":s}))},Ns=Xc,Cs=he("replace"),Ls=Math.max,Us=Math.min,ks=Gs([].concat),Js=Gs([].push),Ts=Gs("".indexOf),Hs=Gs("".slice),xs="$0"==="a".replace(/./,"$0"),ws=!!/./[Cs]&&""===/./[Cs]("a","$0");Xs("replace",(function(e,t,i){var n=ws?"$":"$0";return[function(e,i){var n=Rs(this),l=null==e?void 0:Ys(e,Cs);return l?ys(l,e,n,i):ys(t,fs(n),e,i)},function(e,l){var o=Vs(this),a=fs(e);if("string"==typeof l&&-1===Ts(l,n)&&-1===Ts(l,"$<")){var r=i(t,o,a,l);if(r.done)return r.value}var c=Is(l);c||(l=fs(l));var s=o.global;if(s){var d=o.unicode;o.lastIndex=0}for(var u=[];;){var h=Ns(o,a);if(null===h)break;if(Js(u,h),!s)break;""===fs(h[0])&&(o.lastIndex=vs(a,Ss(o.lastIndex),d))}for(var Z,b="",m=0,p=0;p<u.length;p++){for(var y=fs((h=u[p])[0]),G=Ls(Us(gs(h.index),a.length),0),X=[],W=1;W<h.length;W++)Js(X,void 0===(Z=h[W])?Z:String(Z));var V=h.groups;if(c){var I=ks([y],X,G,a);void 0!==V&&Js(I,V);var g=fs(ps(l,void 0,I))}else g=Ks(y,a,G,X,V,l);G>=m&&(b+=Hs(a,m,G)+g,m=G+y.length)}return b+Hs(a,m)}]}),!!Ws((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!xs||ws);var Fs={exports:{}},zs=he("iterator"),Ps=!1;try{var Bs=0,Ms={next:function(){return{done:!!Bs++}},return:function(){Ps=!0}};Ms[zs]=function(){return this},Array.from(Ms,(function(){throw 2}))}catch(e){}var js,Qs,Es,Ds="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Os=w,As=String,_s=TypeError,qs=b,$s=Ye,ed=function(e){if("object"==typeof e||Os(e))return e;throw _s("Can't set "+As(e)+" as a prototype")},td=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $s(i),ed(n),t?e(i,n):i.__proto__=n,i}}():void 0),id=Ds,nd=me,ld=o,od=w,ad=ye,rd=I,cd=lo,sd=we,dd=qt,ud=nn,hd=be.f,Zd=Le,bd=ja,md=td,pd=he,yd=x,Gd=wi.enforce,Xd=wi.get,Wd=ld.Int8Array,Vd=Wd&&Wd.prototype,Id=ld.Uint8ClampedArray,gd=Id&&Id.prototype,Sd=Wd&&bd(Wd),fd=Vd&&bd(Vd),Rd=Object.prototype,vd=ld.TypeError,Yd=pd("toStringTag"),Kd=yd("TYPED_ARRAY_TAG"),Nd="TypedArrayConstructor",Cd=id&&!!md&&"Opera"!==cd(ld.opera),Ld=!1,Ud={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},kd={BigInt64Array:8,BigUint64Array:8},Jd=function(e){var t=bd(e);if(ad(t)){var i=Xd(t);return i&&rd(i,Nd)?i.TypedArrayConstructor:Jd(t)}},Td=function(e){if(!ad(e))return!1;var t=cd(e);return rd(Ud,t)||rd(kd,t)};for(js in Ud)(Es=(Qs=ld[js])&&Qs.prototype)?Gd(Es).TypedArrayConstructor=Qs:Cd=!1;for(js in kd)(Es=(Qs=ld[js])&&Qs.prototype)&&(Gd(Es).TypedArrayConstructor=Qs);if((!Cd||!od(Sd)||Sd===Function.prototype)&&(Sd=function(){throw vd("Incorrect invocation")},Cd))for(js in Ud)ld[js]&&md(ld[js],Sd);if((!Cd||!fd||fd===Rd)&&(fd=Sd.prototype,Cd))for(js in Ud)ld[js]&&md(ld[js].prototype,fd);if(Cd&&bd(gd)!==fd&&md(gd,fd),nd&&!rd(fd,Yd))for(js in Ld=!0,hd(fd,Yd,{get:function(){return ad(this)?this[Kd]:void 0}}),Ud)ld[js]&&dd(ld[js],Kd,js);var Hd={NATIVE_ARRAY_BUFFER_VIEWS:Cd,TYPED_ARRAY_TAG:Ld&&Kd,aTypedArray:function(e){if(Td(e))return e;throw vd("Target is not a typed array")},aTypedArrayConstructor:function(e){if(od(e)&&(!md||Zd(Sd,e)))return e;throw vd(sd(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(nd){if(i)for(var l in Ud){var o=ld[l];if(o&&rd(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}fd[e]&&!i||ud(fd,e,i?t:Cd&&Vd[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(nd){if(md){if(i)for(n in Ud)if((l=ld[n])&&rd(l,e))try{delete l[e]}catch(e){}if(Sd[e]&&!i)return;try{return ud(Sd,e,i?t:Cd&&Sd[e]||t)}catch(e){}}for(n in Ud)!(l=ld[n])||l[e]&&!i||ud(l,e,t)}},getTypedArrayConstructor:Jd,isView:function(e){if(!ad(e))return!1;var t=cd(e);return"DataView"===t||rd(Ud,t)||rd(kd,t)},isTypedArray:Td,TypedArray:Sd,TypedArrayPrototype:fd},xd=o,wd=r,Fd=function(e,t){if(!t&&!Ps)return!1;var i=!1;try{var n={};n[zs]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},zd=Hd.NATIVE_ARRAY_BUFFER_VIEWS,Pd=xd.ArrayBuffer,Bd=xd.Int8Array,Md=!zd||!wd((function(){Bd(1)}))||!wd((function(){new Bd(-1)}))||!Fd((function(e){new Bd,new Bd(null),new Bd(1.5),new Bd(e)}),!0)||wd((function(){return 1!==new Bd(new Pd(2),1,void 0).length})),jd=nn,Qd=function(e,t,i){for(var n in t)jd(e,n,t[n],i);return e},Ed=Le,Dd=TypeError,Od=function(e,t){if(Ed(t,e))return e;throw Dd("Incorrect invocation")},Ad=sn,_d=pn,qd=RangeError,$d=function(e){if(void 0===e)return 0;var t=Ad(e),i=_d(t);if(t!==i)throw qd("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,au={pack:function(e,t,i){var n,l,o,a=eu(i),r=8*i-t-1,c=(1<<r)-1,s=c>>1,d=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,h=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=c):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+s>=1?d/o:d*iu(2,1-s))*o>=2&&(n++,o/=2),n+s>=c?(l=0,n=c):n+s>=1?(l=(e*o-1)*iu(2,t),n+=s):(l=e*iu(2,s-1)*iu(2,t),n=0));t>=8;)a[h++]=255&l,l/=256,t-=8;for(n=n<<t|l,r+=t;r>0;)a[h++]=255&n,n/=256,r-=8;return a[--h]|=128*u,a},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,a=o>>1,r=l-7,c=n-1,s=e[c--],d=127&s;for(s>>=7;r>0;)d=256*d+e[c--],r-=8;for(i=d&(1<<-r)-1,d>>=-r,r+=t;r>0;)i=256*i+e[c--],r-=8;if(0===d)d=1-a;else{if(d===o)return i?NaN:s?-1/0:1/0;i+=iu(2,t),d-=a}return(s?-1:1)*i*iu(2,d-t)}},ru=X,cu=Zn,su=Gn,du=function(e){for(var t=ru(this),i=su(t),n=arguments.length,l=cu(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,a=void 0===o?i:cu(o,i);a>l;)t[l++]=e;return t},uu=at,hu=be,Zu=Yt,bu=function(e,t,i){var n=uu(t);n in e?hu.f(e,n,Zu(0,i)):e[n]=i},mu=Zn,pu=Gn,yu=bu,Gu=Array,Xu=Math.max,Wu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),a=Gu(Xu(o-l,0)),r=0;l<o;l++,r++)yu(a,r,e[l]);return a.length=r,a},Vu=o,Iu=b,gu=me,Su=Ds,fu=oi,Ru=qt,vu=Qd,Yu=r,Ku=Od,Nu=sn,Cu=pn,Lu=$d,Uu=au,ku=ja,Ju=td,Tu=ln.f,Hu=be.f,xu=du,wu=Wu,Fu=or,zu=fu.PROPER,Pu=fu.CONFIGURABLE,Bu=wi.get,Mu=wi.set,ju="ArrayBuffer",Qu="DataView",Eu="Wrong index",Du=Vu.ArrayBuffer,Ou=Du,Au=Ou&&Ou.prototype,_u=Vu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eh=Vu.Array,th=Vu.RangeError,ih=Iu(xu),nh=Iu([].reverse),lh=Uu.pack,oh=Uu.unpack,ah=function(e){return[255&e]},rh=function(e){return[255&e,e>>8&255]},ch=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},sh=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},dh=function(e){return lh(e,23,4)},uh=function(e){return lh(e,52,8)},hh=function(e,t){Hu(e.prototype,t,{get:function(){return Bu(this)[t]}})},Zh=function(e,t,i,n){var l=Lu(i),o=Bu(e);if(l+t>o.byteLength)throw th(Eu);var a=Bu(o.buffer).bytes,r=l+o.byteOffset,c=wu(a,r,r+t);return n?c:nh(c)},bh=function(e,t,i,n,l,o){var a=Lu(i),r=Bu(e);if(a+t>r.byteLength)throw th(Eu);for(var c=Bu(r.buffer).bytes,s=a+r.byteOffset,d=n(+l),u=0;u<t;u++)c[s+u]=d[o?u:t-u-1]};if(Su){var mh=zu&&Du.name!==ju;if(Yu((function(){Du(1)}))&&Yu((function(){new Du(-1)}))&&!Yu((function(){return new Du,new Du(1.5),new Du(NaN),mh&&!Pu})))mh&&Pu&&Ru(Du,"name",ju);else{(Ou=function(e){return Ku(this,Au),new Du(Lu(e))}).prototype=Au;for(var ph,yh=Tu(Du),Gh=0;yh.length>Gh;)(ph=yh[Gh++])in Ou||Ru(Ou,ph,Du[ph]);Au.constructor=Ou}Ju&&ku(qu)!==$u&&Ju(qu,$u);var Xh=new _u(new Ou(2)),Wh=Iu(qu.setInt8);Xh.setInt8(0,2147483648),Xh.setInt8(1,2147483649),!Xh.getInt8(0)&&Xh.getInt8(1)||vu(qu,{setInt8:function(e,t){Wh(this,e,t<<24>>24)},setUint8:function(e,t){Wh(this,e,t<<24>>24)}},{unsafe:!0})}else Ou=function(e){Ku(this,Au);var t=Lu(e);Mu(this,{bytes:ih(eh(t),0),byteLength:t}),gu||(this.byteLength=t)},Au=Ou.prototype,_u=function(e,t,i){Ku(this,qu),Ku(e,Au);var n=Bu(e).byteLength,l=Nu(t);if(l<0||l>n)throw th("Wrong offset");if(l+(i=void 0===i?n-l:Cu(i))>n)throw th("Wrong length");Mu(this,{buffer:e,byteLength:i,byteOffset:l}),gu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,gu&&(hh(Ou,"byteLength"),hh(_u,"buffer"),hh(_u,"byteLength"),hh(_u,"byteOffset")),vu(qu,{getInt8:function(e){return Zh(this,1,e)[0]<<24>>24},getUint8:function(e){return Zh(this,1,e)[0]},getInt16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return sh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oh(Zh(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bh(this,1,e,ah,t)},setUint8:function(e,t){bh(this,1,e,ah,t)},setInt16:function(e,t){bh(this,2,e,rh,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bh(this,2,e,rh,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bh(this,4,e,ch,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bh(this,4,e,ch,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bh(this,4,e,dh,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bh(this,8,e,uh,t,arguments.length>2?arguments[2]:void 0)}});Fu(Ou,ju),Fu(_u,Qu);var Vh={ArrayBuffer:Ou,DataView:_u},Ih=ye,gh=Math.floor,Sh=Number.isInteger||function(e){return!Ih(e)&&isFinite(e)&&gh(e)===e},fh=sn,Rh=RangeError,vh=function(e){var t=fh(e);if(t<0)throw Rh("The argument can't be less than 0");return t},Yh=RangeError,Kh=function(e,t){var i=vh(e);if(i%t)throw Yh("Wrong offset");return i},Nh=jl,Ch=Ce,Lh=la,Uh=X,kh=Gn,Jh=yo,Th=so,Hh=Al,xh=Hd.aTypedArrayConstructor,wh=function(e){var t,i,n,l,o,a,r=Lh(this),c=Uh(e),s=arguments.length,d=s>1?arguments[1]:void 0,u=void 0!==d,h=Th(c);if(h&&!Hh(h))for(a=(o=Jh(c,h)).next,c=[];!(l=Ch(a,o)).done;)c.push(l.value);for(u&&s>2&&(d=Nh(d,arguments[2])),i=kh(c),n=new(xh(r))(i),t=0;i>t;t++)n[t]=u?d(c[t],t):c[t];return n},Fh=Lt,zh=Array.isArray||function(e){return"Array"==Fh(e)},Ph=ea,Bh=ye,Mh=he("species"),jh=Array,Qh=function(e){var t;return zh(e)&&(t=e.constructor,(Ph(t)&&(t===jh||zh(t.prototype))||Bh(t)&&null===(t=t[Mh]))&&(t=void 0)),void 0===t?jh:t},Eh=jl,Dh=Ht,Oh=X,Ah=Gn,_h=function(e,t){return new(Qh(e))(0===t?0:t)},qh=b([].push),$h=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,a=7==e,r=5==e||o;return function(c,s,d,u){for(var h,Z,b=Oh(c),m=Dh(b),p=Eh(s,d),y=Ah(m),G=0,X=u||_h,W=t?X(c,y):i||a?X(c,0):void 0;y>G;G++)if((r||G in m)&&(Z=p(h=m[G],G,b),e))if(t)W[G]=Z;else if(Z)switch(e){case 3:return!0;case 5:return h;case 6:return G;case 2:qh(W,h)}else switch(e){case 4:return!1;case 7:qh(W,h)}return o?-1:n||l?l:W}},eZ={forEach:$h(0),map:$h(1),filter:$h(2),some:$h(3),every:$h(4),find:$h(5),findIndex:$h(6),filterReject:$h(7)},tZ=B,iZ=be,nZ=me,lZ=he("species"),oZ=w,aZ=ye,rZ=td,cZ=al,sZ=o,dZ=Ce,uZ=me,hZ=Md,ZZ=Hd,bZ=Vh,mZ=Od,pZ=Yt,yZ=qt,GZ=Sh,XZ=pn,WZ=$d,VZ=Kh,IZ=at,gZ=I,SZ=lo,fZ=ye,RZ=He,vZ=Nl,YZ=Le,KZ=td,NZ=ln.f,CZ=wh,LZ=eZ.forEach,UZ=function(e){var t=tZ(e),i=iZ.f;nZ&&t&&!t[lZ]&&i(t,lZ,{configurable:!0,get:function(){return this}})},kZ=be,JZ=gt,TZ=function(e,t,i){var n,l;return rZ&&oZ(n=t.constructor)&&n!==i&&aZ(l=n.prototype)&&l!==i.prototype&&rZ(e,l),e},HZ=wi.get,xZ=wi.set,wZ=wi.enforce,FZ=kZ.f,zZ=JZ.f,PZ=Math.round,BZ=sZ.RangeError,MZ=bZ.ArrayBuffer,jZ=MZ.prototype,QZ=bZ.DataView,EZ=ZZ.NATIVE_ARRAY_BUFFER_VIEWS,DZ=ZZ.TYPED_ARRAY_TAG,OZ=ZZ.TypedArray,AZ=ZZ.TypedArrayPrototype,_Z=ZZ.aTypedArrayConstructor,qZ=ZZ.isTypedArray,$Z="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_Z(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){FZ(e,t,{get:function(){return HZ(this)[t]}})},nb=function(e){var t;return YZ(jZ,e)||"ArrayBuffer"==(t=SZ(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qZ(e)&&!RZ(t)&&t in e&&GZ(+t)&&t>=0},ob=function(e,t){return t=IZ(t),lb(e,t)?pZ(2,e[t]):zZ(e,t)},ab=function(e,t,i){return t=IZ(t),!(lb(e,t)&&fZ(i)&&gZ(i,"value"))||gZ(i,"get")||gZ(i,"set")||i.configurable||gZ(i,"writable")&&!i.writable||gZ(i,"enumerable")&&!i.enumerable?FZ(e,t,i):(e[t]=i.value,e)};uZ?(EZ||(JZ.f=ob,kZ.f=ab,ib(AZ,"buffer"),ib(AZ,"byteOffset"),ib(AZ,"byteLength"),ib(AZ,"length")),cZ({target:"Object",stat:!0,forced:!EZ},{getOwnPropertyDescriptor:ob,defineProperty:ab}),Fs.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,a="set"+e,r=sZ[l],c=r,s=c&&c.prototype,d={},u=function(e,t){FZ(e,t,{get:function(){return function(e,t){var i=HZ(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=HZ(e);i&&(l=(l=PZ(l))<0?0:l>255?255:255&l),o.view[a](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};EZ?hZ&&(c=t((function(e,t,i,l){return mZ(e,s),TZ(fZ(t)?nb(t)?void 0!==l?new r(t,VZ(i,n),l):void 0!==i?new r(t,VZ(i,n)):new r(t):qZ(t)?tb(c,t):dZ(CZ,c,t):new r(WZ(t)),e,c)})),KZ&&KZ(c,OZ),LZ(NZ(r),(function(e){e in c||yZ(c,e,r[e])})),c.prototype=s):(c=t((function(e,t,i,l){mZ(e,s);var o,a,r,d=0,h=0;if(fZ(t)){if(!nb(t))return qZ(t)?tb(c,t):dZ(CZ,c,t);o=t,h=VZ(i,n);var Z=t.byteLength;if(void 0===l){if(Z%n)throw BZ(eb);if((a=Z-h)<0)throw BZ(eb)}else if((a=XZ(l)*n)+h>Z)throw BZ(eb);r=a/n}else r=WZ(t),o=new MZ(a=r*n);for(xZ(e,{buffer:o,byteOffset:h,byteLength:a,length:r,view:new QZ(o)});d<r;)u(e,d++)})),KZ&&KZ(c,OZ),s=c.prototype=vZ(AZ)),s.constructor!==c&&yZ(s,"constructor",c),wZ(s).TypedArrayConstructor=c,DZ&&yZ(s,DZ,l);var h=c!=r;d[l]=c,cZ({global:!0,constructor:!0,forced:h,sham:!EZ},d),$Z in c||yZ(c,$Z,n),$Z in s||yZ(s,$Z,n),UZ(l)}):Fs.exports=function(){},(0,Fs.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fs.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fs.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var rb=nt,cb=TypeError,sb=du,db=function(e){var t=rb(e,"number");if("number"==typeof t)throw cb("Can't convert number to bigint");return BigInt(t)},ub=lo,hb=Ce,Zb=r,bb=Hd.aTypedArray,mb=Hd.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?db(e):+e;return hb(sb,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),Zb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Hd.exportTypedArrayStaticMethod)("from",wh,Md);var yb=Hd.aTypedArrayConstructor;(0,Hd.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(yb(this))(t);t>e;)i[e]=arguments[e++];return i}),Md);var Gb=o,Xb=Ce,Wb=Hd,Vb=Gn,Ib=Kh,gb=X,Sb=r,fb=Gb.RangeError,Rb=Gb.Int8Array,vb=Rb&&Rb.prototype,Yb=vb&&vb.set,Kb=Wb.aTypedArray,Nb=Wb.exportTypedArrayMethod,Cb=!Sb((function(){var e=new Uint8ClampedArray(2);return Xb(Yb,e,{length:1,0:3},1),3!==e[1]})),Lb=Cb&&Wb.NATIVE_ARRAY_BUFFER_VIEWS&&Sb((function(){var e=new Rb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Nb("set",(function(e){Kb(this);var t=Ib(arguments.length>1?arguments[1]:void 0,1),i=gb(e);if(Cb)return Xb(Yb,this,i,t);var n=this.length,l=Vb(i),o=0;if(l+t>n)throw fb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Cb||Lb);var Ub=Wu,kb=Math.floor,Jb=function(e,t){var i=e.length,n=kb(i/2);return i<8?Tb(e,t):Hb(e,Jb(Ub(e,0,n),t),Jb(Ub(e,n),t),t)},Tb=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Hb=function(e,t,i,n){for(var l=t.length,o=i.length,a=0,r=0;a<l||r<o;)e[a+r]=a<l&&r<o?n(t[a],i[r])<=0?t[a++]:i[r++]:a<l?t[a++]:i[r++];return e},xb=Jb,wb=M.match(/firefox\/(\d+)/i),Fb=!!wb&&+wb[1],zb=/MSIE|Trident/.test(M),Pb=M.match(/AppleWebKit\/(\d+)\./),Bb=!!Pb&&+Pb[1],Mb=b,jb=r,Qb=Be,Eb=xb,Db=Fb,Ob=zb,Ab=_,_b=Bb,qb=Hd.aTypedArray,$b=Hd.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&Mb(em.prototype.sort),im=!(!tm||jb((function(){tm(new em(2),null)}))&&jb((function(){tm(new em(2),{})}))),nm=!!tm&&!jb((function(){if(Ab)return Ab<74;if(Db)return Db<67;if(Ob)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Qb(e),nm?tm(this,e):Eb(qb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!nm||im);var lm=Ve("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,am=om===Object.prototype?void 0:om,rm=al,cm=Ce,sm=w,dm=hr,um=ja,hm=td,Zm=or,bm=qt,mm=nn,pm=Ql,ym=oi.PROPER,Gm=oi.CONFIGURABLE,Xm=tr.IteratorPrototype,Wm=tr.BUGGY_SAFARI_ITERATORS,Vm=he("iterator"),Im="keys",gm="values",Sm="entries",fm=function(){return this},Rm=function(e,t,i,n,l,o,a){dm(i,t,n);var r,c,s,d=function(e){if(e===l&&m)return m;if(!Wm&&e in Z)return Z[e];switch(e){case Im:case gm:case Sm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",h=!1,Z=e.prototype,b=Z[Vm]||Z["@@iterator"]||l&&Z[l],m=!Wm&&b||d(l),p="Array"==t&&Z.entries||b;if(p&&(r=um(p.call(new e)))!==Object.prototype&&r.next&&(um(r)!==Xm&&(hm?hm(r,Xm):sm(r[Vm])||mm(r,Vm,fm)),Zm(r,u,!0)),ym&&l==gm&&b&&b.name!==gm&&(Gm?bm(Z,"name",gm):(h=!0,m=function(){return cm(b,this)})),l)if(c={values:d(gm),keys:o?m:d(Im),entries:d(Sm)},a)for(s in c)(Wm||h||!(s in Z))&&mm(Z,s,c[s]);else rm({target:t,proto:!0,forced:Wm||h},c);return Z[Vm]!==m&&mm(Z,Vm,m,{name:l}),pm[t]=m,c},vm=Ft,Ym=Tl,Km=Ql,Nm=wi,Cm=be.f,Lm=Rm,Um=me,km="Array Iterator",Jm=Nm.set,Tm=Nm.getterFor(km),Hm=Lm(Array,"Array",(function(e,t){Jm(this,{type:km,target:vm(e),index:0,kind:t})}),(function(){var e=Tm(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),xm=Km.Arguments=Km.Array;if(Ym("keys"),Ym("values"),Ym("entries"),Um&&"values"!==xm.name)try{Cm(xm,"name",{value:"values"})}catch(e){}var wm=o,Fm={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},zm=am,Pm=Hm,Bm=qt,Mm=he,jm=Mm("iterator"),Qm=Mm("toStringTag"),Em=Pm.values,Dm=function(e,t){if(e){if(e[jm]!==Em)try{Bm(e,jm,Em)}catch(t){e[jm]=Em}if(e[Qm]||Bm(e,Qm,t),Fm[t])for(var i in Pm)if(e[i]!==Pm[i])try{Bm(e,i,Pm[i])}catch(t){e[i]=Pm[i]}}};for(var Om in Fm)Dm(wm[Om]&&wm[Om].prototype,Om);Dm(zm,"DOMTokenList");var Am,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(M),lp="process"==Lt(o.process),op=o,ap=$c,rp=jl,cp=w,sp=I,dp=r,up=Gl,hp=ep,Zp=Ve,bp=ip,mp=np,pp=lp,yp=op.setImmediate,Gp=op.clearImmediate,Xp=op.process,Wp=op.Dispatch,Vp=op.Function,Ip=op.MessageChannel,gp=op.String,Sp=0,fp={},Rp="onreadystatechange";try{Am=op.location}catch(e){}var vp=function(e){if(sp(fp,e)){var t=fp[e];delete fp[e],t()}},Yp=function(e){return function(){vp(e)}},Kp=function(e){vp(e.data)},Np=function(e){op.postMessage(gp(e),Am.protocol+"//"+Am.host)};yp&&Gp||(yp=function(e){bp(arguments.length,1);var t=cp(e)?e:Vp(e),i=hp(arguments,1);return fp[++Sp]=function(){ap(t,void 0,i)},_m(Sp),Sp},Gp=function(e){delete fp[e]},pp?_m=function(e){Xp.nextTick(Yp(e))}:Wp&&Wp.now?_m=function(e){Wp.now(Yp(e))}:Ip&&!mp?($m=(qm=new Ip).port2,qm.port1.onmessage=Kp,_m=rp($m.postMessage,$m)):op.addEventListener&&cp(op.postMessage)&&!op.importScripts&&Am&&"file:"!==Am.protocol&&!dp(Np)?(_m=Np,op.addEventListener("message",Kp,!1)):_m=Rp in Zp("script")?function(e){up.appendChild(Zp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(Yp(e),0)});var Cp={set:yp,clear:Gp},Lp=Cp.clear;al({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Lp},{clearImmediate:Lp});var Up=Cp.set;al({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==Up},{setImmediate:Up});var kp=Lr.charAt,Jp=mr,Tp=wi,Hp=Rm,xp="String Iterator",wp=Tp.set,Fp=Tp.getterFor(xp);Hp(String,"String",(function(e){wp(this,{type:xp,string:Jp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=kp(i,n),t.index+=e.length,{value:e,done:!1})}));var zp=r,Pp=he("iterator"),Bp=!zp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[Pp]||"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"!==i||"x"!==new URL("http://x",void 0).host})),Mp=me,jp=b,Qp=Ce,Ep=r,Dp=dl,Op=Un,Ap=St,_p=X,qp=Ht,$p=Object.assign,ey=Object.defineProperty,ty=jp([].concat),iy=!$p||Ep((function(){if(Mp&&1!==$p({b:1},$p(ey({},"a",{enumerable:!0,get:function(){ey(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[i]||Dp($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Op.f,a=Ap.f;n>l;)for(var r,c=qp(arguments[l++]),s=o?ty(Dp(c),o(c)):Dp(c),d=s.length,u=0;d>u;)r=s[u++],Mp&&!Qp(a,c,r)||(i[r]=c[r]);return i}:$p,ny=Ye,ly=Vo,oy=jl,ay=Ce,ry=X,cy=function(e,t,i,n){try{return n?t(ny(i)[0],i[1]):t(i)}catch(t){ly(e,"throw",t)}},sy=Al,dy=ea,uy=Gn,hy=bu,Zy=yo,by=so,my=Array,py=b,yy=2147483647,Gy=/[^\0-\u007E]/,Xy=/[.\u3002\uFF0E\uFF61]/g,Wy="Overflow: input needs wider integers to process",Vy=RangeError,Iy=py(Xy.exec),gy=Math.floor,Sy=String.fromCharCode,fy=py("".charCodeAt),Ry=py([].join),vy=py([].push),Yy=py("".replace),Ky=py("".split),Ny=py("".toLowerCase),Cy=function(e){return e+22+75*(e<26)},Ly=function(e,t,i){var n=0;for(e=i?gy(e/700):e>>1,e+=gy(e/t);e>455;)e=gy(e/35),n+=36;return gy(n+36*e/(e+38))},Uy=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=fy(e,i++);if(l>=55296&&l<=56319&&i<n){var o=fy(e,i++);56320==(64512&o)?vy(t,((1023&l)<<10)+(1023&o)+65536):(vy(t,l),i--)}else vy(t,l)}return t}(e);var i,n,l=e.length,o=128,a=0,r=72;for(i=0;i<e.length;i++)(n=e[i])<128&&vy(t,Sy(n));var c=t.length,s=c;for(c&&vy(t,"-");s<l;){var d=yy;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<d&&(d=n);var u=s+1;if(d-o>gy((yy-a)/u))throw Vy(Wy);for(a+=(d-o)*u,o=d,i=0;i<e.length;i++){if((n=e[i])<o&&++a>yy)throw Vy(Wy);if(n==o){for(var h=a,Z=36;;){var b=Z<=r?1:Z>=r+26?26:Z-r;if(h<b)break;var m=h-b,p=36-b;vy(t,Sy(Cy(b+m%p))),h=gy(m/p),Z+=36}vy(t,Sy(Cy(h))),r=Ly(a,u,s==c),a=0,s++}}a++,o++}return Ry(t,"")},ky=al,Jy=o,Ty=Ce,Hy=b,xy=me,wy=Bp,Fy=nn,zy=Qd,Py=or,By=hr,My=wi,jy=Od,Qy=w,Ey=I,Dy=jl,Oy=lo,Ay=Ye,_y=ye,qy=mr,$y=Nl,eG=Yt,tG=yo,iG=so,nG=ip,lG=xb,oG=he("iterator"),aG="URLSearchParams",rG="URLSearchParamsIterator",cG=My.set,sG=My.getterFor(aG),dG=My.getterFor(rG),uG=Object.getOwnPropertyDescriptor,hG=function(e){if(!xy)return Jy[e];var t=uG(Jy,e);return t&&t.value},ZG=hG("fetch"),bG=hG("Request"),mG=hG("Headers"),pG=bG&&bG.prototype,yG=mG&&mG.prototype,GG=Jy.RegExp,XG=Jy.TypeError,WG=Jy.decodeURIComponent,VG=Jy.encodeURIComponent,IG=Hy("".charAt),gG=Hy([].join),SG=Hy([].push),fG=Hy("".replace),RG=Hy([].shift),vG=Hy([].splice),YG=Hy("".split),KG=Hy("".slice),NG=/\+/g,CG=Array(4),LG=function(e){return CG[e-1]||(CG[e-1]=GG("((?:%[\\da-f]{2}){"+e+"})","gi"))},UG=function(e){try{return WG(e)}catch(t){return e}},kG=function(e){var t=fG(e,NG," "),i=4;try{return WG(t)}catch(e){for(;i;)t=fG(t,LG(i--),UG);return t}},JG=/[!'()~]|%20/g,TG={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},HG=function(e){return TG[e]},xG=function(e){return fG(VG(e),JG,HG)},wG=By((function(e,t){cG(this,{type:rG,iterator:tG(sG(e).entries),kind:t})}),"Iterator",(function(){var e=dG(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),FG=function(e){this.entries=[],this.url=null,void 0!==e&&(_y(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===IG(e,0)?KG(e,1):e:qy(e)))};FG.prototype={type:aG,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,a,r,c=iG(e);if(c)for(i=(t=tG(e,c)).next;!(n=Ty(i,t)).done;){if(o=(l=tG(Ay(n.value))).next,(a=Ty(o,l)).done||(r=Ty(o,l)).done||!Ty(o,l).done)throw XG("Expected sequence with length 2");SG(this.entries,{key:qy(a.value),value:qy(r.value)})}else for(var s in e)Ey(e,s)&&SG(this.entries,{key:s,value:qy(e[s])})},parseQuery:function(e){if(e)for(var t,i,n=YG(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=YG(t,"="),SG(this.entries,{key:kG(RG(i)),value:kG(gG(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],SG(i,xG(e.key)+"="+xG(e.value));return gG(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var zG=function(){jy(this,PG);var e=arguments.length>0?arguments[0]:void 0;cG(this,new FG(e))},PG=zG.prototype;if(zy(PG,{append:function(e,t){nG(arguments.length,2);var i=sG(this);SG(i.entries,{key:qy(e),value:qy(t)}),i.updateURL()},delete:function(e){nG(arguments.length,1);for(var t=sG(this),i=t.entries,n=qy(e),l=0;l<i.length;)i[l].key===n?vG(i,l,1):l++;t.updateURL()},get:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=[],l=0;l<t.length;l++)t[l].key===i&&SG(n,t[l].value);return n},has:function(e){nG(arguments.length,1);for(var t=sG(this).entries,i=qy(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){nG(arguments.length,1);for(var i,n=sG(this),l=n.entries,o=!1,a=qy(e),r=qy(t),c=0;c<l.length;c++)(i=l[c]).key===a&&(o?vG(l,c--,1):(o=!0,i.value=r));o||SG(l,{key:a,value:r}),n.updateURL()},sort:function(){var e=sG(this);lG(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=sG(this).entries,n=Dy(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new wG(this,"keys")},values:function(){return new wG(this,"values")},entries:function(){return new wG(this,"entries")}},{enumerable:!0}),Fy(PG,oG,PG.entries,{name:"entries"}),Fy(PG,"toString",(function(){return sG(this).serialize()}),{enumerable:!0}),Py(zG,aG),ky({global:!0,constructor:!0,forced:!wy},{URLSearchParams:zG}),!wy&&Qy(mG)){var BG=Hy(yG.has),MG=Hy(yG.set),jG=function(e){if(_y(e)){var t,i=e.body;if(Oy(i)===aG)return t=e.headers?new mG(e.headers):new mG,BG(t,"content-type")||MG(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$y(e,{body:eG(0,qy(i)),headers:eG(0,t)})}return e};if(Qy(ZG)&&ky({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return ZG(e,arguments.length>1?jG(arguments[1]):{})}}),Qy(bG)){var QG=function(e){return jy(this,pG),new bG(e,arguments.length>1?jG(arguments[1]):{})};pG.constructor=QG,QG.prototype=pG,ky({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:QG})}}var EG,DG=al,OG=me,AG=Bp,_G=o,qG=jl,$G=b,eX=nn,tX=Sa,iX=Od,nX=I,lX=iy,oX=function(e){var t=ry(e),i=dy(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oy(l,n>2?arguments[2]:void 0));var a,r,c,s,d,u,h=by(t),Z=0;if(!h||this===my&&sy(h))for(a=uy(t),r=i?new this(a):my(a);a>Z;Z++)u=o?l(t[Z],Z):t[Z],hy(r,Z,u);else for(d=(s=Zy(t,h)).next,r=i?new this:[];!(c=ay(d,s)).done;Z++)u=o?cy(s,l,[c.value,Z],!0):c.value,hy(r,Z,u);return r.length=Z,r},aX=Wu,rX=Lr.codeAt,cX=function(e){var t,i,n=[],l=Ky(Yy(Ny(e),Xy,"."),".");for(t=0;t<l.length;t++)i=l[t],vy(n,Iy(Gy,i)?"xn--"+Uy(i):i);return Ry(n,".")},sX=mr,dX=or,uX=ip,hX={URLSearchParams:zG,getState:sG},ZX=wi,bX=ZX.set,mX=ZX.getterFor("URL"),pX=hX.URLSearchParams,yX=hX.getState,GX=_G.URL,XX=_G.TypeError,WX=_G.parseInt,VX=Math.floor,IX=Math.pow,gX=$G("".charAt),SX=$G(/./.exec),fX=$G([].join),RX=$G(1..toString),vX=$G([].pop),YX=$G([].push),KX=$G("".replace),NX=$G([].shift),CX=$G("".split),LX=$G("".slice),UX=$G("".toLowerCase),kX=$G([].unshift),JX="Invalid scheme",TX="Invalid host",HX="Invalid port",xX=/[a-z]/i,wX=/[\d+-.a-z]/i,FX=/\d/,zX=/^0x/i,PX=/^[0-7]+$/,BX=/^\d+$/,MX=/^[\da-f]+$/i,jX=/[\0\t\n\r #%/:<>?@[\\\]^|]/,QX=/[\0\t\n\r #/:<>?@[\\\]^|]/,EX=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,DX=/[\t\n\r]/g,OX=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)kX(t,e%256),e=VX(e/256);return fX(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=RX(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},AX={},_X=lX({},AX,{" ":1,'"':1,"<":1,">":1,"`":1}),qX=lX({},_X,{"#":1,"?":1,"{":1,"}":1}),$X=lX({},qX,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),eW=function(e,t){var i=rX(e,0);return i>32&&i<127&&!nX(t,e)?e:encodeURIComponent(e)},tW={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iW=function(e,t){var i;return 2==e.length&&SX(xX,gX(e,0))&&(":"==(i=gX(e,1))||!t&&"|"==i)},nW=function(e){var t;return e.length>1&&iW(LX(e,0,2))&&(2==e.length||"/"===(t=gX(e,2))||"\\"===t||"?"===t||"#"===t)},lW=function(e){return"."===e||"%2e"===UX(e)},oW={},aW={},rW={},cW={},sW={},dW={},uW={},hW={},ZW={},bW={},mW={},pW={},yW={},GW={},XW={},WW={},VW={},IW={},gW={},SW={},fW={},RW=function(e,t,i){var n,l,o,a=sX(e);if(t){if(l=this.parse(a))throw XX(l);this.searchParams=null}else{if(void 0!==i&&(n=new RW(i,!0)),l=this.parse(a,null,n))throw XX(l);(o=yX(new pX)).bindURL(this),this.searchParams=o}};RW.prototype={type:"URL",parse:function(e,t,i){var n,l,o,a,r,c=this,s=t||oW,d=0,u="",h=!1,Z=!1,b=!1;for(e=sX(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=KX(e,EX,"")),e=KX(e,DX,""),n=oX(e);d<=n.length;){switch(l=n[d],s){case oW:if(!l||!SX(xX,l)){if(t)return JX;s=rW;continue}u+=UX(l),s=aW;break;case aW:if(l&&(SX(wX,l)||"+"==l||"-"==l||"."==l))u+=UX(l);else{if(":"!=l){if(t)return JX;u="",s=rW,d=0;continue}if(t&&(c.isSpecial()!=nX(tW,u)||"file"==u&&(c.includesCredentials()||null!==c.port)||"file"==c.scheme&&!c.host))return;if(c.scheme=u,t)return void(c.isSpecial()&&tW[c.scheme]==c.port&&(c.port=null));u="","file"==c.scheme?s=GW:c.isSpecial()&&i&&i.scheme==c.scheme?s=cW:c.isSpecial()?s=hW:"/"==n[d+1]?(s=sW,d++):(c.cannotBeABaseURL=!0,YX(c.path,""),s=gW)}break;case rW:if(!i||i.cannotBeABaseURL&&"#"!=l)return JX;if(i.cannotBeABaseURL&&"#"==l){c.scheme=i.scheme,c.path=aX(i.path),c.query=i.query,c.fragment="",c.cannotBeABaseURL=!0,s=fW;break}s="file"==i.scheme?GW:dW;continue;case cW:if("/"!=l||"/"!=n[d+1]){s=dW;continue}s=ZW,d++;break;case sW:if("/"==l){s=bW;break}s=IW;continue;case dW:if(c.scheme=i.scheme,l==EG)c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query=i.query;else if("/"==l||"\\"==l&&c.isSpecial())s=uW;else if("?"==l)c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query="",s=SW;else{if("#"!=l){c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.path.length--,s=IW;continue}c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,c.path=aX(i.path),c.query=i.query,c.fragment="",s=fW}break;case uW:if(!c.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){c.username=i.username,c.password=i.password,c.host=i.host,c.port=i.port,s=IW;continue}s=bW}else s=ZW;break;case hW:if(s=ZW,"/"!=l||"/"!=gX(u,d+1))continue;d++;break;case ZW:if("/"!=l&&"\\"!=l){s=bW;continue}break;case bW:if("@"==l){h&&(u="%40"+u),h=!0,o=oX(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var y=eW(p,$X);b?c.password+=y:c.username+=y}else b=!0}u=""}else if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()){if(h&&""==u)return"Invalid authority";d-=oX(u).length+1,u="",s=mW}else u+=l;break;case mW:case pW:if(t&&"file"==c.scheme){s=WW;continue}if(":"!=l||Z){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()){if(c.isSpecial()&&""==u)return TX;if(t&&""==u&&(c.includesCredentials()||null!==c.port))return;if(a=c.parseHost(u))return a;if(u="",s=VW,t)return;continue}"["==l?Z=!0:"]"==l&&(Z=!1),u+=l}else{if(""==u)return TX;if(a=c.parseHost(u))return a;if(u="",s=yW,t==pW)return}break;case yW:if(!SX(FX,l)){if(l==EG||"/"==l||"?"==l||"#"==l||"\\"==l&&c.isSpecial()||t){if(""!=u){var G=WX(u,10);if(G>65535)return HX;c.port=c.isSpecial()&&G===tW[c.scheme]?null:G,u=""}if(t)return;s=VW;continue}return HX}u+=l;break;case GW:if(c.scheme="file","/"==l||"\\"==l)s=XW;else{if(!i||"file"!=i.scheme){s=IW;continue}if(l==EG)c.host=i.host,c.path=aX(i.path),c.query=i.query;else if("?"==l)c.host=i.host,c.path=aX(i.path),c.query="",s=SW;else{if("#"!=l){nW(fX(aX(n,d),""))||(c.host=i.host,c.path=aX(i.path),c.shortenPath()),s=IW;continue}c.host=i.host,c.path=aX(i.path),c.query=i.query,c.fragment="",s=fW}}break;case XW:if("/"==l||"\\"==l){s=WW;break}i&&"file"==i.scheme&&!nW(fX(aX(n,d),""))&&(iW(i.path[0],!0)?YX(c.path,i.path[0]):c.host=i.host),s=IW;continue;case WW:if(l==EG||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iW(u))s=IW;else if(""==u){if(c.host="",t)return;s=VW}else{if(a=c.parseHost(u))return a;if("localhost"==c.host&&(c.host=""),t)return;u="",s=VW}continue}u+=l;break;case VW:if(c.isSpecial()){if(s=IW,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=EG&&(s=IW,"/"!=l))continue}else c.fragment="",s=fW;else c.query="",s=SW;break;case IW:if(l==EG||"/"==l||"\\"==l&&c.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(r=UX(r=u))||"%2e."===r||".%2e"===r||"%2e%2e"===r?(c.shortenPath(),"/"==l||"\\"==l&&c.isSpecial()||YX(c.path,"")):lW(u)?"/"==l||"\\"==l&&c.isSpecial()||YX(c.path,""):("file"==c.scheme&&!c.path.length&&iW(u)&&(c.host&&(c.host=""),u=gX(u,0)+":"),YX(c.path,u)),u="","file"==c.scheme&&(l==EG||"?"==l||"#"==l))for(;c.path.length>1&&""===c.path[0];)NX(c.path);"?"==l?(c.query="",s=SW):"#"==l&&(c.fragment="",s=fW)}else u+=eW(l,qX);break;case gW:"?"==l?(c.query="",s=SW):"#"==l?(c.fragment="",s=fW):l!=EG&&(c.path[0]+=eW(l,AX));break;case SW:t||"#"!=l?l!=EG&&("'"==l&&c.isSpecial()?c.query+="%27":c.query+="#"==l?"%23":eW(l,AX)):(c.fragment="",s=fW);break;case fW:l!=EG&&(c.fragment+=eW(l,_X))}d++}},parseHost:function(e){var t,i,n;if("["==gX(e,0)){if("]"!=gX(e,e.length-1))return TX;if(t=function(e){var t,i,n,l,o,a,r,c=[0,0,0,0,0,0,0,0],s=0,d=null,u=0,h=function(){return gX(e,u)};if(":"==h()){if(":"!=gX(e,1))return;u+=2,d=++s}for(;h();){if(8==s)return;if(":"!=h()){for(t=i=0;i<4&&SX(MX,h());)t=16*t+WX(h(),16),u++,i++;if("."==h()){if(0==i)return;if(u-=i,s>6)return;for(n=0;h();){if(l=null,n>0){if(!("."==h()&&n<4))return;u++}if(!SX(FX,h()))return;for(;SX(FX,h());){if(o=WX(h(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}c[s]=256*c[s]+l,2!=++n&&4!=n||s++}if(4!=n)return;break}if(":"==h()){if(u++,!h())return}else if(h())return;c[s++]=t}else{if(null!==d)return;u++,d=++s}}if(null!==d)for(a=s-d,s=7;0!=s&&a>0;)r=c[s],c[s--]=c[d+a-1],c[d+--a]=r;else if(8!=s)return;return c}(LX(e,1,-1)),!t)return TX;this.host=t}else if(this.isSpecial()){if(e=cX(e),SX(jX,e))return TX;if(t=function(e){var t,i,n,l,o,a,r,c=CX(e,".");if(c.length&&""==c[c.length-1]&&c.length--,(t=c.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=c[n]))return e;if(o=10,l.length>1&&"0"==gX(l,0)&&(o=SX(zX,l)?16:8,l=LX(l,8==o?1:2)),""===l)a=0;else{if(!SX(10==o?BX:8==o?PX:MX,l))return e;a=WX(l,o)}YX(i,a)}for(n=0;n<t;n++)if(a=i[n],n==t-1){if(a>=IX(256,5-t))return null}else if(a>255)return null;for(r=vX(i),n=0;n<i.length;n++)r+=i[n]*IX(256,3-n);return r}(e),null===t)return TX;this.host=t}else{if(SX(QX,e))return TX;for(t="",i=oX(e),n=0;n<i.length;n++)t+=eW(i[n],AX);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return nX(tW,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iW(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,a=e.path,r=e.query,c=e.fragment,s=t+":";return null!==l?(s+="//",e.includesCredentials()&&(s+=i+(n?":"+n:"")+"@"),s+=OX(l),null!==o&&(s+=":"+o)):"file"==t&&(s+="//"),s+=e.cannotBeABaseURL?a[0]:a.length?"/"+fX(a,"/"):"",null!==r&&(s+="?"+r),null!==c&&(s+="#"+c),s},setHref:function(e){var t=this.parse(e);if(t)throw XX(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vW(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+OX(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(sX(e)+":",oW)},getUsername:function(){return this.username},setUsername:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=eW(t[i],$X)}},getPassword:function(){return this.password},setPassword:function(e){var t=oX(sX(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=eW(t[i],$X)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?OX(e):OX(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,mW)},getHostname:function(){var e=this.host;return null===e?"":OX(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,pW)},getPort:function(){var e=this.port;return null===e?"":sX(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=sX(e))?this.port=null:this.parse(e,yW))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+fX(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,VW))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=sX(e))?this.query=null:("?"==gX(e,0)&&(e=LX(e,1)),this.query="",this.parse(e,SW)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=sX(e))?("#"==gX(e,0)&&(e=LX(e,1)),this.fragment="",this.parse(e,fW)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vW=function(e){var t=iX(this,YW),i=uX(arguments.length,1)>1?arguments[1]:void 0,n=bX(t,new RW(e,!1,i));OG||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},YW=vW.prototype,KW=function(e,t){return{get:function(){return mX(this)[e]()},set:t&&function(e){return mX(this)[t](e)},configurable:!0,enumerable:!0}};if(OG&&(tX(YW,"href",KW("serialize","setHref")),tX(YW,"origin",KW("getOrigin")),tX(YW,"protocol",KW("getProtocol","setProtocol")),tX(YW,"username",KW("getUsername","setUsername")),tX(YW,"password",KW("getPassword","setPassword")),tX(YW,"host",KW("getHost","setHost")),tX(YW,"hostname",KW("getHostname","setHostname")),tX(YW,"port",KW("getPort","setPort")),tX(YW,"pathname",KW("getPathname","setPathname")),tX(YW,"search",KW("getSearch","setSearch")),tX(YW,"searchParams",KW("getSearchParams")),tX(YW,"hash",KW("getHash","setHash"))),eX(YW,"toJSON",(function(){return mX(this).serialize()}),{enumerable:!0}),eX(YW,"toString",(function(){return mX(this).serialize()}),{enumerable:!0}),GX){var NW=GX.createObjectURL,CW=GX.revokeObjectURL;NW&&eX(vW,"createObjectURL",qG(NW,GX)),CW&&eX(vW,"revokeObjectURL",qG(CW,GX))}dX(vW,"URL"),DG({global:!0,constructor:!0,forced:!AG,sham:!OG},{URL:vW});var LW=Ce;function UW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))}function kW(e,t,i,n){return new(i||(i=Promise))((function(l,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))}al({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return LW(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query"}(e.ResponseMode||(e.ResponseMode={}));e.Stores=void 0,function(e){e.ConfigData="config_data",e.OIDCProviderMetaData="oidc_provider_meta_data",e.SessionData="session_data",e.TemporaryData="temporary_data"}(e.Stores||(e.Stores={}));const JW="refresh_token_timer",TW=["RS256","RS512","RS384","PS256"],HW="code",xW="session_state",wW="sign_out_url",FW="sign_out_success",zW="state";var PW;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(PW||(PW={}));class BW{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class MW{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}MW.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class jW{constructor(e,t){this._dataLayer=e,this._config=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return kW(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return kW(this,void 0,void 0,(function*(){const e={},t=yield this._config();if(!t.endpoints||!["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"].every((e=>!!t.endpoints&&Object.keys(t.endpoints).some((t=>t.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())))===e)))))throw new BW("JS-AUTH_HELPER-REE-NF01","Required endpoints missing","Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return kW(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new BW("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){var t;return kW(this,void 0,void 0,(function*(){const i=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!i||0===i.trim().length)throw new BW("JS_AUTH_HELPER-VIT-NF01","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.");let l;try{l=yield fetch(i,{credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin})}catch(i){throw new BW("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=i?i:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new BW("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(l.statusText,")."),yield l.json());const o=(yield this._oidcProviderMetaData()).issuer,{keys:a}=yield l.json(),r=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],a);return this._cryptoHelper.isValidIdToken(e,r,(yield this._config()).clientID,null!=o?o:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance,null===(t=(yield this._config()).validateIDTokenIssuer)||void 0===t||t)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),a=MW.getTenantDomainFromIdTokenPayload(o),r=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",c=null!==(i=o.given_name)&&void 0!==i?i:"",s=null!==(n=o.family_name)&&void 0!==n?n:"",d=c&&s?"".concat(c," ").concat(s):c||s||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:d;return Object.assign({displayName:u,tenantDomain:a,username:r},MW.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return kW(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return kW(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new BW("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>kW(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return kW(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class QW{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new BW("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o,a){return this._cryptoUtils.verifyJwt(e,t,TW,i,n,l,o,a).then((e=>e?Promise.resolve(!0):Promise.reject(new BW("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new BW("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class EW{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new QW(t),this._authenticationHelper=new jW(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(e,t){var i,n,l;return kW(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),a=yield this._config();if(!o||0===o.trim().length)throw new BW("JS-AUTH_CORE-GAU-NF01","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.");const r=new URL(o),c=new Map;c.set("response_type","code"),c.set("client_id",a.clientID);let s="openid";a.scope&&a.scope.length>0&&(a.scope.includes("openid")||a.scope.push("openid"),s=a.scope.join(" ")),c.set("scope",s),c.set("redirect_uri",a.signInRedirectURL),a.responseMode&&c.set("response_mode",a.responseMode);const d=yield this._authenticationHelper.generatePKCEKey(t);if(a.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(d,e,t),c.set("code_challenge_method","S256"),c.set("code_challenge",l)}a.prompt&&c.set("prompt",a.prompt);const u=e;if(u)for(const[e,t]of Object.entries(u))""!=e&&""!=t&&"state"!==e&&c.set(e,t.toString());c.set("state",MW.generateStateParamForRequestCorrelation(d,u?null===(l=u.state)||void 0===l?void 0:l.toString():""));for(const[e,t]of c.entries())r.searchParams.append(e,t);return r.toString()}))}requestAccessToken(e,t,i,n){return kW(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-RAT1-NF01","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.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const a=new URLSearchParams;a.set("client_id",o.clientID),o.clientSecret&&o.clientSecret.trim().length>0&&a.set("client_secret",o.clientSecret);const r=e;let c;a.set("code",r),a.set("grant_type","authorization_code"),a.set("redirect_uri",o.signInRedirectURL),o.enablePKCE&&(a.set("code_verifier","".concat(yield this._dataLayer.getTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(i),n));try{c=yield fetch(l,{body:a,credentials:o.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(l){throw new BW("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=l?l:"The request to get the access token from the server failed.")}if(!c.ok)throw new BW("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(c.statusText),yield c.json());return yield this._authenticationHelper.handleTokenResponse(c,n)}))}refreshAccessToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new BW("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-RAT2-NF02","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.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new BW("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-RAT3-NF01","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.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(MW.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new BW("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new BW("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return kW(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-RCG-NF01","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.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return kW(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let a=Object.assign({},MW.getTokenRequestHeaders());e.attachToken&&(a=Object.assign(Object.assign({},a),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const r={body:o.join("&"),credentials:n.sendCookiesInRequests?PW.Include:PW.SameOrigin,headers:new Headers(a),method:"POST"};let c;try{c=yield fetch(l,r)}catch(e){throw new BW("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==c.status||!c.ok)throw new BW("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(c.statusText,")"),yield c.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(c,t):Promise.resolve(yield c.json())}))}getBasicUserInfo(e){return kW(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return kW(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return kW(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new BW("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new BW("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,a,r,c,s;return kW(this,void 0,void 0,(function*(){const d=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=d.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=d.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=d.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=d.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=d.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=d.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(a=d.registration_endpoint)&&void 0!==a?a:"",revocationEndpoint:null!==(r=d.revocation_endpoint)&&void 0!==r?r:"",tokenEndpoint:null!==(c=d.token_endpoint)&&void 0!==c?c:"",userinfoEndpoint:null!==(s=d.userinfo_endpoint)&&void 0!==s?s:""}}))}getSignOutURL(e){var t,i,n;return kW(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF01","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.");const a=null!==(i=null==o?void 0:o.signOutRedirectURL)&&void 0!==i?i:null==o?void 0:o.signInRedirectURL;if(!a||0===a.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF03","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. ");const r=new URLSearchParams;if(r.set("post_logout_redirect_uri",a),o.sendIdTokenInLogoutRequest){const t=null===(n=yield this._dataLayer.getSessionData(e))||void 0===n?void 0:n.id_token;if(!t||0===t.trim().length)throw new BW("JS-AUTH_CORE-GSOU-NF02","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");r.set("id_token_hint",t)}else r.set("client_id",o.clientID);return r.set("state","sign_out_success"),"".concat(l,"?").concat(r.toString())}))}clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}getCreatedAt(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.created_at}))}getExpiresIn(e){var t;return kW(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.expires_in}))}isAuthenticated(e){return kW(this,void 0,void 0,(function*(){const t=Boolean(yield this.getAccessToken(e)),i=yield this.getCreatedAt(e),n=yield this.getExpiresIn(e);if(!n)return!1;const l=1e3*parseInt(n),o=(new Date).getTime();return t&&i+l>o}))}getPKCECode(e,t){return kW(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return kW(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(MW.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return kW(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class DW{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return kW(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),a=JSON.stringify(o);yield this._store.setData(e,a)}))}setValue(e,t,i){var n;return kW(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),a=Object.assign(Object.assign({},o),{[t]:i}),r=JSON.stringify(a);yield this._store.setData(e,r)}))}removeValue(e,t){var i;return kW(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const a=JSON.stringify(o);yield this._store.setData(e,a)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}isLocalStorageAvailable(){try{const e="__ASGARDEO_AUTH_CORE_LOCAL_STORAGE_TEST__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return!1}}setConfigData(t){return kW(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return kW(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return kW(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}setSessionStatus(e){this.isLocalStorageAvailable()&&localStorage.setItem("asgardeo-session-active",e)}getSessionStatus(){var e;return this.isLocalStorageAvailable()&&null!==(e=localStorage.getItem("asgardeo-session-active"))&&void 0!==e?e:""}removeSessionStatus(){this.isLocalStorageAvailable()&&localStorage.removeItem("asgardeo-session-active")}removeConfigData(){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return kW(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return kW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return kW(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return kW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return kW(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return kW(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return kW(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const OW={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0,validateIDTokenIssuer:!0};class AW{constructor(){}initialize(e,t,i,n){var l,o,a;return kW(this,void 0,void 0,(function*(){const r=e.clientID;AW._instanceID?AW._instanceID+=1:AW._instanceID=0,n&&(AW._instanceID=n),this._dataLayer=new DW(r?"instance_".concat(AW._instanceID,"-").concat(r):"instance_".concat(AW._instanceID),t),this._authenticationCore=new EW(this._dataLayer,i),AW._authenticationCore=new EW(this._dataLayer,i),yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},OW),e),{scope:[...null!==(l=OW.scope)&&void 0!==l?l:[],...null!==(a=null===(o=e.scope)||void 0===o?void 0:o.filter((e=>{var t;return!(null===(t=null==OW?void 0:OW.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==a?a:[]]}))}))}getDataLayer(){return this._dataLayer}getInstanceID(){return AW._instanceID}getAuthorizationURL(e,t){return kW(this,void 0,void 0,(function*(){const i=Object.assign({},e);return null==i||delete i.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(i,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURL(i,t)))}))}requestAccessToken(e,t,i,n){return kW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(e,t,i,n):this._authenticationCore.getOIDCProviderMetaData(!1).then((()=>this._authenticationCore.requestAccessToken(e,t,i,n)))}))}getSignOutURL(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL(e)}))}getOIDCServiceEndpoints(){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}getDecodedIDToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken(e)}))}getIDToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken(e)}))}getBasicUserInfo(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo(e)}))}getCryptoHelper(){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getCryptoHelper()}))}revokeAccessToken(e){return this._authenticationCore.revokeAccessToken(e)}refreshAccessToken(e){return this._authenticationCore.refreshAccessToken(e)}getAccessToken(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken(e)}))}requestCustomGrant(e,t){return this._authenticationCore.requestCustomGrant(e,t)}isAuthenticated(e){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated(e)}))}getPKCECode(e,t){return kW(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode(e,t)}))}setPKCECode(e,t,i){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(e,t,i)}))}static isSignOutSuccessful(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&!n}static didSignOutFail(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&n}updateConfig(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return kW(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _W(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,a=l.substring(o)+(n?"//# sourceMappingURL="+n:""),r=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(r)}var qW,$W,eV,tV,iV=(qW="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0LmVuZHBvaW50c3x8IVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0uZXZlcnkoKGU9PiEhdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5zb21lKCh0PT50LnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpPT09ZSkpKSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiUmVxdWlyZWQgZW5kcG9pbnRzIG1pc3NpbmciLCJTb21lIG9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBtaXNzaW5nIGluIHRoZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBgZW5kcG9pbnRzYCBhdHRyaWJ1dGUgb2YgdGhlYEF1dGhDb25maWdgIG9iamVjdC4iKTtyZXR1cm4gdC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LGUpfSkpfXJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKSxuPXQuYmFzZVVybDtpZighbil0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChuPT57Y29uc3Qgcj1uLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2Vbcl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tuXToiIn0pKTtjb25zdCByPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IGk7dHJ5e2k9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7Y29uc3Qgbz0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOnN9PXlpZWxkIGkuanNvbigpLHU9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLHMpO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSx1LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9bz9vOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlLG51bGw9PT0obj0oeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbklzc3Vlcil8fHZvaWQgMD09PW58fG4pfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyxhKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLG4scixpLHMsYSkudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKSIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUmJmwuc2V0KGUsdC50b1N0cmluZygpKTtsLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsZj9udWxsPT09KG89Zi5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpO2Zvcihjb25zdFtlLHRdb2YgbC5lbnRyaWVzKCkpYS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdCk7cmV0dXJuIGEudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IHM9bmV3IFVSTFNlYXJjaFBhcmFtcztzLnNldCgiY2xpZW50X2lkIixvLmNsaWVudElEKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnNldCgiY2xpZW50X3NlY3JldCIsby5jbGllbnRTZWNyZXQpO2NvbnN0IGw9ZTtsZXQgZDtzLnNldCgiY29kZSIsbCkscy5zZXQoImdyYW50X3R5cGUiLCJhdXRob3JpemF0aW9uX2NvZGUiKSxzLnNldCgicmVkaXJlY3RfdXJpIixvLnNpZ25JblJlZGlyZWN0VVJMKSxvLmVuYWJsZVBLQ0UmJihzLnNldCgiY29kZV92ZXJpZmllciIsIiIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTpzLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWQub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChkLnN0YXR1c1RleHQpLHlpZWxkIGQuanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShkLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCkscj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIXIucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQobi5jbGllbnRJRCkpLGkucHVzaCgicmVmcmVzaF90b2tlbj0iLmNvbmNhdChyLnJlZnJlc2hfdG9rZW4pKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChuLmNsaWVudFNlY3JldCkpO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsIlJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICIuY29uY2F0KG8uc3RhdHVzVGV4dCkseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LG49eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCByPVtdO2xldCBpO3IucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxyLnB1c2goInRva2VuPSIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbikpLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6ci5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoaS5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6ci50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKGU9PntsZXRbcixpXT1lO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoaSxuKTtyZXR1cm4iIi5jb25jYXQociwiPSIpLmNvbmNhdChlKX0pKX0pKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKSkuYWNjZXNzX3Rva2VuKX0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgiLmNvbmNhdChoLnN0YXR1c1RleHQsIikiKSx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7Y29uc3QgYT1uZXcgVVJMU2VhcmNoUGFyYW1zO2lmKGEuc2V0KCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLHMpLG8uc2VuZElkVG9rZW5JbkxvZ291dFJlcXVlc3Qpe2NvbnN0IHQ9bnVsbD09PShpPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWRfdG9rZW47aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7YS5zZXQoImlkX3Rva2VuX2hpbnQiLHQpfWVsc2UgYS5zZXQoImNsaWVudF9pZCIsby5jbGllbnRJRCk7cmV0dXJuIGEuc2V0KCJzdGF0ZSIsInNpZ25fb3V0X3N1Y2Nlc3MiKSwiIi5jb25jYXQodCwiPyIpLmNvbmNhdChhLnRvU3RyaW5nKCkpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWdldENyZWF0ZWRBdChlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jcmVhdGVkX2F0fSkpfWdldEV4cGlyZXNJbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5leHBpcmVzX2lufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9Qm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKSxuPXlpZWxkIHRoaXMuZ2V0Q3JlYXRlZEF0KGUpLHI9eWllbGQgdGhpcy5nZXRFeHBpcmVzSW4oZSk7aWYoIXIpcmV0dXJuITE7Y29uc3QgaT0xZTMqcGFyc2VJbnQociksbz0obmV3IERhdGUpLmdldFRpbWUoKTtyZXR1cm4gdCYmbitpPm99KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9aXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKXt0cnl7Y29uc3QgZT0iX19BU0dBUkRFT19BVVRIX0NPUkVfTE9DQUxfU1RPUkFHRV9URVNUX18iO3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLGUpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1zZXRTZXNzaW9uU3RhdHVzKGUpe3RoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oImFzZ2FyZGVvLXNlc3Npb24tYWN0aXZlIixlKX1nZXRTZXNzaW9uU3RhdHVzKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSYmbnVsbCE9PShlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpKSYmdm9pZCAwIT09ZT9lOiIifXJlbW92ZVNlc3Npb25TdGF0dXMoKXt0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJhc2dhcmRlby1zZXNzaW9uLWFjdGl2ZSIpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITAsdmFsaWRhdGVJRFRva2VuSXNzdWVyOiEwfTtjbGFzcyBne2NvbnN0cnVjdG9yKCl7fWluaXRpYWxpemUoZSxuLHIsaSl7dmFyIG8scyxhO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1lLmNsaWVudElEO2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsaSYmKGcuX2luc3RhbmNlSUQ9aSksdGhpcy5fZGF0YUxheWVyPW5ldyBmKHQ/Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQsIi0iKS5jb25jYXQodCk6Imluc3RhbmNlXyIuY29uY2F0KGcuX2luc3RhbmNlSUQpLG4pLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsciksZy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcixyKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSxlKSx7c2NvcGU6Wy4uLm51bGwhPT0obz1wLnNjb3BlKSYmdm9pZCAwIT09bz9vOltdLC4uLm51bGwhPT0oYT1udWxsPT09KHM9ZS5zY29wZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09cD92b2lkIDA6cC5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09YT9hOltdXX0pKX0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWdldEluc3RhbmNlSUQoKXtyZXR1cm4gZy5faW5zdGFuY2VJRH1nZXRBdXRob3JpemF0aW9uVVJMKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIG51bGw9PXR8fGRlbGV0ZSB0LmZvcmNlSW5pdCwoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pKSl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfWdldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Z2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX1nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlZnJlc2hBY2Nlc3NUb2tlbihlKX1nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsdCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KX1pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX1nZXRQS0NFQ29kZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRQS0NFQ29kZShlLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmIXJ9c3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxuPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxyPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIW4mJiJzaWduX291dF9zdWNjZXNzIj09PW4mJnJ9dXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO2NsYXNzIEV7Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19Y2xhc3MgVHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlLHQsbil7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiIi5jb25jYXQocywiLWluc3RhbmNlXyIpLmNvbmNhdChuLCItIikuY29uY2F0KHQpLGUpfXN0YXRpYyBnZXRTaWduT3V0VVJMKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChzLCItaW5zdGFuY2VfIikuY29uY2F0KHQsIi0iKS5jb25jYXQoZSkpKSYmdm9pZCAwIT09bj9uOiIifXN0YXRpYyByZW1vdmVQS0NFKGUpe3Nlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZSl9c3RhdGljIGNhbkNvbnRpbnVlU2lnbkluKGUsdCl7cmV0dXJuIShlJiYhVC5oYXNFcnJvckluVVJMKCkmJiFULmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gVC5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl9c3RhdGljIHdhc1NpZ25JbkNhbGxlZCgpe3JldHVybiEoIVQuaGFzRXJyb3JJblVSTCgpJiYhVC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fWNsYXNzIEF7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dCx0aGlzLl9pbnN0YW5jZUlEPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEluc3RhbmNlSUQoKX1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe2NvbnN0IHQ9e3R5cGU6InJlZnJlc2gtYWNjZXNzLXRva2VuLWVycm9yIn07cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZSh0KSxQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1ULmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KFQuc2V0U2lnbk91dFVSTCh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCkscy5jbGllbnRJRCx0aGlzLl9pbnN0YW5jZUlEKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyLGkpe3ZhciBvO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoVC5pc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCkpcmV0dXJuIHlpZWxkIHIucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpLFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2NvbnN0IHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJwSUZyYW1lIiksYT1udWxsPT09KG89bnVsbD09cz92b2lkIDA6cy5jb250ZW50RG9jdW1lbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldEVsZW1lbnRCeUlkKCJwcm9tcHROb25lSUZyYW1lIik7dHJ5e2NvbnN0IGU9eWllbGQgdChpKTthLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxvPXM9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxhLGMsdTtjb25zdCBsPXMuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvZGUsbnVsbD09PShjPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc2Vzc2lvblN0YXRlLG51bGw9PT0odT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXRlKS50aGVuKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHQoZSl9KSkuY2F0Y2goKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihlKX0pKS5maW5hbGx5KCgoKT0+e2NsZWFyVGltZW91dChpKX0pKX0pKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyl9KSl9KSl9aGFuZGxlU2lnbkluKHQsbixyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZih5aWVsZCB0KCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2lmKGUuc3RvcmFnZSE9PXkuV2ViV29ya2VyJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpKXJldHVybiB0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksZS5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJm4oKSxQcm9taXNlLnJlc29sdmUoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTtjb25zdCBpPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXyksbz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFMpO2lmKGkpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7dGhyb3cgZS5zZWFyY2hQYXJhbXMuZGVsZXRlKF8pLGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShTKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGRvY3VtZW50LnRpdGxlLGUudG9TdHJpbmcoKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1TSS1TRTAxIixpLG51bGwhPW8/bzoiIil9aWYoZS5zdG9yYWdlPT09eS5XZWJXb3JrZXImJnIpe2NvbnN0IGU9eWllbGQgcigpO2lmKGUpcmV0dXJuIGV9fSkpfWF0dGFjaFRva2VuVG9SZXF1ZXN0Q29uZmlnKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCk7ZS5hdHRhY2hUb2tlbiYmKGUuc2hvdWxkQXR0YWNoSURQQWNjZXNzVG9rZW4/dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoeWllbGQgdGhpcy5nZXRJRFBBY2Nlc3NUb2tlbigpKX0pOnQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSl9KSl9KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0RGVjb2RlZElEUElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldENyeXB0b0hlbHBlcigpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRJRFRva2VuKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfWdldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX0pKX1nZXRJRFBBY2Nlc3NUb2tlbigpe3ZhciB0O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0odD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuYWNjZXNzX3Rva2VufSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fWNsYXNzIFJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYobi5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KG4uZXhwaXJlc19pbiksbz1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShvKSl9fSkpfWdldFJlZnJlc2hUaW1lb3V0VGltZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk/SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk6LTF9KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodClyZXR1cm4gdm9pZCBjbGVhclRpbWVvdXQodCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTstMSE9PWUmJmNsZWFyVGltZW91dChlKX0pKX19dmFyIEM9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBEKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gUChlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sci5nZXQ/cjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtuXX19KX0pKSx0fXZhciBJPXtleHBvcnRzOnt9fSxPPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxyPTA7cjxuLmxlbmd0aDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGUuYXBwbHkodCxuKX19LFU9TyxMPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gSChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBNKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGooZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUwuY2FsbChlKX1mdW5jdGlvbiBOKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHEoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1MLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24geChlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09TC5jYWxsKGUpfWZ1bmN0aW9uIEsoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxIKGUpKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LmNhbGwobnVsbCxlW25dLG4sZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBCPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpqLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIU0oZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhTShlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUwuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmaihlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpOLGlzUGxhaW5PYmplY3Q6cSxpc1VuZGVmaW5lZDpNLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1MLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1MLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1MLmNhbGwoZSl9LGlzRnVuY3Rpb246eCxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTihlKSYmeChlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUwuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpLLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiBuKG4scil7cSh0W3JdKSYmcShuKT90W3JdPWUodFtyXSxuKTpxKG4pP3Rbcl09ZSh7fSxuKTpIKG4pP3Rbcl09bi5zbGljZSgpOnRbcl09bn1mb3IodmFyIHI9MCxpPWFyZ3VtZW50cy5sZW5ndGg7cjxpO3IrKylLKGFyZ3VtZW50c1tyXSxuKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSyh0LChmdW5jdGlvbih0LHIpe2Vbcl09biYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/VSh0LG4pOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxKPUI7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgVz1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIHI7aWYobilyPW4odCk7ZWxzZSBpZihKLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXI9dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107Si5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKEouaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLEouZm9yRWFjaChlLChmdW5jdGlvbihlKXtKLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpKLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKEYodCkrIj0iK0YoZSkpfSkpKX0pKSxyPWkuam9pbigiJiIpfWlmKHIpe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStyfXJldHVybiBlfSx6PUI7ZnVuY3Rpb24gWSgpe3RoaXMuaGFuZGxlcnM9W119WS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhbiYmbi5zeW5jaHJvbm91cyxydW5XaGVuOm4/bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxZLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sWS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt6LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBWPVksRz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIFgoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgWj1YLFE9JDtmdW5jdGlvbiBlZShlKXtpZihaPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChaPT09WHx8IVopJiZzZXRUaW1lb3V0KXJldHVybiBaPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWi5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBHLnNldFRpbWVvdXQmJihaPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBHLmNsZWFyVGltZW91dCYmKFE9Y2xlYXJUaW1lb3V0KTt2YXIgdGUsbmU9W10scmU9ITEsaWU9LTE7ZnVuY3Rpb24gb2UoKXtyZSYmdGUmJihyZT0hMSx0ZS5sZW5ndGg/bmU9dGUuY29uY2F0KG5lKTppZT0tMSxuZS5sZW5ndGgmJnNlKCkpfWZ1bmN0aW9uIHNlKCl7aWYoIXJlKXt2YXIgZT1lZShvZSk7cmU9ITA7Zm9yKHZhciB0PW5lLmxlbmd0aDt0Oyl7Zm9yKHRlPW5lLG5lPVtdOysraWU8dDspdGUmJnRlW2llXS5ydW4oKTtpZT0tMSx0PW5lLmxlbmd0aH10ZT1udWxsLHJlPSExLGZ1bmN0aW9uKGUpe2lmKFE9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoUT09PSR8fCFRKSYmY2xlYXJUaW1lb3V0KXJldHVybiBRPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e1EoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBRLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gUS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGFlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9YWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIGNlKCl7fXZhciB1ZT1jZSxsZT1jZSxkZT1jZSxoZT1jZSxmZT1jZSxwZT1jZSxnZT1jZTt2YXIgdmU9Ry5wZXJmb3JtYW5jZXx8e30seWU9dmUubm93fHx2ZS5tb3pOb3d8fHZlLm1zTm93fHx2ZS5vTm93fHx2ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBtZT1uZXcgRGF0ZTt2YXIgd2U9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07bmUucHVzaChuZXcgYWUoZSx0KSksMSE9PW5lLmxlbmd0aHx8cmV8fGVlKHNlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjp1ZSxhZGRMaXN0ZW5lcjpsZSxvbmNlOmRlLG9mZjpoZSxyZW1vdmVMaXN0ZW5lcjpmZSxyZW1vdmVBbGxMaXN0ZW5lcnM6cGUsZW1pdDpnZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSp5ZS5jYWxsKHZlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1tZSkvMWUzfX0sX2U9d2UsU2U9QixiZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sa2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LEVlPWJlLFRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBFZShvLHQsbixyLGkpfSxBZT1UZSxSZT1CLENlPVJlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxSZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksUmUuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLFJlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sRGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sUGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sSWU9QixPZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFVlPUIsTGU9VWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49VWUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBIZShlKXt0aGlzLm1lc3NhZ2U9ZX1IZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSGUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE1lPUhlLGplPUIsTmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChBZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxxZT1DZSx4ZT1XLEtlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFEZSh0KT9QZShlLHQpOnR9LEJlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhJZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1JZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1JZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJk9lLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LEplPUxlLEZlPVRlLFdlPWtlLHplPU1lLFllPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9amUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPUtlKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9CZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtOZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHhlKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobihGZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKEZlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8V2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oRmUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxqZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fEplKGQpKSYmZS54c3JmQ29va2llTmFtZT9xZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZqZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksamUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgemUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxWZT1CLEdlPWZ1bmN0aW9uKGUsdCl7U2UuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSxYZT1iZSwkZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFplKGUsdCl7IVZlLmlzVW5kZWZpbmVkKGUpJiZWZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgUWUsZXQ9e3RyYW5zaXRpb25hbDprZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09X2UmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfZSkpJiYoUWU9WWUpLFFlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBHZSh0LCJBY2NlcHQiKSxHZSh0LCJDb250ZW50LVR5cGUiKSxWZS5pc0Zvcm1EYXRhKGUpfHxWZS5pc0FycmF5QnVmZmVyKGUpfHxWZS5pc0J1ZmZlcihlKXx8VmUuaXNTdHJlYW0oZSl8fFZlLmlzRmlsZShlKXx8VmUuaXNCbG9iKGUpP2U6VmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6VmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFplKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpWZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFplKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoVmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxWZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8ZXQudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmVmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93IFhlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07VmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7ZXQuaGVhZGVyc1tlXT17fX0pKSxWZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2V0LmhlYWRlcnNbZV09VmUubWVyZ2UoJGUpfSkpO3ZhciB0dD1ldCxudD1CLHJ0PXR0LGl0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSxvdD1CLHN0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxydDtyZXR1cm4gbnQuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0sYXQ9aXQsY3Q9dHQsdXQ9TWU7ZnVuY3Rpb24gbHQoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHV0KCJjYW5jZWxlZCIpfXZhciBkdD1CLGh0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGR0LmlzUGxhaW5PYmplY3QoZSkmJmR0LmlzUGxhaW5PYmplY3QodCk/ZHQubWVyZ2UoZSx0KTpkdC5pc1BsYWluT2JqZWN0KHQpP2R0Lm1lcmdlKHt9LHQpOmR0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gZHQuaXNVbmRlZmluZWQodFtuXSk/ZHQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFkdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gZHQuaXNVbmRlZmluZWQodFtuXSk/ZHQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gZHQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTtkdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LGZ0PSIwLjI2LjEiLHB0PWZ0LGd0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtndFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIHZ0PXt9O2d0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrcHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhdnRbaV0mJih2dFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciB5dD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmd0fSxtdD1CLHd0PVcsX3Q9VixTdD1mdW5jdGlvbihlKXtyZXR1cm4gbHQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPXN0LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPW90Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksb3QuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxjdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gbHQoZSksdC5kYXRhPXN0LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGF0KHQpfHwobHQoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1zdC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxidD1odCxrdD15dCxFdD1rdC52YWxpZGF0b3JzO2Z1bmN0aW9uIFR0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgX3QscmVzcG9uc2U6bmV3IF90fX1UdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1idCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJmt0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6RXQudHJhbnNpdGlvbmFsKEV0LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkV0LnRyYW5zaXRpb25hbChFdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkV0LnRyYW5zaXRpb25hbChFdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1bU3Qsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPVN0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sVHQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1idCh0aGlzLmRlZmF1bHRzLGUpLHd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LG10LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtUdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGJ0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksbXQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtUdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QoYnQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIEF0PVR0LFJ0PU1lO2Z1bmN0aW9uIEN0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBSdChlKSx0KG4ucmVhc29uKSl9KSl9Q3QucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sQ3QucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sQ3QucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxDdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBDdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIER0PUN0LFB0PUIsSXQ9QixPdD1PLFV0PUF0LEx0PWh0O3ZhciBIdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBVdCh0KSxyPU90KFV0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBJdC5leHRlbmQocixVdC5wcm90b3R5cGUsbiksSXQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoTHQodCxuKSl9LHJ9KHR0KTtIdC5BeGlvcz1VdCxIdC5DYW5jZWw9TWUsSHQuQ2FuY2VsVG9rZW49RHQsSHQuaXNDYW5jZWw9aXQsSHQuVkVSU0lPTj1mdCxIdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxIdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxIdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxJLmV4cG9ydHM9SHQsSS5leHBvcnRzLmRlZmF1bHQ9SHQ7dmFyIE10LGp0PUkuZXhwb3J0cztsZXQgTnQ9TXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9anQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgTXQpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPWp0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPWp0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxNdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBNdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gTXQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCgpe2xldCB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe010LmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPW59KSl9ZW5hYmxlSGFuZGxlcigpe010LmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtNdC5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06TXQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVDtNdC5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57TXQuaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtOdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxOdD1NdD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLHIpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LG4scyk6aSh0LG4pKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixzKSxzfShbZT0+e31dLE50KTtjbGFzcyBxdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQsbil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LG4pfSkpfWdldERhdGEodCl7dmFyIG4scjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KHI9bnVsbD09PShuPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldCh0KSkmJnZvaWQgMCE9PXI/cjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19dmFyIHh0PVtdLEt0PVtdLEJ0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LEp0PSExO2Z1bmN0aW9uIEZ0KCl7SnQ9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXh0W3RdPWVbdF0sS3RbZS5jaGFyQ29kZUF0KHQpXT10O0t0WyItIi5jaGFyQ29kZUF0KDApXT02MixLdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gV3QoZSx0LG4pe2Zvcih2YXIgcixpLG89W10scz10O3M8bjtzKz0zKXI9KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKHh0WyhpPXIpPj4xOCY2M10reHRbaT4+MTImNjNdK3h0W2k+PjYmNjNdK3h0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiB6dChlKXt2YXIgdDtKdHx8RnQoKTtmb3IodmFyIG49ZS5sZW5ndGgscj1uJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLGM9bi1yO2E8YzthKz1zKW8ucHVzaChXdChlLGEsYStzPmM/YzphK3MpKTtyZXR1cm4gMT09PXI/KHQ9ZVtuLTFdLGkrPXh0W3Q+PjJdLGkrPXh0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0saSs9eHRbdD4+MTBdLGkrPXh0W3Q+PjQmNjNdLGkrPXh0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gWXQoZSx0LG4scixpKXt2YXIgbyxzLGE9OCppLXItMSxjPSgxPDxhKS0xLHU9Yz4+MSxsPS03LGQ9bj9pLTE6MCxoPW4/LTE6MSxmPWVbdCtkXTtmb3IoZCs9aCxvPWYmKDE8PC1sKS0xLGY+Pj0tbCxsKz1hO2w+MDtvPTI1NipvK2VbdCtkXSxkKz1oLGwtPTgpO2ZvcihzPW8mKDE8PC1sKS0xLG8+Pj0tbCxsKz1yO2w+MDtzPTI1NipzK2VbdCtkXSxkKz1oLGwtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PWMpcmV0dXJuIHM/TmFOOjEvMCooZj8tMToxKTtzKz1NYXRoLnBvdygyLHIpLG8tPXV9cmV0dXJuKGY/LTE6MSkqcypNYXRoLnBvdygyLG8tcil9ZnVuY3Rpb24gVnQoZSx0LG4scixpLG8pe3ZhciBzLGEsYyx1PTgqby1pLTEsbD0oMTw8dSktMSxkPWw+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGY9cj8wOm8tMSxwPXI/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1sKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihjPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLGMqPTIpLCh0Kz1zK2Q+PTE/aC9jOmgqTWF0aC5wb3coMiwxLWQpKSpjPj0yJiYocysrLGMvPTIpLHMrZD49bD8oYT0wLHM9bCk6cytkPj0xPyhhPSh0KmMtMSkqTWF0aC5wb3coMixpKSxzKz1kKTooYT10Kk1hdGgucG93KDIsZC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtuK2ZdPTI1NSZhLGYrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSx1Kz1pO3U+MDtlW24rZl09MjU1JnMsZis9cCxzLz0yNTYsdS09OCk7ZVtuK2YtcF18PTEyOCpnfXZhciBHdD17fS50b1N0cmluZyxYdD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1HdC5jYWxsKGUpfTtlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PUcuVFlQRURfQVJSQVlfU1VQUE9SVHx8Ry5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciAkdD1adCgpO2Z1bmN0aW9uIFp0KCl7cmV0dXJuIGVuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIFF0KGUsdCl7aWYoWnQoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189ZW4ucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IGVuKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIGVuKGUsdCxuKXtpZighKGVuLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBlbikpcmV0dXJuIG5ldyBlbihlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBybih0aGlzLGUpfXJldHVybiB0bih0aGlzLGUsdCxuKX1mdW5jdGlvbiB0bihlLHQsbixyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQsbixyKXtpZih0LmJ5dGVMZW5ndGgsbjwwfHx0LmJ5dGVMZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxuKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09biYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsbik6bmV3IFVpbnQ4QXJyYXkodCxuLHIpO2VuLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPWVuLnByb3RvdHlwZTplPW9uKGUsdCk7cmV0dXJuIGV9KGUsdCxuLHIpOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQsbil7InN0cmluZyI9PXR5cGVvZiBuJiYiIiE9PW58fChuPSJ1dGY4Iik7aWYoIWVuLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIHI9MHxjbih0LG4pLGk9KGU9UXQoZSxyKSkud3JpdGUodCxuKTtpIT09ciYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LG4pOmZ1bmN0aW9uKGUsdCl7aWYoYW4odCkpe3ZhciBuPTB8c24odC5sZW5ndGgpO3JldHVybiAwPT09KGU9UXQoZSxuKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsbiksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KHI9dC5sZW5ndGgpIT1yP1F0KGUsMCk6b24oZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmWHQodC5kYXRhKSlyZXR1cm4gb24oZSx0LmRhdGEpfXZhciByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBubihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHJuKGUsdCl7aWYobm4odCksZT1RdChlLHQ8MD8wOjB8c24odCkpLCFlbi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248dDsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIG9uKGUsdCl7dmFyIG49dC5sZW5ndGg8MD8wOjB8c24odC5sZW5ndGgpO2U9UXQoZSxuKTtmb3IodmFyIHI9MDtyPG47cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIHNuKGUpe2lmKGU+PVp0KCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1p0KCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGFuKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBjbihlLHQpe2lmKGFuKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBIbihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIE1uKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIEhuKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIHVuKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIEVuKHRoaXMsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIGJuKHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBrbih0aGlzLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiB3bih0aGlzLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBUbih0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBsbihlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIGRuKGUsdCxuLHIsaSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49aT8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighaSlyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1lbi5mcm9tKHQscikpLGFuKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6aG4oZSx0LG4scixpKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6aG4oZSxbdF0sbixyLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGhuKGUsdCxuLHIsaSl7dmFyIG8scz0xLGE9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoInVjczIiPT09KHI9U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09cnx8InV0ZjE2bGUiPT09cnx8InV0Zi0xNmxlIj09PXIpKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3M9MixhLz0yLGMvPTIsbi89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1zP2VbdF06ZS5yZWFkVUludDE2QkUodCpzKX1pZihpKXt2YXIgbD0tMTtmb3Iobz1uO288YTtvKyspaWYodShlLG8pPT09dSh0LC0xPT09bD8wOm8tbCkpe2lmKC0xPT09bCYmKGw9byksby1sKzE9PT1jKXJldHVybiBsKnN9ZWxzZS0xIT09bCYmKG8tPW8tbCksbD0tMX1lbHNlIGZvcihuK2M+YSYmKG49YS1jKSxvPW47bz49MDtvLS0pe2Zvcih2YXIgZD0hMCxoPTA7aDxjO2grKylpZih1KGUsbytoKSE9PXUodCxoKSl7ZD0hMTticmVha31pZihkKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPmkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7cj5vLzImJihyPW8vMik7Zm9yKHZhciBzPTA7czxyOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW24rc109YX1yZXR1cm4gc31mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gam4oSG4odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIGpuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fSh0KSxlLG4scil9ZnVuY3Rpb24gdm4oZSx0LG4scil7cmV0dXJuIGduKGUsdCxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuLHIpe3JldHVybiBqbihNbih0KSxlLG4scil9ZnVuY3Rpb24gbW4oZSx0LG4scil7cmV0dXJuIGpuKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpcj0obj1lLmNoYXJDb2RlQXQocykpPj44LGk9biUyNTYsby5wdXNoKGkpLG8ucHVzaChyKTtyZXR1cm4gb30odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gd24oZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP3p0KGUpOnp0KGUuc2xpY2UodCxuKSl9ZnVuY3Rpb24gX24oZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciByPVtdLGk9dDtpPG47KXt2YXIgbyxzLGEsYyx1PWVbaV0sbD1udWxsLGQ9dT4yMzk/NDp1PjIyMz8zOnU+MTkxPzI6MTtpZihpK2Q8PW4pc3dpdGNoKGQpe2Nhc2UgMTp1PDEyOCYmKGw9dSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKGM9KDMxJnUpPDw2fDYzJm8pPjEyNyYmKGw9Yyk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoYz0oMTUmdSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihsPWMpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYoYz0oMTUmdSk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZjPDExMTQxMTImJihsPWMpfW51bGw9PT1sPyhsPTY1NTMzLGQ9MSk6bD42NTUzNSYmKGwtPTY1NTM2LHIucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLHIucHVzaChsKSxpKz1kfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1TbilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIG49IiIscj0wO2Zvcig7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9U24pKTtyZXR1cm4gbn0ocil9ZW4ucG9vbFNpemU9ODE5Mixlbi5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189ZW4ucHJvdG90eXBlLGV9LGVuLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0bihudWxsLGUsdCxuKX0sZW4uVFlQRURfQVJSQVlfU1VQUE9SVCYmKGVuLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsZW4uX19wcm90b19fPVVpbnQ4QXJyYXkpLGVuLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5uKHQpLHQ8PTA/UXQoZSx0KTp2b2lkIDAhPT1uPyJzdHJpbmciPT10eXBlb2Ygcj9RdChlLHQpLmZpbGwobixyKTpRdChlLHQpLmZpbGwobik6UXQoZSx0KX0obnVsbCxlLHQsbil9LGVuLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBybihudWxsLGUpfSxlbi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHJuKG51bGwsZSl9LGVuLmlzQnVmZmVyPU5uLGVuLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighYW4oZSl8fCFhbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsaT0wLG89TWF0aC5taW4obixyKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtuPWVbaV0scj10W2ldO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0sZW4uaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sZW4uY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIVh0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGVuLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9ZW4uYWxsb2NVbnNhZmUodCksaT0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBvPWVbbl07aWYoIWFuKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkocixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gcn0sZW4uYnl0ZUxlbmd0aD1jbixlbi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGVuLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpbG4odGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGVuLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpbG4odGhpcyx0LHQrMyksbG4odGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sZW4ucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClsbih0aGlzLHQsdCs3KSxsbih0aGlzLHQrMSx0KzYpLGxuKHRoaXMsdCsyLHQrNSksbG4odGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sZW4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/X24odGhpcywwLGUpOnVuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZW4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWVuLmNvbXBhcmUodGhpcyxlKX0sZW4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sZW4ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixpKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8bj5lLmxlbmd0aHx8cjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPj1pJiZ0Pj1uKXJldHVybiAwO2lmKHI+PWkpcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKHI+Pj49MCkscz0obj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKHIsaSksdT1lLnNsaWNlKHQsbiksbD0wO2w8YTsrK2wpaWYoY1tsXSE9PXVbbF0pe289Y1tsXSxzPXVbbF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxlbi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0sZW4ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkbih0aGlzLGUsdCxuLCEwKX0sZW4ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZG4odGhpcyxlLHQsbiwhMSl9LGVuLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQsbixyKXtpZih2b2lkIDA9PT10KXI9InV0ZjgiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmInN0cmluZyI9PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShuKT8obnw9MCx2b2lkIDA9PT1yJiYocj0idXRmOCIpKToocj1uLG49dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPmkpJiYobj1pKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3J8fChyPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKHIpe2Nhc2UiaGV4IjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBtbih0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxlbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgU249NDA5NjtmdW5jdGlvbiBibihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGtuKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBFbihlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7Zm9yKHZhciBpPSIiLG89dDtvPG47KytvKWkrPUxuKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIFRuKGUsdCxuKXtmb3IodmFyIHI9ZS5zbGljZSh0LG4pLGk9IiIsbz0wO288ci5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbb10rMjU2KnJbbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQW4oZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFJuKGUsdCxuLHIsaSxvKXtpZighYW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIENuKGUsdCxuLHIpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sMik7aTxvOysraSllW24raV09KHQmMjU1PDw4KihyP2k6MS1pKSk+Pj44KihyP2k6MS1pKX1mdW5jdGlvbiBEbihlLHQsbixyKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sNCk7aTxvOysraSllW24raV09dD4+PjgqKHI/aTozLWkpJjI1NX1mdW5jdGlvbiBQbihlLHQsbixyLGksbyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEluKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFBuKGUsMCxuLDQpLFZ0KGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIE9uKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFBuKGUsMCxuLDgpLFZ0KGUsdCxuLHIsNTIsOCksbis4fWVuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLCh0PXZvaWQgMD09PXQ/cjp+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksdDxlJiYodD1lKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUKShuPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPWVuLnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtuPW5ldyBlbihpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbyluW29dPXRoaXNbbytlXX1yZXR1cm4gbn0sZW4ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sZW4ucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspcis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gcn0sZW4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGVuLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sZW4ucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxlbi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZW4ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGVuLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcj49KGkqPTEyOCkmJihyLT1NYXRoLnBvdygyLDgqdCkpLHJ9LGVuLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBbihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LGk9MSxvPXRoaXNbZSstLXJdO3I+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLXJdKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxlbi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sZW4ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QW4oZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZW4ucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8QW4oZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZW4ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxlbi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LGVuLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBbihlLDQsdGhpcy5sZW5ndGgpLFl0KHRoaXMsZSwhMCwyMyw0KX0sZW4ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsNCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCExLDIzLDQpfSxlbi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsOCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCEwLDUyLDgpfSxlbi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEFuKGUsOCx0aGlzLmxlbmd0aCksWXQodGhpcyxlLCExLDUyLDgpfSxlbi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxSbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8Um4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT1uLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsMSwyNTUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsNjU1MzUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkNuKHRoaXMsZSx0LCEwKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsNjU1MzUsMCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkNuKHRoaXMsZSx0LCExKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkRuKHRoaXMsZSx0LCEwKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkRuKHRoaXMsZSx0LCExKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Um4odGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LGVuLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdHw9MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Um4odGhpcyxlLHQsbixpLTEsLWkpfXZhciBvPW4tMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sZW4ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxSbih0aGlzLGUsdCwxLDEyNywtMTI4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxlbi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFJuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Q24odGhpcyxlLHQsITApLHQrMn0sZW4ucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxSbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksZW4uVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOkNuKHRoaXMsZSx0LCExKSx0KzJ9LGVuLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkRuKHRoaXMsZSx0LCEwKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Um4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxlbi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkRuKHRoaXMsZSx0LCExKSx0KzR9LGVuLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBJbih0aGlzLGUsdCwhMCxuKX0sZW4ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEluKHRoaXMsZSx0LCExLG4pfSxlbi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE9uKHRoaXMsZSx0LCEwLG4pfSxlbi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE9uKHRoaXMsZSx0LCExLG4pfSxlbi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1uJiYocj1lLmxlbmd0aC10K24pO3ZhciBpLG89ci1uO2lmKHRoaXM9PT1lJiZuPHQmJnQ8cilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStuXTtlbHNlIGlmKG88MWUzfHwhZW4uVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLG4rbyksdCk7cmV0dXJuIG99LGVuLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09ciYmInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHImJiFlbi5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxuOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz1hbihlKT9lOkhuKG5ldyBlbihlLHIpLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPG4tdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIFVuPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIExuKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBIbihlLHQpe3ZhciBuO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxyOysrcyl7aWYoKG49ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1yKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj02NTUzNisoaS01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scztKdHx8RnQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgQnQoMyphLzQtbykscj1vPjA/YS00OmE7dmFyIGM9MDtmb3IodD0wLG49MDt0PHI7dCs9NCxuKz0zKWk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MTh8S3RbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxLdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8S3RbZS5jaGFyQ29kZUF0KHQrMyldLHNbYysrXT1pPj4xNiYyNTUsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MnxLdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1tjKytdPTI1NSZpKToxPT09byYmKGk9S3RbZS5jaGFyQ29kZUF0KHQpXTw8MTB8S3RbZS5jaGFyQ29kZUF0KHQrMSldPDw0fEt0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKFVuLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBqbihlLHQsbixyKXtmb3IodmFyIGk9MDtpPHImJiEoaStuPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krbl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBObihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fHFuKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJnFuKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBxbihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciB4bj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6ZW4sSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksZW4uYWxsb2MoK2UpfSxpc0J1ZmZlcjpObixrTWF4TGVuZ3RoOiR0fSksS249e2V4cG9ydHM6e319LEJuPXt9LEpuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSm4uZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQlNDtpZighbilyZXR1cm4gZTt2YXIgcj10LGk9NC1uLG89dCtpLHM9ZW4uYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixyKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZuPUpuO2Z1bmN0aW9uIFduKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksZW4uaXNCdWZmZXIoZSk/WW4oZS50b1N0cmluZygiYmFzZTY0IikpOlluKGVuLmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxGbi5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBZbihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIFZuLEduPVduO0duLmVuY29kZT1XbixHbi5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxlbi5mcm9tKHpuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sR24udG9CYXNlNjQ9em4sR24uZnJvbUJhc2U2ND1ZbixHbi50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gZW4uZnJvbSh6bihlKSwiYmFzZTY0Iil9LEJuLmRlZmF1bHQ9R24sKFZuPUtuKS5leHBvcnRzPUJuLmRlZmF1bHQsVm4uZXhwb3J0cy5kZWZhdWx0PVZuLmV4cG9ydHM7dmFyIFhuPUtuLmV4cG9ydHMsJG49e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxuKXt2YXIgcj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gbihlLG4scixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx2LHksbTtvPj02NDspe2ZvcihzPW5bMF0sYT1uWzFdLGM9blsyXSx1PW5bM10sbD1uWzRdLGQ9bls1XSxoPW5bNl0sZj1uWzddLGc9MDtnPDE2O2crKyl2PWkrNCpnLGVbZ109KDI1NSZyW3ZdKTw8MjR8KDI1NSZyW3YrMV0pPDwxNnwoMjU1JnJbdisyXSk8PDh8MjU1JnJbdiszXTtmb3IoZz0xNjtnPDY0O2crKyl5PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHkrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl5PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3l8MCx1PWMsYz1hLGE9cyxzPXkrbXwwO25bMF0rPXMsblsxXSs9YSxuWzJdKz1jLG5bM10rPXUsbls0XSs9bCxuWzVdKz1kLG5bNl0rPWgsbls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIHI9MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYobih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihyPW4odGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxyLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxyPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltyXT0xMjg7Zm9yKHZhciBhPXIrMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUsbih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLnN0YXRlLmxlbmd0aDtuKyspdGhpcy5zdGF0ZVtuXT1lW25dO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPXI7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IHIsdGhpcy5vdXRlcj1uZXcgcix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyByKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0W25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyByKS51cGRhdGUoZSksbj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCl7dmFyIG49bmV3IGkoZSkudXBkYXRlKHQpLHI9bi5kaWdlc3QoKTtyZXR1cm4gbi5jbGVhbigpLHJ9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgaT1yWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksbiYmdC51cGRhdGUobiksdC51cGRhdGUociksdC5maW5pc2goZSksclswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PXImJihyPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShyKSxwPTA7cDxyO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxuLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQsbixyKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KHIpLGQ9MDtkKnM8cjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PW47ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8cjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0ocik7dmFyIGk9ci5kZWZhdWx0O2Zvcih2YXIgbyBpbiByKWlbb109cltvXTtlLmV4cG9ydHM9aX0oKX0oJG4pO3ZhciBabj1EKCRuLmV4cG9ydHMpLFFuPWNyeXB0bztjb25zdCBlcj1lPT5lIGluc3RhbmNlb2YgQ3J5cHRvS2V5LHRyPW5ldyBUZXh0RW5jb2Rlcixucj1uZXcgVGV4dERlY29kZXI7Y29uc3QgcnI9ZT0+e2xldCB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PW5yLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4oZT0+e2NvbnN0IHQ9YXRvYihlKSxuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluW2VdPXQuY2hhckNvZGVBdChlKTtyZXR1cm4gbn0pKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19O2NsYXNzIGlyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7dmFyIHQ7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0odD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PXR8fHQuY2FsbChFcnJvcix0aGlzLHRoaXMuY29uc3RydWN0b3IpfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19Y2xhc3Mgb3IgZXh0ZW5kcyBpcntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1jbGFzcyBzciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1jbGFzcyBhciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fWNsYXNzIGNyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyB1ciBleHRlbmRzIGlye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIGxyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3MgZHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fWNsYXNzIGhyIGV4dGVuZHMgaXJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIix0aGlzLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19Y2xhc3MgZnIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIix0aGlzLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19Y2xhc3MgcHIgZXh0ZW5kcyBpcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fWZ1bmN0aW9uIGdyKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gdnIoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhbGdvcml0aG0ubmFtZSI7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgIi5jb25jYXQodCwiIG11c3QgYmUgIikuY29uY2F0KGUpKX1mdW5jdGlvbiB5cihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIG1yKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHdyKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19ZnVuY3Rpb24gX3IoZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgodD0+ZS51c2FnZXMuaW5jbHVkZXModCkpKSl7bGV0IGU9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IG49dC5wb3AoKTtlKz0ib25lIG9mICIuY29uY2F0KHQuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQobiwiLiIpfWVsc2UgMj09PXQubGVuZ3RoP2UrPSJvbmUgb2YgIi5jb25jYXQodFswXSwiIG9yICIpLmNvbmNhdCh0WzFdLCIuIik6ZSs9IiIuY29uY2F0KHRbMF0sIi4iKTt0aHJvdyBuZXcgVHlwZUVycm9yKGUpfX12YXIgU3I9ZnVuY3Rpb24oZSl7bGV0IHQ9IktleSBtdXN0IGJlICI7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO2lmKHIubGVuZ3RoPjIpe2NvbnN0IGU9ci5wb3AoKTt0Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoci5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChlLCIuIil9ZWxzZSAyPT09ci5sZW5ndGg/dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHJbMF0sIiBvciAiKS5jb25jYXQoclsxXSwiLiIpOnQrPSJvZiB0eXBlICIuY29uY2F0KHJbMF0sIi4iKTtyZXR1cm4gbnVsbD09ZT90Kz0iIFJlY2VpdmVkICIuY29uY2F0KGUpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/dCs9IiBSZWNlaXZlZCBmdW5jdGlvbiAiLmNvbmNhdChlLm5hbWUpOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYodCs9IiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAiLmNvbmNhdChlLmNvbnN0cnVjdG9yLm5hbWUpKSx0fSxicj1lPT5lcihlKTtjb25zdCBrcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIEVyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IFRyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGNyKCIiLmNvbmNhdChlLmFsZywiIGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXMiKSk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MSl9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGdyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgY3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBjcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gUW4uc3VidGxlLmltcG9ydEtleSgicmF3IixycihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsUW4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBBcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighYnIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihTcihlLC4uLmtyLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpfX0pKHQpOigoZSx0KT0+e2lmKCFicihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFNyKGUsLi4ua3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGtyLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChrci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpfSkodCxuKX07ZnVuY3Rpb24gUnIoZSx0LG4pe2lmKGVyKHQpKXJldHVybiBmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgdnIoIkhNQUMiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKG1yKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyB2cigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOntpZigheXIoZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgdnIoIlJTQVNTQS1QS0NTMS12MV81Iik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihtcihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgdnIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgdnIoIlJTQS1QU1MiKTtjb25zdCBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKG1yKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyB2cigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UgZ3IoKSYmIkVkRFNBIjppZigheXIoZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IHZyKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp7aWYoIXlyKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IHZyKCJFQ0RTQSIpO2NvbnN0IG49d3IodCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PW4pdGhyb3cgdnIobiwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO19yKGUscil9KHQsZSxuKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3IoU3IodCwuLi5rcikpO3JldHVybiBRbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSksbmFtZToiSE1BQyJ9LCExLFtuXSl9dGhyb3cgbmV3IFR5cGVFcnJvcihTcih0LC4uLmtyLCJVaW50OEFycmF5IikpfWNvbnN0IENyPWFzeW5jKGUsdCxuLHIpPT57Y29uc3QgaT1hd2FpdCBScihlLHQsInZlcmlmeSIpOygoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXtjb25zdHttb2R1bHVzTGVuZ3RoOm59PXQuYWxnb3JpdGhtO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8bjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGUsIiByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyIikpfX0pKGUsaSk7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSk7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlIGdyKCkmJiJFZERTQSI6Y29uc3R7bmFtZWRDdXJ2ZTpyfT10O3JldHVybntuYW1lOnIsbmFtZWRDdXJ2ZTpyfTtkZWZhdWx0OnRocm93IG5ldyBjcigiYWxnICIuY29uY2F0KGUsIiBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lIikpfX0oZSxpLmFsZ29yaXRobSk7dHJ5e3JldHVybiBhd2FpdCBRbi5zdWJ0bGUudmVyaWZ5KG8saSxuLHIpfWNhdGNoKGUpe3JldHVybiExfX07YXN5bmMgZnVuY3Rpb24gRHIoZSx0LG4pe3ZhciByO2lmKCFFcihlKSl0aHJvdyBuZXcgdXIoIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih2b2lkIDA9PT1lLnByb3RlY3RlZCYmdm9pZCAwPT09ZS5oZWFkZXIpdGhyb3cgbmV3IHVyKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtpZih2b2lkIDAhPT1lLnByb3RlY3RlZCYmInN0cmluZyIhPXR5cGVvZiBlLnByb3RlY3RlZCl0aHJvdyBuZXcgdXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwPT09ZS5wYXlsb2FkKXRocm93IG5ldyB1cigiSldTIFBheWxvYWQgbWlzc2luZyIpO2lmKCJzdHJpbmciIT10eXBlb2YgZS5zaWduYXR1cmUpdGhyb3cgbmV3IHVyKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDAhPT1lLmhlYWRlciYmIUVyKGUuaGVhZGVyKSl0aHJvdyBuZXcgdXIoIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtsZXQgaT17fTtpZihlLnByb3RlY3RlZCl7Y29uc3QgdD1ycihlLnByb3RlY3RlZCk7dHJ5e2k9SlNPTi5wYXJzZShuci5kZWNvZGUodCkpfWNhdGNoKGUpe3Rocm93IG5ldyB1cigiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpfX1pZighZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtjb25zdCByPXQuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXJldHVybiEwO2xldCBpO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYoaSYmMCE9PWkuc2l6ZSlmb3IoY29uc3QgZSBvZiB0KXtpZihpLmhhcyhlKSlyZXR1cm4hMTtpLmFkZChlKX1lbHNlIGk9bmV3IFNldCh0KX1yZXR1cm4hMH0oaSxlLmhlYWRlcikpdGhyb3cgbmV3IHVyKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3Qgbz17Li4uaSwuLi5lLmhlYWRlcn0scz1mdW5jdGlvbihlLHQsbixyLGkpe2lmKHZvaWQgMCE9PWkuY3JpdCYmdm9pZCAwPT09ci5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFyfHx2b2lkIDA9PT1yLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoci5jcml0KXx8MD09PXIuY3JpdC5sZW5ndGh8fHIuY3JpdC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7bGV0IG87bz12b2lkIDAhPT1uP25ldyBNYXAoWy4uLk9iamVjdC5lbnRyaWVzKG4pLC4uLnQuZW50cmllcygpXSk6dDtmb3IoY29uc3QgdCBvZiByLmNyaXQpe2lmKCFvLmhhcyh0KSl0aHJvdyBuZXcgY3IoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG5vdCByZWNvZ25pemVkJykpO2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIGlzIG1pc3NpbmcnKSk7aWYoby5nZXQodCkmJnZvaWQgMD09PXJbdF0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh0LCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfSh1cixuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09bj92b2lkIDA6bi5jcml0LGksbyk7bGV0IGE9ITA7aWYocy5oYXMoImI2NCIpJiYoYT1pLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBhKSl0aHJvdyBuZXcgdXIoJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOmN9PW87aWYoInN0cmluZyIhPXR5cGVvZiBjfHwhYyl0aHJvdyBuZXcgdXIoJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IHU9biYmKChlLHQpPT57aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciJy5jb25jYXQoZSwnIiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9KSgiYWxnb3JpdGhtcyIsbi5hbGdvcml0aG1zKTtpZih1JiYhdS5oYXMoYykpdGhyb3cgbmV3IGFyKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYoYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHVyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgdXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2xldCBsPSExOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KGksZSksbD0hMCksQXIoYyx0LCJ2ZXJpZnkiKTtjb25zdCBkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LnJlZHVjZSgoKGUsdCk9PntsZXR7bGVuZ3RoOm59PXQ7cmV0dXJuIGUrbn0pLDApLGk9bmV3IFVpbnQ4QXJyYXkocik7bGV0IG89MDtyZXR1cm4gdC5mb3JFYWNoKChlPT57aS5zZXQoZSxvKSxvKz1lLmxlbmd0aH0pKSxpfSh0ci5lbmNvZGUobnVsbCE9PShyPWUucHJvdGVjdGVkKSYmdm9pZCAwIT09cj9yOiIiKSx0ci5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD90ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQpLGg9cnIoZS5zaWduYXR1cmUpO2lmKCFhd2FpdCBDcihjLHQsaCxkKSl0aHJvdyBuZXcgcHI7bGV0IGY7Zj1hP3JyKGUucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/dHIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkO2NvbnN0IHA9e3BheWxvYWQ6Zn07cmV0dXJuIHZvaWQgMCE9PWUucHJvdGVjdGVkJiYocC5wcm90ZWN0ZWRIZWFkZXI9aSksdm9pZCAwIT09ZS5oZWFkZXImJihwLnVucHJvdGVjdGVkSGVhZGVyPWUuaGVhZGVyKSxsP3suLi5wLGtleTp0fTpwfXZhciBQcj1lPT5NYXRoLmZsb29yKGUuZ2V0VGltZSgpLzFlMyk7Y29uc3QgSXI9ODY0MDAsT3I9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIFVyPWU9Pntjb25zdCB0PU9yLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qSXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IExyPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpLEhyPShlLHQpPT4ic3RyaW5nIj09dHlwZW9mIGU/dC5pbmNsdWRlcyhlKTohIUFycmF5LmlzQXJyYXkoZSkmJnQuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoZSkpKTthc3luYyBmdW5jdGlvbiBNcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPW5yLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB1cigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IERyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBscigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0e3R5cDpyfT1uO2lmKHImJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxMcihlLnR5cCkhPT1McihyKSkpdGhyb3cgbmV3IG9yKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTtsZXQgaTt0cnl7aT1KU09OLnBhcnNlKG5yLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCFFcihpKSl0aHJvdyBuZXcgbHIoIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309bjtpZihvJiYhKEFycmF5LmlzQXJyYXkobyk/bzpbb10pLmluY2x1ZGVzKGkuaXNzKSl0aHJvdyBuZXcgb3IoJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTtjb25zdHtzdWJqZWN0OnN9PW47aWYocyYmaS5zdWIhPT1zKXRocm93IG5ldyBvcigndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e2F1ZGllbmNlOmF9PW47aWYoYSYmIUhyKGkuYXVkLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSkpdGhyb3cgbmV3IG9yKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7bGV0IGM7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6Yz1VcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6Yz1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpjPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6dX09bixsPVByKHV8fG5ldyBEYXRlKTtpZigodm9pZCAwIT09aS5pYXR8fG4ubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBvcignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgb3IoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+bCtjKXRocm93IG5ldyBvcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBvcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9bC1jKXRocm93IG5ldyBzcignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKG4ubWF4VG9rZW5BZ2Upe2NvbnN0IGU9bC1pLmlhdDtpZihlLWM+KCJudW1iZXIiPT10eXBlb2Ygbi5tYXhUb2tlbkFnZT9uLm1heFRva2VuQWdlOlVyKG4ubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc3IoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWMpdGhyb3cgbmV3IG9yKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9KGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxzPXtwYXlsb2FkOm8scHJvdGVjdGVkSGVhZGVyOmkucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4ucyxrZXk6aS5rZXl9OnN9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIEVyKGUpfWNsYXNzIE5ye2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoanIpfShlKSl0aHJvdyBuZXcgZHIoIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHQ7dGhpcy5fandrcz0odD1lLCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHQpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpKX1hc3luYyBnZXRLZXkoZSx0KXtjb25zdHthbGc6bixraWQ6cn09ey4uLmUsLi4udC5oZWFkZXJ9LGk9ZnVuY3Rpb24oZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IGNyKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fShuKSxvPXRoaXMuX2p3a3Mua2V5cy5maWx0ZXIoKGU9PntsZXQgdD1pPT09ZS5rdHk7aWYodCYmInN0cmluZyI9PXR5cGVvZiByJiYodD1yPT09ZS5raWQpLHQmJiJzdHJpbmciPT10eXBlb2YgZS5hbGcmJih0PW49PT1lLmFsZyksdCYmInN0cmluZyI9PXR5cGVvZiBlLnVzZSYmKHQ9InNpZyI9PT1lLnVzZSksdCYmQXJyYXkuaXNBcnJheShlLmtleV9vcHMpJiYodD1lLmtleV9vcHMuaW5jbHVkZXMoInZlcmlmeSIpKSx0JiYiRWREU0EiPT09biYmKHQ9IkVkMjU1MTkiPT09ZS5jcnZ8fCJFZDQ0OCI9PT1lLmNydiksdClzd2l0Y2gobil7Y2FzZSJFUzI1NiI6dD0iUC0yNTYiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzI1NksiOnQ9InNlY3AyNTZrMSI9PT1lLmNydjticmVhaztjYXNlIkVTMzg0Ijp0PSJQLTM4NCI9PT1lLmNydjticmVhaztjYXNlIkVTNTEyIjp0PSJQLTUyMSI9PT1lLmNydn1yZXR1cm4gdH0pKSx7MDpzLGxlbmd0aDphfT1vO2lmKDA9PT1hKXRocm93IG5ldyBocjtpZigxIT09YSl0aHJvdyBuZXcgZnI7Y29uc3QgYz10aGlzLl9jYWNoZWQuZ2V0KHMpfHx0aGlzLl9jYWNoZWQuc2V0KHMse30pLmdldChzKTtpZih2b2lkIDA9PT1jW25dKXtjb25zdCBlPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZighRXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodHx8KHQ9ZS5hbGcpLCJzdHJpbmciIT10eXBlb2YgdHx8IXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImFsZyIgYXJndW1lbnQgaXMgcmVxdWlyZWQgd2hlbiAiandrLmFsZyIgaXMgbm90IHByZXNlbnQnKTtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0IjppZigic3RyaW5nIiE9dHlwZW9mIGUua3x8IWUuayl0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtyZXR1cm4gbnVsbCE9bnx8KG49ITAhPT1lLmV4dCksbj9Ucih7Li4uZSxhbGc6dCxleHQ6ITF9KTpycihlLmspO2Nhc2UiUlNBIjppZih2b2lkIDAhPT1lLm90aCl0aHJvdyBuZXcgY3IoJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCcpO2Nhc2UiRUMiOmNhc2UiT0tQIjpyZXR1cm4gVHIoey4uLmUsYWxnOnR9KTtkZWZhdWx0OnRocm93IG5ldyBjcignVW5zdXBwb3J0ZWQgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX19KHsuLi5zLGV4dDohMH0sbik7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJwdWJsaWMiIT09ZS50eXBlKXRocm93IG5ldyBkcigiSlNPTiBXZWIgS2V5IFNldCBtZW1iZXJzIG11c3QgYmUgcHVibGljIGtleXMiKTtjW25dPWV9cmV0dXJuIGNbbl19fXZhciBxcj17ZXhwb3J0czp7fX0seHI9e2V4cG9ydHM6e319LEtyPVAoeG4pOyFmdW5jdGlvbihlLHQpe3ZhciBuPUtyLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oeHIseHIuZXhwb3J0cyk7dmFyIEJyPTY1NTM2LEpyPTQyOTQ5NjcyOTU7dmFyIEZyPXhyLmV4cG9ydHMuQnVmZmVyLFdyPUMuY3J5cHRvfHxDLm1zQ3J5cHRvO1dyJiZXci5nZXRSYW5kb21WYWx1ZXM/cXIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+SnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj1Gci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5Ccilmb3IodmFyIHI9MDtyPGU7cis9QnIpV3IuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK0JyKSk7ZWxzZSBXci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIF9lLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06cXIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIHpyPXFyLmV4cG9ydHM7Y2xhc3MgWXJ7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBYbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gWG4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gZW4uZnJvbShabigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiB6cihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyxhKXtjb25zdCB1PXthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLHN1YmplY3Q6b307cmV0dXJuKG51bGw9PWF8fGEpJiYodS5pc3N1ZXI9aSksTXIoZSwobD17a2V5czpbdF19LE5yLnByb3RvdHlwZS5nZXRLZXkuYmluZChuZXcgTnIobCkpKSx1KS50aGVuKCgoKT0+UHJvbWlzZS5yZXNvbHZlKCEwKSkpLmNhdGNoKChlPT57dmFyIHQ7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQ1JZUFRPLVVUSUxTLVZKLUlWMDEiLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLnJlYXNvbikmJnZvaWQgMCE9PXQ/dDpKU09OLnN0cmluZ2lmeShlKSwiIi5jb25jYXQobnVsbD09ZT92b2lkIDA6ZS5jb2RlLCIgIikuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pKSl9KSk7dmFyIGx9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPW49PntsZXR7ZGF0YTphLHBvcnRzOnV9PW47cmV0dXJuIGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGwsZCxoLGYscDtjb25zdCB5PXVbMF07aWYoYS50eXBlPT09dnx8cilzd2l0Y2goYS50eXBlKXtjYXNlIHY6dHJ5e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSxhLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IHF0LGk9bmV3IFlyLG89bmV3IGc7eWllbGQgby5pbml0aWFsaXplKHQscixpKTtjb25zdCBzPW5ldyBSKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PU50LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIGEuYXR0YWNoVG9rZW5Ub1JlcXVlc3RDb25maWcodCl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLHkucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6ci5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0obD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1hP3ZvaWQgMDphLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijp7Y29uc3QgZT1hLmRhdGEsdD1udWxsPT1lP3ZvaWQgMDplLmRhdGE7aWYoITA9PT0obnVsbD09PShwPW51bGw9PT0oZj1hLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmRhdGEpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmZvcm1EYXRhKSl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IGUgaW4gdCkiZm9ybURhdGEiIT09ZSYmbi5hcHBlbmQoZSx0W2VdKTtlLmRhdGE9bn1yLmh0dHBSZXF1ZXN0KGUpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWt9Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpyLmh0dHBSZXF1ZXN0QWxsKGEuZGF0YSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zaWduT3V0KCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZXF1ZXN0LWN1c3RvbS1ncmFudCI6ci5yZXF1ZXN0Q3VzdG9tR3JhbnQoYS5kYXRhKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6ci5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1iYXNpYy11c2VyLWluZm8iOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldENyeXB0b0hlbHBlcigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJlbmFibGVfaHR0cF9oYW5kbGVyIjpyLmVuYWJsZUh0dHBIYW5kbGVyKCkseS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6ci5kaXNhYmxlSHR0cEhhbmRsZXIoKSx5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmlzQXV0aGVudGljYXRlZCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2Uoci5zdGFydEF1dG9SZWZyZXNoVG9rZW4oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09YT92b2lkIDA6YS5kYXRhKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLnVwZGF0ZUNvbmZpZyhudWxsPT1hP3ZvaWQgMDphLmRhdGEpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7eS5wb3N0TWVzc2FnZShFLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDb25maWdEYXRhKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT15fHx5LnBvc3RNZXNzYWdlKEUuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLCJUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAiLmNvbmNhdChhLnR5cGUsIiwgaXMgaW52YWxpZC4iKSkpKX1lbHNlIHkucG9zdE1lc3NhZ2UoRS5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBjKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKX0pKX07Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBBKGUsdCkpKTtyZXR1cm57fX0oKTsKCg==",$W=null,eV=!1,function(e){return tV=tV||_W(qW,$W,eV),new Worker(tV,e)});const nV="init",lV="sign-out",oV="http-request",aV="http-request-all",rV="request-custom-grant",cV="revoke-access-token",sV="request-start",dV="request-success",uV="request-finish",hV="get-oidc-service-endpoints",ZV="get-basic-user-info",bV="get-decoded-id-token",mV="get-crypto-helper",pV="enable_http_handler",yV="disable_http_handler",GV="get_auth_url",XV="request_get_token",WV="is_authenticated",VV="get_sign_out_url",IV="refresh_access-token",gV="refresh-access-token-error",SV="set_session_state",fV="start_auto_refresh_token",RV="update_config",vV="get_id_token",YV="check_session_signed_in",KV="check_session_signed_out",NV="get_config_data",CV="set_session_state_from_iframe";var LV,UV;e.Storage=void 0,(LV=e.Storage||(e.Storage={})).LocalStorage="localStorage",LV.SessionStorage="sessionStorage",LV.WebWorker="webWorker",LV.BrowserMemory="browserMemory",e.Hooks=void 0,(UV=e.Hooks||(e.Hooks={})).SignIn="sign-in",UV.SignOut="sign-out",UV.Initialize="initialize",UV.HttpRequestStart="http-request-start",UV.HttpRequestFinish="http-request-finish",UV.HttpRequestError="http-request-error",UV.HttpRequestSuccess="http-request-success",UV.RevokeAccessToken="revoke-access-token",UV.CustomGrant="custom-grant",UV.SignOutFailed="sign-out-failed";const kV="rpIFrame",JV="promptNoneIFrame",TV="Y2hlY2tTZXNzaW9u",HV="sign-in-silently",xV="initialized-silent-sign-in",wV="promptNoneRequestSent",FV="error",zV="error_description",PV="custom_grant_config",BV="state",MV="Access token is invalid";class jV{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class QV{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e,t,i){sessionStorage.setItem("".concat(wW,"-instance_").concat(i,"-").concat(t),e)}static getSignOutURL(e,t){var i;return null!==(i=sessionStorage.getItem("".concat(wW,"-instance_").concat(t,"-").concat(e)))&&void 0!==i?i:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!QV.hasErrorInURL()&&!QV.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return QV.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!QV.hasErrorInURL()&&!QV.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(xV),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return UW(this,void 0,void 0,(function*(){if(AW.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield AW.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(AW.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(FV),i=e.searchParams.get(zV),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(HV))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get(FV)&&t.searchParams.get(BV)!==FW}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(wV);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(wV,JSON.stringify(e))}static waitTillPageRedirect(e){return UW(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}class EV{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t,this._instanceID=this._authenticationClient.getInstanceID()}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,a,r;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(a=e.checkSessionInterval)&&void 0!==a?a:3,null!==(r=e.sessionRefreshInterval)&&void 0!==r?r:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return UW(this,void 0,void 0,(function*(){let o=!0,a=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){a=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(PV,JSON.stringify(e)),o||a?this._authenticationClient.requestCustomGrant(e).then((i=>UW(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-MAIN_THREAD_CLIENT-RCG-IV01","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`"))}))}getCustomGrantConfigData(){return UW(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(PV);return e?JSON.parse(e):null}))}refreshAccessToken(e){return UW(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){const t={type:gV};return window.postMessage(t),Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var a,r;return UW(this,void 0,void 0,(function*(){let c=!1;const s=yield this._dataLayer.getConfigData();for(const e of[...null!==(a=yield null==s?void 0:s.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(e&&(null===(r=null==t?void 0:t.url)||void 0===r?void 0:r.startsWith(e))){c=!0;break}return c?e.request(t).then((e=>Promise.resolve(e))).catch((a=>UW(this,void 0,void 0,(function*(){var r,c,s;if(401===(null===(r=null==a?void 0:a.response)||void 0===r?void 0:r.status)||!(null==a?void 0:a.response)){let r;try{r=yield this.refreshAccessToken(o)}catch(e){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},a),{code:MV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HR-SE01",null!==(c=null==e?void 0:e.name)&&void 0!==c?c:"Refresh token request failed.",null!==(s=null==e?void 0:e.message)&&void 0!==s?s:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(r)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(a)),"function"==typeof l&&l()),Promise.reject(a)})))):Promise.reject(new BW("SPA-AUTH_HELPER-HR-IV02","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`"))}))}httpRequestAll(e,t,i,n,l){var o,a,r;return UW(this,void 0,void 0,(function*(){let c=!0;const s=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(a=null===(o=yield s)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==a?a:[],s.baseUrl])if(i&&(null===(r=t.url)||void 0===r?void 0:r.startsWith(i))){e=!0;break}if(!e){c=!1;break}}const d=[];if(c)return e.forEach((e=>{d.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>UW(this,void 0,void 0,(function*(){var o,a,r;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:MV}))),"function"==typeof l&&l()),new BW("SPA-AUTH_HELPER-HRA-SE01",null!==(a=null==t?void 0:t.name)&&void 0!==a?a:"Refresh token request failed.",null!==(r=null==t?void 0:t.message)&&void 0!==r?r:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(d).then((e=>Promise.resolve(e))).catch((e=>UW(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new BW("SPA-AUTH_HELPER-HRA-IV02","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`")}))}requestAccessToken(t,i,n,l,o){return UW(this,void 0,void 0,(function*(){const a=yield this._dataLayer.getConfigData();if(a.storage===e.Storage.BrowserMemory&&a.enablePKCE&&i){const e=QV.getPKCE(MW.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(MW.extractPKCEKeyFromStateParam(i),e)}else a.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"").then((()=>UW(this,void 0,void 0,(function*(){return a.storage!==e.Storage.WebWorker?(QV.setSignOutURL(yield this._authenticationClient.getSignOutURL(),a.clientID,this._instanceID),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&a.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new BW("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i,n){var l;return UW(this,void 0,void 0,(function*(){if(QV.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const o=document.getElementById(kV),a=null===(l=null==o?void 0:o.contentDocument)||void 0===l?void 0:l.getElementById(JV);try{const t=yield e(n);a.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),l=o=>UW(this,void 0,void 0,(function*(){var a,r,c,s;const d=o.data;(null==d?void 0:d.type)==KV&&(window.removeEventListener("message",l),clearTimeout(n),e(!1)),(null==d?void 0:d.type)==YV&&(null===(a=null==d?void 0:d.data)||void 0===a?void 0:a.code)&&t(null===(r=null==d?void 0:d.data)||void 0===r?void 0:r.code,null===(c=null==d?void 0:d.data)||void 0===c?void 0:c.sessionState,null===(s=null==d?void 0:d.data)||void 0===s?void 0:s.state).then((t=>{window.removeEventListener("message",l),e(t)})).catch((e=>{window.removeEventListener("message",l),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",l)}))}))}handleSignIn(t,i,n){return UW(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(FV),a=new URL(window.location.href).searchParams.get(zV);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(FV),e.searchParams.delete(zV),history.pushState(null,document.title,e.toString()),new BW("SPA-AUTH_HELPER-SI-SE01",o,null!=a?a:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}attachTokenToRequestConfig(e){return UW(this,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield this.getAccessToken())}))}))}getBasicUserInfo(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return UW(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return UW(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class DV{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){return UW(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout((()=>UW(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(JW,JSON.stringify(n))}}))}getRefreshTimeoutTimer(){return UW(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(JW))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(JW)):-1}))}clearRefreshTokenTimeout(e){return UW(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}const OV=(()=>{let t,i,n,l,o,a,r,c,s,d,u;const h=(e,r,c,s,d,h,b)=>{t=e,i=r,n=c,l=s,o=h,a=d,u=b,l>-1&&Z(),a>-1&&(d=setInterval((()=>{p()}),1e3*a))},Z=()=>UW(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const a="opIFrame";const r=document.getElementById(kV);(null===(e=null==r?void 0:r.contentDocument)||void 0===e?void 0:e.getElementById(a)).src=i+"?client_id="+t+"&redirect_uri="+o,c=setInterval((function(){var e;return UW(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(kV),r=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(a)).contentWindow;null==r||r.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(c),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return UW(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===CV||"unchanged"===e.data||("error"===e.data?window.location.href=yield r():"changed"===e.data&&p())}))}),!1)},p=()=>UW(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(kV),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(JV);if(QV.canSendPromptNoneRequest()){QV.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===CV&&(d(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};s!==e.Storage.BrowserMemory&&s!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",response_mode:"query",state:TV});n.src=i}})),y=t=>UW(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(BV),o=new URL(window.location.href).searchParams.get(xW),a=window.parent.parent;if(null!==l&&(l.includes(TV)||l.includes(HV))){const c=new URL(window.location.href).searchParams.get("code");if(null!==c&&0!==c.length){if(l.includes(HV)){const e={data:{code:c,sessionState:null!=o?o:"",state:l},type:YV};return sessionStorage.setItem(xV,"false"),a.postMessage(e,a.origin),QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}const r=new URL(window.location.href).searchParams.get("session_state");if(s===e.Storage.LocalStorage||s===e.Storage.SessionStorage)t&&(yield t(r));else{const e={data:null!=r?r:"",type:CV};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}{if(l.includes(HV)){const e={type:KV};return window.parent.parent.postMessage(e,a.origin),QV.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}QV.setPromptNoneRequestSent(!1);const e=yield r();return yield AW.clearUserSessionData(),a.location.href=e,window.location.href="about:blank",yield QV.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>UW(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",kV),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(kV);const a=null==l?void 0:l.contentDocument,r=null==a?void 0:a.createElement("iframe");r&&(r.setAttribute("id","opIFrame"),r.style.display="none");const c=null==a?void 0:a.createElement("iframe");c&&(c.setAttribute("id",JV),c.style.display="none"),r&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(r)),c&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(c)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),r=e,s=t,d=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:h,receivePromptNoneResponse:y,reset:b}}))})();var AV={exports:{}},_V=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},qV=_V,$V=Object.prototype.toString;function eI(e){return Array.isArray(e)}function tI(e){return void 0===e}function iI(e){return"[object ArrayBuffer]"===$V.call(e)}function nI(e){return null!==e&&"object"==typeof e}function lI(e){if("[object Object]"!==$V.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function oI(e){return"[object Function]"===$V.call(e)}function aI(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),eI(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var rI={isArray:eI,isArrayBuffer:iI,isBuffer:function(e){return null!==e&&!tI(e)&&null!==e.constructor&&!tI(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===$V.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&iI(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:nI,isPlainObject:lI,isUndefined:tI,isDate:function(e){return"[object Date]"===$V.call(e)},isFile:function(e){return"[object File]"===$V.call(e)},isBlob:function(e){return"[object Blob]"===$V.call(e)},isFunction:oI,isStream:function(e){return nI(e)&&oI(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===$V.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:aI,merge:function e(){var t={};function i(i,n){lI(t[n])&&lI(i)?t[n]=e(t[n],i):lI(i)?t[n]=e({},i):eI(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)aI(arguments[n],i);return t},extend:function(e,t,i){return aI(t,(function(t,n){e[n]=i&&"function"==typeof t?qV(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},cI=rI;function sI(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var dI=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(cI.isURLSearchParams(t))n=t.toString();else{var l=[];cI.forEach(t,(function(e,t){null!=e&&(cI.isArray(e)?t+="[]":e=[e],cI.forEach(e,(function(e){cI.isDate(e)?e=e.toISOString():cI.isObject(e)&&(e=JSON.stringify(e)),l.push(sI(t)+"="+sI(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},uI=rI;function hI(){this.handlers=[]}hI.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},hI.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},hI.prototype.forEach=function(e){uI.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var ZI=hI,bI="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function mI(){throw new Error("setTimeout has not been defined")}function pI(){throw new Error("clearTimeout has not been defined")}var yI=mI,GI=pI;function XI(e){if(yI===setTimeout)return setTimeout(e,0);if((yI===mI||!yI)&&setTimeout)return yI=setTimeout,setTimeout(e,0);try{return yI(e,0)}catch(t){try{return yI.call(null,e,0)}catch(t){return yI.call(this,e,0)}}}"function"==typeof bI.setTimeout&&(yI=setTimeout),"function"==typeof bI.clearTimeout&&(GI=clearTimeout);var WI,VI=[],II=!1,gI=-1;function SI(){II&&WI&&(II=!1,WI.length?VI=WI.concat(VI):gI=-1,VI.length&&fI())}function fI(){if(!II){var e=XI(SI);II=!0;for(var t=VI.length;t;){for(WI=VI,VI=[];++gI<t;)WI&&WI[gI].run();gI=-1,t=VI.length}WI=null,II=!1,function(e){if(GI===clearTimeout)return clearTimeout(e);if((GI===pI||!GI)&&clearTimeout)return GI=clearTimeout,clearTimeout(e);try{GI(e)}catch(t){try{return GI.call(null,e)}catch(t){return GI.call(this,e)}}}(e)}}function RI(e,t){this.fun=e,this.array=t}RI.prototype.run=function(){this.fun.apply(null,this.array)};function vI(){}var YI=vI,KI=vI,NI=vI,CI=vI,LI=vI,UI=vI,kI=vI;var JI=bI.performance||{},TI=JI.now||JI.mozNow||JI.msNow||JI.oNow||JI.webkitNow||function(){return(new Date).getTime()};var HI=new Date;var xI={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];VI.push(new RI(e,t)),1!==VI.length||II||XI(fI)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:YI,addListener:KI,once:NI,off:CI,removeListener:LI,removeAllListeners:UI,emit:kI,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*TI.call(JI),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-HI)/1e3}},wI=xI,FI=rI,zI=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.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,status:this.response&&this.response.status?this.response.status:null}},e},PI={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},BI=zI,MI=function(e,t,i,n,l){var o=new Error(e);return BI(o,t,i,n,l)},jI=MI,QI=rI,EI=QI.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var a=[];a.push(e+"="+encodeURIComponent(t)),QI.isNumber(i)&&a.push("expires="+new Date(i).toGMTString()),QI.isString(n)&&a.push("path="+n),QI.isString(l)&&a.push("domain="+l),!0===o&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},DI=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},OI=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},AI=rI,_I=["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"],qI=rI,$I=qI.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=qI.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function eg(e){this.message=e}eg.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},eg.prototype.__CANCEL__=!0;var tg=eg,ig=rI,ng=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(jI("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},lg=EI,og=dI,ag=function(e,t){return e&&!DI(t)?OI(e,t):t},rg=function(e){var t,i,n,l={};return e?(AI.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=AI.trim(e.substr(0,n)).toLowerCase(),i=AI.trim(e.substr(n+1)),t){if(l[t]&&_I.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},cg=$I,sg=MI,dg=PI,ug=tg,hg=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,a=e.responseType;function r(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}ig.isFormData(l)&&delete o["Content-Type"];var c=new XMLHttpRequest;if(e.auth){var s=e.auth.username||"",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(s+":"+d)}var u=ag(e.baseURL,e.url);function h(){if(c){var n="getAllResponseHeaders"in c?rg(c.getAllResponseHeaders()):null,l={data:a&&"text"!==a&&"json"!==a?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:n,config:e,request:c};ng((function(e){t(e),r()}),(function(e){i(e),r()}),l),c=null}}if(c.open(e.method.toUpperCase(),og(u,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=h:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(h)},c.onabort=function(){c&&(i(sg("Request aborted",e,"ECONNABORTED",c)),c=null)},c.onerror=function(){i(sg("Network Error",e,null,c)),c=null},c.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||dg;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(sg(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",c)),c=null},ig.isStandardBrowserEnv()){var Z=(e.withCredentials||cg(u))&&e.xsrfCookieName?lg.read(e.xsrfCookieName):void 0;Z&&(o[e.xsrfHeaderName]=Z)}"setRequestHeader"in c&&ig.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:c.setRequestHeader(t,e)})),ig.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),a&&"json"!==a&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){c&&(i(!e||e&&e.type?new ug("canceled"):e),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),c.send(l)}))},Zg=rI,bg=function(e,t){FI.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},mg=zI,pg={"Content-Type":"application/x-www-form-urlencoded"};function yg(e,t){!Zg.isUndefined(e)&&Zg.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var Gg,Xg={transitional:PI,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==wI&&"[object process]"===Object.prototype.toString.call(wI))&&(Gg=hg),Gg),transformRequest:[function(e,t){return bg(t,"Accept"),bg(t,"Content-Type"),Zg.isFormData(e)||Zg.isArrayBuffer(e)||Zg.isBuffer(e)||Zg.isStream(e)||Zg.isFile(e)||Zg.isBlob(e)?e:Zg.isArrayBufferView(e)?e.buffer:Zg.isURLSearchParams(e)?(yg(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):Zg.isObject(e)||t&&"application/json"===t["Content-Type"]?(yg(t,"application/json"),function(e,t,i){if(Zg.isString(e))try{return(t||JSON.parse)(e),Zg.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||Xg.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&Zg.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw mg(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Zg.forEach(["delete","get","head"],(function(e){Xg.headers[e]={}})),Zg.forEach(["post","put","patch"],(function(e){Xg.headers[e]=Zg.merge(pg)}));var Wg=Xg,Vg=rI,Ig=Wg,gg=function(e){return!(!e||!e.__CANCEL__)},Sg=rI,fg=function(e,t,i){var n=this||Ig;return Vg.forEach(i,(function(i){e=i.call(n,e,t)})),e},Rg=gg,vg=Wg,Yg=tg;function Kg(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Yg("canceled")}var Ng=rI,Cg=function(e,t){t=t||{};var i={};function n(e,t){return Ng.isPlainObject(e)&&Ng.isPlainObject(t)?Ng.merge(e,t):Ng.isPlainObject(t)?Ng.merge({},t):Ng.isArray(t)?t.slice():t}function l(i){return Ng.isUndefined(t[i])?Ng.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!Ng.isUndefined(t[e]))return n(void 0,t[e])}function a(i){return Ng.isUndefined(t[i])?Ng.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function r(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var c={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:r};return Ng.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||l,n=t(e);Ng.isUndefined(n)&&t!==r||(i[e]=n)})),i},Lg="0.26.1",Ug=Lg,kg={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){kg[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var Jg={};kg.transitional=function(e,t,i){function n(e,t){return"[Axios v"+Ug+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!Jg[l]&&(Jg[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var Tg={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],a=t[o];if(a){var r=e[o],c=void 0===r||a(r,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:kg},Hg=rI,xg=dI,wg=ZI,Fg=function(e){return Kg(e),e.headers=e.headers||{},e.data=fg.call(e,e.data,e.headers,e.transformRequest),e.headers=Sg.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),Sg.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||vg.adapter)(e).then((function(t){return Kg(e),t.data=fg.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return Rg(t)||(Kg(e),t&&t.response&&(t.response.data=fg.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},zg=Cg,Pg=Tg,Bg=Pg.validators;function Mg(e){this.defaults=e,this.interceptors={request:new wg,response:new wg}}Mg.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=zg(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&Pg.assertOptions(i,{silentJSONParsing:Bg.transitional(Bg.boolean),forcedJSONParsing:Bg.transitional(Bg.boolean),clarifyTimeoutError:Bg.transitional(Bg.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!l){var r=[Fg,void 0];for(Array.prototype.unshift.apply(r,n),r=r.concat(a),o=Promise.resolve(t);r.length;)o=o.then(r.shift(),r.shift());return o}for(var c=t;n.length;){var s=n.shift(),d=n.shift();try{c=s(c)}catch(e){d(e);break}}try{o=Fg(c)}catch(e){return Promise.reject(e)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},Mg.prototype.getUri=function(e){return e=zg(this.defaults,e),xg(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},Hg.forEach(["delete","get","head","options"],(function(e){Mg.prototype[e]=function(t,i){return this.request(zg(i||{},{method:e,url:t,data:(i||{}).data}))}})),Hg.forEach(["post","put","patch"],(function(e){Mg.prototype[e]=function(t,i,n){return this.request(zg(n||{},{method:e,url:t,data:i}))}}));var jg=Mg,Qg=tg;function Eg(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new Qg(e),t(i.reason))}))}Eg.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Eg.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},Eg.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},Eg.source=function(){var e,t=new Eg((function(t){e=t}));return{token:t,cancel:e}};var Dg=Eg,Og=rI,Ag=rI,_g=_V,qg=jg,$g=Cg;var eS=function e(t){var i=new qg(t),n=_g(qg.prototype.request,i);return Ag.extend(n,qg.prototype,i),Ag.extend(n,i),n.create=function(i){return e($g(t,i))},n}(Wg);eS.Axios=qg,eS.Cancel=tg,eS.CancelToken=Dg,eS.isCancel=gg,eS.VERSION=Lg,eS.all=function(e){return Promise.all(e)},eS.spread=function(e){return function(t){return e.apply(null,t)}},eS.isAxiosError=function(e){return Og.isObject(e)&&!0===e.isAxiosError},AV.exports=eS,AV.exports.default=eS;var tS,iS=AV.exports;let nS=tS=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>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)}static getInstance(){return this.axiosInstance||(this.axiosInstance=iS.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new tS),this.axiosInstance.interceptors.request.use((e=>UW(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=iS.all,this.axiosInstance.spread=iS.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}requestHandler(e){return UW(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),tS.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw tS.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return tS.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return UW(this,void 0,void 0,(function*(){tS.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){tS.isHandlerEnabled=!0}disableHandler(){tS.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tS.DEFAULT_HANDLER_DISABLE_TIMEOUT;tS.isHandlerEnabled=!1,setTimeout((()=>{tS.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};nS.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,nS=tS=function(e,t,i,n){var l,o=arguments.length,a=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,n);else for(var r=e.length-1;r>=0;r--)(l=e[r])&&(a=(o<3?l(a):o>3?l(t,i,a):l(t,i))||a);return o>3&&a&&Object.defineProperty(t,i,a),a}([e=>{}],nS);class lS{setData(e,t){return UW(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return UW(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class oS{constructor(){this._data=new Map}setData(e,t){return UW(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return UW(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class aS{setData(e,t){return UW(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return UW(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return UW(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var rS=[],cS=[],sS="undefined"!=typeof Uint8Array?Uint8Array:Array,dS=!1;function uS(){dS=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)rS[t]=e[t],cS[e.charCodeAt(t)]=t;cS["-".charCodeAt(0)]=62,cS["_".charCodeAt(0)]=63}function hS(e,t,i){for(var n,l,o=[],a=t;a<i;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],o.push(rS[(l=n)>>18&63]+rS[l>>12&63]+rS[l>>6&63]+rS[63&l]);return o.join("")}function ZS(e){var t;dS||uS();for(var i=e.length,n=i%3,l="",o=[],a=16383,r=0,c=i-n;r<c;r+=a)o.push(hS(e,r,r+a>c?c:r+a));return 1===n?(t=e[i-1],l+=rS[t>>2],l+=rS[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=rS[t>>10],l+=rS[t>>4&63],l+=rS[t<<2&63],l+="="),o.push(l),o.join("")}function bS(e,t,i,n,l){var o,a,r=8*l-n-1,c=(1<<r)-1,s=c>>1,d=-7,u=i?l-1:0,h=i?-1:1,Z=e[t+u];for(u+=h,o=Z&(1<<-d)-1,Z>>=-d,d+=r;d>0;o=256*o+e[t+u],u+=h,d-=8);for(a=o&(1<<-d)-1,o>>=-d,d+=n;d>0;a=256*a+e[t+u],u+=h,d-=8);if(0===o)o=1-s;else{if(o===c)return a?NaN:1/0*(Z?-1:1);a+=Math.pow(2,n),o-=s}return(Z?-1:1)*a*Math.pow(2,o-n)}function mS(e,t,i,n,l,o){var a,r,c,s=8*o-l-1,d=(1<<s)-1,u=d>>1,h=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,Z=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(r=isNaN(t)?1:0,a=d):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+u>=1?h/c:h*Math.pow(2,1-u))*c>=2&&(a++,c/=2),a+u>=d?(r=0,a=d):a+u>=1?(r=(t*c-1)*Math.pow(2,l),a+=u):(r=t*Math.pow(2,u-1)*Math.pow(2,l),a=0));l>=8;e[i+Z]=255&r,Z+=b,r/=256,l-=8);for(a=a<<l|r,s+=l;s>0;e[i+Z]=255&a,Z+=b,a/=256,s-=8);e[i+Z-b]|=128*m}var pS={}.toString,yS=Array.isArray||function(e){return"[object Array]"==pS.call(e)};VS.TYPED_ARRAY_SUPPORT=void 0===bI.TYPED_ARRAY_SUPPORT||bI.TYPED_ARRAY_SUPPORT;var GS=XS();function XS(){return VS.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function WS(e,t){if(XS()<t)throw new RangeError("Invalid typed array length");return VS.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=VS.prototype:(null===e&&(e=new VS(t)),e.length=t),e}function VS(e,t,i){if(!(VS.TYPED_ARRAY_SUPPORT||this instanceof VS))return new VS(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return SS(this,e)}return IS(this,e,t,i)}function IS(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);VS.TYPED_ARRAY_SUPPORT?(e=t).__proto__=VS.prototype:e=fS(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!VS.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|YS(t,i),l=(e=WS(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(vS(t)){var i=0|RS(t.length);return 0===(e=WS(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?WS(e,0):fS(e,t);if("Buffer"===t.type&&yS(t.data))return fS(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function gS(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function SS(e,t){if(gS(t),e=WS(e,t<0?0:0|RS(t)),!VS.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function fS(e,t){var i=t.length<0?0:0|RS(t.length);e=WS(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function RS(e){if(e>=XS())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+XS().toString(16)+" bytes");return 0|e}function vS(e){return!(null==e||!e._isBuffer)}function YS(e,t){if(vS(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return tf(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return nf(e).length;default:if(n)return tf(e).length;t=(""+t).toLowerCase(),n=!0}}function KS(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return MS(this,t,i);case"utf8":case"utf-8":return FS(this,t,i);case"ascii":return PS(this,t,i);case"latin1":case"binary":return BS(this,t,i);case"base64":return wS(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return jS(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function NS(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function CS(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=VS.from(t,n)),vS(t))return 0===t.length?-1:LS(e,t,i,n,l);if("number"==typeof t)return t&=255,VS.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):LS(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function LS(e,t,i,n,l){var o,a=1,r=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,r/=2,c/=2,i/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(l){var d=-1;for(o=i;o<r;o++)if(s(e,o)===s(t,-1===d?0:o-d)){if(-1===d&&(d=o),o-d+1===c)return d*a}else-1!==d&&(o-=o-d),d=-1}else for(i+c>r&&(i=r-c),o=i;o>=0;o--){for(var u=!0,h=0;h<c;h++)if(s(e,o+h)!==s(t,h)){u=!1;break}if(u)return o}return-1}function US(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var r=parseInt(t.substr(2*a,2),16);if(isNaN(r))return a;e[i+a]=r}return a}function kS(e,t,i,n){return lf(tf(t,e.length-i),e,i,n)}function JS(e,t,i,n){return lf(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function TS(e,t,i,n){return JS(e,t,i,n)}function HS(e,t,i,n){return lf(nf(t),e,i,n)}function xS(e,t,i,n){return lf(function(e,t){for(var i,n,l,o=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(i=e.charCodeAt(a))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function wS(e,t,i){return 0===t&&i===e.length?ZS(e):ZS(e.slice(t,i))}function FS(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,a,r,c,s=e[l],d=null,u=s>239?4:s>223?3:s>191?2:1;if(l+u<=i)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(o=e[l+1]))&&(c=(31&s)<<6|63&o)>127&&(d=c);break;case 3:o=e[l+1],a=e[l+2],128==(192&o)&&128==(192&a)&&(c=(15&s)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(d=c);break;case 4:o=e[l+1],a=e[l+2],r=e[l+3],128==(192&o)&&128==(192&a)&&128==(192&r)&&(c=(15&s)<<18|(63&o)<<12|(63&a)<<6|63&r)>65535&&c<1114112&&(d=c)}null===d?(d=65533,u=1):d>65535&&(d-=65536,n.push(d>>>10&1023|55296),d=56320|1023&d),n.push(d),l+=u}return function(e){var t=e.length;if(t<=zS)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=zS));return i}(n)}VS.poolSize=8192,VS._augment=function(e){return e.__proto__=VS.prototype,e},VS.from=function(e,t,i){return IS(null,e,t,i)},VS.TYPED_ARRAY_SUPPORT&&(VS.prototype.__proto__=Uint8Array.prototype,VS.__proto__=Uint8Array),VS.alloc=function(e,t,i){return function(e,t,i,n){return gS(t),t<=0?WS(e,t):void 0!==i?"string"==typeof n?WS(e,t).fill(i,n):WS(e,t).fill(i):WS(e,t)}(null,e,t,i)},VS.allocUnsafe=function(e){return SS(null,e)},VS.allocUnsafeSlow=function(e){return SS(null,e)},VS.isBuffer=of,VS.compare=function(e,t){if(!vS(e)||!vS(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},VS.isEncoding=function(e){switch(String(e).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}},VS.concat=function(e,t){if(!yS(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return VS.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=VS.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!vS(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},VS.byteLength=YS,VS.prototype._isBuffer=!0,VS.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)NS(this,t,t+1);return this},VS.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)NS(this,t,t+3),NS(this,t+1,t+2);return this},VS.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)NS(this,t,t+7),NS(this,t+1,t+6),NS(this,t+2,t+5),NS(this,t+3,t+4);return this},VS.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?FS(this,0,e):KS.apply(this,arguments)},VS.prototype.equals=function(e){if(!vS(e))throw new TypeError("Argument must be a Buffer");return this===e||0===VS.compare(this,e)},VS.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},VS.prototype.compare=function(e,t,i,n,l){if(!vS(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),a=(i>>>=0)-(t>>>=0),r=Math.min(o,a),c=this.slice(n,l),s=e.slice(t,i),d=0;d<r;++d)if(c[d]!==s[d]){o=c[d],a=s[d];break}return o<a?-1:a<o?1:0},VS.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},VS.prototype.indexOf=function(e,t,i){return CS(this,e,t,i,!0)},VS.prototype.lastIndexOf=function(e,t,i){return CS(this,e,t,i,!1)},VS.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return US(this,e,t,i);case"utf8":case"utf-8":return kS(this,e,t,i);case"ascii":return JS(this,e,t,i);case"latin1":case"binary":return TS(this,e,t,i);case"base64":return HS(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return xS(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},VS.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var zS=4096;function PS(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function BS(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function MS(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=ef(e[o]);return l}function jS(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function QS(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function ES(e,t,i,n,l,o){if(!vS(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function DS(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function OS(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function AS(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function _S(e,t,i,n,l){return l||AS(e,0,i,4),mS(e,t,i,n,23,4),i+4}function qS(e,t,i,n,l){return l||AS(e,0,i,8),mS(e,t,i,n,52,8),i+8}VS.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),VS.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=VS.prototype;else{var l=t-e;i=new VS(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},VS.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},VS.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},VS.prototype.readUInt8=function(e,t){return t||QS(e,1,this.length),this[e]},VS.prototype.readUInt16LE=function(e,t){return t||QS(e,2,this.length),this[e]|this[e+1]<<8},VS.prototype.readUInt16BE=function(e,t){return t||QS(e,2,this.length),this[e]<<8|this[e+1]},VS.prototype.readUInt32LE=function(e,t){return t||QS(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},VS.prototype.readUInt32BE=function(e,t){return t||QS(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},VS.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},VS.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||QS(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},VS.prototype.readInt8=function(e,t){return t||QS(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},VS.prototype.readInt16LE=function(e,t){t||QS(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},VS.prototype.readInt16BE=function(e,t){t||QS(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},VS.prototype.readInt32LE=function(e,t){return t||QS(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},VS.prototype.readInt32BE=function(e,t){return t||QS(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},VS.prototype.readFloatLE=function(e,t){return t||QS(e,4,this.length),bS(this,e,!0,23,4)},VS.prototype.readFloatBE=function(e,t){return t||QS(e,4,this.length),bS(this,e,!1,23,4)},VS.prototype.readDoubleLE=function(e,t){return t||QS(e,8,this.length),bS(this,e,!0,52,8)},VS.prototype.readDoubleBE=function(e,t){return t||QS(e,8,this.length),bS(this,e,!1,52,8)},VS.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||ES(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},VS.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||ES(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},VS.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,1,255,0),VS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},VS.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,65535,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):DS(this,e,t,!0),t+2},VS.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,65535,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):DS(this,e,t,!1),t+2},VS.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,4294967295,0),VS.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):OS(this,e,t,!0),t+4},VS.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,4294967295,0),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):OS(this,e,t,!1),t+4},VS.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);ES(this,e,t,i,l-1,-l)}var o=0,a=1,r=0;for(this[t]=255&e;++o<i&&(a*=256);)e<0&&0===r&&0!==this[t+o-1]&&(r=1),this[t+o]=(e/a>>0)-r&255;return t+i},VS.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);ES(this,e,t,i,l-1,-l)}var o=i-1,a=1,r=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===r&&0!==this[t+o+1]&&(r=1),this[t+o]=(e/a>>0)-r&255;return t+i},VS.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,1,127,-128),VS.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},VS.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,32767,-32768),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):DS(this,e,t,!0),t+2},VS.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,2,32767,-32768),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):DS(this,e,t,!1),t+2},VS.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,2147483647,-2147483648),VS.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):OS(this,e,t,!0),t+4},VS.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||ES(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),VS.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):OS(this,e,t,!1),t+4},VS.prototype.writeFloatLE=function(e,t,i){return _S(this,e,t,!0,i)},VS.prototype.writeFloatBE=function(e,t,i){return _S(this,e,t,!1,i)},VS.prototype.writeDoubleLE=function(e,t,i){return qS(this,e,t,!0,i)},VS.prototype.writeDoubleBE=function(e,t,i){return qS(this,e,t,!1,i)},VS.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!VS.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},VS.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!VS.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var a=vS(e)?e:tf(new VS(e,n).toString()),r=a.length;for(o=0;o<i-t;++o)this[o+t]=a[o%r]}return this};var $S=/[^+\/0-9A-Za-z-_]/g;function ef(e){return e<16?"0"+e.toString(16):e.toString(16)}function tf(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],a=0;a<n;++a){if((i=e.charCodeAt(a))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function nf(e){return function(e){var t,i,n,l,o,a;dS||uS();var r=e.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[r-2]?2:"="===e[r-1]?1:0,a=new sS(3*r/4-o),n=o>0?r-4:r;var c=0;for(t=0,i=0;t<n;t+=4,i+=3)l=cS[e.charCodeAt(t)]<<18|cS[e.charCodeAt(t+1)]<<12|cS[e.charCodeAt(t+2)]<<6|cS[e.charCodeAt(t+3)],a[c++]=l>>16&255,a[c++]=l>>8&255,a[c++]=255&l;return 2===o?(l=cS[e.charCodeAt(t)]<<2|cS[e.charCodeAt(t+1)]>>4,a[c++]=255&l):1===o&&(l=cS[e.charCodeAt(t)]<<10|cS[e.charCodeAt(t+1)]<<4|cS[e.charCodeAt(t+2)]>>2,a[c++]=l>>8&255,a[c++]=255&l),a}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace($S,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function lf(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function of(e){return null!=e&&(!!e._isBuffer||af(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&af(e.slice(0,0))}(e))}function af(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var rf=Object.freeze({__proto__:null,Buffer:VS,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),VS.alloc(+e)},isBuffer:of,kMaxLength:GS}),cf={exports:{}},sf={},df={};Object.defineProperty(df,"__esModule",{value:!0}),df.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,a=VS.alloc(o);for(a.write(e);l--;)a.write("=",n++);return a.toString()},Object.defineProperty(sf,"__esModule",{value:!0});var uf=df;function hf(e,t){return void 0===t&&(t="utf8"),VS.isBuffer(e)?bf(e.toString("base64")):bf(VS.from(e,t).toString("base64"))}function Zf(e){return e=e.toString(),uf.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function bf(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var mf,pf=hf;pf.encode=hf,pf.decode=function(e,t){return void 0===t&&(t="utf8"),VS.from(Zf(e),"base64").toString(t)},pf.toBase64=Zf,pf.fromBase64=bf,pf.toBuffer=function(e){return VS.from(Zf(e),"base64")},sf.default=pf,(mf=cf).exports=sf.default,mf.exports.default=mf.exports;var yf=cf.exports,Gf={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=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 i(e,i,n,l,o){for(var a,r,c,s,d,u,h,Z,b,m,p,y,G;o>=64;){for(a=i[0],r=i[1],c=i[2],s=i[3],d=i[4],u=i[5],h=i[6],Z=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)y=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,G=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(y+e[m-7]|0)+(G+e[m-16]|0);for(m=0;m<64;m++)y=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&u^~d&h)|0)+(Z+(t[m]+e[m]|0)|0)|0,G=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+(a&r^a&c^r&c)|0,Z=h,h=u,u=d,d=s+y|0,s=c,c=r,r=a,a=y+G|0;i[0]+=a,i[1]+=r,i[2]+=c,i[3]+=s,i[4]+=d,i[5]+=u,i[6]+=h,i[7]+=Z,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.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 t.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},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,a=t%64<56?64:128;this.buffer[n]=128;for(var r=n+1;r<a-8;r++)this.buffer[r]=0;this.buffer[a-8]=l>>>24&255,this.buffer[a-7]=l>>>16&255,this.buffer[a-6]=l>>>8&255,this.buffer[a-5]=l>>>0&255,this.buffer[a-4]=o>>>24&255,this.buffer[a-3]=o>>>16&255,this.buffer[a-2]=o>>>8&255,this.buffer[a-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,a),this.finished=!0}for(r=0;r<8;r++)e[4*r+0]=this.state[r]>>>24&255,e[4*r+1]=this.state[r]>>>16&255,e[4*r+2]=this.state[r]>>>8&255,e[4*r+3]=this.state[r]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function a(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function r(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=a;var c=new Uint8Array(e.digestLength);function s(e,t,i,n){void 0===t&&(t=c),void 0===n&&(n=32);for(var o=new Uint8Array([1]),s=a(t,e),d=new l(s),u=new Uint8Array(d.digestLength),h=u.length,Z=new Uint8Array(n),b=0;b<n;b++)h===u.length&&(r(u,d,i,o),h=0),Z[b]=u[h++];return d.clean(),u.fill(0),o.fill(0),Z}function d(e,t,i,n){for(var o=new l(e),a=o.digestLength,r=new Uint8Array(4),c=new Uint8Array(a),s=new Uint8Array(a),d=new Uint8Array(n),u=0;u*a<n;u++){var h=u+1;r[0]=h>>>24&255,r[1]=h>>>16&255,r[2]=h>>>8&255,r[3]=h>>>0&255,o.reset(),o.update(t),o.update(r),o.finish(s);for(var Z=0;Z<a;Z++)c[Z]=s[Z];for(Z=2;Z<=i;Z++){o.reset(),o.update(s).finish(s);for(var b=0;b<a;b++)c[b]^=s[b]}for(Z=0;Z<a&&u*a+Z<n;Z++)d[u*a+Z]=c[Z]}for(u=0;u<a;u++)c[u]=s[u]=0;for(u=0;u<4;u++)r[u]=0;return o.clean(),d}e.hkdf=s,e.pbkdf2=d}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(Gf);var Xf=i(Gf.exports),Wf=crypto;const Vf=e=>e instanceof CryptoKey,If=new TextEncoder,gf=new TextDecoder;const Sf=e=>{let t=e;t instanceof Uint8Array&&(t=gf.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class ff extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class Rf extends ff{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class vf extends ff{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class Yf extends ff{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class Kf extends ff{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class Nf extends ff{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class Cf extends ff{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class Lf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class Uf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class kf extends ff{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class Jf extends ff{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function Tf(){return"function"==typeof WebSocketPair}function Hf(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function xf(e,t){return e.name===t}function wf(e){return parseInt(e.name.slice(4),10)}function Ff(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function zf(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var Pf=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},Bf=e=>Vf(e);const Mf=["CryptoKey"];function jf(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const Qf=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new Kf("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Tf()&&"OKP":if("EdDSA"!==e.alg)throw new Kf('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new Kf('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new Kf('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return Wf.subtle.importKey("raw",Sf(e.k),...o);const a={...e};return delete a.alg,Wf.subtle.importKey("jwk",a,...o)};const Ef=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!Bf(e))throw new TypeError(Pf(e,...Mf,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!Bf(e))throw new TypeError(Pf(e,...Mf));if("secret"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(Mf.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function Df(e,t,i){if(Vf(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!xf(e.algorithm,"HMAC"))throw Hf("HMAC");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!xf(e.algorithm,"RSASSA-PKCS1-v1_5"))throw Hf("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!xf(e.algorithm,"RSA-PSS"))throw Hf("RSA-PSS");const i=parseInt(t.slice(2),10);if(wf(e.algorithm.hash)!==i)throw Hf("SHA-".concat(i),"algorithm.hash");break}case Tf()&&"EdDSA":if(!xf(e.algorithm,"NODE-ED25519"))throw Hf("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!xf(e.algorithm,"ECDSA"))throw Hf("ECDSA");const i=Ff(t);if(e.algorithm.namedCurve!==i)throw Hf(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];zf(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(Pf(t,...Mf));return Wf.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(Pf(t,...Mf,"Uint8Array"))}const Of=async(e,t,i,n)=>{const l=await Df(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case Tf()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new Kf("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await Wf.subtle.verify(o,l,i,n)}catch(e){return!1}};async function Af(e,t,i){var n;if(!jf(e))throw new Nf("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new Nf('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new Nf("JWS Protected Header incorrect type");if(void 0===e.payload)throw new Nf("JWS Payload missing");if("string"!=typeof e.signature)throw new Nf("JWS Signature missing or incorrect type");if(void 0!==e.header&&!jf(e.header))throw new Nf("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=Sf(e.protected);try{l=JSON.parse(gf.decode(t))}catch(e){throw new Nf("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new Nf("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},a=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"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((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new Kf('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(Nf,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let r=!0;if(a.has("b64")&&(r=l.b64,"boolean"!=typeof r))throw new Nf('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:c}=o;if("string"!=typeof c||!c)throw new Nf('JWS "alg" (Algorithm) Header Parameter missing or invalid');const s=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(s&&!s.has(c))throw new Yf('"alg" (Algorithm) Header Parameter not allowed');if(r){if("string"!=typeof e.payload)throw new Nf("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new Nf("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof t&&(t=await t(l,e),d=!0),Ef(c,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(If.encode(null!==(n=e.protected)&&void 0!==n?n:""),If.encode("."),"string"==typeof e.payload?If.encode(e.payload):e.payload),h=Sf(e.signature);if(!await Of(c,t,h,u))throw new Jf;let Z;Z=r?Sf(e.payload):"string"==typeof e.payload?If.encode(e.payload):e.payload;const b={payload:Z};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),d?{...b,key:t}:b}var _f=e=>Math.floor(e.getTime()/1e3);const qf=86400,$f=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var eR=e=>{const t=$f.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(i*qf);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const tR=e=>e.toLowerCase().replace(/^application\//,""),iR=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function nR(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=gf.decode(e)),"string"!=typeof e)throw new Nf("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:a}=e.split(".");if(3!==a)throw new Nf("Invalid Compact JWS");const r=await Af({payload:l,protected:n,signature:o},t,i),c={payload:r.payload,protectedHeader:r.protectedHeader};return"function"==typeof t?{...c,key:r.key}:c}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new Cf("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||tR(e.typ)!==tR(n)))throw new Rf('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(gf.decode(t))}catch(e){}if(!jf(l))throw new Cf("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new Rf('unexpected "iss" claim value',"iss","check_failed");const{subject:a}=i;if(a&&l.sub!==a)throw new Rf('unexpected "sub" claim value',"sub","check_failed");const{audience:r}=i;if(r&&!iR(l.aud,"string"==typeof r?[r]:r))throw new Rf('unexpected "aud" claim value',"aud","check_failed");let c;switch(typeof i.clockTolerance){case"string":c=eR(i.clockTolerance);break;case"number":c=i.clockTolerance;break;case"undefined":c=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=i,d=_f(s||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new Rf('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new Rf('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>d+c)throw new Rf('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new Rf('"exp" claim must be a number',"exp","invalid");if(l.exp<=d-c)throw new vf('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=d-l.iat;if(e-c>("number"==typeof i.maxTokenAge?i.maxTokenAge:eR(i.maxTokenAge)))throw new vf('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-c)throw new Rf('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),a={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...a,key:l.key}:a}function lR(e){return jf(e)}class oR{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(lR)}(e))throw new Lf("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new Kf('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:a,length:r}=o;if(0===r)throw new Uf;if(1!==r)throw new kf;const c=this._cached.get(a)||this._cached.set(a,{}).get(a);if(void 0===c[i]){const e=await async function(e,t,i){if(!jf(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?Qf({...e,alg:t,ext:!1}):Sf(e.k);case"RSA":if(void 0!==e.oth)throw new Kf('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Qf({...e,alg:t});default:throw new Kf('Unsupported "kty" (Key Type) Parameter value')}}({...a,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new Lf("JSON Web Key Set members must be public keys");c[i]=e}return c[i]}}var aR={exports:{}},rR={exports:{}},cR=n(rf);!function(e,t){var i=cR,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(rR,rR.exports);var sR=65536,dR=4294967295;var uR=rR.exports.Buffer,hR=t.crypto||t.msCrypto;hR&&hR.getRandomValues?aR.exports=function(e,t){if(e>dR)throw new RangeError("requested too many random bytes");var i=uR.allocUnsafe(e);if(e>0)if(e>sR)for(var n=0;n<e;n+=sR)hR.getRandomValues(i.slice(n,n+sR));else hR.getRandomValues(i);if("function"==typeof t)return wI.nextTick((function(){t(null,i)}));return i}:aR.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var ZR=aR.exports;class bR{base64URLEncode(e){return yf.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return yf.decode(e).toString()}hashSha256(e){return VS.from(Xf((new TextEncoder).encode(e)))}generateRandomBytes(e){return ZR(e)}verifyJwt(e,t,i,n,l,o,a,r){const c={algorithms:i,audience:n,clockTolerance:a,subject:o};return(null==r||r)&&(c.issuer=l),nR(e,(s={keys:[t]},oR.prototype.getKey.bind(new oR(s))),c).then((()=>Promise.resolve(!0))).catch((e=>{var t;return Promise.reject(new BW("SPA-CRYPTO-UTILS-VJ-IV01",null!==(t=null==e?void 0:e.reason)&&void 0!==t?t:JSON.stringify(e),"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))}));var s}}const mR=(t,i,n)=>UW(void 0,void 0,void 0,(function*(){var l;const o=(t=>{switch(t){case e.Storage.LocalStorage:return new lS;case e.Storage.SessionStorage:return new aS;case e.Storage.BrowserMemory:return new oS;default:return new aS}})(i.storage),a=new bR,r=new AW;yield r.initialize(i,o,a,t);const c=new DV(r),s=r.getDataLayer(),d=yield OV((()=>UW(void 0,void 0,void 0,(function*(){return r.getSignOutURL()}))),null!==(l=i.storage)&&void 0!==l?l:e.Storage.SessionStorage,(e=>s.setSessionDataParameter(xW,null!=e?e:""))),u=n(r,c);let h=!1;const Z=nS.getInstance();let b,m,p=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,(e=>UW(void 0,void 0,void 0,(function*(){yield u.attachTokenToRequestConfig(e)})))));const y=()=>UW(void 0,void 0,void 0,(function*(){const e=yield r.getOIDCServiceEndpoints(),t=yield s.getConfigData();u.initializeSessionManger(t,e,(()=>UW(void 0,void 0,void 0,(function*(){return(yield r.getBasicUserInfo()).sessionState}))),(e=>UW(void 0,void 0,void 0,(function*(){return r.getAuthorizationURL(e)}))),d)})),G=()=>UW(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>UW(void 0,void 0,void 0,(function*(){yield s.setSessionDataParameter(xW,null!=e?e:"")}))))})),X=e=>{e.preventSignOutURLUpdate&&(h=!0)},W=(e,t,i)=>UW(void 0,void 0,void 0,(function*(){return yield u.requestAccessToken(e,t,y,void 0,i)})),V=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return UW(void 0,void 0,void 0,(function*(){const i=yield s.getConfigData(),n=yield r.getAuthorizationURL(Object.assign({prompt:"none",state:HV},t)),l=new URL(n);l.searchParams.set("response_mode","query");const o=l.toString();if(i.storage===e.Storage.BrowserMemory&&i.enablePKCE){const e=l.searchParams.get(zW);QV.setPKCE(MW.extractPKCEKeyFromStateParam(null!=e?e:""),yield r.getPKCECode(null!=e?e:""))}return o}))};return{disableHttpHandler:()=>(u.disableHttpHandler(Z),p=!1,!0),enableHttpHandler:()=>(u.enableHttpHandler(Z),p=!0,!0),getAccessToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getAccessToken()})),getBasicUserInfo:()=>UW(void 0,void 0,void 0,(function*(){return u.getBasicUserInfo()})),getCryptoHelper:()=>UW(void 0,void 0,void 0,(function*(){return u.getCryptoHelper()})),getDataLayer:()=>UW(void 0,void 0,void 0,(function*(){return u.getDataLayer()})),getDecodedIDToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>UW(void 0,void 0,void 0,(function*(){return u.getIDToken()})),getOIDCServiceEndpoints:()=>UW(void 0,void 0,void 0,(function*(){return u.getOIDCServiceEndpoints()})),httpRequest:e=>UW(void 0,void 0,void 0,(function*(){return yield u.httpRequest(Z,e,p,b,m)})),httpRequestAll:e=>UW(void 0,void 0,void 0,(function*(){return yield u.httpRequestAll(e,Z,p,b,m)})),isAuthenticated:()=>UW(void 0,void 0,void 0,(function*(){return u.isAuthenticated()})),isSessionActive:()=>UW(void 0,void 0,void 0,(function*(){return"true"===(yield s.getSessionStatus())})),refreshAccessToken:()=>UW(void 0,void 0,void 0,(function*(){try{return yield u.refreshAccessToken(X)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>UW(void 0,void 0,void 0,(function*(){return yield u.requestCustomGrant(e,X)})),revokeAccessToken:()=>UW(void 0,void 0,void 0,(function*(){const e=yield c.getRefreshTimeoutTimer();return r.revokeAccessToken().then((()=>(d.reset(),c.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{b=e},setHttpRequestFinishCallback:e=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(e)},signIn:(t,n,l,o)=>UW(void 0,void 0,void 0,(function*(){var a,c,d;const h=yield u.handleSignIn(G,y);if(h)return h;{let u,h,b;return(null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(u=n,h=null!=l?l:"",b=null!=o?o:""):(u=null!==(a=new URL(window.location.href).searchParams.get(HW))&&void 0!==a?a:"",h=null!==(c=new URL(window.location.href).searchParams.get(xW))&&void 0!==c?c:"",b=null!==(d=new URL(window.location.href).searchParams.get(zW))&&void 0!==d?d:"",QV.removeAuthorizationCode()),u&&b?(Z="true",UW(void 0,void 0,void 0,(function*(){yield s.setSessionStatus(Z)})),W(u,h,b)):r.getAuthorizationURL(t).then((t=>UW(void 0,void 0,void 0,(function*(){if(i.storage===e.Storage.BrowserMemory&&i.enablePKCE){const e=MW.extractPKCEKeyFromStateParam(b);QV.setPKCE(e,yield r.getPKCECode(b))}return location.href=t,yield QV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}var Z})),signOut:()=>UW(void 0,void 0,void 0,(function*(){return(yield r.isAuthenticated())&&!h?location.href=yield r.getSignOutURL():location.href=QV.getSignOutURL(i.clientID,t),c.clearRefreshTokenTimeout(),yield s.removeOIDCProviderMetaData(),yield s.removeTemporaryData(),yield s.removeSessionData(),yield s.removeSessionStatus(),yield QV.waitTillPageRedirect(),!0})),trySignInSilently:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return UW(void 0,void 0,void 0,(function*(){return yield u.trySignInSilently(V,W,d,e)}))},updateConfig:e=>UW(void 0,void 0,void 0,(function*(){const t=yield s.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield r.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),y())}))}})),pR=(t,i,n,l)=>UW(void 0,void 0,void 0,(function*(){var o;let a;const r=null!==(o=null==i?void 0:i.requestTimeout)&&void 0!==o?o:6e4;let c=!0,s=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new lS;case e.Storage.SessionStorage:return new aS;case e.Storage.BrowserMemory:return new oS;default:return new aS}})(i.storage),u=new bR,h=new AW;yield h.initialize(i,d,u,t);const Z=new DV(h),b=yield OV((()=>UW(void 0,void 0,void 0,(function*(){const e={type:lV};try{return yield y(e)}catch(e){return QV.getSignOutURL(i.clientID,t)}}))),i.storage,(e=>G(e))),m=l(h,Z),p=new n,y=e=>{const t=new MessageChannel;return p.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new BW("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+r/1e3+" since dispatching the request"))}),r);return t.port1.onmessage=l=>{let{data:o}=l;if(clearTimeout(n),t.port1.close(),t.port2.close(),null==o?void 0:o.success){const t=(null==o?void 0:o.data)?JSON.parse(null==o?void 0:o.data):null;(null==o?void 0:o.blob)&&(t.data=null==o?void 0:o.blob),e(t)}else i(o.error?JSON.parse(o.error):null)}}))},G=e=>y({data:e,type:SV}),X=()=>y({type:fV}),W=()=>UW(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield v();m.initializeSessionManger(t,e,(()=>UW(void 0,void 0,void 0,(function*(){return(yield Y()).sessionState}))),(e=>UW(void 0,void 0,void 0,(function*(){return(yield I(e)).authorizationURL}))),b)})),V=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return UW(void 0,void 0,void 0,(function*(){var t;const i=yield v(),n={data:Object.assign({prompt:"none",state:HV},e),type:GV},l=yield y(n),o=MW.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(zW))&&void 0!==t?t:"");l.pkce&&i.enablePKCE&&QV.setPKCE(o,l.pkce);const a=l.authorizationURL,r=new URL(a);r.searchParams.set("response_mode","query");return r.toString()}))},I=e=>UW(void 0,void 0,void 0,(function*(){const t=yield v();return y({data:e,type:GV}).then((e=>UW(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=MW.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(zW))&&void 0!==i?i:"");QV.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),g=(e,i,n)=>UW(void 0,void 0,void 0,(function*(){const l=yield v(),o=MW.extractPKCEKeyFromStateParam(n),a={data:{code:e,pkce:l.enablePKCE?QV.getPKCE(o):void 0,sessionState:i,state:n},type:XV};return l.enablePKCE&&QV.removePKCE(o),y(a).then((e=>y({type:VV}).then((i=>(QV.setSignOutURL(i,l.clientID,t),l.enableOIDCSessionManagement&&W(),X(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),S=()=>UW(void 0,void 0,void 0,(function*(){return yield b.receivePromptNoneResponse((e=>UW(void 0,void 0,void 0,(function*(){return G(e)}))))})),f=()=>UW(void 0,void 0,void 0,(function*(){if(yield K())return yield X(),i.enableOIDCSessionManagement&&W(),Y()})),R=()=>y({type:hV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>y({type:NV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),Y=()=>y({type:ZV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),K=()=>y({type:WV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>y({type:yV}).then((()=>(c=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>y({type:pV}).then((()=>(c=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:Y,getCryptoHelper:()=>y({type:mV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>y({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>y({type:bV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>y({type:vV}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>{(null==e?void 0:e.data)&&(null==e?void 0:e.data)instanceof FormData&&(e.data=Object.assign(Object.assign({},Object.fromEntries(null==e?void 0:e.data.entries())),{formData:!0}));return y({data:e,type:oV}).then((e=>Promise.resolve(e))).catch((e=>UW(void 0,void 0,void 0,(function*(){return c&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)}))))},httpRequestAll:e=>y({data:e,type:aV}).then((e=>Promise.resolve(e))).catch((e=>UW(void 0,void 0,void 0,(function*(){return c&&("function"==typeof a.requestErrorCallback&&(yield a.requestErrorCallback(e)),"function"==typeof a.requestFinishCallback&&a.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{a||(a={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),p.onmessage=e=>{let{data:t}=e;switch(t.type){case uV:(null==a?void 0:a.requestFinishCallback)&&(null==a||a.requestFinishCallback());break;case sV:(null==a?void 0:a.requestStartCallback)&&(null==a||a.requestStartCallback());break;case dV:(null==a?void 0:a.requestSuccessCallback)&&(null==a||a.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return y({data:i,type:nV}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:K,refreshAccessToken:()=>y({type:IV}),requestCustomGrant:e=>y({data:e,type:rV}).then((t=>(e.preventSignOutURLUpdate&&(s=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>y({type:cV}).then((e=>(b.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(a.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(a.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(a.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(a.requestSuccessCallback=e)},signIn:(t,n,l,o)=>UW(void 0,void 0,void 0,(function*(){var a,r,c;const s=yield m.handleSignIn(S,W,f);if(s)return s;{let s,d,u;return(null==i?void 0:i.responseMode)===e.ResponseMode.formPost&&n?(s=n,d=null!=l?l:"",u=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(HW))&&void 0!==a?a:"",d=null!==(r=new URL(window.location.href).searchParams.get(xW))&&void 0!==r?r:"",u=null!==(c=new URL(window.location.href).searchParams.get(zW))&&void 0!==c?c:"",QV.removeAuthorizationCode()),s&&u?g(s,d,u):I(t).then((e=>UW(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield QV.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>K().then((e=>UW(void 0,void 0,void 0,(function*(){if(e&&!s){return y({type:lV}).then((e=>UW(void 0,void 0,void 0,(function*(){return window.location.href=e,yield QV.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e)))}return window.location.href=QV.getSignOutURL(i.clientID,t),yield QV.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e))),trySignInSilently:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return UW(void 0,void 0,void 0,(function*(){return yield m.trySignInSilently(V,g,b,e)}))},updateConfig:e=>UW(void 0,void 0,void 0,(function*(){const t=yield v(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:RV};yield y(l),n.enableOIDCSessionManagement&&i&&(b.reset(),W())}))}})),yR={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage};class GR{constructor(e){this._authHelper=EV,this._worker=iV,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||EV}instantiateWorker(e){this._worker=e||iV}_isInitialized(){return UW(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return UW(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!(e&&!(yield this.isAuthenticated()))||Promise.reject(new BW("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new BW("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}static getInstance(e){var t,i;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(i=this._instances)||void 0===i?void 0:i.get(0))?this._instances.get(0):e?(this._instances.set(e,new GR(e)),this._instances.get(e)):(this._instances.set(0,new GR(0)),this._instances.get(0))}initialize(t,i,n){var l;return UW(this,void 0,void 0,(function*(){if(this._storage=null!==(l=t.storage)&&void 0!==l?l:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,i&&this.instantiateAuthHelper(i),n&&this.instantiateWorker(n),this._storage!==e.Storage.WebWorker){if(!this._client){const e=t,i=Object.assign({},yR);this._client=yield mR(this._instanceID,Object.assign(Object.assign({},i),e),((e,t)=>new this._authHelper(e,t)))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),window.addEventListener("message",(e=>{var t;(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===gV&&this.signOut()})),Promise.resolve(!0)}if(!this._client){const e=t;return this._client=yield pR(this._instanceID,Object.assign(Object.assign({},yR),e),this._worker,((e,t)=>new this._authHelper(e,t))),this._client.initialize().then((()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e)))}return Promise.resolve(!0)}))}getBasicUserInfo(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo()}))}signIn(e,t,i,n){var l;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),QV.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t))return null==e||delete e.callOnlyOnRedirect,null===(l=this._client)||void 0===l?void 0:l.signIn(e,t,i,n).then((e=>(this._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e),e)))}))}trySignInSilently(e){var t;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!QV.wasSignInCalled())return null===(t=this._client)||void 0===t?void 0:t.trySignInSilently(e).then((e=>{if(this._onSignInCallback&&e){const t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t)}return e}))}))}signOut(){var e,t;return UW(this,void 0,void 0,(function*(){yield this._validateMethod();return null!==(t=yield null===(e=this._client)||void 0===e?void 0:e.signOut())&&void 0!==t&&t}))}httpRequest(e){var t;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(e.attachToken),null===(t=this._client)||void 0===t?void 0:t.httpRequest(e)}))}httpRequestAll(e){var t;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e)}))}requestCustomGrant(e){var t,i;return UW(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new BW("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(i=this._onCustomGrant)||void 0===i?void 0:i.get(e.id)),n}))}revokeAccessToken(){var e;return UW(this,void 0,void 0,(function*(){yield this._validateMethod();const t=yield null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(t)),t}))}getOIDCServiceEndpoints(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints()}))}getHttpClient(){if(this._client){if(this._storage!==e.Storage.WebWorker){return this._client.getHttpClient()}throw new BW("SPA-AUTH_CLIENT-GHC-IV01","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new BW("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}getDecodedIDToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken()}))}getCryptoHelper(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getCryptoHelper()}))}getIDToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getIDToken()}))}getAccessToken(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}getIDPAccessToken(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}getDataLayer(){return UW(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getDataLayer()}))}refreshAccessToken(){var e;return UW(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken()}))}isAuthenticated(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.isAuthenticated()}))}isSessionActive(){return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new BW("SPA-AUTH_CLIENT-ISA-IV01","The active session cannot be returned.","The active session cannot be returned when the storage type is set to webWorker or browserMemory."));const t=this._client;return null==t?void 0:t.isSessionActive()}))}on(t,i,n){var l,o,a,r;return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!i||"function"!=typeof i)throw new BW("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case e.Hooks.SignIn:this._onSignInCallback=i;break;case e.Hooks.SignOut:this._onSignOutCallback=i,(yield QV.isSignOutSuccessful())&&this._onSignOutCallback();break;case e.Hooks.RevokeAccessToken:this._onEndUserSession=i;break;case e.Hooks.Initialize:this._onInitialize=i;break;case e.Hooks.HttpRequestError:null===(l=this._client)||void 0===l||l.setHttpRequestErrorCallback(i);break;case e.Hooks.HttpRequestFinish:null===(o=this._client)||void 0===o||o.setHttpRequestFinishCallback(i);break;case e.Hooks.HttpRequestStart:null===(a=this._client)||void 0===a||a.setHttpRequestStartCallback(i);break;case e.Hooks.HttpRequestSuccess:null===(r=this._client)||void 0===r||r.setHttpRequestSuccessCallback(i);break;case e.Hooks.CustomGrant:n&&this._onCustomGrant.set(n,i);break;case e.Hooks.SignOutFailed:{this._onSignOutFailedCallback=i;const e=QV.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new BW("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}enableHttpHandler(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler()}))}disableHttpHandler(){var e;return UW(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler()}))}updateConfig(t){return UW(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===e.Storage.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}GR._instances=new Map;class XR extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}return e.ASGARDEO_SESSION_ACTIVE="asgardeo-session-active",e.AUTHORIZATION_CODE=HW,e.AsgardeoAuthClient=AW,e.AsgardeoAuthException=BW,e.AsgardeoSPAClient=GR,e.AuthenticationHelper=EV,e.AuthenticationUtils=MW,e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.CryptoHelper=QW,e.DataLayer=DW,e.MainThreadClient=mR,e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=JW,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=xW,e.SIGN_OUT_SUCCESS_PARAM=FW,e.SIGN_OUT_URL=wW,e.SPAHelper=DV,e.SPAUtils=QV,e.STATE=zW,e.SUPPORTED_SIGNATURE_ALGORITHMS=TW,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=XR,e.WebWorkerClient=pR,e.workerReceiver=e=>{const t=self;let i;t.onmessage=t=>{let{data:a,ports:r}=t;return UW(void 0,void 0,void 0,(function*(){var t,c,s,d,u,h;const Z=r[0];if(a.type===nV||i)switch(a.type){case nV:try{const t=Object.assign({},a.data);i=yield((e,t)=>UW(void 0,void 0,void 0,(function*(){const i=new oS,n=new bR,l=new AW;yield l.initialize(e,i,n);const o=new DV(l),a=t(l,o),r=l.getDataLayer(),c=nS.getInstance();return(null==c?void 0:c.init)&&(yield c.init(!0,(e=>UW(void 0,void 0,void 0,(function*(){yield a.attachTokenToRequestConfig(e)}))))),{disableHttpHandler:()=>{a.disableHttpHandler(c)},enableHttpHandler:()=>{a.enableHttpHandler(c)},getAccessToken:()=>a.getAccessToken(),getAuthorizationURL:e=>UW(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>UW(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(zW))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>UW(void 0,void 0,void 0,(function*(){return a.getBasicUserInfo()})),getConfigData:()=>UW(void 0,void 0,void 0,(function*(){return r.getConfigData()})),getCryptoHelper:()=>UW(void 0,void 0,void 0,(function*(){return a.getCryptoHelper()})),getDecodedIDPIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getDecodedIDPIDToken()})),getDecodedIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getDecodedIDToken()})),getIDToken:()=>UW(void 0,void 0,void 0,(function*(){return a.getIDToken()})),getOIDCServiceEndpoints:()=>UW(void 0,void 0,void 0,(function*(){return a.getOIDCServiceEndpoints()})),getSignOutURL:()=>UW(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>UW(void 0,void 0,void 0,(function*(){return yield a.httpRequest(c,e)})),httpRequestAll:e=>UW(void 0,void 0,void 0,(function*(){return yield a.httpRequestAll(e,c)})),isAuthenticated:()=>a.isAuthenticated(),refreshAccessToken:()=>UW(void 0,void 0,void 0,(function*(){try{return yield a.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>UW(void 0,void 0,void 0,(function*(){return yield a.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>UW(void 0,void 0,void 0,(function*(){return yield a.requestCustomGrant(e)})),revokeAccessToken:()=>UW(void 0,void 0,void 0,(function*(){const e=yield o.getRefreshTimeoutTimer();return l.revokeAccessToken().then((()=>(o.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestFinishCallback:e=>{(null==c?void 0:c.setHttpRequestFinishCallback)&&c.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==c?void 0:c.setHttpRequestStartCallback)&&c.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==c?void 0:c.setHttpRequestSuccessCallback)&&c.setHttpRequestSuccessCallback(e)},setSessionState:e=>UW(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(xW,e)})),signOut:()=>UW(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>UW(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(a)})),updateConfig:e=>UW(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),Z.postMessage(jV.generateSuccessMessage())}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case GV:i.getAuthorizationURL(null==a?void 0:a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case XV:i.requestAccessToken(null===(t=null==a?void 0:a.data)||void 0===t?void 0:t.code,null===(c=null==a?void 0:a.data)||void 0===c?void 0:c.sessionState,null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.pkce,null===(d=null==a?void 0:a.data)||void 0===d?void 0:d.state).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case oV:{const e=a.data,t=null==e?void 0:e.data;if(!0===(null===(h=null===(u=a.data)||void 0===u?void 0:u.data)||void 0===h?void 0:h.formData)){const i=new FormData;for(const e in t)"formData"!==e&&i.append(e,t[e]);e.data=i}i.httpRequest(e).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break}case aV:i.httpRequestAll(a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case lV:try{Z.postMessage(jV.generateSuccessMessage(yield i.signOut()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case rV:i.requestCustomGrant(a.data).then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case cV:i.revokeAccessToken().then((e=>{Z.postMessage(jV.generateSuccessMessage(e))})).catch((e=>{Z.postMessage(jV.generateFailureMessage(e))}));break;case hV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case ZV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case bV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case mV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case vV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getIDToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case pV:i.enableHttpHandler(),Z.postMessage(jV.generateSuccessMessage());break;case yV:i.disableHttpHandler(),Z.postMessage(jV.generateSuccessMessage());break;case WV:try{Z.postMessage(jV.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case VV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case IV:try{Z.postMessage(jV.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case fV:try{Z.postMessage(jV.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case SV:try{Z.postMessage(jV.generateSuccessMessage(yield i.setSessionState(null==a?void 0:a.data)))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case RV:try{Z.postMessage(jV.generateSuccessMessage(yield i.updateConfig(null==a?void 0:a.data)))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;case NV:try{Z.postMessage(jV.generateSuccessMessage(yield i.getConfigData()))}catch(e){Z.postMessage(jV.generateFailureMessage(e))}break;default:null==Z||Z.postMessage(jV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(a.type,", is invalid."))))}else Z.postMessage(jV.generateFailureMessage(new BW("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}))};const n=()=>{t.postMessage({type:sV})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:dV})},o=()=>{t.postMessage({type:uV})}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
2
2
  //# sourceMappingURL=asgardeo-spa.production.min.js.map