@asgardeo/auth-react 1.1.15 → 1.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],e):"object"==typeof exports?exports.AsgardeoAuth=e(require("react"),require("react-router-dom")):t.AsgardeoAuth=e(t.React,t.ReactRouter)}(this,(function(t,e){return function(t){var e={};function n(l){if(e[l])return e[l].exports;var i=e[l]={i:l,l:!1,exports:{}};return t[l].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,l){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:l})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var l=Object.create(null);if(n.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(l,i,function(e){return t[e]}.bind(null,i));return l},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=596)}([function(t,e,n){var l=n(1),i=n(31).f,c=n(28),o=n(19),d=n(131),r=n(132),a=n(88);t.exports=function(t,e){var n,u,s,Z,b,m=t.target,h=t.global,p=t.stat;if(n=h?l:p?l[m]||d(m,{}):(l[m]||{}).prototype)for(u in e){if(Z=e[u],s=t.noTargetGet?(b=i(n,u))&&b.value:n[u],!a(h?u:m+(p?".":"#")+u,t.forced)&&void 0!==s){if(typeof Z==typeof s)continue;r(Z,s)}(t.sham||s&&s.sham)&&c(Z,"sham",!0),o(n,u,Z,t)}}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n(163))},function(t,e,n){var l=n(1),i=n(12),c=l.String,o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not an object")}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.bind,o=i.call,d=l&&c.bind(o,o);t.exports=l?function(t){return t&&d(t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var l=n(83),i=Function.prototype.call;t.exports=l?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){var l=n(1),i=n(10),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a function")}},function(t,e,n){var l=n(1),i=n(63),c=n(15),o=n(85),d=n(72),r=n(164),a=i("wks"),u=l.Symbol,s=u&&u.for,Z=r?u:u&&u.withoutSetter||o;t.exports=function(t){if(!c(a,t)||!d&&"string"!=typeof a[t]){var e="Symbol."+t;d&&c(u,t)?a[t]=u[t]:a[t]=r&&s?s(e):Z(e)}return a[t]}},function(t,e,n){var l=n(1),i=n(22),c=n(5),o=n(2),d=n(73),r=n(139),a=n(21),u=n(36),s=n(45),Z=n(61),b=n(107),m=l.TypeError,h=function(t,e){this.stopped=t,this.result=e},p=h.prototype;t.exports=function(t,e,n){var l,I,G,g,X,y,V,W=n&&n.that,C=!(!n||!n.AS_ENTRIES),R=!(!n||!n.IS_ITERATOR),f=!(!n||!n.INTERRUPTED),Y=i(e,W),v=function(t){return l&&b(l,"normal",t),new h(!0,t)},S=function(t){return C?(o(t),f?Y(t[0],t[1],v):Y(t[0],t[1])):f?Y(t,v):Y(t)};if(R)l=t;else{if(!(I=Z(t)))throw m(d(t)+" is not iterable");if(r(I)){for(G=0,g=a(t);g>G;G++)if((X=S(t[G]))&&u(p,X))return X;return new h(!1)}l=s(t,I)}for(y=l.next;!(V=c(y,l)).done;){try{X=S(V.value)}catch(t){b(l,"throw",t)}if("object"==typeof X&&X&&u(p,X))return X}return new h(!1)}},function(t,e,n){var l=n(4);t.exports=!l((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,n){var l=n(1),i=n(10),c=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?c(l[t]):l[t]&&l[t][e]}},function(t,e,n){var l=n(10);t.exports=function(t){return"object"==typeof t?null!==t:l(t)}},function(t,e,n){var l=n(1),i=n(26),c=l.Object;t.exports=function(t){return c(i(t))}},function(t,e,n){var l=n(1),i=n(64),c=l.String;t.exports=function(t){if("Symbol"===i(t))throw TypeError("Cannot convert a Symbol value to a string");return c(t)}},function(t,e,n){var l=n(3),i=n(13),c=l({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return c(i(t),e)}},function(t,e,n){var l=n(1),i=n(9),c=n(166),o=n(167),d=n(2),r=n(55),a=l.TypeError,u=Object.defineProperty,s=Object.getOwnPropertyDescriptor;e.f=i?o?function(t,e,n){if(d(t),e=r(e),d(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var l=s(t,e);l&&l.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:l.configurable,enumerable:"enumerable"in n?n.enumerable:l.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(d(t),e=r(e),d(n),c)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw a("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var l,i,c,o=n(144),d=n(9),r=n(1),a=n(10),u=n(12),s=n(15),Z=n(64),b=n(73),m=n(28),h=n(19),p=n(16).f,I=n(36),G=n(32),g=n(51),X=n(7),y=n(85),V=r.Int8Array,W=V&&V.prototype,C=r.Uint8ClampedArray,R=C&&C.prototype,f=V&&G(V),Y=W&&G(W),v=Object.prototype,S=r.TypeError,K=X("toStringTag"),N=y("TYPED_ARRAY_TAG"),J=y("TYPED_ARRAY_CONSTRUCTOR"),H=o&&!!g&&"Opera"!==Z(r.opera),L=!1,U={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},k={BigInt64Array:8,BigUint64Array:8},B=function(t){if(!u(t))return!1;var e=Z(t);return s(U,e)||s(k,e)};for(l in U)(c=(i=r[l])&&i.prototype)?m(c,J,i):H=!1;for(l in k)(c=(i=r[l])&&i.prototype)&&m(c,J,i);if((!H||!a(f)||f===Function.prototype)&&(f=function(){throw S("Incorrect invocation")},H))for(l in U)r[l]&&g(r[l],f);if((!H||!Y||Y===v)&&(Y=f.prototype,H))for(l in U)r[l]&&g(r[l].prototype,Y);if(H&&G(R)!==Y&&g(R,Y),d&&!s(Y,K))for(l in L=!0,p(Y,K,{get:function(){return u(this)?this[N]:void 0}}),U)r[l]&&m(r[l],N,l);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:H,TYPED_ARRAY_CONSTRUCTOR:J,TYPED_ARRAY_TAG:L&&N,aTypedArray:function(t){if(B(t))return t;throw S("Target is not a typed array")},aTypedArrayConstructor:function(t){if(a(t)&&(!g||I(f,t)))return t;throw S(b(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,l){if(d){if(n)for(var i in U){var c=r[i];if(c&&s(c.prototype,t))try{delete c.prototype[t]}catch(n){try{c.prototype[t]=e}catch(t){}}}Y[t]&&!n||h(Y,t,n?e:H&&W[t]||e,l)}},exportTypedArrayStaticMethod:function(t,e,n){var l,i;if(d){if(g){if(n)for(l in U)if((i=r[l])&&s(i,t))try{delete i[t]}catch(t){}if(f[t]&&!n)return;try{return h(f,t,n?e:H&&f[t]||e)}catch(t){}}for(l in U)!(i=r[l])||i[t]&&!n||h(i,t,e)}},isView:function(t){if(!u(t))return!1;var e=Z(t);return"DataView"===e||s(U,e)||s(k,e)},isTypedArray:B,TypedArray:f,TypedArrayPrototype:Y}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.apply,o=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(l?o.bind(c):function(){return o.apply(c,arguments)})},function(t,e,n){var l=n(1),i=n(10),c=n(15),o=n(28),d=n(131),r=n(103),a=n(20),u=n(74).CONFIGURABLE,s=a.get,Z=a.enforce,b=String(String).split("String");(t.exports=function(t,e,n,r){var a,s=!!r&&!!r.unsafe,m=!!r&&!!r.enumerable,h=!!r&&!!r.noTargetGet,p=r&&void 0!==r.name?r.name:e;i(n)&&("Symbol("===String(p).slice(0,7)&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!c(n,"name")||u&&n.name!==p)&&o(n,"name",p),(a=Z(n)).source||(a.source=b.join("string"==typeof p?p:""))),t!==l?(s?!h&&t[e]&&(m=!0):delete t[e],m?t[e]=n:o(t,e,n)):m?t[e]=n:d(e,n)})(Function.prototype,"toString",(function(){return i(this)&&s(this).source||r(this)}))},function(t,e,n){var l,i,c,o=n(168),d=n(1),r=n(3),a=n(12),u=n(28),s=n(15),Z=n(101),b=n(104),m=n(86),h=d.TypeError,p=d.WeakMap;if(o||Z.state){var I=Z.state||(Z.state=new p),G=r(I.get),g=r(I.has),X=r(I.set);l=function(t,e){if(g(I,t))throw new h("Object already initialized");return e.facade=t,X(I,t,e),e},i=function(t){return G(I,t)||{}},c=function(t){return g(I,t)}}else{var y=b("state");m[y]=!0,l=function(t,e){if(s(t,y))throw new h("Object already initialized");return e.facade=t,u(t,y,e),e},i=function(t){return s(t,y)?t[y]:{}},c=function(t){return s(t,y)}}t.exports={set:l,get:i,has:c,enforce:function(t){return c(t)?i(t):l(t,{})},getterFor:function(t){return function(e){var n;if(!a(e)||(n=i(e)).type!==t)throw h("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var l=n(37);t.exports=function(t){return l(t.length)}},function(t,e,n){var l=n(3),i=n(6),c=n(83),o=l(l.bind);t.exports=function(t,e){return i(t),void 0===e?t:c?o(t,e):function(){return t.apply(e,arguments)}}},function(e,n){e.exports=t},function(t,e){t.exports=!1},function(t,e,n){var l=n(222),i=n(15),c=n(171),o=n(16).f;t.exports=function(t){var e=l.Symbol||(l.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e,n){var l=n(1).TypeError;t.exports=function(t){if(null==t)throw l("Can't call method on "+t);return t}},function(t,e,n){var l=n(6);t.exports=function(t,e){var n=t[e];return null==n?void 0:l(n)}},function(t,e,n){var l=n(9),i=n(16),c=n(43);t.exports=l?function(t,e,n){return i.f(t,e,c(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var l,i=n(2),c=n(106),o=n(134),d=n(86),r=n(170),a=n(102),u=n(104),s=u("IE_PROTO"),Z=function(){},b=function(t){return"<script>"+t+"<\/script>"},m=function(t){t.write(b("")),t.close();var e=t.parentWindow.Object;return t=null,e},h=function(){try{l=new ActiveXObject("htmlfile")}catch(t){}var t,e;h="undefined"!=typeof document?document.domain&&l?m(l):((e=a("iframe")).style.display="none",r.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):m(l);for(var n=o.length;n--;)delete h.prototype[o[n]];return h()};d[s]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(Z.prototype=i(t),n=new Z,Z.prototype=null,n[s]=t):n=h(),void 0===e?n:c.f(n,e)}},function(t,e,n){var l=n(22),i=n(3),c=n(84),o=n(13),d=n(21),r=n(76),a=i([].push),u=function(t){var e=1==t,n=2==t,i=3==t,u=4==t,s=6==t,Z=7==t,b=5==t||s;return function(m,h,p,I){for(var G,g,X=o(m),y=c(X),V=l(h,p),W=d(y),C=0,R=I||r,f=e?R(m,W):n||Z?R(m,0):void 0;W>C;C++)if((b||C in y)&&(g=V(G=y[C],C,X),t))if(e)f[C]=g;else if(g)switch(t){case 3:return!0;case 5:return G;case 6:return C;case 2:a(f,G)}else switch(t){case 4:return!1;case 7:a(f,G)}return s?-1:i||u?u:f}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(t,e,n){var l=n(9),i=n(5),c=n(100),o=n(43),d=n(34),r=n(55),a=n(15),u=n(166),s=Object.getOwnPropertyDescriptor;e.f=l?s:function(t,e){if(t=d(t),e=r(e),u)try{return s(t,e)}catch(t){}if(a(t,e))return o(!i(c.f,t,e),t[e])}},function(t,e,n){var l=n(1),i=n(15),c=n(10),o=n(13),d=n(104),r=n(141),a=d("IE_PROTO"),u=l.Object,s=u.prototype;t.exports=r?u.getPrototypeOf:function(t){var e=o(t);if(i(e,a))return e[a];var n=e.constructor;return c(n)&&e instanceof n?n.prototype:e instanceof u?s:null}},function(t,e,n){var l=n(2),i=n(112),c=n(7)("species");t.exports=function(t,e){var n,o=l(t).constructor;return void 0===o||null==(n=l(o)[c])?e:i(n)}},function(t,e,n){var l=n(84),i=n(26);t.exports=function(t){return l(i(t))}},function(t,e){var n=Math.ceil,l=Math.floor;t.exports=function(t){var e=+t;return e!=e||0===e?0:(e>0?l:n)(e)}},function(t,e,n){var l=n(3);t.exports=l({}.isPrototypeOf)},function(t,e,n){var l=n(35),i=Math.min;t.exports=function(t){return t>0?i(l(t),9007199254740991):0}},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=/"/g,d=l("".replace);t.exports=function(t,e,n,l){var r=c(i(t)),a="<"+e;return""!==n&&(a+=" "+n+'="'+d(c(l),o,"&quot;")+'"'),a+">"+r+"</"+e+">"}},function(t,e,n){var l=n(4);t.exports=function(t){return l((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e,n){var l=n(3),i=l({}.toString),c=l("".slice);t.exports=function(t){return c(i(t),8,-1)}},function(t,e,n){var l=n(16).f,i=n(15),c=n(7)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,c)&&l(t,c,{configurable:!0,value:e})}},function(t,e,n){var l=n(1),i=n(36),c=l.TypeError;t.exports=function(t,e){if(i(e,t))return t;throw c("Incorrect invocation")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var l=n(7),i=n(29),c=n(16),o=l("unscopables"),d=Array.prototype;null==d[o]&&c.f(d,o,{configurable:!0,value:i(null)}),t.exports=function(t){d[o][t]=!0}},function(t,e,n){var l=n(1),i=n(5),c=n(6),o=n(2),d=n(73),r=n(61),a=l.TypeError;t.exports=function(t,e){var n=arguments.length<2?r(t):e;if(c(n))return o(i(n,t));throw a(d(t)+" is not iterable")}},function(t,e,n){var l=n(19);t.exports=function(t,e,n){for(var i in e)l(t,i,e[i],n);return t}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Map.prototype.entries,t)}},function(t,e,n){var l=n(11);t.exports=l("navigator","userAgent")||""},function(t,e,n){var l=n(35),i=Math.max,c=Math.min;t.exports=function(t,e){var n=l(t);return n<0?i(n+e,0):c(n,e)}},function(t,e,n){"use strict";var l=n(4);t.exports=function(t,e){var n=[][t];return!!n&&l((function(){n.call(null,e||function(){return 1},1)}))}},function(t,e,n){var l=n(3),i=n(2),c=n(179);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=l(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,l){return i(n),c(l),e?t(n,l):n.__proto__=l,n}}():void 0)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(9),d=n(158),r=n(17),a=n(111),u=n(42),s=n(43),Z=n(28),b=n(151),m=n(37),h=n(183),p=n(206),I=n(55),G=n(15),g=n(64),X=n(12),y=n(71),V=n(29),W=n(36),C=n(51),R=n(57).f,f=n(207),Y=n(30).forEach,v=n(66),S=n(16),K=n(31),N=n(20),J=n(115),H=N.get,L=N.set,U=S.f,k=K.f,B=Math.round,x=i.RangeError,F=a.ArrayBuffer,T=F.prototype,A=a.DataView,z=r.NATIVE_ARRAY_BUFFER_VIEWS,w=r.TYPED_ARRAY_CONSTRUCTOR,Q=r.TYPED_ARRAY_TAG,j=r.TypedArray,P=r.TypedArrayPrototype,M=r.aTypedArrayConstructor,E=r.isTypedArray,D=function(t,e){M(t);for(var n=0,l=e.length,i=new t(l);l>n;)i[n]=e[n++];return i},O=function(t,e){U(t,e,{get:function(){return H(this)[e]}})},_=function(t){var e;return W(T,t)||"ArrayBuffer"==(e=g(t))||"SharedArrayBuffer"==e},q=function(t,e){return E(t)&&!y(e)&&e in t&&b(+e)&&e>=0},$=function(t,e){return e=I(e),q(t,e)?s(2,t[e]):k(t,e)},tt=function(t,e,n){return e=I(e),!(q(t,e)&&X(n)&&G(n,"value"))||G(n,"get")||G(n,"set")||n.configurable||G(n,"writable")&&!n.writable||G(n,"enumerable")&&!n.enumerable?U(t,e,n):(t[e]=n.value,t)};o?(z||(K.f=$,S.f=tt,O(P,"buffer"),O(P,"byteOffset"),O(P,"byteLength"),O(P,"length")),l({target:"Object",stat:!0,forced:!z},{getOwnPropertyDescriptor:$,defineProperty:tt}),t.exports=function(t,e,n){var o=t.match(/\d+$/)[0]/8,r=t+(n?"Clamped":"")+"Array",a="get"+t,s="set"+t,b=i[r],I=b,G=I&&I.prototype,g={},y=function(t,e){U(t,e,{get:function(){return function(t,e){var n=H(t);return n.view[a](e*o+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,l){var i=H(t);n&&(l=(l=B(l))<0?0:l>255?255:255&l),i.view[s](e*o+i.byteOffset,l,!0)}(this,e,t)},enumerable:!0})};z?d&&(I=e((function(t,e,n,l){return u(t,G),J(X(e)?_(e)?void 0!==l?new b(e,p(n,o),l):void 0!==n?new b(e,p(n,o)):new b(e):E(e)?D(I,e):c(f,I,e):new b(h(e)),t,I)})),C&&C(I,j),Y(R(b),(function(t){t in I||Z(I,t,b[t])})),I.prototype=G):(I=e((function(t,e,n,l){u(t,G);var i,d,r,a=0,s=0;if(X(e)){if(!_(e))return E(e)?D(I,e):c(f,I,e);i=e,s=p(n,o);var Z=e.byteLength;if(void 0===l){if(Z%o)throw x("Wrong length");if((d=Z-s)<0)throw x("Wrong length")}else if((d=m(l)*o)+s>Z)throw x("Wrong length");r=d/o}else r=h(e),i=new F(d=r*o);for(L(t,{buffer:i,byteOffset:s,byteLength:d,length:r,view:new A(i)});a<r;)y(t,a++)})),C&&C(I,j),G=I.prototype=V(P)),G.constructor!==I&&Z(G,"constructor",I),Z(G,w,I),Q&&Z(G,Q,r),g[r]=I,l({global:!0,forced:I!=b,sham:!z},g),"BYTES_PER_ELEMENT"in I||Z(I,"BYTES_PER_ELEMENT",o),"BYTES_PER_ELEMENT"in G||Z(G,"BYTES_PER_ELEMENT",o),v(r)}):t.exports=function(){}},function(t,e,n){n(147),n(159);var l=n(11),i=n(3),c=n(63),o=l("Map"),d=l("WeakMap"),r=i([].push),a=c("metadata"),u=a.store||(a.store=new d),s=function(t,e,n){var l=u.get(t);if(!l){if(!n)return;u.set(t,l=new o)}var i=l.get(e);if(!i){if(!n)return;l.set(e,i=new o)}return i};t.exports={store:u,getMap:s,has:function(t,e,n){var l=s(e,n,!1);return void 0!==l&&l.has(t)},get:function(t,e,n){var l=s(e,n,!1);return void 0===l?void 0:l.get(t)},set:function(t,e,n,l){s(n,l,!0).set(t,e)},keys:function(t,e){var n=s(t,e,!1),l=[];return n&&n.forEach((function(t,e){r(l,e)})),l},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,n){"use strict";(function(t){function l(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{r(l.next(t))}catch(t){c(t)}}function d(t){try{r(l.throw(t))}catch(t){c(t)}}function r(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}r((l=l.apply(t,e||[])).next())}))}function i(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{r(l.next(t))}catch(t){c(t)}}function d(t){try{r(l.throw(t))}catch(t){c(t)}}function r(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}r((l=l.apply(t,e||[])).next())}))}var c;n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return K})),n.d(e,"c",(function(){return W})),n.d(e,"d",(function(){return Ql})),n.d(e,"e",(function(){return k})),n.d(e,"f",(function(){return C})),n.d(e,"g",(function(){return a})),n.d(e,"h",(function(){return u})),n.d(e,"i",(function(){return f})),n.d(e,"j",(function(){return v})),n.d(e,"k",(function(){return H})),n.d(e,"l",(function(){return Al})),n.d(e,"m",(function(){return y})),n.d(e,"n",(function(){return b})),n.d(e,"o",(function(){return m})),n.d(e,"p",(function(){return Z})),n.d(e,"q",(function(){return c})),n.d(e,"r",(function(){return r})),n.d(e,"s",(function(){return I})),n.d(e,"t",(function(){return g})),n.d(e,"u",(function(){return G})),n.d(e,"v",(function(){return B})),n.d(e,"w",(function(){return F})),n.d(e,"x",(function(){return X})),n.d(e,"y",(function(){return h})),n.d(e,"z",(function(){return J})),n.d(e,"A",(function(){return s})),n.d(e,"B",(function(){return o})),n.d(e,"C",(function(){return d})),n.d(e,"D",(function(){return jl})),n.d(e,"E",(function(){return zl})),n.d(e,"F",(function(){return Pl})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",d="{{username}}",r="{{scope}}",a="{{clientID}}",u="{{clientSecret}}";var s;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(s||(s={}));const Z="refresh_token_timer",b="pkce_code_verifier",m="#",h=["RS256","RS512","RS384","PS256"],p="code",I="session_state",G="sign_out_url",g="sign_out_success",X="state",y="openid";var V;!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(V||(V={}));class W{constructor(t,e,n){this.message=n,this.name=e,this.code=t,Object.setPrototypeOf(this,new.target.prototype)}}class C{constructor(){}static filterClaimsFromIDTokenPayload(t){const e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;const n={};return Object.entries(e).forEach(([t,e])=>{const l=t.split("_").map((t,e)=>0===e?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");n[l]=e}),n}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(t,e){const n=parseInt(t.split("#")[1]);return e?`${e}_request_${n}`:"request_"+n}static extractPKCEKeyFromStateParam(t){return"pkce_code_verifier#"+parseInt(t.split("request_")[1])}}C.getTenantDomainFromIdTokenPayload=(t,e="@")=>{const n=t.sub.split(e);return n.length>2?n[n.length-1]:""};class R{constructor(t,e){this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=e}resolveEndpoints(t){return i(this,void 0,void 0,(function*(){const e={},n=yield this._config();return n.endpoints&&Object.keys(n.endpoints).forEach(t=>{const l=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());e[l]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""}),Object.assign(Object.assign({},t),e)}))}resolveEndpointsExplicitly(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!e.endpoints||!Object.keys(null==e?void 0:e.endpoints).every(t=>{const e=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());return n.includes(e)}))throw new W("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""}),Object.assign({},t)}))}resolveEndpointsByBaseURL(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=e.baseUrl;if(!n)throw new W("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""});const l={authorization_endpoint:n+"/oauth2/authorize",end_session_endpoint:n+"/oidc/logout",issuer:n+"/oauth2/token",jwks_uri:n+"/oauth2/jwks",check_session_iframe:n+"/oidc/checksession",revocation_endpoint:n+"/oauth2/revoke",token_endpoint:n+"/oauth2/token",userinfo_endpoint:n+"/oauth2/userinfo"};return Object.assign(Object.assign({},l),t)}))}validateIdToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!e||0===e.trim().length)throw new W("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(e,{credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin})}catch(e){throw new W("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=e?e:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new W("JS-AUTH_HELPER-VIT-HE03",`Invalid response status received for jwks request (${l.statusText}).`,yield l.json());const i=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield l.json(),o=yield this._cryptoHelper.getJWKForTheIdToken(t.split(".")[0],c);return this._cryptoHelper.isValidIdToken(t,o,(yield this._config()).clientID,null!=i?i:"",this._cryptoHelper.decodeIDToken(t).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(t){var e,n,l,i;const c=this._cryptoHelper.decodeIDToken(t),o=C.getTenantDomainFromIdTokenPayload(c),d=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",r=null!==(n=c.given_name)&&void 0!==n?n:"",a=null!==(l=c.family_name)&&void 0!==l?l:"",u=r&&a?`${r} ${a}`:r||a||"",s=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:s,tenantDomain:o,username:d},C.filterClaimsFromIDTokenPayload(c))}replaceCustomGrantTemplateTags(t,e){var n;return i(this,void 0,void 0,(function*(){let l="openid";const i=yield this._config(),c=yield this._dataLayer.getSessionData(e);return i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),l=i.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",l).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(n=i.clientSecret)&&void 0!==n?n:"")}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(t),yield this._dataLayer.removeSessionData(t)}))}handleTokenResponse(t,e){return i(this,void 0,void 0,(function*(){if(200!==t.status||!t.ok)throw new W("JS-AUTH_HELPER-HTR-NE01",`Invalid response status received for token request (${t.statusText}).`,yield t.json());const n=yield t.json();if(n.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(n.id_token).then(()=>i(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(n,e);const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return Promise.resolve(t)})));{const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return yield this._dataLayer.setSessionData(n,e),Promise.resolve(t)}}))}generatePKCEKey(t){var e;return i(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getTemporaryData(t),l=[];Object.keys(n).forEach(t=>{t.startsWith("pkce_code_verifier")&&l.push(t)});const i=l.sort().pop();return"pkce_code_verifier#"+(parseInt(null!==(e=null==i?void 0:i.split("#")[1])&&void 0!==e?e:"-1")+1)}))}}class f{constructor(t){this._cryptoUtils=t}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(t){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(t))}getJWKForTheIdToken(t,e){const n=JSON.parse(this._cryptoUtils.base64URLDecode(t));for(const t of e)if(n.kid===t.kid)return t;throw new W("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+n.kid+", Expected values: "+e.map(t=>t.kid).join(", "))}isValidIdToken(t,e,n,l,i,c){return this._cryptoUtils.verifyJwt(t,e,h,n,l,i,c).then(t=>t?Promise.resolve(!0):Promise.reject(new W("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false")))}decodeIDToken(t){try{const e=this._cryptoUtils.base64URLDecode(t.split(".")[1]);return JSON.parse(e)}catch(t){throw new W("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}class Y{constructor(t,e){this._cryptoUtils=e,this._cryptoHelper=new f(e),this._authenticationHelper=new R(t,this._cryptoHelper),this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t,e){var n,l,c;return i(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),o=yield this._config();if(!i||0===i.trim().length)throw new W("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 d=new URL(i),r=new Map;r.set("response_type","code"),r.set("client_id",o.clientID);let a="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),a=o.scope.join(" ")),r.set("scope",a),r.set("redirect_uri",o.signInRedirectURL),o.responseMode&&r.set("response_mode",o.responseMode);const u=yield this._authenticationHelper.generatePKCEKey(e);if(o.enablePKCE){const t=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),i=null===(l=this._cryptoHelper)||void 0===l?void 0:l.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter(u,t,e),r.set("code_challenge_method","S256"),r.set("code_challenge",i)}o.prompt&&r.set("prompt",o.prompt);const s=t;if(s)for(const[t,e]of Object.entries(s))if(""!=t&&""!=e&&"state"!==t){const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());r.set(n,e.toString())}r.set("state",C.generateStateParamForRequestCorrelation(u,s?null===(c=s.state)||void 0===c?void 0:c.toString():""));for(const[t,e]of r.entries())d.searchParams.append(t,e);return d.toString()}))}requestAccessToken(t,e,n,l){return i(this,void 0,void 0,(function*(){const i=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new W("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.");e&&(yield this._dataLayer.setSessionDataParameter("session_state",e,l));const o=[];o.push("client_id="+c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&o.push("client_secret="+c.clientSecret);const d=t;let r;o.push("code="+d),o.push("grant_type=authorization_code"),o.push("redirect_uri="+c.signInRedirectURL),c.enablePKCE&&(o.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter(C.extractPKCEKeyFromStateParam(n),l))),yield this._dataLayer.removeTemporaryDataParameter(C.extractPKCEKeyFromStateParam(n),l));try{r=yield fetch(i,{body:o.join("&"),credentials:c.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(i){throw new W("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=i?i:"The request to get the access token from the server failed.")}if(!r.ok)throw new W("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with "+r.statusText,yield r.json());return yield this._authenticationHelper.handleTokenResponse(r,l)}))}refreshAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config(),l=yield this._dataLayer.getSessionData(t);if(!l.refresh_token)throw new W("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(!e||0===e.trim().length)throw new W("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 i=[];let c;i.push("client_id="+n.clientID),i.push("refresh_token="+l.refresh_token),i.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&i.push("client_secret="+n.clientSecret);try{c=yield fetch(e,{body:i.join("&"),credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new W("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=e?e:"The request to refresh the access token failed.")}if(!c.ok)throw new W("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with "+c.statusText,yield c.json());return this._authenticationHelper.handleTokenResponse(c,t)}))}revokeAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).revocation_endpoint,n=yield this._config();if(!e||0===e.trim().length)throw new W("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 l=[];let i;l.push("client_id="+n.clientID),l.push("token="+(yield this._dataLayer.getSessionData(t)).access_token),l.push("token_type_hint=access_token");try{i=yield fetch(e,{body:l.join("&"),credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new W("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=e?e:"The request sent to revoke the access token failed.")}if(200!==i.status||!i.ok)throw new W("JS-AUTH_CORE-RAT3-HE03",`Invalid response status received for revoke access token request (${i.statusText}).`,yield i.json());return this._authenticationHelper.clearUserSessionData(t),Promise.resolve(i)}))}requestCustomGrant(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._oidcProviderMetaData(),l=yield this._config();let c;if(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint,!c||0===c.trim().length)throw new W("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(t.data).map(([t,n])=>i(this,void 0,void 0,(function*(){const l=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,e);return`${t}=${l}`}))));let d=Object.assign({},C.getTokenRequestHeaders());t.attachToken&&(d=Object.assign(Object.assign({},d),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData(e)).access_token}));const r={body:o.join("&"),credentials:l.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(d),method:"POST"};let a;try{a=yield fetch(c,r)}catch(t){throw new W("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=t?t:"The request sent to get the custom grant failed.")}if(200!==a.status||!a.ok)throw new W("JS-AUTH_CORE-RCG-HE03",`Invalid response status received for the custom grant request. (${a.statusText})`,yield a.json());return t.returnsSession?this._authenticationHelper.handleTokenResponse(a,e):Promise.resolve(yield a.json())}))}getBasicUserInfo(t){return i(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData(t),n=this._authenticationHelper.getAuthenticatedUserInfo(null==e?void 0:e.id_token);let l={allowedScopes:e.scope,sessionState:e.session_state};return Object.keys(n).forEach(t=>{void 0!==n[t]&&""!==n[t]&&null!==n[t]||delete n[t]}),l=Object.assign(Object.assign({},l),n),l}))}getDecodedIDToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getSessionData(t)).id_token;return this._cryptoHelper.decodeIDToken(e)}))}getCryptoHelper(){return i(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(t){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(t)).id_token}))}getOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){const e=yield this._config();if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const n=e.wellKnownEndpoint;if(n){let t;try{if(t=yield fetch(n),200!==t.status||!t.ok)throw new Error}catch(e){throw new W("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 t.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(e.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(e){throw new W("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly())}catch(e){throw new W("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var t,e,n,l,c,o,d,r,a,u;return i(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(t=i.authorization_endpoint)&&void 0!==t?t:"",checkSessionIframe:null!==(e=i.check_session_iframe)&&void 0!==e?e:"",endSessionEndpoint:null!==(n=i.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(l=i.introspection_endpoint)&&void 0!==l?l:"",issuer:null!==(c=i.issuer)&&void 0!==c?c:"",jwksUri:null!==(o=i.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(d=i.registration_endpoint)&&void 0!==d?d:"",revocationEndpoint:null!==(r=i.revocation_endpoint)&&void 0!==r?r:"",tokenEndpoint:null!==(a=i.token_endpoint)&&void 0!==a?a:"",userinfoEndpoint:null!==(u=i.userinfo_endpoint)&&void 0!==u?u:""}}))}getSignOutURL(t){var e,n,l;return i(this,void 0,void 0,(function*(){const i=null===(e=yield this._oidcProviderMetaData())||void 0===e?void 0:e.end_session_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new W("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 o=null===(n=yield this._dataLayer.getSessionData(t))||void 0===n?void 0:n.id_token;if(!o||0===o.trim().length)throw new W("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.");const d=null!==(l=null==c?void 0:c.signOutRedirectURL)&&void 0!==l?l:null==c?void 0:c.signInRedirectURL;if(!d||0===d.trim().length)throw new W("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. ");return`${i}?id_token_hint=${o}&post_logout_redirect_uri=${d}&state=sign_out_success`}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(t)}))}getAccessToken(t){var e;return i(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData(t))||void 0===e?void 0:e.access_token}))}isAuthenticated(t){return i(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(t))}))}getPKCECode(t,e){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(C.extractPKCEKeyFromStateParam(t),e)}))}setPKCECode(t,e,n){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(C.extractPKCEKeyFromStateParam(e),t,n)}))}updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),yield this.getOIDCProviderMetaData(!0)}))}}class v{constructor(t,e){this._id=t,this._store=e}setDataInBulk(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign(Object.assign({},i),e),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,e,n){var l;return i(this,void 0,void 0,(function*(){const i=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),{[e]:n}),d=JSON.stringify(o);yield this._store.setData(t,d)}))}removeValue(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign({},i);delete c[e];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t,e){return e?`${t}-${this._id}-${e}`:`${t}-${this._id}`}setConfigData(t){return i(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(s.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.SessionData,e),t)}))}setCustomData(t,e,n){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(t,n),e)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.TemporaryData,t)))&&void 0!==e?e:null)}))}getSessionData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.SessionData,t)))&&void 0!==e?e:null)}))}getCustomData(t,e){var n;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(n=yield this._store.getData(this._resolveKey(t,e)))&&void 0!==n?n:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.ConfigData));return e&&JSON.parse(e)[t]}))}getOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData));return e&&JSON.parse(e)[t]}))}getTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(s.TemporaryData,e));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(s.SessionData,e));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.TemporaryData,n),t,e)}))}setSessionDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.SessionData,n),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.SessionData,e),t)}))}}const S={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class K{
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],e):"object"==typeof exports?exports.AsgardeoAuth=e(require("react"),require("react-router-dom")):t.AsgardeoAuth=e(t.React,t.ReactRouter)}(this,(function(t,e){return function(t){var e={};function n(l){if(e[l])return e[l].exports;var i=e[l]={i:l,l:!1,exports:{}};return t[l].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,l){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:l})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var l=Object.create(null);if(n.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(l,i,function(e){return t[e]}.bind(null,i));return l},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=596)}([function(t,e,n){var l=n(1),i=n(31).f,c=n(28),o=n(20),d=n(131),a=n(132),r=n(88);t.exports=function(t,e){var n,u,s,Z,b,m=t.target,h=t.global,p=t.stat;if(n=h?l:p?l[m]||d(m,{}):(l[m]||{}).prototype)for(u in e){if(Z=e[u],s=t.noTargetGet?(b=i(n,u))&&b.value:n[u],!r(h?u:m+(p?".":"#")+u,t.forced)&&void 0!==s){if(typeof Z==typeof s)continue;a(Z,s)}(t.sham||s&&s.sham)&&c(Z,"sham",!0),o(n,u,Z,t)}}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n(163))},function(t,e,n){var l=n(1),i=n(12),c=l.String,o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not an object")}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.bind,o=i.call,d=l&&c.bind(o,o);t.exports=l?function(t){return t&&d(t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var l=n(83),i=Function.prototype.call;t.exports=l?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){var l=n(1),i=n(10),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a function")}},function(t,e,n){var l=n(1),i=n(63),c=n(15),o=n(85),d=n(72),a=n(164),r=i("wks"),u=l.Symbol,s=u&&u.for,Z=a?u:u&&u.withoutSetter||o;t.exports=function(t){if(!c(r,t)||!d&&"string"!=typeof r[t]){var e="Symbol."+t;d&&c(u,t)?r[t]=u[t]:r[t]=a&&s?s(e):Z(e)}return r[t]}},function(t,e,n){var l=n(1),i=n(23),c=n(5),o=n(2),d=n(73),a=n(139),r=n(22),u=n(36),s=n(45),Z=n(61),b=n(107),m=l.TypeError,h=function(t,e){this.stopped=t,this.result=e},p=h.prototype;t.exports=function(t,e,n){var l,I,G,g,X,y,V,W=n&&n.that,C=!(!n||!n.AS_ENTRIES),R=!(!n||!n.IS_ITERATOR),f=!(!n||!n.INTERRUPTED),S=i(e,W),v=function(t){return l&&b(l,"normal",t),new h(!0,t)},Y=function(t){return C?(o(t),f?S(t[0],t[1],v):S(t[0],t[1])):f?S(t,v):S(t)};if(R)l=t;else{if(!(I=Z(t)))throw m(d(t)+" is not iterable");if(a(I)){for(G=0,g=r(t);g>G;G++)if((X=Y(t[G]))&&u(p,X))return X;return new h(!1)}l=s(t,I)}for(y=l.next;!(V=c(y,l)).done;){try{X=Y(V.value)}catch(t){b(l,"throw",t)}if("object"==typeof X&&X&&u(p,X))return X}return new h(!1)}},function(t,e,n){var l=n(4);t.exports=!l((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,n){var l=n(1),i=n(10),c=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?c(l[t]):l[t]&&l[t][e]}},function(t,e,n){var l=n(10);t.exports=function(t){return"object"==typeof t?null!==t:l(t)}},function(t,e,n){var l=n(1),i=n(26),c=l.Object;t.exports=function(t){return c(i(t))}},function(t,e,n){var l=n(1),i=n(64),c=l.String;t.exports=function(t){if("Symbol"===i(t))throw TypeError("Cannot convert a Symbol value to a string");return c(t)}},function(t,e,n){var l=n(3),i=n(13),c=l({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return c(i(t),e)}},function(t,e,n){var l=n(1),i=n(9),c=n(166),o=n(167),d=n(2),a=n(55),r=l.TypeError,u=Object.defineProperty,s=Object.getOwnPropertyDescriptor;e.f=i?o?function(t,e,n){if(d(t),e=a(e),d(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var l=s(t,e);l&&l.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:l.configurable,enumerable:"enumerable"in n?n.enumerable:l.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(d(t),e=a(e),d(n),c)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw r("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var l,i,c,o=n(144),d=n(9),a=n(1),r=n(10),u=n(12),s=n(15),Z=n(64),b=n(73),m=n(28),h=n(20),p=n(16).f,I=n(36),G=n(32),g=n(51),X=n(7),y=n(85),V=a.Int8Array,W=V&&V.prototype,C=a.Uint8ClampedArray,R=C&&C.prototype,f=V&&G(V),S=W&&G(W),v=Object.prototype,Y=a.TypeError,K=X("toStringTag"),N=y("TYPED_ARRAY_TAG"),J=y("TYPED_ARRAY_CONSTRUCTOR"),H=o&&!!g&&"Opera"!==Z(a.opera),L=!1,U={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},k={BigInt64Array:8,BigUint64Array:8},B=function(t){if(!u(t))return!1;var e=Z(t);return s(U,e)||s(k,e)};for(l in U)(c=(i=a[l])&&i.prototype)?m(c,J,i):H=!1;for(l in k)(c=(i=a[l])&&i.prototype)&&m(c,J,i);if((!H||!r(f)||f===Function.prototype)&&(f=function(){throw Y("Incorrect invocation")},H))for(l in U)a[l]&&g(a[l],f);if((!H||!S||S===v)&&(S=f.prototype,H))for(l in U)a[l]&&g(a[l].prototype,S);if(H&&G(R)!==S&&g(R,S),d&&!s(S,K))for(l in L=!0,p(S,K,{get:function(){return u(this)?this[N]:void 0}}),U)a[l]&&m(a[l],N,l);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:H,TYPED_ARRAY_CONSTRUCTOR:J,TYPED_ARRAY_TAG:L&&N,aTypedArray:function(t){if(B(t))return t;throw Y("Target is not a typed array")},aTypedArrayConstructor:function(t){if(r(t)&&(!g||I(f,t)))return t;throw Y(b(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,l){if(d){if(n)for(var i in U){var c=a[i];if(c&&s(c.prototype,t))try{delete c.prototype[t]}catch(n){try{c.prototype[t]=e}catch(t){}}}S[t]&&!n||h(S,t,n?e:H&&W[t]||e,l)}},exportTypedArrayStaticMethod:function(t,e,n){var l,i;if(d){if(g){if(n)for(l in U)if((i=a[l])&&s(i,t))try{delete i[t]}catch(t){}if(f[t]&&!n)return;try{return h(f,t,n?e:H&&f[t]||e)}catch(t){}}for(l in U)!(i=a[l])||i[t]&&!n||h(i,t,e)}},isView:function(t){if(!u(t))return!1;var e=Z(t);return"DataView"===e||s(U,e)||s(k,e)},isTypedArray:B,TypedArray:f,TypedArrayPrototype:S}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.apply,o=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(l?o.bind(c):function(){return o.apply(c,arguments)})},function(e,n){e.exports=t},function(t,e,n){var l=n(1),i=n(10),c=n(15),o=n(28),d=n(131),a=n(103),r=n(21),u=n(74).CONFIGURABLE,s=r.get,Z=r.enforce,b=String(String).split("String");(t.exports=function(t,e,n,a){var r,s=!!a&&!!a.unsafe,m=!!a&&!!a.enumerable,h=!!a&&!!a.noTargetGet,p=a&&void 0!==a.name?a.name:e;i(n)&&("Symbol("===String(p).slice(0,7)&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!c(n,"name")||u&&n.name!==p)&&o(n,"name",p),(r=Z(n)).source||(r.source=b.join("string"==typeof p?p:""))),t!==l?(s?!h&&t[e]&&(m=!0):delete t[e],m?t[e]=n:o(t,e,n)):m?t[e]=n:d(e,n)})(Function.prototype,"toString",(function(){return i(this)&&s(this).source||a(this)}))},function(t,e,n){var l,i,c,o=n(168),d=n(1),a=n(3),r=n(12),u=n(28),s=n(15),Z=n(101),b=n(104),m=n(86),h=d.TypeError,p=d.WeakMap;if(o||Z.state){var I=Z.state||(Z.state=new p),G=a(I.get),g=a(I.has),X=a(I.set);l=function(t,e){if(g(I,t))throw new h("Object already initialized");return e.facade=t,X(I,t,e),e},i=function(t){return G(I,t)||{}},c=function(t){return g(I,t)}}else{var y=b("state");m[y]=!0,l=function(t,e){if(s(t,y))throw new h("Object already initialized");return e.facade=t,u(t,y,e),e},i=function(t){return s(t,y)?t[y]:{}},c=function(t){return s(t,y)}}t.exports={set:l,get:i,has:c,enforce:function(t){return c(t)?i(t):l(t,{})},getterFor:function(t){return function(e){var n;if(!r(e)||(n=i(e)).type!==t)throw h("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var l=n(37);t.exports=function(t){return l(t.length)}},function(t,e,n){var l=n(3),i=n(6),c=n(83),o=l(l.bind);t.exports=function(t,e){return i(t),void 0===e?t:c?o(t,e):function(){return t.apply(e,arguments)}}},function(t,e){t.exports=!1},function(t,e,n){var l=n(222),i=n(15),c=n(171),o=n(16).f;t.exports=function(t){var e=l.Symbol||(l.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e,n){var l=n(1).TypeError;t.exports=function(t){if(null==t)throw l("Can't call method on "+t);return t}},function(t,e,n){var l=n(6);t.exports=function(t,e){var n=t[e];return null==n?void 0:l(n)}},function(t,e,n){var l=n(9),i=n(16),c=n(43);t.exports=l?function(t,e,n){return i.f(t,e,c(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var l,i=n(2),c=n(106),o=n(134),d=n(86),a=n(170),r=n(102),u=n(104),s=u("IE_PROTO"),Z=function(){},b=function(t){return"<script>"+t+"<\/script>"},m=function(t){t.write(b("")),t.close();var e=t.parentWindow.Object;return t=null,e},h=function(){try{l=new ActiveXObject("htmlfile")}catch(t){}var t,e;h="undefined"!=typeof document?document.domain&&l?m(l):((e=r("iframe")).style.display="none",a.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):m(l);for(var n=o.length;n--;)delete h.prototype[o[n]];return h()};d[s]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(Z.prototype=i(t),n=new Z,Z.prototype=null,n[s]=t):n=h(),void 0===e?n:c.f(n,e)}},function(t,e,n){var l=n(23),i=n(3),c=n(84),o=n(13),d=n(22),a=n(76),r=i([].push),u=function(t){var e=1==t,n=2==t,i=3==t,u=4==t,s=6==t,Z=7==t,b=5==t||s;return function(m,h,p,I){for(var G,g,X=o(m),y=c(X),V=l(h,p),W=d(y),C=0,R=I||a,f=e?R(m,W):n||Z?R(m,0):void 0;W>C;C++)if((b||C in y)&&(g=V(G=y[C],C,X),t))if(e)f[C]=g;else if(g)switch(t){case 3:return!0;case 5:return G;case 6:return C;case 2:r(f,G)}else switch(t){case 4:return!1;case 7:r(f,G)}return s?-1:i||u?u:f}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(t,e,n){var l=n(9),i=n(5),c=n(100),o=n(43),d=n(34),a=n(55),r=n(15),u=n(166),s=Object.getOwnPropertyDescriptor;e.f=l?s:function(t,e){if(t=d(t),e=a(e),u)try{return s(t,e)}catch(t){}if(r(t,e))return o(!i(c.f,t,e),t[e])}},function(t,e,n){var l=n(1),i=n(15),c=n(10),o=n(13),d=n(104),a=n(141),r=d("IE_PROTO"),u=l.Object,s=u.prototype;t.exports=a?u.getPrototypeOf:function(t){var e=o(t);if(i(e,r))return e[r];var n=e.constructor;return c(n)&&e instanceof n?n.prototype:e instanceof u?s:null}},function(t,e,n){var l=n(2),i=n(112),c=n(7)("species");t.exports=function(t,e){var n,o=l(t).constructor;return void 0===o||null==(n=l(o)[c])?e:i(n)}},function(t,e,n){var l=n(84),i=n(26);t.exports=function(t){return l(i(t))}},function(t,e){var n=Math.ceil,l=Math.floor;t.exports=function(t){var e=+t;return e!=e||0===e?0:(e>0?l:n)(e)}},function(t,e,n){var l=n(3);t.exports=l({}.isPrototypeOf)},function(t,e,n){var l=n(35),i=Math.min;t.exports=function(t){return t>0?i(l(t),9007199254740991):0}},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=/"/g,d=l("".replace);t.exports=function(t,e,n,l){var a=c(i(t)),r="<"+e;return""!==n&&(r+=" "+n+'="'+d(c(l),o,"&quot;")+'"'),r+">"+a+"</"+e+">"}},function(t,e,n){var l=n(4);t.exports=function(t){return l((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e,n){var l=n(3),i=l({}.toString),c=l("".slice);t.exports=function(t){return c(i(t),8,-1)}},function(t,e,n){var l=n(16).f,i=n(15),c=n(7)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,c)&&l(t,c,{configurable:!0,value:e})}},function(t,e,n){var l=n(1),i=n(36),c=l.TypeError;t.exports=function(t,e){if(i(e,t))return t;throw c("Incorrect invocation")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var l=n(7),i=n(29),c=n(16),o=l("unscopables"),d=Array.prototype;null==d[o]&&c.f(d,o,{configurable:!0,value:i(null)}),t.exports=function(t){d[o][t]=!0}},function(t,e,n){var l=n(1),i=n(5),c=n(6),o=n(2),d=n(73),a=n(61),r=l.TypeError;t.exports=function(t,e){var n=arguments.length<2?a(t):e;if(c(n))return o(i(n,t));throw r(d(t)+" is not iterable")}},function(t,e,n){var l=n(20);t.exports=function(t,e,n){for(var i in e)l(t,i,e[i],n);return t}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Map.prototype.entries,t)}},function(t,e,n){var l=n(11);t.exports=l("navigator","userAgent")||""},function(t,e,n){var l=n(35),i=Math.max,c=Math.min;t.exports=function(t,e){var n=l(t);return n<0?i(n+e,0):c(n,e)}},function(t,e,n){"use strict";var l=n(4);t.exports=function(t,e){var n=[][t];return!!n&&l((function(){n.call(null,e||function(){return 1},1)}))}},function(t,e,n){var l=n(3),i=n(2),c=n(179);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=l(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,l){return i(n),c(l),e?t(n,l):n.__proto__=l,n}}():void 0)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(9),d=n(158),a=n(17),r=n(111),u=n(42),s=n(43),Z=n(28),b=n(151),m=n(37),h=n(183),p=n(206),I=n(55),G=n(15),g=n(64),X=n(12),y=n(71),V=n(29),W=n(36),C=n(51),R=n(57).f,f=n(207),S=n(30).forEach,v=n(66),Y=n(16),K=n(31),N=n(21),J=n(115),H=N.get,L=N.set,U=Y.f,k=K.f,B=Math.round,F=i.RangeError,x=r.ArrayBuffer,T=x.prototype,A=r.DataView,z=a.NATIVE_ARRAY_BUFFER_VIEWS,w=a.TYPED_ARRAY_CONSTRUCTOR,Q=a.TYPED_ARRAY_TAG,P=a.TypedArray,j=a.TypedArrayPrototype,M=a.aTypedArrayConstructor,E=a.isTypedArray,D=function(t,e){M(t);for(var n=0,l=e.length,i=new t(l);l>n;)i[n]=e[n++];return i},O=function(t,e){U(t,e,{get:function(){return H(this)[e]}})},_=function(t){var e;return W(T,t)||"ArrayBuffer"==(e=g(t))||"SharedArrayBuffer"==e},q=function(t,e){return E(t)&&!y(e)&&e in t&&b(+e)&&e>=0},$=function(t,e){return e=I(e),q(t,e)?s(2,t[e]):k(t,e)},tt=function(t,e,n){return e=I(e),!(q(t,e)&&X(n)&&G(n,"value"))||G(n,"get")||G(n,"set")||n.configurable||G(n,"writable")&&!n.writable||G(n,"enumerable")&&!n.enumerable?U(t,e,n):(t[e]=n.value,t)};o?(z||(K.f=$,Y.f=tt,O(j,"buffer"),O(j,"byteOffset"),O(j,"byteLength"),O(j,"length")),l({target:"Object",stat:!0,forced:!z},{getOwnPropertyDescriptor:$,defineProperty:tt}),t.exports=function(t,e,n){var o=t.match(/\d+$/)[0]/8,a=t+(n?"Clamped":"")+"Array",r="get"+t,s="set"+t,b=i[a],I=b,G=I&&I.prototype,g={},y=function(t,e){U(t,e,{get:function(){return function(t,e){var n=H(t);return n.view[r](e*o+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,l){var i=H(t);n&&(l=(l=B(l))<0?0:l>255?255:255&l),i.view[s](e*o+i.byteOffset,l,!0)}(this,e,t)},enumerable:!0})};z?d&&(I=e((function(t,e,n,l){return u(t,G),J(X(e)?_(e)?void 0!==l?new b(e,p(n,o),l):void 0!==n?new b(e,p(n,o)):new b(e):E(e)?D(I,e):c(f,I,e):new b(h(e)),t,I)})),C&&C(I,P),S(R(b),(function(t){t in I||Z(I,t,b[t])})),I.prototype=G):(I=e((function(t,e,n,l){u(t,G);var i,d,a,r=0,s=0;if(X(e)){if(!_(e))return E(e)?D(I,e):c(f,I,e);i=e,s=p(n,o);var Z=e.byteLength;if(void 0===l){if(Z%o)throw F("Wrong length");if((d=Z-s)<0)throw F("Wrong length")}else if((d=m(l)*o)+s>Z)throw F("Wrong length");a=d/o}else a=h(e),i=new x(d=a*o);for(L(t,{buffer:i,byteOffset:s,byteLength:d,length:a,view:new A(i)});r<a;)y(t,r++)})),C&&C(I,P),G=I.prototype=V(j)),G.constructor!==I&&Z(G,"constructor",I),Z(G,w,I),Q&&Z(G,Q,a),g[a]=I,l({global:!0,forced:I!=b,sham:!z},g),"BYTES_PER_ELEMENT"in I||Z(I,"BYTES_PER_ELEMENT",o),"BYTES_PER_ELEMENT"in G||Z(G,"BYTES_PER_ELEMENT",o),v(a)}):t.exports=function(){}},function(t,e,n){n(147),n(159);var l=n(11),i=n(3),c=n(63),o=l("Map"),d=l("WeakMap"),a=i([].push),r=c("metadata"),u=r.store||(r.store=new d),s=function(t,e,n){var l=u.get(t);if(!l){if(!n)return;u.set(t,l=new o)}var i=l.get(e);if(!i){if(!n)return;l.set(e,i=new o)}return i};t.exports={store:u,getMap:s,has:function(t,e,n){var l=s(e,n,!1);return void 0!==l&&l.has(t)},get:function(t,e,n){var l=s(e,n,!1);return void 0===l?void 0:l.get(t)},set:function(t,e,n,l){s(n,l,!0).set(t,e)},keys:function(t,e){var n=s(t,e,!1),l=[];return n&&n.forEach((function(t,e){a(l,e)})),l},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,n){"use strict";(function(t){function l(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{a(l.next(t))}catch(t){c(t)}}function d(t){try{a(l.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((l=l.apply(t,e||[])).next())}))}function i(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{a(l.next(t))}catch(t){c(t)}}function d(t){try{a(l.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((l=l.apply(t,e||[])).next())}))}var c;n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return K})),n.d(e,"c",(function(){return W})),n.d(e,"d",(function(){return Ql})),n.d(e,"e",(function(){return k})),n.d(e,"f",(function(){return C})),n.d(e,"g",(function(){return r})),n.d(e,"h",(function(){return u})),n.d(e,"i",(function(){return f})),n.d(e,"j",(function(){return v})),n.d(e,"k",(function(){return H})),n.d(e,"l",(function(){return Al})),n.d(e,"m",(function(){return y})),n.d(e,"n",(function(){return b})),n.d(e,"o",(function(){return m})),n.d(e,"p",(function(){return Z})),n.d(e,"q",(function(){return c})),n.d(e,"r",(function(){return a})),n.d(e,"s",(function(){return I})),n.d(e,"t",(function(){return g})),n.d(e,"u",(function(){return G})),n.d(e,"v",(function(){return B})),n.d(e,"w",(function(){return x})),n.d(e,"x",(function(){return X})),n.d(e,"y",(function(){return h})),n.d(e,"z",(function(){return J})),n.d(e,"A",(function(){return s})),n.d(e,"B",(function(){return o})),n.d(e,"C",(function(){return d})),n.d(e,"D",(function(){return Pl})),n.d(e,"E",(function(){return zl})),n.d(e,"F",(function(){return jl})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",d="{{username}}",a="{{scope}}",r="{{clientID}}",u="{{clientSecret}}";var s;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(s||(s={}));const Z="refresh_token_timer",b="pkce_code_verifier",m="#",h=["RS256","RS512","RS384","PS256"],p="code",I="session_state",G="sign_out_url",g="sign_out_success",X="state",y="openid";var V;!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(V||(V={}));class W{constructor(t,e,n){this.message=n,this.name=e,this.code=t,Object.setPrototypeOf(this,new.target.prototype)}}class C{constructor(){}static filterClaimsFromIDTokenPayload(t){const e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;const n={};return Object.entries(e).forEach(([t,e])=>{const l=t.split("_").map((t,e)=>0===e?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");n[l]=e}),n}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(t,e){const n=parseInt(t.split("#")[1]);return e?`${e}_request_${n}`:"request_"+n}static extractPKCEKeyFromStateParam(t){return"pkce_code_verifier#"+parseInt(t.split("request_")[1])}}C.getTenantDomainFromIdTokenPayload=(t,e="@")=>{const n=t.sub.split(e);return n.length>2?n[n.length-1]:""};class R{constructor(t,e){this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=e}resolveEndpoints(t){return i(this,void 0,void 0,(function*(){const e={},n=yield this._config();return n.endpoints&&Object.keys(n.endpoints).forEach(t=>{const l=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());e[l]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""}),Object.assign(Object.assign({},t),e)}))}resolveEndpointsExplicitly(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!e.endpoints||!Object.keys(null==e?void 0:e.endpoints).every(t=>{const e=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());return n.includes(e)}))throw new W("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""}),Object.assign({},t)}))}resolveEndpointsByBaseURL(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=e.baseUrl;if(!n)throw new W("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""});const l={authorization_endpoint:n+"/oauth2/authorize",end_session_endpoint:n+"/oidc/logout",issuer:n+"/oauth2/token",jwks_uri:n+"/oauth2/jwks",check_session_iframe:n+"/oidc/checksession",revocation_endpoint:n+"/oauth2/revoke",token_endpoint:n+"/oauth2/token",userinfo_endpoint:n+"/oauth2/userinfo"};return Object.assign(Object.assign({},l),t)}))}validateIdToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!e||0===e.trim().length)throw new W("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(e,{credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin})}catch(e){throw new W("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=e?e:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new W("JS-AUTH_HELPER-VIT-HE03",`Invalid response status received for jwks request (${l.statusText}).`,yield l.json());const i=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield l.json(),o=yield this._cryptoHelper.getJWKForTheIdToken(t.split(".")[0],c);return this._cryptoHelper.isValidIdToken(t,o,(yield this._config()).clientID,null!=i?i:"",this._cryptoHelper.decodeIDToken(t).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(t){var e,n,l,i;const c=this._cryptoHelper.decodeIDToken(t),o=C.getTenantDomainFromIdTokenPayload(c),d=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",a=null!==(n=c.given_name)&&void 0!==n?n:"",r=null!==(l=c.family_name)&&void 0!==l?l:"",u=a&&r?`${a} ${r}`:a||r||"",s=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:s,tenantDomain:o,username:d},C.filterClaimsFromIDTokenPayload(c))}replaceCustomGrantTemplateTags(t,e){var n;return i(this,void 0,void 0,(function*(){let l="openid";const i=yield this._config(),c=yield this._dataLayer.getSessionData(e);return i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),l=i.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",l).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(n=i.clientSecret)&&void 0!==n?n:"")}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(t),yield this._dataLayer.removeSessionData(t)}))}handleTokenResponse(t,e){return i(this,void 0,void 0,(function*(){if(200!==t.status||!t.ok)throw new W("JS-AUTH_HELPER-HTR-NE01",`Invalid response status received for token request (${t.statusText}).`,yield t.json());const n=yield t.json();if(n.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(n.id_token).then(()=>i(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(n,e);const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return Promise.resolve(t)})));{const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return yield this._dataLayer.setSessionData(n,e),Promise.resolve(t)}}))}generatePKCEKey(t){var e;return i(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getTemporaryData(t),l=[];Object.keys(n).forEach(t=>{t.startsWith("pkce_code_verifier")&&l.push(t)});const i=l.sort().pop();return"pkce_code_verifier#"+(parseInt(null!==(e=null==i?void 0:i.split("#")[1])&&void 0!==e?e:"-1")+1)}))}}class f{constructor(t){this._cryptoUtils=t}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(t){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(t))}getJWKForTheIdToken(t,e){const n=JSON.parse(this._cryptoUtils.base64URLDecode(t));for(const t of e)if(n.kid===t.kid)return t;throw new W("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+n.kid+", Expected values: "+e.map(t=>t.kid).join(", "))}isValidIdToken(t,e,n,l,i,c){return this._cryptoUtils.verifyJwt(t,e,h,n,l,i,c).then(t=>t?Promise.resolve(!0):Promise.reject(new W("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false")))}decodeIDToken(t){try{const e=this._cryptoUtils.base64URLDecode(t.split(".")[1]);return JSON.parse(e)}catch(t){throw new W("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}class S{constructor(t,e){this._cryptoUtils=e,this._cryptoHelper=new f(e),this._authenticationHelper=new R(t,this._cryptoHelper),this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t,e){var n,l,c;return i(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),o=yield this._config();if(!i||0===i.trim().length)throw new W("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 d=new URL(i),a=new Map;a.set("response_type","code"),a.set("client_id",o.clientID);let r="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),r=o.scope.join(" ")),a.set("scope",r),a.set("redirect_uri",o.signInRedirectURL),o.responseMode&&a.set("response_mode",o.responseMode);const u=yield this._authenticationHelper.generatePKCEKey(e);if(o.enablePKCE){const t=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),i=null===(l=this._cryptoHelper)||void 0===l?void 0:l.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter(u,t,e),a.set("code_challenge_method","S256"),a.set("code_challenge",i)}o.prompt&&a.set("prompt",o.prompt);const s=t;if(s)for(const[t,e]of Object.entries(s))if(""!=t&&""!=e&&"state"!==t){const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());a.set(n,e.toString())}a.set("state",C.generateStateParamForRequestCorrelation(u,s?null===(c=s.state)||void 0===c?void 0:c.toString():""));for(const[t,e]of a.entries())d.searchParams.append(t,e);return d.toString()}))}requestAccessToken(t,e,n,l){return i(this,void 0,void 0,(function*(){const i=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new W("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.");e&&(yield this._dataLayer.setSessionDataParameter("session_state",e,l));const o=[];o.push("client_id="+c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&o.push("client_secret="+c.clientSecret);const d=t;let a;o.push("code="+d),o.push("grant_type=authorization_code"),o.push("redirect_uri="+c.signInRedirectURL),c.enablePKCE&&(o.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter(C.extractPKCEKeyFromStateParam(n),l))),yield this._dataLayer.removeTemporaryDataParameter(C.extractPKCEKeyFromStateParam(n),l));try{a=yield fetch(i,{body:o.join("&"),credentials:c.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(i){throw new W("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=i?i:"The request to get the access token from the server failed.")}if(!a.ok)throw new W("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with "+a.statusText,yield a.json());return yield this._authenticationHelper.handleTokenResponse(a,l)}))}refreshAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config(),l=yield this._dataLayer.getSessionData(t);if(!l.refresh_token)throw new W("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(!e||0===e.trim().length)throw new W("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 i=[];let c;i.push("client_id="+n.clientID),i.push("refresh_token="+l.refresh_token),i.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&i.push("client_secret="+n.clientSecret);try{c=yield fetch(e,{body:i.join("&"),credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new W("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=e?e:"The request to refresh the access token failed.")}if(!c.ok)throw new W("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with "+c.statusText,yield c.json());return this._authenticationHelper.handleTokenResponse(c,t)}))}revokeAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).revocation_endpoint,n=yield this._config();if(!e||0===e.trim().length)throw new W("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 l=[];let i;l.push("client_id="+n.clientID),l.push("token="+(yield this._dataLayer.getSessionData(t)).access_token),l.push("token_type_hint=access_token");try{i=yield fetch(e,{body:l.join("&"),credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(C.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new W("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=e?e:"The request sent to revoke the access token failed.")}if(200!==i.status||!i.ok)throw new W("JS-AUTH_CORE-RAT3-HE03",`Invalid response status received for revoke access token request (${i.statusText}).`,yield i.json());return this._authenticationHelper.clearUserSessionData(t),Promise.resolve(i)}))}requestCustomGrant(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._oidcProviderMetaData(),l=yield this._config();let c;if(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint,!c||0===c.trim().length)throw new W("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(t.data).map(([t,n])=>i(this,void 0,void 0,(function*(){const l=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,e);return`${t}=${l}`}))));let d=Object.assign({},C.getTokenRequestHeaders());t.attachToken&&(d=Object.assign(Object.assign({},d),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData(e)).access_token}));const a={body:o.join("&"),credentials:l.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(d),method:"POST"};let r;try{r=yield fetch(c,a)}catch(t){throw new W("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=t?t:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new W("JS-AUTH_CORE-RCG-HE03",`Invalid response status received for the custom grant request. (${r.statusText})`,yield r.json());return t.returnsSession?this._authenticationHelper.handleTokenResponse(r,e):Promise.resolve(yield r.json())}))}getBasicUserInfo(t){return i(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData(t),n=this._authenticationHelper.getAuthenticatedUserInfo(null==e?void 0:e.id_token);let l={allowedScopes:e.scope,sessionState:e.session_state};return Object.keys(n).forEach(t=>{void 0!==n[t]&&""!==n[t]&&null!==n[t]||delete n[t]}),l=Object.assign(Object.assign({},l),n),l}))}getDecodedIDToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getSessionData(t)).id_token;return this._cryptoHelper.decodeIDToken(e)}))}getCryptoHelper(){return i(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(t){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(t)).id_token}))}getOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){const e=yield this._config();if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const n=e.wellKnownEndpoint;if(n){let t;try{if(t=yield fetch(n),200!==t.status||!t.ok)throw new Error}catch(e){throw new W("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 t.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(e.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(e){throw new W("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly())}catch(e){throw new W("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var t,e,n,l,c,o,d,a,r,u;return i(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(t=i.authorization_endpoint)&&void 0!==t?t:"",checkSessionIframe:null!==(e=i.check_session_iframe)&&void 0!==e?e:"",endSessionEndpoint:null!==(n=i.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(l=i.introspection_endpoint)&&void 0!==l?l:"",issuer:null!==(c=i.issuer)&&void 0!==c?c:"",jwksUri:null!==(o=i.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(d=i.registration_endpoint)&&void 0!==d?d:"",revocationEndpoint:null!==(a=i.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=i.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(u=i.userinfo_endpoint)&&void 0!==u?u:""}}))}getSignOutURL(t){var e,n,l;return i(this,void 0,void 0,(function*(){const i=null===(e=yield this._oidcProviderMetaData())||void 0===e?void 0:e.end_session_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new W("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 o=null===(n=yield this._dataLayer.getSessionData(t))||void 0===n?void 0:n.id_token;if(!o||0===o.trim().length)throw new W("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.");const d=null!==(l=null==c?void 0:c.signOutRedirectURL)&&void 0!==l?l:null==c?void 0:c.signInRedirectURL;if(!d||0===d.trim().length)throw new W("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. ");return`${i}?id_token_hint=${o}&post_logout_redirect_uri=${d}&state=sign_out_success`}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(t)}))}getAccessToken(t){var e;return i(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData(t))||void 0===e?void 0:e.access_token}))}isAuthenticated(t){return i(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(t))}))}getPKCECode(t,e){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(C.extractPKCEKeyFromStateParam(t),e)}))}setPKCECode(t,e,n){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(C.extractPKCEKeyFromStateParam(e),t,n)}))}updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),yield this.getOIDCProviderMetaData(!0)}))}}class v{constructor(t,e){this._id=t,this._store=e}setDataInBulk(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign(Object.assign({},i),e),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,e,n){var l;return i(this,void 0,void 0,(function*(){const i=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),{[e]:n}),d=JSON.stringify(o);yield this._store.setData(t,d)}))}removeValue(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign({},i);delete c[e];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t,e){return e?`${t}-${this._id}-${e}`:`${t}-${this._id}`}setConfigData(t){return i(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(s.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.SessionData,e),t)}))}setCustomData(t,e,n){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(t,n),e)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.TemporaryData,t)))&&void 0!==e?e:null)}))}getSessionData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.SessionData,t)))&&void 0!==e?e:null)}))}getCustomData(t,e){var n;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(n=yield this._store.getData(this._resolveKey(t,e)))&&void 0!==n?n:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.ConfigData));return e&&JSON.parse(e)[t]}))}getOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData));return e&&JSON.parse(e)[t]}))}getTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(s.TemporaryData,e));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(s.SessionData,e));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.TemporaryData,n),t,e)}))}setSessionDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.SessionData,n),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.SessionData,e),t)}))}}const Y={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class K{
2
2
  /**
3
3
  * This is the constructor method that returns an instance of the .
4
4
  *
@@ -13,7 +13,7 @@
13
13
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
14
14
  * @preserve
15
15
  */
16
- constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=new v("instance_"+K._instanceID,t),this._authenticationCore=new Y(this._dataLayer,e),K._authenticationCore=new Y(this._dataLayer,e)
16
+ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=new v("instance_"+K._instanceID,t),this._authenticationCore=new S(this._dataLayer,e),K._authenticationCore=new S(this._dataLayer,e)
17
17
  /**
18
18
  *
19
19
  * This method initializes the SDK with the config data.
@@ -32,7 +32,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
32
32
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
33
33
  *
34
34
  * @preserve
35
- */}initialize(t){var e,n,l;return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},S),t),{scope:[...null!==(e=S.scope)&&void 0!==e?e:[],...null!==(l=null===(n=t.scope)||void 0===n?void 0:n.filter(t=>{var e;return!(null===(e=null==S?void 0:S.scope)||void 0===e?void 0:e.includes(t))}))&&void 0!==l?l:[]]}))}))}
35
+ */}initialize(t){var e,n,l;return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},Y),t),{scope:[...null!==(e=Y.scope)&&void 0!==e?e:[],...null!==(l=null===(n=t.scope)||void 0===n?void 0:n.filter(t=>{var e;return!(null===(e=null==Y?void 0:Y.scope)||void 0===e?void 0:e.includes(t))}))&&void 0!==l?l:[]]}))}))}
36
36
  /**
37
37
  * This method returns the `DataLayer` object that allows you to access authentication data.
38
38
  *
@@ -428,8 +428,8 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
428
428
  * @memberof AsgardeoAuthClient
429
429
  *
430
430
  * @preserve
431
- */updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}static clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(t)}))}}var N,J,H,L=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLG4scixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShuPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1uP246IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0ocj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09cj9yOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShuPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBhPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFhfHwwPT09YS50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2F9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSxyKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSx5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKX0pKX19Y2xhc3MgZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLG4pLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsbixyKXt2YXIgaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShpPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1pP2k6bnVsbCxvPXQmJkpTT04ucGFyc2UodCkscz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse1tuXTpyfSksYT1KU09OLnN0cmluZ2lmeShzKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUsYSl9KSl9cmVtb3ZlVmFsdWUoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW25dO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUsdCl7cmV0dXJuIHQ/YCR7ZX0tJHt0aGlzLl9pZH0tJHt0fWA6YCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9c2V0VGVtcG9yYXJ5RGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXNldFNlc3Npb25EYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfXNldEN1c3RvbURhdGEoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoZSxyKSxuKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRDdXN0b21EYXRhKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KGUsbikpKSYmdm9pZCAwIT09cj9yOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIGd7Ci8qKgogICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RvcmV9IHN0b3JlIC0gVGhlIHN0b3JlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZihgaW5zdGFuY2VfJHtnLl9pbnN0YW5jZUlEfWAsZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBPSURDIHNlcnZpY2UgZW5kcG9pbnRzIHRoYXQgYXJlIGZldGNoZWQgZnJvbSB0aGUgYC53ZWxsLWtub3duYCBlbmRwb2ludC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgYXV0aC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjcnlwdG8gaGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRDcnlwdG9IZWxwZXIKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxQPUMsRD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1ELmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09RC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUQuY2FsbChlKX1mdW5jdGlvbiBqKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgTj17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1ELmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09RC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09RC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09RC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1ELmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6aixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspaihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGoodCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1AodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0scT1OO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYocS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO3EuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihxLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxxLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7cS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6cS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sQj1OO2Z1bmN0aW9uIEooKXt0aGlzLmhhbmRsZXJzPVtdfUoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEoucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1KLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFk9JCxWPXo7ZnVuY3Rpb24gRyhlKXtpZihZPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChZPT09JHx8IVkpJiZzZXRUaW1lb3V0KXJldHVybiBZPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWS5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihZPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFY9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihWPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFY9PT16fHwhVikmJmNsZWFyVGltZW91dClyZXR1cm4gVj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtWKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9TixtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1OLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9TixDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFBlPU4sRGU9UGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49UGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPU4sTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLGplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LE5lPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LHFlPURlLHhlPVNlLEtlPXdlLEJlPU9lLEplPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPWplKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9OZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fHFlKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgQmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1OLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFllKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgVmUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoVmU9SmUpLFZlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFllKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFllKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1OLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1OLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1OLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1OLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PU4sUnQ9TixDdD1DLFB0PWJ0LER0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBQdCh0KSxyPUN0KFB0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixQdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoRHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1QdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxPdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe090LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPU90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe090LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntPdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O0x0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLEx0PU90PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0sTHQpO2NsYXNzIEh0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX1jbGFzcyBqdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHMsZSl9c3RhdGljIGdldFNpZ25PdXRVUkwoKXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocykpJiZ2b2lkIDAhPT1lP2U6IiJ9c3RhdGljIHJlbW92ZVBLQ0UoZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShlKX1zdGF0aWMgY2FuQ29udGludWVTaWduSW4oZSx0KXtyZXR1cm4hKGUmJiFqdC5oYXNFcnJvckluVVJMKCkmJiFqdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIGp0LmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKX1zdGF0aWMgd2FzU2lnbkluQ2FsbGVkKCl7cmV0dXJuISghanQuaGFzRXJyb3JJblVSTCgpJiYhanQuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KFMpLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKGU9d2luZG93LmxvY2F0aW9uLnNlYXJjaCl7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKGU9d2luZG93LmxvY2F0aW9uLmhyZWYpe2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldChfKSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odyk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHcsSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX12YXIgTnQ9W10scXQ9W10seHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksS3Q9ITE7ZnVuY3Rpb24gQnQoKXtLdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpTnRbdF09ZVt0XSxxdFtlLmNoYXJDb2RlQXQodCldPXQ7cXRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHF0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBKdChlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goTnRbKGk9cik+PjE4JjYzXStOdFtpPj4xMiY2M10rTnRbaT4+NiY2M10rTnRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEZ0KGUpe3ZhciB0O0t0fHxCdCgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKEp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9TnRbdD4+Ml0saSs9TnRbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz1OdFt0Pj4xMF0saSs9TnRbdD4+NCY2M10saSs9TnRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBXdChlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiAkdChlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIHp0PXt9LnRvU3RyaW5nLFl0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXp0LmNhbGwoZSl9O1p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Vy5UWVBFRF9BUlJBWV9TVVBQT1JUfHxXLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIFZ0PUd0KCk7ZnVuY3Rpb24gR3QoKXtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gWHQoZSx0KXtpZihHdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgWnQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWnQoZSx0LG4pe2lmKCEoWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIFp0KSlyZXR1cm4gbmV3IFp0KGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHRuKHRoaXMsZSl9cmV0dXJuIFF0KHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFF0KGUsdCxuLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scik7WnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189WnQucHJvdG90eXBlOmU9bm4oZSx0KTtyZXR1cm4gZX0oZSx0LG4scik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXsic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKTtpZighWnQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfHNuKHQsbiksaT0oZT1YdChlLHIpKS53cml0ZSh0LG4pO2khPT1yJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihvbih0KSl7dmFyIG49MHxybih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1YdChlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwocj10Lmxlbmd0aCkhPXI/WHQoZSwwKTpubihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZZdCh0LmRhdGEpKXJldHVybiBubihlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGVuKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdG4oZSx0KXtpZihlbih0KSxlPVh0KGUsdDwwPzA6MHxybih0KSksIVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gbm4oZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxybih0Lmxlbmd0aCk7ZT1YdChlLG4pO2Zvcih2YXIgcj0wO3I8bjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7aWYoZT49R3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrR3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIHNuKGUsdCl7aWYob24oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFVuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTG4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gVW4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gYW4oZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYoKG4+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gYm4odGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG1uKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gX24odGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFNuKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHluKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGtuKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGNuKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gdW4oZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVp0LmZyb20odCxyKSksb24odCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpsbihlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTpsbihlLFt0XSxuLHIsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbG4oZSx0LG4scixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixuLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPW47bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKG4rYz5hJiYobj1hLWMpLG89bjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGg9MDtoPGM7aCsrKWlmKHUoZSxvK2gpIT09dSh0LGgpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZG4oZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSk+aSYmKHI9aSk6cj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtyPm8vMiYmKHI9by8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIGhuKGUsdCxuLHIpe3JldHVybiBIbihVbih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBmbihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gZm4oZSx0LG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIEhuKExuKHQpLGUsbixyKX1mdW5jdGlvbiB2bihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylyPShuPWUuY2hhckNvZGVBdChzKSk+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/RnQoZSk6RnQoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBtbihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsZD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkrZDw9bilzd2l0Y2goZCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsZD0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLGkrPWR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXduKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbj0iIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz13bikpO3JldHVybiBufShyKX1adC5wb29sU2l6ZT04MTkyLFp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1adC5wcm90b3R5cGUsZX0sWnQuZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFF0KG51bGwsZSx0LG4pfSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoWnQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxadC5fX3Byb3RvX189VWludDhBcnJheSksWnQuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZW4odCksdDw9MD9YdChlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP1h0KGUsdCkuZmlsbChuLHIpOlh0KGUsdCkuZmlsbChuKTpYdChlLHQpfShudWxsLGUsdCxuKX0sWnQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRuKG51bGwsZSl9LFp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuaXNCdWZmZXI9TW4sWnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFvbihlKXx8IW9uKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxadC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxadC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gWnQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1adC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZighb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxadC5ieXRlTGVuZ3RoPXNuLFp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsWnQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Miljbih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWnQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCljbih0aGlzLHQsdCszKSxjbih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWNuKHRoaXMsdCx0KzcpLGNuKHRoaXMsdCsxLHQrNiksY24odGhpcyx0KzIsdCs1KSxjbih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9tbih0aGlzLDAsZSk6YW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxadC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09WnQuY29tcGFyZSh0aGlzLGUpfSxadC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxadC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0ocj4+Pj0wKSxzPShuPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UocixpKSx1PWUuc2xpY2UodCxuKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LFp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG4pfSxadC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITApfSxadC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1bih0aGlzLGUsdCxuLCExKX0sWnQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+aSkmJihuPWkpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBkbih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBobih0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBnbih0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LFp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB3bj00MDk2O2Z1bmN0aW9uIF9uKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGJuKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIGk9IiIsbz10O288bjsrK28paSs9T24oZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24ga24oZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFbihlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gVG4oZSx0LG4scixpLG8pe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtpPG87KytpKWVbbitpXT0odCYyNTU8PDgqKHI/aToxLWkpKT4+PjgqKHI/aToxLWkpfWZ1bmN0aW9uIFJuKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtpPG87KytpKWVbbitpXT10Pj4+OCoocj9pOjMtaSkmMjU1fWZ1bmN0aW9uIENuKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sNCksJHQoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gRG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sOCksJHQoZSx0LG4sciw1Miw4KSxuKzh9WnQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksKHQ9dm9pZCAwPT09dD9yOn5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSx0PGUmJih0PWUpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189WnQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO249bmV3IFp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKW5bb109dGhpc1tvK2VdfXJldHVybiBufSxadC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LFp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sWnQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByPj0oaSo9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0sWnQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LFp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LFp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sWnQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksV3QodGhpcyxlLCEwLDIzLDQpfSxadC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsNTIsOCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsNTIsOCl9LFp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxUbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPW4tMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwxLDI1NSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6QW4odGhpcyxlLHQsITApLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sWnQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMTI3LC0xMjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LFp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFBuKHRoaXMsZSx0LCEwLG4pfSxadC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGksbz1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK25dO2Vsc2UgaWYobzwxZTN8fCFadC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbitvKSx0KTtyZXR1cm4gb30sWnQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIVp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPW9uKGUpP2U6VW4obmV3IFp0KGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgSW49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFVuKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPHI7KytzKXtpZigobj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBMbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzO0t0fHxCdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyB4dCgzKmEvNC1vKSxyPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAsbj0wO3Q8cjt0Kz00LG4rPTMpaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxOHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHF0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxxdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1xdFtlLmNoYXJDb2RlQXQodCldPDwyfHF0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxMHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8cXRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoSW4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEhuKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8ciYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIE1uKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8am4oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmam4oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIGpuKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIE5uPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjpadCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxadC5hbGxvYygrZSl9LGlzQnVmZmVyOk1uLGtNYXhMZW5ndGg6VnR9KSxxbj17ZXhwb3J0czp7fX0seG49e30sS249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEtuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1adC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHhuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQm49S247ZnVuY3Rpb24gSm4oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxadC5pc0J1ZmZlcihlKT9XbihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6V24oWnQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEJuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIFduKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgJG4sem49Sm47em4uZW5jb2RlPUpuLHpuLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmZyb20oRm4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSx6bi50b0Jhc2U2ND1Gbix6bi5mcm9tQmFzZTY0PVduLHpuLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBadC5mcm9tKEZuKGUpLCJiYXNlNjQiKX0seG4uZGVmYXVsdD16biwoJG49cW4pLmV4cG9ydHM9eG4uZGVmYXVsdCwkbi5leHBvcnRzLmRlZmF1bHQ9JG4uZXhwb3J0czt2YXIgWW49cW4uZXhwb3J0cyxWbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9blswXSxhPW5bMV0sYz1uWzJdLHU9blszXSxsPW5bNF0sZD1uWzVdLGg9bls2XSxmPW5bN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1JnJbdl0pPDwyNHwoMjU1JnJbdisxXSk8PDE2fCgyNTUmclt2KzJdKTw8OHwyNTUmclt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmRefmwmaCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWgsaD1kLGQ9bCxsPXUreXwwLHU9YyxjPWEsYT1zLHM9eSttfDA7blswXSs9cyxuWzFdKz1hLG5bMl0rPWMsblszXSs9dSxuWzRdKz1sLG5bNV0rPWQsbls2XSs9aCxuWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgcj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKHI9bih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLHIsdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLHI9dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW3JdPTEyODtmb3IodmFyIGE9cisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHRoaXMuc3RhdGUubGVuZ3RoO24rKyl0aGlzLnN0YXRlW25dPWVbbl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9cjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgcix0aGlzLm91dGVyPW5ldyByLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IHIpLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IHIpLnVwZGF0ZShlKSxuPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1uZXcgaShlKS51cGRhdGUodCkscj1uLmRpZ2VzdCgpO3JldHVybiBuLmNsZWFuKCkscn1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBpPXJbMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxuJiZ0LnVwZGF0ZShuKSx0LnVwZGF0ZShyKSx0LmZpbmlzaChlKSxyWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09ciYmKHI9MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksZD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksaD1kLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KHIpLHA9MDtwPHI7cCsrKWg9PT1kLmxlbmd0aCYmKGEoZCxsLG4sbyksaD0wKSxmW3BdPWRbaCsrXTtyZXR1cm4gbC5jbGVhbigpLGQuZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxuLHIpe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkociksZD0wO2QqczxyO2QrKyl7dmFyIGg9ZCsxO2FbMF09aD4+PjI0JjI1NSxhWzFdPWg+Pj4xNiYyNTUsYVsyXT1oPj4+OCYyNTUsYVszXT1oPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfShWbik7dmFyIEduPVQoVm4uZXhwb3J0cyksWG49Y3J5cHRvO2NvbnN0IFpuPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksUW49bmV3IFRleHRFbmNvZGVyLGVyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCB0cj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9ZXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgbnIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyByciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLG49InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIGlyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIG9yIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3Mgc3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIGFyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3MgY3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyB1ciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgbHIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBkciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBociBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZnIoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBwcihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiBncihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHZyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHlyKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke259LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLG4pfXZhciBtcj0oZSwuLi50KT0+e2xldCBuPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtuKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/bis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOm4rPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9uKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/bis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYobis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxufSx3cj1lPT5abihlKTtjb25zdCBfcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIFNyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IGJyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHNyKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGZyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gWG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0cihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsWG4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBrcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighd3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihtcihlLC4uLl9yLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCF3cihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKG1yKGUsLi4uX3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxuKX07Y29uc3QgRXI9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxuKXtpZihabih0KSlyZXR1cm4geXIodCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihtcih0LC4uLl9yKSk7cmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKG1yKHQsLi4uX3IsIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZnIoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IHNyKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFhuLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBUcihlLHQsbil7dmFyIHI7aWYoIVNyKGUpKXRocm93IG5ldyBhcigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgYXIoJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgYXIoIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhU3IoZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PXRyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKGVyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgbjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKG4mJjAhPT1uLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYobi5oYXMoZSkpcmV0dXJuITE7bi5hZGQoZSl9ZWxzZSBuPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBzcihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KGFyLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyBhcignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyBhcignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgb3IoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxrcihjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCksbj1uZXcgVWludDhBcnJheSh0KTtsZXQgcj0wO3JldHVybiBlLmZvckVhY2goKGU9PntuLnNldChlLHIpLHIrPWUubGVuZ3RofSkpLG59KFFuLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLFFuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD10cihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IEVyKGMsdCxoLGQpKXRocm93IG5ldyBocjtsZXQgZjtmPWE/dHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Rbi5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgQXI9ODY0MDAsUnI9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIENyPWU9Pntjb25zdCB0PVJyLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qQXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IFByPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBEcj0oZSx0LG49e30pPT57Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFByKGUudHlwKSE9PVByKHIpKSl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIVNyKGkpKXRocm93IG5ldyBjcigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1DcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6ZH09bixoPShmPWR8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmgrbCl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWgtbCl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWgtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpDcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBJcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPWVyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBhcigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgYXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IFRyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBjcigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOkRyKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBPcihlKXtyZXR1cm4gU3IoZSl9Y2xhc3MgVXJ7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShPcil9KGUpKXRocm93IG5ldyB1cigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGxyO2lmKDEhPT1hKXRocm93IG5ldyBkcjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFTcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP2JyKHsuLi5lLGFsZzp0LGV4dDohMX0pOnRyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBzcignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBicih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIExyPXtleHBvcnRzOnt9fSxIcj17ZXhwb3J0czp7fX0sTXI9QShObik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgbj1NcixyPW4uQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHIoZSx0LG4pfXIuZnJvbSYmci5hbGxvYyYmci5hbGxvY1Vuc2FmZSYmci5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGkobix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpKHIsbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlLHQsbil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9cihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIG4/aS5maWxsKHQsbik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19KEhyLEhyLmV4cG9ydHMpO3ZhciBqcj02NTUzNixOcj00Mjk0OTY3Mjk1O3ZhciBxcj1Ici5leHBvcnRzLkJ1ZmZlcix4cj1FLmNyeXB0b3x8RS5tc0NyeXB0bzt4ciYmeHIuZ2V0UmFuZG9tVmFsdWVzP0xyLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPk5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49cXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+anIpZm9yKHZhciByPTA7cjxlO3IrPWpyKXhyLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitqcikpO2Vsc2UgeHIuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB2ZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwsbil9KSk7cmV0dXJuIG59OkxyLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBLcj1Mci5leHBvcnRzO2NsYXNzIEJye2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gWW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIFluLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIFp0LmZyb20oR24oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gS3IoZSl9dmVyaWZ5Snd0KGUsdCxuLHIsaSxvLHMpe3JldHVybiBJcihlLChhPXtrZXlzOlt0XX0sVXIucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBVcihhKSkpLHthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQ1JZUFRPLVVUSUxTLVZKLUlWMDEiLG51bGw9PWU/dm9pZCAwOmUucmVhc29uLGAke251bGw9PWU/dm9pZCAwOmUuY29kZX0gJHtudWxsPT1lP3ZvaWQgMDplLmNsYWltfWApKSkpO3ZhciBhfX1vcmlnaW4seS5TZXNzaW9uU3RvcmFnZTtjbGFzcyBKcntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZihuLnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQobi5leHBpcmVzX2luKSxvPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KG8pKX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX1jbGFzcyBGcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10fWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtsZXQgZTt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHMuc3RvcmFnZT09PXkuQnJvd3Nlck1lbW9yeSYmcy5lbmFibGVQS0NFJiZuKXtjb25zdCBlPWp0LmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KGp0LnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyKXt2YXIgaTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGp0LmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3Qgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oaT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KCk7cy5zcmM9ZX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIG5ldyBQcm9taXNlKCgodCxyKT0+e2NvbnN0IGk9c2V0VGltZW91dCgoKCk9Pnt0KCExKX0pLDFlNCksbz1zPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsYSxjLHU7Y29uc3QgbD1zLmRhdGE7ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLGNsZWFyVGltZW91dChpKSx0KCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJihudWxsPT09KGU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jb2RlKSYmbihudWxsPT09KGE9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb2RlLG51bGw9PT0oYz1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnNlc3Npb25TdGF0ZSxudWxsPT09KHU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGF0ZSkudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT15LldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChTKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShfKSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoUyksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PXkuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXREZWNvZGVkSURQSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldElEUEFjY2Vzc1Rva2VuKCl7dmFyIHQ7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY2Nlc3NfdG9rZW59KSl9Z2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKX0pKX19KHQ9Pntjb25zdCBuPXNlbGY7bGV0IHI7bi5vbm1lc3NhZ2U9KHtkYXRhOm4scG9ydHM6YX0pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgdSxsLGQsaDtjb25zdCBmPWFbMF07aWYobi50eXBlPT09dnx8cilzd2l0Y2gobi50eXBlKXtjYXNlIHY6dHJ5e2NvbnN0IGE9T2JqZWN0LmFzc2lnbih7fSxuLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEh0LGk9bmV3IEJyLG89bmV3IGcocixpKTt5aWVsZCBvLmluaXRpYWxpemUodCk7Y29uc3Qgcz1uZXcgSnIobyksYT1uKG8scyksYz1vLmdldERhdGFMYXllcigpLHU9THQuZ2V0SW5zdGFuY2UoKTtyZXR1cm4obnVsbD09dT92b2lkIDA6dS5pbml0KSYmKHlpZWxkIHUuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCk7ZS5hdHRhY2hUb2tlbiYmKGUuc2hvdWxkQXR0YWNoSURQQWNjZXNzVG9rZW4/dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBhLmdldElEUEFjY2Vzc1Rva2VuKCl9YH0pOnQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgYS5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShhLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09bj92b2lkIDA6bi5kYXRhKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4uZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuY29kZSxudWxsPT09KGw9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PW4/dm9pZCAwOm4uZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpyLmh0dHBSZXF1ZXN0KG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWZ8fGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBGcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1,function(t){return N=N||function(t,e,n){var l=void 0===e?null:e,i=function(t,e){var n=atob(t);if(e){for(var l=new Uint8Array(n.length),i=0,c=n.length;i<c;++i)l[i]=n.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(l.buffer))}return n}(t,void 0!==n&&n),c=i.indexOf("\n",10)+1,o=i.substring(c)+(l?"//# sourceMappingURL="+l:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLG4scixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShuPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1uP246IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0ocj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09cj9yOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShuPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBhPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFhfHwwPT09YS50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2F9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSxyKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSx5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKX0pKX19Y2xhc3MgZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLG4pLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsbixyKXt2YXIgaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShpPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1pP2k6bnVsbCxvPXQmJkpTT04ucGFyc2UodCkscz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse1tuXTpyfSksYT1KU09OLnN0cmluZ2lmeShzKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUsYSl9KSl9cmVtb3ZlVmFsdWUoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW25dO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUsdCl7cmV0dXJuIHQ/YCR7ZX0tJHt0aGlzLl9pZH0tJHt0fWA6YCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9c2V0VGVtcG9yYXJ5RGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXNldFNlc3Npb25EYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfXNldEN1c3RvbURhdGEoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoZSxyKSxuKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRDdXN0b21EYXRhKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KGUsbikpKSYmdm9pZCAwIT09cj9yOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIGd7Ci8qKgogICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RvcmV9IHN0b3JlIC0gVGhlIHN0b3JlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZihgaW5zdGFuY2VfJHtnLl9pbnN0YW5jZUlEfWAsZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBPSURDIHNlcnZpY2UgZW5kcG9pbnRzIHRoYXQgYXJlIGZldGNoZWQgZnJvbSB0aGUgYC53ZWxsLWtub3duYCBlbmRwb2ludC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgYXV0aC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjcnlwdG8gaGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRDcnlwdG9IZWxwZXIKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxQPUMsRD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1ELmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09RC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUQuY2FsbChlKX1mdW5jdGlvbiBqKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgTj17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1ELmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09RC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09RC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09RC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1ELmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6aixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspaihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGoodCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1AodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0scT1OO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYocS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO3EuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihxLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxxLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7cS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6cS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sQj1OO2Z1bmN0aW9uIEooKXt0aGlzLmhhbmRsZXJzPVtdfUoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEoucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1KLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFk9JCxWPXo7ZnVuY3Rpb24gRyhlKXtpZihZPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChZPT09JHx8IVkpJiZzZXRUaW1lb3V0KXJldHVybiBZPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWS5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihZPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFY9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihWPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFY9PT16fHwhVikmJmNsZWFyVGltZW91dClyZXR1cm4gVj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtWKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9TixtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1OLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9TixDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLFBlPU4sRGU9UGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49UGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPU4sTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLGplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LE5lPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LHFlPURlLHhlPVNlLEtlPXdlLEJlPU9lLEplPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPWplKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9OZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fHFlKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgQmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1OLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFllKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgVmUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoVmU9SmUpLFZlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFllKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFllKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1OLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1OLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1OLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1OLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PU4sUnQ9TixDdD1DLFB0PWJ0LER0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBQdCh0KSxyPUN0KFB0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixQdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoRHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1QdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxPdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe090LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPU90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe090LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntPdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O0x0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLEx0PU90PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0sTHQpO2NsYXNzIEh0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX1jbGFzcyBqdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHMsZSl9c3RhdGljIGdldFNpZ25PdXRVUkwoKXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocykpJiZ2b2lkIDAhPT1lP2U6IiJ9c3RhdGljIHJlbW92ZVBLQ0UoZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShlKX1zdGF0aWMgY2FuQ29udGludWVTaWduSW4oZSx0KXtyZXR1cm4hKGUmJiFqdC5oYXNFcnJvckluVVJMKCkmJiFqdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIGp0LmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKX1zdGF0aWMgd2FzU2lnbkluQ2FsbGVkKCl7cmV0dXJuISghanQuaGFzRXJyb3JJblVSTCgpJiYhanQuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KFMpLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKGU9d2luZG93LmxvY2F0aW9uLnNlYXJjaCl7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKGU9d2luZG93LmxvY2F0aW9uLmhyZWYpe2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldChfKSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odyk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHcsSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX12YXIgTnQ9W10scXQ9W10seHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksS3Q9ITE7ZnVuY3Rpb24gQnQoKXtLdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpTnRbdF09ZVt0XSxxdFtlLmNoYXJDb2RlQXQodCldPXQ7cXRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHF0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBKdChlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goTnRbKGk9cik+PjE4JjYzXStOdFtpPj4xMiY2M10rTnRbaT4+NiY2M10rTnRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEZ0KGUpe3ZhciB0O0t0fHxCdCgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKEp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9TnRbdD4+Ml0saSs9TnRbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz1OdFt0Pj4xMF0saSs9TnRbdD4+NCY2M10saSs9TnRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBXdChlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiAkdChlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIHp0PXt9LnRvU3RyaW5nLFl0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXp0LmNhbGwoZSl9O1p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Vy5UWVBFRF9BUlJBWV9TVVBQT1JUfHxXLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIFZ0PUd0KCk7ZnVuY3Rpb24gR3QoKXtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gWHQoZSx0KXtpZihHdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgWnQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWnQoZSx0LG4pe2lmKCEoWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIFp0KSlyZXR1cm4gbmV3IFp0KGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHRuKHRoaXMsZSl9cmV0dXJuIFF0KHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFF0KGUsdCxuLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scik7WnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189WnQucHJvdG90eXBlOmU9bm4oZSx0KTtyZXR1cm4gZX0oZSx0LG4scik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXsic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKTtpZighWnQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfHNuKHQsbiksaT0oZT1YdChlLHIpKS53cml0ZSh0LG4pO2khPT1yJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihvbih0KSl7dmFyIG49MHxybih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1YdChlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwocj10Lmxlbmd0aCkhPXI/WHQoZSwwKTpubihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZZdCh0LmRhdGEpKXJldHVybiBubihlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGVuKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdG4oZSx0KXtpZihlbih0KSxlPVh0KGUsdDwwPzA6MHxybih0KSksIVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gbm4oZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxybih0Lmxlbmd0aCk7ZT1YdChlLG4pO2Zvcih2YXIgcj0wO3I8bjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7aWYoZT49R3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrR3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIHNuKGUsdCl7aWYob24oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFVuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTG4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gVW4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gYW4oZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYoKG4+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gYm4odGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG1uKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gX24odGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFNuKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHluKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGtuKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGNuKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gdW4oZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVp0LmZyb20odCxyKSksb24odCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpsbihlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTpsbihlLFt0XSxuLHIsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbG4oZSx0LG4scixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixuLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPW47bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKG4rYz5hJiYobj1hLWMpLG89bjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGg9MDtoPGM7aCsrKWlmKHUoZSxvK2gpIT09dSh0LGgpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZG4oZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSk+aSYmKHI9aSk6cj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtyPm8vMiYmKHI9by8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIGhuKGUsdCxuLHIpe3JldHVybiBIbihVbih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBmbihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gZm4oZSx0LG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIEhuKExuKHQpLGUsbixyKX1mdW5jdGlvbiB2bihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylyPShuPWUuY2hhckNvZGVBdChzKSk+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/RnQoZSk6RnQoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBtbihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsZD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkrZDw9bilzd2l0Y2goZCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsZD0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLGkrPWR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXduKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbj0iIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz13bikpO3JldHVybiBufShyKX1adC5wb29sU2l6ZT04MTkyLFp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1adC5wcm90b3R5cGUsZX0sWnQuZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFF0KG51bGwsZSx0LG4pfSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoWnQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxadC5fX3Byb3RvX189VWludDhBcnJheSksWnQuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZW4odCksdDw9MD9YdChlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP1h0KGUsdCkuZmlsbChuLHIpOlh0KGUsdCkuZmlsbChuKTpYdChlLHQpfShudWxsLGUsdCxuKX0sWnQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRuKG51bGwsZSl9LFp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuaXNCdWZmZXI9TW4sWnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFvbihlKXx8IW9uKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxadC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxadC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gWnQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1adC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZighb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxadC5ieXRlTGVuZ3RoPXNuLFp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsWnQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Miljbih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWnQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCljbih0aGlzLHQsdCszKSxjbih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWNuKHRoaXMsdCx0KzcpLGNuKHRoaXMsdCsxLHQrNiksY24odGhpcyx0KzIsdCs1KSxjbih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9tbih0aGlzLDAsZSk6YW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxadC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09WnQuY29tcGFyZSh0aGlzLGUpfSxadC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxadC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0ocj4+Pj0wKSxzPShuPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UocixpKSx1PWUuc2xpY2UodCxuKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LFp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG4pfSxadC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITApfSxadC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1bih0aGlzLGUsdCxuLCExKX0sWnQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+aSkmJihuPWkpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBkbih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBobih0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBnbih0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LFp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB3bj00MDk2O2Z1bmN0aW9uIF9uKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGJuKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIGk9IiIsbz10O288bjsrK28paSs9T24oZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24ga24oZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFbihlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gVG4oZSx0LG4scixpLG8pe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtpPG87KytpKWVbbitpXT0odCYyNTU8PDgqKHI/aToxLWkpKT4+PjgqKHI/aToxLWkpfWZ1bmN0aW9uIFJuKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtpPG87KytpKWVbbitpXT10Pj4+OCoocj9pOjMtaSkmMjU1fWZ1bmN0aW9uIENuKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sNCksJHQoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gRG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sOCksJHQoZSx0LG4sciw1Miw4KSxuKzh9WnQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksKHQ9dm9pZCAwPT09dD9yOn5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSx0PGUmJih0PWUpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189WnQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO249bmV3IFp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKW5bb109dGhpc1tvK2VdfXJldHVybiBufSxadC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LFp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sWnQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByPj0oaSo9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0sWnQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LFp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LFp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sWnQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksV3QodGhpcyxlLCEwLDIzLDQpfSxadC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsNTIsOCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsNTIsOCl9LFp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxUbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPW4tMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwxLDI1NSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6QW4odGhpcyxlLHQsITApLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sWnQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMTI3LC0xMjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LFp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFBuKHRoaXMsZSx0LCEwLG4pfSxadC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGksbz1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK25dO2Vsc2UgaWYobzwxZTN8fCFadC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbitvKSx0KTtyZXR1cm4gb30sWnQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIVp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPW9uKGUpP2U6VW4obmV3IFp0KGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgSW49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFVuKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPHI7KytzKXtpZigobj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBMbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzO0t0fHxCdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyB4dCgzKmEvNC1vKSxyPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAsbj0wO3Q8cjt0Kz00LG4rPTMpaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxOHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHF0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxxdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1xdFtlLmNoYXJDb2RlQXQodCldPDwyfHF0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxMHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8cXRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoSW4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEhuKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8ciYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIE1uKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8am4oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmam4oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIGpuKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIE5uPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjpadCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxadC5hbGxvYygrZSl9LGlzQnVmZmVyOk1uLGtNYXhMZW5ndGg6VnR9KSxxbj17ZXhwb3J0czp7fX0seG49e30sS249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEtuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1adC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHhuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQm49S247ZnVuY3Rpb24gSm4oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxadC5pc0J1ZmZlcihlKT9XbihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6V24oWnQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEJuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIFduKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgJG4sem49Sm47em4uZW5jb2RlPUpuLHpuLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmZyb20oRm4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSx6bi50b0Jhc2U2ND1Gbix6bi5mcm9tQmFzZTY0PVduLHpuLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBadC5mcm9tKEZuKGUpLCJiYXNlNjQiKX0seG4uZGVmYXVsdD16biwoJG49cW4pLmV4cG9ydHM9eG4uZGVmYXVsdCwkbi5leHBvcnRzLmRlZmF1bHQ9JG4uZXhwb3J0czt2YXIgWW49cW4uZXhwb3J0cyxWbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9blswXSxhPW5bMV0sYz1uWzJdLHU9blszXSxsPW5bNF0sZD1uWzVdLGg9bls2XSxmPW5bN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1JnJbdl0pPDwyNHwoMjU1JnJbdisxXSk8PDE2fCgyNTUmclt2KzJdKTw8OHwyNTUmclt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmRefmwmaCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWgsaD1kLGQ9bCxsPXUreXwwLHU9YyxjPWEsYT1zLHM9eSttfDA7blswXSs9cyxuWzFdKz1hLG5bMl0rPWMsblszXSs9dSxuWzRdKz1sLG5bNV0rPWQsbls2XSs9aCxuWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgcj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKHI9bih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLHIsdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLHI9dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW3JdPTEyODtmb3IodmFyIGE9cisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHRoaXMuc3RhdGUubGVuZ3RoO24rKyl0aGlzLnN0YXRlW25dPWVbbl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9cjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgcix0aGlzLm91dGVyPW5ldyByLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IHIpLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IHIpLnVwZGF0ZShlKSxuPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1uZXcgaShlKS51cGRhdGUodCkscj1uLmRpZ2VzdCgpO3JldHVybiBuLmNsZWFuKCkscn1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBpPXJbMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxuJiZ0LnVwZGF0ZShuKSx0LnVwZGF0ZShyKSx0LmZpbmlzaChlKSxyWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09ciYmKHI9MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksZD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksaD1kLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KHIpLHA9MDtwPHI7cCsrKWg9PT1kLmxlbmd0aCYmKGEoZCxsLG4sbyksaD0wKSxmW3BdPWRbaCsrXTtyZXR1cm4gbC5jbGVhbigpLGQuZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxuLHIpe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkociksZD0wO2QqczxyO2QrKyl7dmFyIGg9ZCsxO2FbMF09aD4+PjI0JjI1NSxhWzFdPWg+Pj4xNiYyNTUsYVsyXT1oPj4+OCYyNTUsYVszXT1oPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfShWbik7dmFyIEduPVQoVm4uZXhwb3J0cyksWG49Y3J5cHRvO2NvbnN0IFpuPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksUW49bmV3IFRleHRFbmNvZGVyLGVyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCB0cj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9ZXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgbnIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyByciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLG49InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIGlyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIG9yIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3Mgc3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIGFyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3MgY3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyB1ciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgbHIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBkciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBociBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZnIoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBwcihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiBncihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHZyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHlyKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke259LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLG4pfXZhciBtcj0oZSwuLi50KT0+e2xldCBuPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtuKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/bis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOm4rPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9uKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/bis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYobis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxufSx3cj1lPT5abihlKTtjb25zdCBfcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIFNyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IGJyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHNyKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGZyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gWG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0cihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsWG4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBrcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighd3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihtcihlLC4uLl9yLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCF3cihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKG1yKGUsLi4uX3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxuKX07Y29uc3QgRXI9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxuKXtpZihabih0KSlyZXR1cm4geXIodCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihtcih0LC4uLl9yKSk7cmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKG1yKHQsLi4uX3IsIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZnIoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IHNyKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFhuLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBUcihlLHQsbil7dmFyIHI7aWYoIVNyKGUpKXRocm93IG5ldyBhcigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgYXIoJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgYXIoIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhU3IoZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PXRyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKGVyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgbjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKG4mJjAhPT1uLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYobi5oYXMoZSkpcmV0dXJuITE7bi5hZGQoZSl9ZWxzZSBuPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBzcihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KGFyLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyBhcignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyBhcignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgb3IoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxrcihjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCksbj1uZXcgVWludDhBcnJheSh0KTtsZXQgcj0wO3JldHVybiBlLmZvckVhY2goKGU9PntuLnNldChlLHIpLHIrPWUubGVuZ3RofSkpLG59KFFuLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLFFuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD10cihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IEVyKGMsdCxoLGQpKXRocm93IG5ldyBocjtsZXQgZjtmPWE/dHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Rbi5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgQXI9ODY0MDAsUnI9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIENyPWU9Pntjb25zdCB0PVJyLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qQXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IFByPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBEcj0oZSx0LG49e30pPT57Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFByKGUudHlwKSE9PVByKHIpKSl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIVNyKGkpKXRocm93IG5ldyBjcigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1DcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6ZH09bixoPShmPWR8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmgrbCl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWgtbCl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWgtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpDcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBJcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPWVyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBhcigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgYXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IFRyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBjcigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOkRyKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBPcihlKXtyZXR1cm4gU3IoZSl9Y2xhc3MgVXJ7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShPcil9KGUpKXRocm93IG5ldyB1cigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGxyO2lmKDEhPT1hKXRocm93IG5ldyBkcjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFTcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP2JyKHsuLi5lLGFsZzp0LGV4dDohMX0pOnRyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBzcignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBicih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIExyPXtleHBvcnRzOnt9fSxIcj17ZXhwb3J0czp7fX0sTXI9QShObik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgbj1NcixyPW4uQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHIoZSx0LG4pfXIuZnJvbSYmci5hbGxvYyYmci5hbGxvY1Vuc2FmZSYmci5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGkobix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpKHIsbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlLHQsbil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9cihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIG4/aS5maWxsKHQsbik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19KEhyLEhyLmV4cG9ydHMpO3ZhciBqcj02NTUzNixOcj00Mjk0OTY3Mjk1O3ZhciBxcj1Ici5leHBvcnRzLkJ1ZmZlcix4cj1FLmNyeXB0b3x8RS5tc0NyeXB0bzt4ciYmeHIuZ2V0UmFuZG9tVmFsdWVzP0xyLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPk5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49cXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+anIpZm9yKHZhciByPTA7cjxlO3IrPWpyKXhyLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitqcikpO2Vsc2UgeHIuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB2ZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwsbil9KSk7cmV0dXJuIG59OkxyLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBLcj1Mci5leHBvcnRzO2NsYXNzIEJye2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gWW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIFluLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIFp0LmZyb20oR24oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gS3IoZSl9dmVyaWZ5Snd0KGUsdCxuLHIsaSxvLHMpe3JldHVybiBJcihlLChhPXtrZXlzOlt0XX0sVXIucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBVcihhKSkpLHthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQ1JZUFRPLVVUSUxTLVZKLUlWMDEiLG51bGw9PWU/dm9pZCAwOmUucmVhc29uLGAke251bGw9PWU/dm9pZCAwOmUuY29kZX0gJHtudWxsPT1lP3ZvaWQgMDplLmNsYWltfWApKSkpO3ZhciBhfX1vcmlnaW4seS5TZXNzaW9uU3RvcmFnZTtjbGFzcyBKcntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZihuLnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQobi5leHBpcmVzX2luKSxvPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KG8pKX19KSl9Z2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKT9KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTotMX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXJldHVybiB2b2lkIGNsZWFyVGltZW91dCh0KTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpOy0xIT09ZSYmY2xlYXJUaW1lb3V0KGUpfSkpfX1jbGFzcyBGcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj10fWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1NQUlOX1RIUkVBRF9DTElFTlQtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCk7cmV0dXJuIGUmJih5aWVsZCB0aGlzLnJlcXVlc3RDdXN0b21HcmFudChlLHQpKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0pKX1odHRwUmVxdWVzdCh0LG4scixpLG8scyl7dmFyIGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSExO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGE9eWllbGQgbnVsbD09ZD92b2lkIDA6ZC5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihlJiYobnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4udXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha31yZXR1cm4gbD90LnJlcXVlc3QobikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGE9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSx1LGw7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpKXtsZXQgZTt0cnl7ZT15aWVsZCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbihzKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLVNFMDEiLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSl0cnl7Y29uc3QgZT15aWVsZCB0LnJlcXVlc3Qobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1jYXRjaChlKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShlKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoZSl9fXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGEpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChhKX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWh0dHBSZXF1ZXN0QWxsKHQsbixyLGksbyl7dmFyIHMsYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITA7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBuIG9mWy4uLm51bGwhPT0oYT1udWxsPT09KHM9eWllbGQgZCl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYobiYmKG51bGw9PT0odT1lLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChuKSkpe3Q9ITA7YnJlYWt9aWYoIXQpe2w9ITE7YnJlYWt9fWNvbnN0IGg9W107aWYobClyZXR1cm4gdC5mb3JFYWNoKChlPT57aC5wdXNoKG4ucmVxdWVzdChlKSl9KSksKG51bGw9PW4/dm9pZCAwOm4uYWxsKSYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcyxhLHU7aWYoNDAxPT09KG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgczt0cnl7cz15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXt0aHJvdyByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29kZTprfSkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KGE9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09YT9hOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PXU/dToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKHMpcmV0dXJuIG4uYWxsJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpfXJldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdCh0KX0pKSkpO3Rocm93IG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbih0LG4scixpLG8pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHMuc3RvcmFnZT09PXkuQnJvd3Nlck1lbW9yeSYmcy5lbmFibGVQS0NFJiZuKXtjb25zdCBlPWp0LmdldFBLQ0UodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pKTt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSl9ZWxzZSBzLnN0b3JhZ2U9PT15LldlYldvcmtlciYmaSYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKGksbnVsbCE9bz9vOiIiKSk7cmV0dXJuIHQ/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9bj9uOiIiLG51bGwhPW8/bzoiIikudGhlbigoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5zdG9yYWdlIT09eS5XZWJXb3JrZXI/KGp0LnNldFNpZ25PdXRVUkwoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpKSx0aGlzLl9zcGFIZWxwZXImJih0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcykpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpfXRyeVNpZ25JblNpbGVudGx5KHQsbixyKXt2YXIgaTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGp0LmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSlyZXR1cm4geWllbGQgci5yZWNlaXZlUHJvbXB0Tm9uZVJlc3BvbnNlKCksUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7Y29uc3Qgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oaT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKTt0cnl7Y29uc3QgZT15aWVsZCB0KCk7cy5zcmM9ZX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIG5ldyBQcm9taXNlKCgodCxyKT0+e2NvbnN0IGk9c2V0VGltZW91dCgoKCk9Pnt0KCExKX0pLDFlNCksbz1zPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsYSxjLHU7Y29uc3QgbD1zLmRhdGE7ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLGNsZWFyVGltZW91dChpKSx0KCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJihudWxsPT09KGU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jb2RlKSYmbihudWxsPT09KGE9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb2RlLG51bGw9PT0oYz1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnNlc3Npb25TdGF0ZSxudWxsPT09KHU9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGF0ZSkudGhlbigoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGUpfSkpLmNhdGNoKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoZSl9KSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoaSl9KSl9KSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pfSkpfSkpfWhhbmRsZVNpZ25Jbih0LG4scil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYoeWllbGQgdCgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtpZihlLnN0b3JhZ2UhPT15LldlYldvcmtlciYmKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSlyZXR1cm4gdGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLGUuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksUHJvbWlzZS5yZXNvbHZlKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y29uc3QgaT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG89bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChTKTtpZihpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3Rocm93IGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShfKSxlLnNlYXJjaFBhcmFtcy5kZWxldGUoUyksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSxlLnRvU3RyaW5nKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsaSxudWxsIT1vP286IiIpfWlmKGUuc3RvcmFnZT09PXkuV2ViV29ya2VyJiZyKXtjb25zdCBlPXlpZWxkIHIoKTtpZihlKXJldHVybiBlfX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXREZWNvZGVkSURQSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0Q3J5cHRvSGVscGVyKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldElEUEFjY2Vzc1Rva2VuKCl7dmFyIHQ7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hY2Nlc3NfdG9rZW59KSl9Z2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKX0pKX19KHQ9Pntjb25zdCBuPXNlbGY7bGV0IHI7bi5vbm1lc3NhZ2U9KHtkYXRhOm4scG9ydHM6YX0pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgdSxsLGQsaDtjb25zdCBmPWFbMF07aWYobi50eXBlPT09dnx8cilzd2l0Y2gobi50eXBlKXtjYXNlIHY6dHJ5e2NvbnN0IGE9T2JqZWN0LmFzc2lnbih7fSxuLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEh0LGk9bmV3IEJyLG89bmV3IGcocixpKTt5aWVsZCBvLmluaXRpYWxpemUodCk7Y29uc3Qgcz1uZXcgSnIobyksYT1uKG8scyksYz1vLmdldERhdGFMYXllcigpLHU9THQuZ2V0SW5zdGFuY2UoKTtyZXR1cm4obnVsbD09dT92b2lkIDA6dS5pbml0KSYmKHlpZWxkIHUuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCk7ZS5hdHRhY2hUb2tlbiYmKGUuc2hvdWxkQXR0YWNoSURQQWNjZXNzVG9rZW4/dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBhLmdldElEUEFjY2Vzc1Rva2VuKCl9YH0pOnQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgYS5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShhLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09bj92b2lkIDA6bi5kYXRhKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PSh1PW51bGw9PW4/dm9pZCAwOm4uZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuY29kZSxudWxsPT09KGw9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PW4/dm9pZCAwOm4uZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpyLmh0dHBSZXF1ZXN0KG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWZ8fGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBGcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1),new Worker(N,t)});!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(J||(J={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant",t.SignOutFailed="sign-out-failed"}(H||(H={}));const U="Y2hlY2tTZXNzaW9u";class k{constructor(t,e){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=e}enableHttpHandler(t){(null==t?void 0:t.enableHandler)&&t.enableHandler()}disableHttpHandler(t){(null==t?void 0:t.disableHandler)&&t.disableHandler()}initializeSessionManger(t,e,n,l,i){var c,o,d;i.initialize(t.clientID,null!==(c=e.checkSessionIframe)&&void 0!==c?c:"",n,null!==(o=t.checkSessionInterval)&&void 0!==o?o:3,null!==(d=t.sessionRefreshInterval)&&void 0!==d?d:300,t.signInRedirectURL,l)}requestCustomGrant(t,e){var n,i,c;return l(this,void 0,void 0,(function*(){let o=!0,d=!1;if(null==t?void 0:t.tokenEndpoint){o=!1;for(const e of[...null!==(i=null===(n=yield this._dataLayer.getConfigData())||void 0===n?void 0:n.resourceServerURLs)&&void 0!==i?i:[],t.baseUrl])if(e&&(null===(c=t.tokenEndpoint)||void 0===c?void 0:c.startsWith(e))){d=!0;break}}return t.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),o||d?this._authenticationClient.requestCustomGrant(t).then(n=>l(this,void 0,void 0,(function*(){return e&&"function"==typeof e&&e(t),t.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):n}))).catch(t=>Promise.reject(t)):Promise.reject(new W("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 l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}))}refreshAccessToken(t){return l(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const e=yield this.getCustomGrantConfigData();return e&&(yield this.requestCustomGrant(e,t)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(t){return Promise.reject(t)}}))}httpRequest(t,e,n,i,c,o){var d,r;return l(this,void 0,void 0,(function*(){let a=!1;const u=yield this._dataLayer.getConfigData();for(const t of[...null!==(d=yield null==u?void 0:u.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(t&&(null===(r=null==e?void 0:e.url)||void 0===r?void 0:r.startsWith(t))){a=!0;break}return a?t.request(e).then(t=>Promise.resolve(t)).catch(d=>l(this,void 0,void 0,(function*(){var l,r,a;if(401===(null===(l=null==d?void 0:d.response)||void 0===l?void 0:l.status)||!(null==d?void 0:d.response)){let u;try{u=yield this.refreshAccessToken(o)}catch(l){throw n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},d),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new W("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==l?void 0:l.name)&&void 0!==r?r:"Refresh token request failed.",null!==(a=null==l?void 0:l.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(u)try{const n=yield t.request(e);return Promise.resolve(n)}catch(l){return n&&("function"==typeof i&&(yield i(l)),"function"==typeof c&&c()),Promise.reject(l)}}return n&&("function"==typeof i&&(yield i(d)),"function"==typeof c&&c()),Promise.reject(d)}))):Promise.reject(new W("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(t,e,n,i,c){var o,d,r;return l(this,void 0,void 0,(function*(){let a=!0;const u=yield this._dataLayer.getConfigData();for(const e of t){let t=!1;for(const n of[...null!==(d=null===(o=yield u)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(n&&(null===(r=e.url)||void 0===r?void 0:r.startsWith(n))){t=!0;break}if(!t){a=!1;break}}const s=[];if(a)return t.forEach(t=>{s.push(e.request(t))}),(null==e?void 0:e.all)&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>l(this,void 0,void 0,(function*(){var o,d,r;if(401===(null===(o=null==t?void 0:t.response)||void 0===o?void 0:o.status)||!(null==t?void 0:t.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(e){throw n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new W("SPA-AUTH_HELPER-HRA-SE01",null!==(d=null==e?void 0:e.name)&&void 0!==d?d:"Refresh token request failed.",null!==(r=null==e?void 0:e.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 e.all&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>l(this,void 0,void 0,(function*(){return n&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})))}return n&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})));throw new W("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,e,n,i,c){return l(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getConfigData();if(o.storage===J.BrowserMemory&&o.enablePKCE&&e){const t=F.getPKCE(C.extractPKCEKeyFromStateParam(e));yield this._authenticationClient.setPKCECode(C.extractPKCEKeyFromStateParam(e),t)}else o.storage===J.WebWorker&&i&&(yield this._authenticationClient.setPKCECode(i,null!=c?c:""));return t?this._authenticationClient.requestAccessToken(t,null!=e?e:"",null!=c?c:"").then(()=>l(this,void 0,void 0,(function*(){return o.storage!==J.WebWorker?(F.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&o.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}))).catch(t=>Promise.reject(t)):Promise.reject(new W("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(t,e,n){var i;return l(this,void 0,void 0,(function*(){if(F.isInitializedSilentSignIn())return yield n.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById("rpIFrame"),o=null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById("promptNoneIFrame");try{const e=yield t();o.src=e}catch(t){return Promise.reject(t)}return new Promise((t,n)=>{const i=setTimeout(()=>{t(!1)},1e4),c=o=>l(this,void 0,void 0,(function*(){var l,d,r,a;const u=o.data;"check_session_signed_out"==(null==u?void 0:u.type)&&(window.removeEventListener("message",c),clearTimeout(i),t(!1)),"check_session_signed_in"==(null==u?void 0:u.type)&&(null===(l=null==u?void 0:u.data)||void 0===l?void 0:l.code)&&e(null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.code,null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.sessionState,null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.state).then(e=>{window.removeEventListener("message",c),t(e)}).catch(t=>{window.removeEventListener("message",c),n(t)}).finally(()=>{clearTimeout(i)})}));window.addEventListener("message",c)})}))}handleSignIn(t,e,n){return l(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!==J.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&e(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const i=new URL(window.location.href).searchParams.get("error"),c=new URL(window.location.href).searchParams.get("error_description");if(i){const t=new URL(window.location.href);throw t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),new W("SPA-AUTH_HELPER-SI-SE01",i,null!=c?c:"")}if(l.storage===J.WebWorker&&n){const t=yield n();if(t)return t}}))}getBasicUserInfo(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var t;return l(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData())||void 0===t?void 0:t.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class B{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(t){return l(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData();if(e.refresh_token){const n=parseInt(e.expires_in),i=setTimeout(()=>l(this,void 0,void 0,(function*(){yield t.refreshAccessToken()})),1e3*(n<=10?n:n-10));yield this._dataLayer.setTemporaryDataParameter(Z,JSON.stringify(i))}}))}getRefreshTimeoutTimer(){return l(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(Z))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Z)):-1}))}clearRefreshTokenTimeout(t){return l(this,void 0,void 0,(function*(){if(t)return void clearTimeout(t);const e=yield this.getRefreshTimeoutTimer();-1!==e&&clearTimeout(e)}))}}class x{constructor(){}static generateSuccessMessage(t){return{blob:(null==t?void 0:t.data)instanceof Blob?null==t?void 0:t.data:null,data:JSON.stringify(null!=t?t:""),success:!0}}static generateFailureMessage(t){return(null==t?void 0:t.toJSON)&&delete t.toJSON,{error:JSON.stringify(null!=t?t:""),success:!1}}}class F{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(t){var e;return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:""}static setPKCE(t,e){sessionStorage.setItem(t,e)}static setSignOutURL(t){sessionStorage.setItem(G,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(G))&&void 0!==t?t:""}static removePKCE(t){sessionStorage.removeItem(t)}static canContinueSignIn(t,e){return!(t&&!F.hasErrorInURL()&&!F.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return F.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!F.hasErrorInURL()&&!F.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){return l(this,void 0,void 0,(function*(){if(K.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),yield K.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(K.didSignOutFail(window.location.href)){const t=new URL(window.location.href),e=t.searchParams.get("error"),n=t.searchParams.get("error_description"),l=window.location.href.split("?")[0];return history.pushState({},document.title,l),{description:null!=n?n:"",error:null!=e?e:""}}return!1}static isSilentStatePresentInURL(){var t;const e=new URL(window.location.href).searchParams.get("state");return null!==(t=null==e?void 0:e.includes("sign-in-silently"))&&void 0!==t&&t}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){const e=new URL(t);return!!e.searchParams.get("error")&&e.searchParams.get("state")!==g}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return l(this,void 0,void 0,(function*(){const e=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*e))}))}}const T=(()=>{let t,e,n,i,c,o,d,r,a,u,s;const Z=(l,d,r,a,u,Z,m)=>{t=l,e=d,n=r,i=a,c=Z,o=u,s=m,i>-1&&b(),o>-1&&(u=setInterval(()=>{p()},1e3*o))},b=()=>l(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const d="opIFrame",a=document.getElementById("rpIFrame");(null===(o=null==a?void 0:a.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=e+"?client_id="+t+"&redirect_uri="+c,r=setInterval((function(){var i;return l(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n=`${t} ${l}`,c=document.getElementById("rpIFrame"),o=(null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(d)).contentWindow;null==o||o.postMessage(n,e)}}))}),1e3*i),h()})),m=()=>{clearInterval(r),clearInterval(void 0)},h=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var n;return l(this,void 0,void 0,(function*(){!e||(null==e?void 0:e.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield d():"changed"===t.data&&p())}))}),!1)},p=()=>l(void 0,void 0,void 0,(function*(){var t;const e=document.getElementById("rpIFrame"),n=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");if(F.canSendPromptNoneRequest()){F.setPromptNoneRequestSent(!0);const t=e=>{var n,l,i;"set_session_state_from_iframe"===(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)&&(u(null!==(i=null===(l=null==e?void 0:e.data)||void 0===l?void 0:l.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))};a!==J.BrowserMemory&&a!==J.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield s({prompt:"none",responseMode:"query",state:U});n.src=e}})),G=t=>l(void 0,void 0,void 0,(function*(){var e,n;const l=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(I),c=window.parent.parent;if(null!==l&&(l.includes(U)||l.includes("sign-in-silently"))){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if(l.includes("sign-in-silently")){const t={data:{code:o,sessionState:null!=i?i:"",state:l},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),F.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield F.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(a===J.LocalStorage||a===J.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(n=null===(e=null===window||void 0===window?void 0:window.parent)||void 0===e?void 0:e.parent)||void 0===n||n.postMessage(t)}return F.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield F.waitTillPageRedirect(),!0}{if(l.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),F.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield F.waitTillPageRedirect(),!0}F.setPromptNoneRequestSent(!1);const t=yield d();return yield K.clearUserSessionData(),c.location.href=t,window.location.href="about:blank",yield F.waitTillPageRedirect(),!0}}return!1}));return(t,e,n)=>l(void 0,void 0,void 0,(function*(){var l;let i=document.createElement("iframe");i.setAttribute("id","rpIFrame"),i.style.display="none";let c=!1;for(i.onload=()=>{var t,e,n,l;i=document.getElementById("rpIFrame");const o=null==i?void 0:i.contentDocument,d=null==o?void 0:o.createElement("iframe");d&&(d.setAttribute("id","opIFrame"),d.style.display="none");const r=null==o?void 0:o.createElement("iframe");r&&(r.setAttribute("id","promptNoneIFrame"),r.style.display="none"),d&&(null===(e=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(d)),r&&(null===(l=null===(n=null==i?void 0:i.contentDocument)||void 0===n?void 0:n.body)||void 0===l||l.appendChild(r)),c=!0},null===(l=null===document||void 0===document?void 0:document.body)||void 0===l||l.appendChild(i),d=t,a=e,u=n;!1===c;)yield new Promise(t=>setTimeout(t,1));return{initialize:Z,receivePromptNoneResponse:G,reset:m}}))})();var A="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var z={exports:{}},w=function(t,e){return function(){for(var n=new Array(arguments.length),l=0;l<n.length;l++)n[l]=arguments[l];return t.apply(e,n)}},Q=w,j=Object.prototype.toString;function P(t){return Array.isArray(t)}function M(t){return void 0===t}function E(t){return"[object ArrayBuffer]"===j.call(t)}function D(t){return null!==t&&"object"==typeof t}function O(t){if("[object Object]"!==j.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function _(t){return"[object Function]"===j.call(t)}function q(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),P(t))for(var n=0,l=t.length;n<l;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var $={isArray:P,isArrayBuffer:E,isBuffer:function(t){return null!==t&&!M(t)&&null!==t.constructor&&!M(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===j.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&E(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:D,isPlainObject:O,isUndefined:M,isDate:function(t){return"[object Date]"===j.call(t)},isFile:function(t){return"[object File]"===j.call(t)},isBlob:function(t){return"[object Blob]"===j.call(t)},isFunction:_,isStream:function(t){return D(t)&&_(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===j.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:q,merge:function t(){var e={};function n(n,l){O(e[l])&&O(n)?e[l]=t(e[l],n):O(n)?e[l]=t({},n):P(n)?e[l]=n.slice():e[l]=n}for(var l=0,i=arguments.length;l<i;l++)q(arguments[l],n);return e},extend:function(t,e,n){return q(e,(function(e,l){t[l]=n&&"function"==typeof e?Q(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}},tt=$;function et(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var nt=function(t,e,n){if(!e)return t;var l;if(n)l=n(e);else if(tt.isURLSearchParams(e))l=e.toString();else{var i=[];tt.forEach(e,(function(t,e){null!=t&&(tt.isArray(t)?e+="[]":t=[t],tt.forEach(t,(function(t){tt.isDate(t)?t=t.toISOString():tt.isObject(t)&&(t=JSON.stringify(t)),i.push(et(e)+"="+et(t))})))})),l=i.join("&")}if(l){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+l}return t},lt=$;function it(){this.handlers=[]}it.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},it.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},it.prototype.forEach=function(t){lt.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var ct=it,ot=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function dt(){throw new Error("setTimeout has not been defined")}function rt(){throw new Error("clearTimeout has not been defined")}var at=dt,ut=rt;function st(t){if(at===setTimeout)return setTimeout(t,0);if((at===dt||!at)&&setTimeout)return at=setTimeout,setTimeout(t,0);try{return at(t,0)}catch(e){try{return at.call(null,t,0)}catch(e){return at.call(this,t,0)}}}"function"==typeof ot.setTimeout&&(at=setTimeout),"function"==typeof ot.clearTimeout&&(ut=clearTimeout);var Zt,bt=[],mt=!1,ht=-1;function pt(){mt&&Zt&&(mt=!1,Zt.length?bt=Zt.concat(bt):ht=-1,bt.length&&It())}function It(){if(!mt){var t=st(pt);mt=!0;for(var e=bt.length;e;){for(Zt=bt,bt=[];++ht<e;)Zt&&Zt[ht].run();ht=-1,e=bt.length}Zt=null,mt=!1,function(t){if(ut===clearTimeout)return clearTimeout(t);if((ut===rt||!ut)&&clearTimeout)return ut=clearTimeout,clearTimeout(t);try{ut(t)}catch(e){try{return ut.call(null,t)}catch(e){return ut.call(this,t)}}}(t)}}function Gt(t,e){this.fun=t,this.array=e}function gt(){}Gt.prototype.run=function(){this.fun.apply(null,this.array)};var Xt=gt,yt=gt,Vt=gt,Wt=gt,Ct=gt,Rt=gt,ft=gt,Yt=ot.performance||{},vt=Yt.now||Yt.mozNow||Yt.msNow||Yt.oNow||Yt.webkitNow||function(){return(new Date).getTime()},St=new Date,Kt={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];bt.push(new Gt(t,e)),1!==bt.length||mt||st(It)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Xt,addListener:yt,once:Vt,off:Wt,removeListener:Ct,removeAllListeners:Rt,emit:ft,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*vt.call(Yt),n=Math.floor(e),l=Math.floor(e%1*1e9);return t&&(n-=t[0],(l-=t[1])<0&&(n--,l+=1e9)),[n,l]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-St)/1e3}},Nt=$,Jt=function(t,e,n,l,i){return t.config=e,n&&(t.code=n),t.request=l,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},t},Ht={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Lt=Jt,Ut=function(t,e,n,l,i){var c=new Error(t);return Lt(c,e,n,l,i)},kt=Ut,Bt=$,xt=Bt.isStandardBrowserEnv()?{write:function(t,e,n,l,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Bt.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),Bt.isString(l)&&o.push("path="+l),Bt.isString(i)&&o.push("domain="+i),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},Ft=$,Tt=["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"],At=$,zt=At.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function l(t){var l=t;return e&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=l(window.location.href),function(e){var n=At.isString(e)?l(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function wt(t){this.message=t}wt.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},wt.prototype.__CANCEL__=!0;var Qt=wt,jt=$,Pt=xt,Mt=nt,Et=zt,Dt=Ut,Ot=Ht,_t=Qt,qt=$,$t=function(t,e){Nt.forEach(t,(function(n,l){l!==e&&l.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[l])}))},te=Jt,ee={"Content-Type":"application/x-www-form-urlencoded"};function ne(t,e){!qt.isUndefined(t)&&qt.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var le,ie={transitional:Ht,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Kt&&"[object process]"===Object.prototype.toString.call(Kt))&&(le=function(t){return new Promise((function(e,n){var l,i=t.data,c=t.headers,o=t.responseType;function d(){t.cancelToken&&t.cancelToken.unsubscribe(l),t.signal&&t.signal.removeEventListener("abort",l)}jt.isFormData(i)&&delete c["Content-Type"];var r=new XMLHttpRequest;if(t.auth){var a=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(a+":"+u)}var s=function(t,e){return t&&!function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}(e)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}(t.baseURL,t.url);function Z(){if(r){var l="getAllResponseHeaders"in r?function(t){var e,n,l,i={};return t?(Ft.forEach(t.split("\n"),(function(t){if(l=t.indexOf(":"),e=Ft.trim(t.substr(0,l)).toLowerCase(),n=Ft.trim(t.substr(l+1)),e){if(i[e]&&Tt.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i}(r.getAllResponseHeaders()):null;(function(t,e,n){var l=n.config.validateStatus;n.status&&l&&!l(n.status)?e(kt("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)})((function(t){e(t),d()}),(function(t){n(t),d()}),{data:o&&"text"!==o&&"json"!==o?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:l,config:t,request:r}),r=null}}if(r.open(t.method.toUpperCase(),Mt(s,t.params,t.paramsSerializer),!0),r.timeout=t.timeout,"onloadend"in r?r.onloadend=Z:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(Z)},r.onabort=function(){r&&(n(Dt("Request aborted",t,"ECONNABORTED",r)),r=null)},r.onerror=function(){n(Dt("Network Error",t,null,r)),r=null},r.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",l=t.transitional||Ot;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(Dt(e,t,l.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},jt.isStandardBrowserEnv()){var b=(t.withCredentials||Et(s))&&t.xsrfCookieName?Pt.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in r&&jt.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:r.setRequestHeader(e,t)})),jt.isUndefined(t.withCredentials)||(r.withCredentials=!!t.withCredentials),o&&"json"!==o&&(r.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&r.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&r.upload&&r.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(l=function(t){r&&(n(!t||t&&t.type?new _t("canceled"):t),r.abort(),r=null)},t.cancelToken&&t.cancelToken.subscribe(l),t.signal&&(t.signal.aborted?l():t.signal.addEventListener("abort",l))),i||(i=null),r.send(i)}))}),le),transformRequest:[function(t,e){return $t(e,"Accept"),$t(e,"Content-Type"),qt.isFormData(t)||qt.isArrayBuffer(t)||qt.isBuffer(t)||qt.isStream(t)||qt.isFile(t)||qt.isBlob(t)?t:qt.isArrayBufferView(t)?t.buffer:qt.isURLSearchParams(t)?(ne(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):qt.isObject(t)||e&&"application/json"===e["Content-Type"]?(ne(e,"application/json"),function(t,e,n){if(qt.isString(t))try{return(0,JSON.parse)(t),qt.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||ie.transitional,n=e&&e.silentJSONParsing,l=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||l&&qt.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw te(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};qt.forEach(["delete","get","head"],(function(t){ie.headers[t]={}})),qt.forEach(["post","put","patch"],(function(t){ie.headers[t]=qt.merge(ee)}));var ce=ie,oe=$,de=ce,re=function(t){return!(!t||!t.__CANCEL__)},ae=$,ue=function(t,e,n){var l=this||de;return oe.forEach(n,(function(n){t=n.call(l,t,e)})),t},se=re,Ze=ce,be=Qt;function me(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new be("canceled")}var he=$,pe=function(t,e){e=e||{};var n={};function l(t,e){return he.isPlainObject(t)&&he.isPlainObject(e)?he.merge(t,e):he.isPlainObject(e)?he.merge({},e):he.isArray(e)?e.slice():e}function i(n){return he.isUndefined(e[n])?he.isUndefined(t[n])?void 0:l(void 0,t[n]):l(t[n],e[n])}function c(t){if(!he.isUndefined(e[t]))return l(void 0,e[t])}function o(n){return he.isUndefined(e[n])?he.isUndefined(t[n])?void 0:l(void 0,t[n]):l(void 0,e[n])}function d(n){return n in e?l(t[n],e[n]):n in t?l(void 0,t[n]):void 0}var r={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:d};return he.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=r[t]||i,l=e(t);he.isUndefined(l)&&e!==d||(n[t]=l)})),n},Ie={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Ie[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var Ge={};Ie.transitional=function(t,e,n){function l(t,e){return"[Axios v0.26.1] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,c){if(!1===t)throw new Error(l(i," has been removed"+(e?" in "+e:"")));return e&&!Ge[i]&&(Ge[i]=!0,console.warn(l(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,c)}};var ge=$,Xe=nt,ye=ct,Ve=function(t){return me(t),t.headers=t.headers||{},t.data=ue.call(t,t.data,t.headers,t.transformRequest),t.headers=ae.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),ae.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||Ze.adapter)(t).then((function(e){return me(t),e.data=ue.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return se(e)||(me(t),e&&e.response&&(e.response.data=ue.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},We=pe,Ce={assertOptions:function(t,e,n){if("object"!=typeof t)throw new TypeError("options must be an object");for(var l=Object.keys(t),i=l.length;i-- >0;){var c=l[i],o=e[c];if(o){var d=t[c],r=void 0===d||o(d,c,t);if(!0!==r)throw new TypeError("option "+c+" must be "+r)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:Ie},Re=Ce.validators;function fe(t){this.defaults=t,this.interceptors={request:new ye,response:new ye}}fe.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=We(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&Ce.assertOptions(n,{silentJSONParsing:Re.transitional(Re.boolean),forcedJSONParsing:Re.transitional(Re.boolean),clarifyTimeoutError:Re.transitional(Re.boolean)},!1);var l=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,l.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var d=[Ve,void 0];for(Array.prototype.unshift.apply(d,l),d=d.concat(o),c=Promise.resolve(e);d.length;)c=c.then(d.shift(),d.shift());return c}for(var r=e;l.length;){var a=l.shift(),u=l.shift();try{r=a(r)}catch(t){u(t);break}}try{c=Ve(r)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},fe.prototype.getUri=function(t){return t=We(this.defaults,t),Xe(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},ge.forEach(["delete","get","head","options"],(function(t){fe.prototype[t]=function(e,n){return this.request(We(n||{},{method:t,url:e,data:(n||{}).data}))}})),ge.forEach(["post","put","patch"],(function(t){fe.prototype[t]=function(e,n,l){return this.request(We(l||{},{method:t,url:e,data:n}))}}));var Ye=fe,ve=Qt;function Se(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,l=n._listeners.length;for(e=0;e<l;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,l=new Promise((function(t){n.subscribe(t),e=t})).then(t);return l.cancel=function(){n.unsubscribe(e)},l},t((function(t){n.reason||(n.reason=new ve(t),e(n.reason))}))}Se.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Se.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Se.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Se.source=function(){var t;return{token:new Se((function(e){t=e})),cancel:t}};var Ke=Se,Ne=$,Je=$,He=w,Le=Ye,Ue=pe,ke=function t(e){var n=new Le(e),l=He(Le.prototype.request,n);return Je.extend(l,Le.prototype,n),Je.extend(l,n),l.create=function(n){return t(Ue(e,n))},l}(ce);ke.Axios=Le,ke.Cancel=Qt,ke.CancelToken=Ke,ke.isCancel=re,ke.VERSION="0.26.1",ke.all=function(t){return Promise.all(t)},ke.spread=function(t){return function(e){return t.apply(null,e)}},ke.isAxiosError=function(t){return Ne.isObject(t)&&!0===t.isAxiosError},z.exports=ke,z.exports.default=ke;var Be,xe=z.exports;let Fe=Be=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=xe.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Be),this.axiosInstance.interceptors.request.use(t=>l(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=xe.all,this.axiosInstance.spread=xe.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(t){return l(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const e=null==t?void 0:t.data,n=new FormData;Object.keys(e).forEach(t=>{n.append(t,e[t])}),t.data=n}return t.startTimeInMs=(new Date).getTime(),Be.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Be.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Be.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,e){return l(this,void 0,void 0,(function*(){Be.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){Be.isHandlerEnabled=!0}disableHandler(){Be.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Be.DEFAULT_HANDLER_DISABLE_TIMEOUT){Be.isHandlerEnabled=!1,setTimeout(()=>{Be.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Fe.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Fe=Be=function(t,e,n,l){var i,c=arguments.length,o=c<3?e:null===l?l=Object.getOwnPropertyDescriptor(e,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,l);else for(var d=t.length-1;d>=0;d--)(i=t[d])&&(o=(c<3?i(o):c>3?i(e,n,o):i(e,n))||o);return c>3&&o&&Object.defineProperty(e,n,o),o}([t=>{}],Fe);class Te{setData(t,e){return l(this,void 0,void 0,(function*(){localStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Ae{constructor(){this._data=new Map}setData(t,e){return l(this,void 0,void 0,(function*(){this._data.set(t,e)}))}getData(t){var e,n;return l(this,void 0,void 0,(function*(){return null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class ze{setData(t,e){return l(this,void 0,void 0,(function*(){sessionStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}var we=[],Qe=[],je="undefined"!=typeof Uint8Array?Uint8Array:Array,Pe=!1;function Me(){Pe=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)we[e]=t[e],Qe[t.charCodeAt(e)]=e;Qe["-".charCodeAt(0)]=62,Qe["_".charCodeAt(0)]=63}function Ee(t,e,n){for(var l,i,c=[],o=e;o<n;o+=3)l=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(we[(i=l)>>18&63]+we[i>>12&63]+we[i>>6&63]+we[63&i]);return c.join("")}function De(t){var e;Pe||Me();for(var n=t.length,l=n%3,i="",c=[],o=16383,d=0,r=n-l;d<r;d+=o)c.push(Ee(t,d,d+o>r?r:d+o));return 1===l?(e=t[n-1],i+=we[e>>2],i+=we[e<<4&63],i+="=="):2===l&&(e=(t[n-2]<<8)+t[n-1],i+=we[e>>10],i+=we[e>>4&63],i+=we[e<<2&63],i+="="),c.push(i),c.join("")}function Oe(t,e,n,l,i){var c,o,d=8*i-l-1,r=(1<<d)-1,a=r>>1,u=-7,s=n?i-1:0,Z=n?-1:1,b=t[e+s];for(s+=Z,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[e+s],s+=Z,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=l;u>0;o=256*o+t[e+s],s+=Z,u-=8);if(0===c)c=1-a;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,l),c-=a}return(b?-1:1)*o*Math.pow(2,c-l)}function _e(t,e,n,l,i,c){var o,d,r,a=8*c-i-1,u=(1<<a)-1,s=u>>1,Z=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=l?0:c-1,m=l?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(d=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(r=Math.pow(2,-o))<1&&(o--,r*=2),(e+=o+s>=1?Z/r:Z*Math.pow(2,1-s))*r>=2&&(o++,r/=2),o+s>=u?(d=0,o=u):o+s>=1?(d=(e*r-1)*Math.pow(2,i),o+=s):(d=e*Math.pow(2,s-1)*Math.pow(2,i),o=0));i>=8;t[n+b]=255&d,b+=m,d/=256,i-=8);for(o=o<<i|d,a+=i;a>0;t[n+b]=255&o,b+=m,o/=256,a-=8);t[n+b-m]|=128*h}var qe={}.toString,$e=Array.isArray||function(t){return"[object Array]"==qe.call(t)};ln.TYPED_ARRAY_SUPPORT=void 0===ot.TYPED_ARRAY_SUPPORT||ot.TYPED_ARRAY_SUPPORT;var tn=en();function en(){return ln.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function nn(t,e){if(en()<e)throw new RangeError("Invalid typed array length");return ln.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=ln.prototype:(null===t&&(t=new ln(e)),t.length=e),t}function ln(t,e,n){if(!(ln.TYPED_ARRAY_SUPPORT||this instanceof ln))return new ln(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return dn(this,t)}return cn(this,t,e,n)}function cn(t,e,n,l){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,l){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(l||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===l?new Uint8Array(e):void 0===l?new Uint8Array(e,n):new Uint8Array(e,n,l),ln.TYPED_ARRAY_SUPPORT?(t=e).__proto__=ln.prototype:t=rn(t,e),t}(t,e,n,l):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!ln.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var l=0|sn(e,n),i=(t=nn(t,l)).write(e,n);return i!==l&&(t=t.slice(0,i)),t}(t,e,n):function(t,e){if(un(e)){var n=0|an(e.length);return 0===(t=nn(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(l=e.length)!=l?nn(t,0):rn(t,e);if("Buffer"===e.type&&$e(e.data))return rn(t,e.data)}var l;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function on(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function dn(t,e){if(on(e),t=nn(t,e<0?0:0|an(e)),!ln.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function rn(t,e){var n=e.length<0?0:0|an(e.length);t=nn(t,n);for(var l=0;l<n;l+=1)t[l]=255&e[l];return t}function an(t){if(t>=en())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+en().toString(16)+" bytes");return 0|t}function un(t){return!(null==t||!t._isBuffer)}function sn(t,e){if(un(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var l=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Bn(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return xn(t).length;default:if(l)return Bn(t).length;e=(""+e).toLowerCase(),l=!0}}function Zn(t,e,n){var l=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return fn(this,e,n);case"utf8":case"utf-8":return Wn(this,e,n);case"ascii":return Cn(this,e,n);case"latin1":case"binary":return Rn(this,e,n);case"base64":return Vn(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Yn(this,e,n);default:if(l)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),l=!0}}function bn(t,e,n){var l=t[e];t[e]=t[n],t[n]=l}function mn(t,e,n,l,i){if(0===t.length)return-1;if("string"==typeof n?(l=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=ln.from(e,l)),un(e))return 0===e.length?-1:hn(t,e,n,l,i);if("number"==typeof e)return e&=255,ln.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):hn(t,[e],n,l,i);throw new TypeError("val must be string, number or Buffer")}function hn(t,e,n,l,i){var c,o=1,d=t.length,r=e.length;if(void 0!==l&&("ucs2"===(l=String(l).toLowerCase())||"ucs-2"===l||"utf16le"===l||"utf-16le"===l)){if(t.length<2||e.length<2)return-1;o=2,d/=2,r/=2,n/=2}function a(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(c=n;c<d;c++)if(a(t,c)===a(e,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===r)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(n+r>d&&(n=d-r),c=n;c>=0;c--){for(var s=!0,Z=0;Z<r;Z++)if(a(t,c+Z)!==a(e,Z)){s=!1;break}if(s)return c}return-1}function pn(t,e,n,l){n=Number(n)||0;var i=t.length-n;l?(l=Number(l))>i&&(l=i):l=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");l>c/2&&(l=c/2);for(var o=0;o<l;++o){var d=parseInt(e.substr(2*o,2),16);if(isNaN(d))return o;t[n+o]=d}return o}function In(t,e,n,l){return Fn(Bn(e,t.length-n),t,n,l)}function Gn(t,e,n,l){return Fn(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,l)}function gn(t,e,n,l){return Gn(t,e,n,l)}function Xn(t,e,n,l){return Fn(xn(e),t,n,l)}function yn(t,e,n,l){return Fn(function(t,e){for(var n,l,i,c=[],o=0;o<t.length&&!((e-=2)<0);++o)l=(n=t.charCodeAt(o))>>8,i=n%256,c.push(i),c.push(l);return c}(e,t.length-n),t,n,l)}function Vn(t,e,n){return 0===e&&n===t.length?De(t):De(t.slice(e,n))}function Wn(t,e,n){n=Math.min(t.length,n);for(var l=[],i=e;i<n;){var c,o,d,r,a=t[i],u=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=n)switch(s){case 1:a<128&&(u=a);break;case 2:128==(192&(c=t[i+1]))&&(r=(31&a)<<6|63&c)>127&&(u=r);break;case 3:c=t[i+1],o=t[i+2],128==(192&c)&&128==(192&o)&&(r=(15&a)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[i+1],o=t[i+2],d=t[i+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(r=(15&a)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&r<1114112&&(u=r)}null===u?(u=65533,s=1):u>65535&&(u-=65536,l.push(u>>>10&1023|55296),u=56320|1023&u),l.push(u),i+=s}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var n="",l=0;l<e;)n+=String.fromCharCode.apply(String,t.slice(l,l+=4096));return n}(l)}function Cn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(127&t[i]);return l}function Rn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(t[i]);return l}function fn(t,e,n){var l=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>l)&&(n=l);for(var i="",c=e;c<n;++c)i+=kn(t[c]);return i}function Yn(t,e,n){for(var l=t.slice(e,n),i="",c=0;c<l.length;c+=2)i+=String.fromCharCode(l[c]+256*l[c+1]);return i}function vn(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function Sn(t,e,n,l,i,c){if(!un(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<c)throw new RangeError('"value" argument is out of bounds');if(n+l>t.length)throw new RangeError("Index out of range")}function Kn(t,e,n,l){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-n,2);i<c;++i)t[n+i]=(e&255<<8*(l?i:1-i))>>>8*(l?i:1-i)}function Nn(t,e,n,l){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-n,4);i<c;++i)t[n+i]=e>>>8*(l?i:3-i)&255}function Jn(t,e,n,l,i,c){if(n+l>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function Hn(t,e,n,l,i){return i||Jn(t,0,n,4),_e(t,e,n,l,23,4),n+4}function Ln(t,e,n,l,i){return i||Jn(t,0,n,8),_e(t,e,n,l,52,8),n+8}ln.poolSize=8192,ln._augment=function(t){return t.__proto__=ln.prototype,t},ln.from=function(t,e,n){return cn(null,t,e,n)},ln.TYPED_ARRAY_SUPPORT&&(ln.prototype.__proto__=Uint8Array.prototype,ln.__proto__=Uint8Array),ln.alloc=function(t,e,n){return function(t,e,n,l){return on(e),e<=0?nn(t,e):void 0!==n?"string"==typeof l?nn(t,e).fill(n,l):nn(t,e).fill(n):nn(t,e)}(null,t,e,n)},ln.allocUnsafe=function(t){return dn(null,t)},ln.allocUnsafeSlow=function(t){return dn(null,t)},ln.isBuffer=Tn,ln.compare=function(t,e){if(!un(t)||!un(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,l=e.length,i=0,c=Math.min(n,l);i<c;++i)if(t[i]!==e[i]){n=t[i],l=e[i];break}return n<l?-1:l<n?1:0},ln.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},ln.concat=function(t,e){if(!$e(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return ln.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var l=ln.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var c=t[n];if(!un(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(l,i),i+=c.length}return l},ln.byteLength=sn,ln.prototype._isBuffer=!0,ln.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)bn(this,e,e+1);return this},ln.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)bn(this,e,e+3),bn(this,e+1,e+2);return this},ln.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)bn(this,e,e+7),bn(this,e+1,e+6),bn(this,e+2,e+5),bn(this,e+3,e+4);return this},ln.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Wn(this,0,t):Zn.apply(this,arguments)},ln.prototype.equals=function(t){if(!un(t))throw new TypeError("Argument must be a Buffer");return this===t||0===ln.compare(this,t)},ln.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},ln.prototype.compare=function(t,e,n,l,i){if(!un(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===l&&(l=0),void 0===i&&(i=this.length),e<0||n>t.length||l<0||i>this.length)throw new RangeError("out of range index");if(l>=i&&e>=n)return 0;if(l>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(l>>>=0),o=(n>>>=0)-(e>>>=0),d=Math.min(c,o),r=this.slice(l,i),a=t.slice(e,n),u=0;u<d;++u)if(r[u]!==a[u]){c=r[u],o=a[u];break}return c<o?-1:o<c?1:0},ln.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},ln.prototype.indexOf=function(t,e,n){return mn(this,t,e,n,!0)},ln.prototype.lastIndexOf=function(t,e,n){return mn(this,t,e,n,!1)},ln.prototype.write=function(t,e,n,l){if(void 0===e)l="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)l=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===l&&(l="utf8")):(l=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");l||(l="utf8");for(var c=!1;;)switch(l){case"hex":return pn(this,t,e,n);case"utf8":case"utf-8":return In(this,t,e,n);case"ascii":return Gn(this,t,e,n);case"latin1":case"binary":return gn(this,t,e,n);case"base64":return Xn(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return yn(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+l);l=(""+l).toLowerCase(),c=!0}},ln.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},ln.prototype.slice=function(t,e){var n,l=this.length;if((t=~~t)<0?(t+=l)<0&&(t=0):t>l&&(t=l),(e=void 0===e?l:~~e)<0?(e+=l)<0&&(e=0):e>l&&(e=l),e<t&&(e=t),ln.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=ln.prototype;else{var i=e-t;n=new ln(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+t]}return n},ln.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l},ln.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t+--e],i=1;e>0&&(i*=256);)l+=this[t+--e]*i;return l},ln.prototype.readUInt8=function(t,e){return e||vn(t,1,this.length),this[t]},ln.prototype.readUInt16LE=function(t,e){return e||vn(t,2,this.length),this[t]|this[t+1]<<8},ln.prototype.readUInt16BE=function(t,e){return e||vn(t,2,this.length),this[t]<<8|this[t+1]},ln.prototype.readUInt32LE=function(t,e){return e||vn(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},ln.prototype.readUInt32BE=function(t,e){return e||vn(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},ln.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l>=(i*=128)&&(l-=Math.pow(2,8*e)),l},ln.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=e,i=1,c=this[t+--l];l>0&&(i*=256);)c+=this[t+--l]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},ln.prototype.readInt8=function(t,e){return e||vn(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},ln.prototype.readInt16LE=function(t,e){e||vn(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},ln.prototype.readInt16BE=function(t,e){e||vn(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},ln.prototype.readInt32LE=function(t,e){return e||vn(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},ln.prototype.readInt32BE=function(t,e){return e||vn(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},ln.prototype.readFloatLE=function(t,e){return e||vn(t,4,this.length),Oe(this,t,!0,23,4)},ln.prototype.readFloatBE=function(t,e){return e||vn(t,4,this.length),Oe(this,t,!1,23,4)},ln.prototype.readDoubleLE=function(t,e){return e||vn(t,8,this.length),Oe(this,t,!0,52,8)},ln.prototype.readDoubleBE=function(t,e){return e||vn(t,8,this.length),Oe(this,t,!1,52,8)},ln.prototype.writeUIntLE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Sn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,c=0;for(this[e]=255&t;++c<n&&(i*=256);)this[e+c]=t/i&255;return e+n},ln.prototype.writeUIntBE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Sn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+n},ln.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,1,255,0),ln.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},ln.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,65535,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Kn(this,t,e,!0),e+2},ln.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,65535,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Kn(this,t,e,!1),e+2},ln.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,4294967295,0),ln.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):Nn(this,t,e,!0),e+4},ln.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,4294967295,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Nn(this,t,e,!1),e+4},ln.prototype.writeIntLE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Sn(this,t,e,n,i-1,-i)}var c=0,o=1,d=0;for(this[e]=255&t;++c<n&&(o*=256);)t<0&&0===d&&0!==this[e+c-1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+n},ln.prototype.writeIntBE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Sn(this,t,e,n,i-1,-i)}var c=n-1,o=1,d=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[e+c+1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+n},ln.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,1,127,-128),ln.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},ln.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,32767,-32768),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Kn(this,t,e,!0),e+2},ln.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,32767,-32768),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Kn(this,t,e,!1),e+2},ln.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,2147483647,-2147483648),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):Nn(this,t,e,!0),e+4},ln.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Nn(this,t,e,!1),e+4},ln.prototype.writeFloatLE=function(t,e,n){return Hn(this,t,e,!0,n)},ln.prototype.writeFloatBE=function(t,e,n){return Hn(this,t,e,!1,n)},ln.prototype.writeDoubleLE=function(t,e,n){return Ln(this,t,e,!0,n)},ln.prototype.writeDoubleBE=function(t,e,n){return Ln(this,t,e,!1,n)},ln.prototype.copy=function(t,e,n,l){if(n||(n=0),l||0===l||(l=this.length),e>=t.length&&(e=t.length),e||(e=0),l>0&&l<n&&(l=n),l===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(l<0)throw new RangeError("sourceEnd out of bounds");l>this.length&&(l=this.length),t.length-e<l-n&&(l=t.length-e+n);var i,c=l-n;if(this===t&&n<e&&e<l)for(i=c-1;i>=0;--i)t[i+e]=this[i+n];else if(c<1e3||!ln.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},ln.prototype.fill=function(t,e,n,l){if("string"==typeof t){if("string"==typeof e?(l=e,e=0,n=this.length):"string"==typeof n&&(l=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==l&&"string"!=typeof l)throw new TypeError("encoding must be a string");if("string"==typeof l&&!ln.isEncoding(l))throw new TypeError("Unknown encoding: "+l)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var o=un(t)?t:Bn(new ln(t,l).toString()),d=o.length;for(c=0;c<n-e;++c)this[c+e]=o[c%d]}return this};var Un=/[^+\/0-9A-Za-z-_]/g;function kn(t){return t<16?"0"+t.toString(16):t.toString(16)}function Bn(t,e){var n;e=e||1/0;for(var l=t.length,i=null,c=[],o=0;o<l;++o){if((n=t.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===l){(e-=3)>-1&&c.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function xn(t){return function(t){var e,n,l,i,c,o;Pe||Me();var d=t.length;if(d%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[d-2]?2:"="===t[d-1]?1:0,o=new je(3*d/4-c),l=c>0?d-4:d;var r=0;for(e=0,n=0;e<l;e+=4,n+=3)i=Qe[t.charCodeAt(e)]<<18|Qe[t.charCodeAt(e+1)]<<12|Qe[t.charCodeAt(e+2)]<<6|Qe[t.charCodeAt(e+3)],o[r++]=i>>16&255,o[r++]=i>>8&255,o[r++]=255&i;return 2===c?(i=Qe[t.charCodeAt(e)]<<2|Qe[t.charCodeAt(e+1)]>>4,o[r++]=255&i):1===c&&(i=Qe[t.charCodeAt(e)]<<10|Qe[t.charCodeAt(e+1)]<<4|Qe[t.charCodeAt(e+2)]>>2,o[r++]=i>>8&255,o[r++]=255&i),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(Un,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Fn(t,e,n,l){for(var i=0;i<l&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function Tn(t){return null!=t&&(!!t._isBuffer||An(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&An(t.slice(0,0))}(t))}function An(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var zn=Object.freeze({__proto__:null,Buffer:ln,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),ln.alloc(+t)},isBuffer:Tn,kMaxLength:tn}),wn={exports:{}},Qn={},jn={};Object.defineProperty(jn,"__esModule",{value:!0}),jn.default=function(t){var e=t.length,n=e%4;if(!n)return t;var l=e,i=4-n,c=e+i,o=ln.alloc(c);for(o.write(t);i--;)o.write("=",l++);return o.toString()},Object.defineProperty(Qn,"__esModule",{value:!0});var Pn=jn;function Mn(t,e){return void 0===e&&(e="utf8"),ln.isBuffer(t)?Dn(t.toString("base64")):Dn(ln.from(t,e).toString("base64"))}function En(t){return t=t.toString(),Pn.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function Dn(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var On,_n=Mn;_n.encode=Mn,_n.decode=function(t,e){return void 0===e&&(e="utf8"),ln.from(En(t),"base64").toString(e)},_n.toBase64=En,_n.fromBase64=Dn,_n.toBuffer=function(t){return ln.from(En(t),"base64")},Qn.default=_n,(On=wn).exports=Qn.default,On.exports.default=On.exports;var qn=wn.exports,$n={exports:{}};!function(t){!function(e,n){var l={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,l,i,c){for(var o,d,r,a,u,s,Z,b,m,h,p,I,G;c>=64;){for(o=n[0],d=n[1],r=n[2],a=n[3],u=n[4],s=n[5],Z=n[6],b=n[7],h=0;h<16;h++)p=i+4*h,t[h]=(255&l[p])<<24|(255&l[p+1])<<16|(255&l[p+2])<<8|255&l[p+3];for(h=16;h<64;h++)I=((m=t[h-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,G=((m=t[h-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[h]=(I+t[h-7]|0)+(G+t[h-16]|0);for(h=0;h<64;h++)I=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&s^~u&Z)|0)+(b+(e[h]+t[h]|0)|0)|0,G=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&r^d&r)|0,b=Z,Z=s,s=u,u=a+I|0,a=r,r=d,d=o,o=I+G|0;n[0]+=o,n[1]+=d,n[2]+=r,n[3]+=a,n[4]+=u,n[5]+=s,n[6]+=Z,n[7]+=b,i+=64,c-=64}return i}var l=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var l=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[l++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(l=n(this.temp,this.state,t,l,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[l++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,l=this.bufferLength,i=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[l]=128;for(var d=l+1;d<o-8;d++)this.buffer[d]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(d=0;d<8;d++)t[4*d+0]=this.state[d]>>>24&255,t[4*d+1]=this.state[d]>>>16&255,t[4*d+2]=this.state[d]>>>8&255,t[4*d+3]=this.state[d]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=l;var i=function(){function t(t){this.inner=new l,this.outer=new l,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new l).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new l).update(t),n=e.digest();return e.clean(),n}function o(t,e){var n=new i(t).update(e),l=n.digest();return n.clean(),l}function d(t,e,n,l){var i=l[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),n&&e.update(n),e.update(l),e.finish(t),l[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=o;var r=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,l){void 0===e&&(e=r),void 0===l&&(l=32);for(var c=new Uint8Array([1]),a=o(e,t),u=new i(a),s=new Uint8Array(u.digestLength),Z=s.length,b=new Uint8Array(l),m=0;m<l;m++)Z===s.length&&(d(s,u,n,c),Z=0),b[m]=s[Z++];return u.clean(),s.fill(0),c.fill(0),b},t.pbkdf2=function(t,e,n,l){for(var c=new i(t),o=c.digestLength,d=new Uint8Array(4),r=new Uint8Array(o),a=new Uint8Array(o),u=new Uint8Array(l),s=0;s*o<l;s++){var Z=s+1;d[0]=Z>>>24&255,d[1]=Z>>>16&255,d[2]=Z>>>8&255,d[3]=Z>>>0&255,c.reset(),c.update(e),c.update(d),c.finish(a);for(var b=0;b<o;b++)r[b]=a[b];for(b=2;b<=n;b++){c.reset(),c.update(a).finish(a);for(var m=0;m<o;m++)r[m]^=a[m]}for(b=0;b<o&&s*o+b<l;b++)u[s*o+b]=r[b]}for(s=0;s<o;s++)r[s]=a[s]=0;for(s=0;s<4;s++)d[s]=0;return c.clean(),u}}(l);var i=l.default;for(var c in l)i[c]=l[c];t.exports=i}()}($n);var tl=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}($n.exports),el=crypto;const nl=t=>t instanceof CryptoKey,ll=new TextEncoder,il=new TextDecoder,cl=t=>{let e=t;e instanceof Uint8Array&&(e=il.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>{const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n})(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class ol extends Error{constructor(t){var e;super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(e=Error.captureStackTrace)||void 0===e||e.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class dl extends ol{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class rl extends ol{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_EXPIRED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_EXPIRED"}}class al extends ol{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class ul extends ol{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class sl extends ol{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class Zl extends ol{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class bl extends ol{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class ml extends ol{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 hl extends ol{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 pl extends ol{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 Il(){return"function"==typeof WebSocketPair}function Gl(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function gl(t,e){return t.name===e}function Xl(t){return parseInt(t.name.slice(4),10)}var yl=(t,...e)=>{let n="Key must be ";if(e.length>2){const t=e.pop();n+=`one of type ${e.join(", ")}, or ${t}.`}else 2===e.length?n+=`one of type ${e[0]} or ${e[1]}.`:n+=`of type ${e[0]}.`;return null==t?n+=" Received "+t:"function"==typeof t&&t.name?n+=" Received function "+t.name:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(n+=" Received an instance of "+t.constructor.name),n},Vl=t=>nl(t);const Wl=["CryptoKey"];function Cl(t){if("object"!=typeof(e=t)||null===e||"[object Object]"!==Object.prototype.toString.call(t))return!1;var e;if(null===Object.getPrototypeOf(t))return!0;let n=t;for(;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(t)===n}const Rl=async t=>{var e,n;const{algorithm:l,keyUsages:i}=function(t){let e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-"+t.alg.slice(-3)},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new ul(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.slice(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},n=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},n=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Il()&&"OKP":if("EdDSA"!==t.alg)throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==t.crv)throw new ul('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=t.d?["sign"]:["verify"];break;default:throw new ul('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}(t),c=[l,null!==(e=t.ext)&&void 0!==e&&e,null!==(n=t.key_ops)&&void 0!==n?n:i];if("PBKDF2"===l.name)return el.subtle.importKey("raw",cl(t.k),...c);const o={...t};return delete o.alg,el.subtle.importKey("jwk",o,...c)},fl=async(t,e,n,l)=>{const i=await function(t,e,n){if(nl(e))return function(t,e,...n){switch(e){case"HS256":case"HS384":case"HS512":{if(!gl(t.algorithm,"HMAC"))throw Gl("HMAC");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!gl(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Gl("RSASSA-PKCS1-v1_5");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!gl(t.algorithm,"RSA-PSS"))throw Gl("RSA-PSS");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case Il()&&"EdDSA":if(!gl(t.algorithm,"NODE-ED25519"))throw Gl("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!gl(t.algorithm,"ECDSA"))throw Gl("ECDSA");const n=function(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(e);if(t.algorithm.namedCurve!==n)throw Gl(n,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(t,e){if(e.length&&!e.some(e=>t.usages.includes(e))){let t="CryptoKey does not support this operation, its usages must include ";if(e.length>2){const n=e.pop();t+=`one of ${e.join(", ")}, or ${n}.`}else 2===e.length?t+=`one of ${e[0]} or ${e[1]}.`:t+=e[0]+".";throw new TypeError(t)}}(t,n)}(e,t,n),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(yl(e,...Wl));return el.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[n])}throw new TypeError(yl(e,...Wl,"Uint8Array"))}(t,e,"verify");((t,e)=>{if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:n}=e.algorithm;if("number"!=typeof n||n<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,i);const c=function(t,e){const n="SHA-"+t.slice(-3);switch(t){case"HS256":case"HS384":case"HS512":return{hash:n,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:n,name:"RSA-PSS",saltLength:t.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:n,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:n,name:"ECDSA",namedCurve:e.namedCurve};case Il()&&"EdDSA":const{namedCurve:l}=e;return{name:l,namedCurve:l};default:throw new ul(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await el.subtle.verify(c,i,n,l)}catch(t){return!1}};async function Yl(t,e,n){var l;if(!Cl(t))throw new sl("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new sl('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new sl("JWS Protected Header incorrect type");if(void 0===t.payload)throw new sl("JWS Payload missing");if("string"!=typeof t.signature)throw new sl("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Cl(t.header))throw new sl("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=cl(t.protected);try{i=JSON.parse(il.decode(e))}catch(t){throw new sl("JWS Protected Header is invalid")}}if(!((...t)=>{const e=t.filter(Boolean);if(0===e.length||1===e.length)return!0;let n;for(const t of e){const e=Object.keys(t);if(n&&0!==n.size)for(const t of e){if(n.has(t))return!1;n.add(t)}else n=new Set(e)}return!0})(i,t.header))throw new sl("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...i,...t.header};let o=!0;if(function(t,e,n,l,i){if(void 0!==i.crit&&void 0===l.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!l||void 0===l.crit)return new Set;if(!Array.isArray(l.crit)||0===l.crit.length||l.crit.some(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let c;c=void 0!==n?new Map([...Object.entries(n),...e.entries()]):e;for(const e of l.crit){if(!c.has(e))throw new ul(`Extension Header Parameter "${e}" is not recognized`);if(void 0===i[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(c.get(e)&&void 0===l[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(l.crit)}(sl,new Map([["b64",!0]]),null==n?void 0:n.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new sl('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:d}=c;if("string"!=typeof d||!d)throw new sl('JWS "alg" (Algorithm) Header Parameter missing or invalid');const r=n&&((t,e)=>{if(void 0!==e&&(!Array.isArray(e)||e.some(t=>"string"!=typeof t)))throw new TypeError('"algorithms" option must be an array of strings');if(e)return new Set(e)})(0,n.algorithms);if(r&&!r.has(d))throw new al('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new sl("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new sl("JWS Payload must be a string or an Uint8Array instance");let a=!1;"function"==typeof e&&(e=await e(i,t),a=!0),((t,e,n)=>{t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?(t=>{if(!(t instanceof Uint8Array)){if(!Vl(t))throw new TypeError(yl(t,...Wl,"Uint8Array"));if("secret"!==t.type)throw new TypeError(Wl.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Vl(t))throw new TypeError(yl(t,...Wl));if("secret"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm encryption must be of type "public"')})(e,n)})(d,e,"verify");const u=function(...t){const e=t.reduce((t,{length:e})=>t+e,0),n=new Uint8Array(e);let l=0;return t.forEach(t=>{n.set(t,l),l+=t.length}),n}(ll.encode(null!==(l=t.protected)&&void 0!==l?l:""),ll.encode("."),"string"==typeof t.payload?ll.encode(t.payload):t.payload),s=cl(t.signature);if(!await fl(d,e,s,u))throw new pl;let Z;Z=o?cl(t.payload):"string"==typeof t.payload?ll.encode(t.payload):t.payload;const b={payload:Z};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),a?{...b,key:e}:b}const vl=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var Sl=t=>{const e=vl.exec(t);if(!e)throw new TypeError("Invalid time period format");const n=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(86400*n);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}};const Kl=t=>t.toLowerCase().replace(/^application\//,"");var Nl=(t,e,n={})=>{const{typ:l}=n;if(l&&("string"!=typeof t.typ||Kl(t.typ)!==Kl(l)))throw new dl('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse(il.decode(e))}catch(t){}if(!Cl(i))throw new Zl("JWT Claims Set must be a top-level JSON object");const{issuer:c}=n;if(c&&!(Array.isArray(c)?c:[c]).includes(i.iss))throw new dl('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=n;if(o&&i.sub!==o)throw new dl('unexpected "sub" claim value',"sub","check_failed");const{audience:d}=n;if(d&&(a="string"==typeof d?[d]:d,!("string"==typeof(r=i.aud)?a.includes(r):Array.isArray(r)&&a.some(Set.prototype.has.bind(new Set(r))))))throw new dl('unexpected "aud" claim value',"aud","check_failed");var r,a;let u;switch(typeof n.clockTolerance){case"string":u=Sl(n.clockTolerance);break;case"number":u=n.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=n,Z=(b=s||new Date,Math.floor(b.getTime()/1e3));var b;if((void 0!==i.iat||n.maxTokenAge)&&"number"!=typeof i.iat)throw new dl('"iat" claim must be a number',"iat","invalid");if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new dl('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>Z+u)throw new dl('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new dl('"exp" claim must be a number',"exp","invalid");if(i.exp<=Z-u)throw new rl('"exp" claim timestamp check failed',"exp","check_failed")}if(n.maxTokenAge){const t=Z-i.iat;if(t-u>("number"==typeof n.maxTokenAge?n.maxTokenAge:Sl(n.maxTokenAge)))throw new rl('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new dl('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Jl(t){return Cl(t)}class Hl{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Jl)}(t))throw new bl("JSON Web Key Set malformed");var e;this._jwks=(e=t,"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e)))}async getKey(t,e){const{alg:n,kid:l}={...t,...e.header},i=function(t){switch("string"==typeof t&&t.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new ul('Unsupported "alg" value for a JSON Web Key Set')}}(n),c=this._jwks.keys.filter(t=>{let e=i===t.kty;if(e&&"string"==typeof l&&(e=l===t.kid),e&&"string"==typeof t.alg&&(e=n===t.alg),e&&"string"==typeof t.use&&(e="sig"===t.use),e&&Array.isArray(t.key_ops)&&(e=t.key_ops.includes("verify")),e&&"EdDSA"===n&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(n){case"ES256":e="P-256"===t.crv;break;case"ES256K":e="secp256k1"===t.crv;break;case"ES384":e="P-384"===t.crv;break;case"ES512":e="P-521"===t.crv}return e}),{0:o,length:d}=c;if(0===d)throw new ml;if(1!==d)throw new hl;const r=this._cached.get(o)||this._cached.set(o,{}).get(o);if(void 0===r[n]){const t=await async function(t,e,n){if(!Cl(t))throw new TypeError("JWK must be an object");if(e||(e=t.alg),"string"!=typeof e||!e)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=n||(n=!0!==t.ext),n?Rl({...t,alg:e,ext:!1}):cl(t.k);case"RSA":if(void 0!==t.oth)throw new ul('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Rl({...t,alg:e});default:throw new ul('Unsupported "kty" (Key Type) Parameter value')}}({...o,ext:!0},n);if(t instanceof Uint8Array||"public"!==t.type)throw new bl("JSON Web Key Set members must be public keys");r[n]=t}return r[n]}}var Ll={exports:{}},Ul={exports:{}},kl=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var l=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,l.get?l:{enumerable:!0,get:function(){return t[n]}})})),e}(zn);
432
- /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var n=kl,l=n.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function c(t,e,n){return l(t,e,n)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=c),c.prototype=Object.create(l.prototype),i(l,c),c.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return l(t,e,n)},c.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=l(t);return void 0!==e?"string"==typeof n?i.fill(e,n):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}}(Ul,Ul.exports);var Bl=Ul.exports.Buffer,xl=A.crypto||A.msCrypto;xl&&xl.getRandomValues?Ll.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var n=Bl.allocUnsafe(t);if(t>0)if(t>65536)for(var l=0;l<t;l+=65536)xl.getRandomValues(n.slice(l,l+65536));else xl.getRandomValues(n);return"function"==typeof e?Kt.nextTick((function(){e(null,n)})):n}:Ll.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var Fl=Ll.exports;class Tl{base64URLEncode(t){return qn.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return qn.decode(t).toString()}hashSha256(t){return ln.from(tl((new TextEncoder).encode(t)))}generateRandomBytes(t){return Fl(t)}verifyJwt(t,e,n,l,i,c,o){return async function(t,e,n){var l;const i=await async function(t,e,n){if(t instanceof Uint8Array&&(t=il.decode(t)),"string"!=typeof t)throw new sl("Compact JWS must be a string or Uint8Array");const{0:l,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new sl("Invalid Compact JWS");const d=await Yl({payload:i,protected:l,signature:c},e,n),r={payload:d.payload,protectedHeader:d.protectedHeader};return"function"==typeof e?{...r,key:d.key}:r}(t,e,n);if((null===(l=i.protectedHeader.crit)||void 0===l?void 0:l.includes("b64"))&&!1===i.protectedHeader.b64)throw new Zl("JWTs MUST NOT use unencoded payload");const c={payload:Nl(i.protectedHeader,i.payload,n),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(d={keys:[e]},Hl.prototype.getKey.bind(new Hl(d))),{algorithms:n,audience:l,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(new W("SPA-CRYPTO-UTILS-VJ-IV01",null==t?void 0:t.reason,`${null==t?void 0:t.code} ${null==t?void 0:t.claim}`)));var d}}const Al=(t,e)=>l(void 0,void 0,void 0,(function*(){var n;const i=(t=>{switch(t){case J.LocalStorage:return new Te;case J.SessionStorage:return new ze;case J.BrowserMemory:return new Ae;default:return new ze}})(t.storage),o=new Tl,d=new K(i,o);yield d.initialize(t);const r=new B(d),a=d.getDataLayer(),u=yield T(()=>l(void 0,void 0,void 0,(function*(){return d.getSignOutURL()})),null!==(n=t.storage)&&void 0!==n?n:J.SessionStorage,t=>a.setSessionDataParameter(I,null!=t?t:"")),s=e(d,r);let Z=!1;const b=Fe.getInstance();let m,h,G=!0;(null==b?void 0:b.init)&&(yield b.init(!0,t=>l(void 0,void 0,void 0,(function*(){const e=Object.assign({attachToken:!0},t);e.attachToken&&(e.shouldAttachIDPAccessToken?t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield s.getIDPAccessToken())}):t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield s.getAccessToken())}))}))));const g=()=>l(void 0,void 0,void 0,(function*(){const t=yield d.getOIDCServiceEndpoints(),e=yield a.getConfigData();s.initializeSessionManger(e,t,()=>l(void 0,void 0,void 0,(function*(){return(yield d.getBasicUserInfo()).sessionState})),t=>l(void 0,void 0,void 0,(function*(){return d.getAuthorizationURL(t)})),u)})),y=()=>l(void 0,void 0,void 0,(function*(){return yield u.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(I,null!=t?t:"")})))})),V=t=>{t.preventSignOutURLUpdate&&(Z=!0)},W=(t,e,n)=>l(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(t,e,g,void 0,n)})),R=()=>l(void 0,void 0,void 0,(function*(){const t=yield a.getConfigData(),e=yield d.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(e);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===J.BrowserMemory&&t.enablePKCE){const t=n.searchParams.get(X);F.setPKCE(C.extractPKCEKeyFromStateParam(null!=t?t:""),yield d.getPKCECode(null!=t?t:""))}return l}));return{disableHttpHandler:()=>(s.disableHttpHandler(b),G=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(b),G=!0,!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getCryptoHelper:()=>l(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>l(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>b,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){return yield s.httpRequest(b,t,G,m,h)})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(t,b,G,m,h)})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),refreshAccessToken:()=>l(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(V)}catch(t){return Promise.reject(t)}})),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(t,V)})),revokeAccessToken:()=>l(void 0,void 0,void 0,(function*(){const t=yield r.getRefreshTimeoutTimer();return d.revokeAccessToken().then(()=>(u.reset(),r.clearRefreshTokenTimeout(t),Promise.resolve(!0))).catch(t=>Promise.reject(t))})),setHttpRequestErrorCallback:t=>{m=t},setHttpRequestFinishCallback:t=>{(null==b?void 0:b.setHttpRequestFinishCallback)&&b.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==b?void 0:b.setHttpRequestStartCallback)&&b.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==b?void 0:b.setHttpRequestSuccessCallback)&&b.setHttpRequestSuccessCallback(t)},signIn:(e,n,i,o)=>l(void 0,void 0,void 0,(function*(){var r,a,u;const Z=yield s.handleSignIn(y,g);if(Z)return Z;{let s,Z,b;return(null==t?void 0:t.responseMode)===c.formPost&&n?(s=n,Z=null!=i?i:"",b=null!=o?o:""):(s=null!==(r=new URL(window.location.href).searchParams.get(p))&&void 0!==r?r:"",Z=null!==(a=new URL(window.location.href).searchParams.get(I))&&void 0!==a?a:"",b=null!==(u=new URL(window.location.href).searchParams.get(X))&&void 0!==u?u:"",F.removeAuthorizationCode()),s&&b?W(s,Z,b):d.getAuthorizationURL(e).then(e=>l(void 0,void 0,void 0,(function*(){if(t.storage===J.BrowserMemory&&t.enablePKCE){const t=C.extractPKCEKeyFromStateParam(b);F.setPKCE(t,yield d.getPKCECode(b))}return location.href=e,yield F.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))}})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield d.isAuthenticated())&&!Z?location.href=yield d.getSignOutURL():location.href=F.getSignOutURL(),r.clearRefreshTokenTimeout(),yield a.removeOIDCProviderMetaData(),yield a.removeTemporaryData(),yield a.removeSessionData(),yield F.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(R,W,u)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const e=yield a.getConfigData(),n=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},e),t);yield d.updateConfig(l),l.enableOIDCSessionManagement&&n&&(u.reset(),g())}))}})),zl=(t,e,n)=>l(void 0,void 0,void 0,(function*(){var i;let o;const d=null!==(i=null==t?void 0:t.requestTimeout)&&void 0!==i?i:6e4;let r=!0,a=!1;const u=(t=>{switch(t){case J.LocalStorage:return new Te;case J.SessionStorage:return new ze;case J.BrowserMemory:return new Ae;default:return new ze}})(t.storage),s=new Tl,Z=new K(u,s);yield Z.initialize(t);const b=new B(Z),m=yield T(()=>l(void 0,void 0,void 0,(function*(){const t={type:"sign-out"};try{return yield g(t)}catch(t){return F.getSignOutURL()}})),t.storage,t=>y(t)),h=n(Z,b),G=new e,g=t=>{const e=new MessageChannel;return G.postMessage(t,[e.port2]),new Promise((t,n)=>{const l=setTimeout(()=>{n(new W("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+d/1e3+" since dispatching the request"))},d);return e.port1.onmessage=({data:e})=>{if(clearTimeout(l),null==e?void 0:e.success){const n=(null==e?void 0:e.data)?JSON.parse(null==e?void 0:e.data):null;(null==e?void 0:e.blob)&&(n.data=null==e?void 0:e.blob),t(n)}else n(e.error?JSON.parse(e.error):null)}})},y=t=>g({data:t,type:"set_session_state"}),V=()=>g({type:"start_auto_refresh_token"}),R=()=>l(void 0,void 0,void 0,(function*(){const t=yield H(),e=yield L();h.initializeSessionManger(e,t,()=>l(void 0,void 0,void 0,(function*(){return(yield U()).sessionState})),t=>l(void 0,void 0,void 0,(function*(){return(yield Y(t)).authorizationURL})),m)})),f=()=>l(void 0,void 0,void 0,(function*(){var t;const e=yield L(),n=yield g({data:{prompt:"none",state:"sign-in-silently"},type:"get_auth_url"}),l=C.extractPKCEKeyFromStateParam(null!==(t=new URL(n.authorizationURL).searchParams.get(X))&&void 0!==t?t:"");n.pkce&&e.enablePKCE&&F.setPKCE(l,n.pkce);const i=n.authorizationURL,c=new URL(i);return c.searchParams.set("response_mode","query"),c.toString()})),Y=t=>l(void 0,void 0,void 0,(function*(){const e=yield L();return g({data:t,type:"get_auth_url"}).then(t=>l(void 0,void 0,void 0,(function*(){var n;if(t.pkce&&e.enablePKCE){const e=C.extractPKCEKeyFromStateParam(null!==(n=new URL(t.authorizationURL).searchParams.get(X))&&void 0!==n?n:"");F.setPKCE(e,t.pkce)}return Promise.resolve(t)})))})),v=(t,e,n)=>l(void 0,void 0,void 0,(function*(){const l=yield L(),i=C.extractPKCEKeyFromStateParam(n),c={data:{code:t,pkce:l.enablePKCE?F.getPKCE(i):void 0,sessionState:e,state:n},type:"request_get_token"};return l.enablePKCE&&F.removePKCE(i),g(c).then(t=>g({type:"get_sign_out_url"}).then(e=>(F.setSignOutURL(e),l.enableOIDCSessionManagement&&R(),V(),Promise.resolve(t))).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(t))})),S=()=>l(void 0,void 0,void 0,(function*(){return yield m.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){return y(t)})))})),N=()=>l(void 0,void 0,void 0,(function*(){if(yield k())return yield V(),t.enableOIDCSessionManagement&&R(),U()})),H=()=>g({type:"get-oidc-service-endpoints"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),L=()=>g({type:"get_config_data"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),U=()=>g({type:"get-basic-user-info"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),k=()=>g({type:"is_authenticated"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t));return{disableHttpHandler:()=>g({type:"disable_http_handler"}).then(()=>(r=!1,Promise.resolve(!0))).catch(t=>Promise.reject(t)),enableHttpHandler:()=>g({type:"enable_http_handler"}).then(()=>(r=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t)),getBasicUserInfo:U,getCryptoHelper:()=>g({type:"get-crypto-helper"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getDecodedIDPIDToken:()=>g({type:"get-decoded-idp-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getDecodedIDToken:()=>g({type:"get-decoded-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getIDToken:()=>g({type:"get_id_token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getOIDCServiceEndpoints:H,httpRequest:t=>g({data:t,type:"http-request"}).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return r&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)}))),httpRequestAll:t=>g({data:t,type:"http-request-all"}).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return r&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)}))),initialize:()=>(o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),G.onmessage=({data:t})=>{switch(t.type){case"request-finish":(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case"request-start":(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case"request-success":(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},g({data:t,type:"init"}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(t))),isAuthenticated:k,refreshAccessToken:()=>g({type:"refresh_access-token"}),requestCustomGrant:t=>g({data:t,type:"request-custom-grant"}).then(e=>(t.preventSignOutURLUpdate&&(a=!0),Promise.resolve(e))).catch(t=>Promise.reject(t)),revokeAccessToken:()=>g({type:"revoke-access-token"}).then(t=>(m.reset(),Promise.resolve(t))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{t&&"function"==typeof t&&(o.requestErrorCallback=t)},setHttpRequestFinishCallback:t=>{t&&"function"==typeof t&&(o.requestFinishCallback=t)},setHttpRequestStartCallback:t=>{t&&"function"==typeof t&&(o.requestStartCallback=t)},setHttpRequestSuccessCallback:t=>{t&&"function"==typeof t&&(o.requestSuccessCallback=t)},signIn:(e,n,i,o)=>l(void 0,void 0,void 0,(function*(){var d,r,a;const u=yield h.handleSignIn(S,R,N);if(u)return u;{let u,s,Z;return(null==t?void 0:t.responseMode)===c.formPost&&n?(u=n,s=null!=i?i:"",Z=null!=o?o:""):(u=null!==(d=new URL(window.location.href).searchParams.get(p))&&void 0!==d?d:"",s=null!==(r=new URL(window.location.href).searchParams.get(I))&&void 0!==r?r:"",Z=null!==(a=new URL(window.location.href).searchParams.get(X))&&void 0!==a?a:"",F.removeAuthorizationCode()),u&&Z?v(u,s,Z):Y(e).then(t=>l(void 0,void 0,void 0,(function*(){return location.href=t.authorizationURL,yield F.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))).catch(t=>Promise.reject(t))}})),signOut:()=>k().then(t=>l(void 0,void 0,void 0,(function*(){return t&&!a?g({type:"sign-out"}).then(t=>l(void 0,void 0,void 0,(function*(){return window.location.href=t,yield F.waitTillPageRedirect(),Promise.resolve(!0)}))).catch(t=>Promise.reject(t)):(window.location.href=F.getSignOutURL(),yield F.waitTillPageRedirect(),Promise.resolve(!0))}))).catch(t=>Promise.reject(t)),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){return yield h.trySignInSilently(f,v,m)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const e=yield L(),n=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},e),t),i={data:l,type:"update_config"};yield g(i),l.enableOIDCSessionManagement&&n&&(m.reset(),R())}))}})),wl={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:J.SessionStorage};class Ql{constructor(t){this._authHelper=k,this._worker=L,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=t}instantiateAuthHelper(t){this._authHelper=t||k}instantiateWorker(t){this._worker=t||L}_isInitialized(){return l(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)1e4===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1)),t++;return!0}))}_validateMethod(){return l(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!!(yield this.isAuthenticated())||Promise.reject(new W("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new W("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
431
+ */updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}static clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(t)}))}}var N,J,H,L=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLG4scixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShuPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1uP246IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0ocj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09cj9yOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShuPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBhPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFhfHwwPT09YS50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2F9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSxyKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSx5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKX0pKX19Y2xhc3MgZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLG4pLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsbixyKXt2YXIgaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShpPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1pP2k6bnVsbCxvPXQmJkpTT04ucGFyc2UodCkscz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse1tuXTpyfSksYT1KU09OLnN0cmluZ2lmeShzKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUsYSl9KSl9cmVtb3ZlVmFsdWUoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW25dO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUsdCl7cmV0dXJuIHQ/YCR7ZX0tJHt0aGlzLl9pZH0tJHt0fWA6YCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9c2V0VGVtcG9yYXJ5RGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXNldFNlc3Npb25EYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfXNldEN1c3RvbURhdGEoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoZSxyKSxuKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRDdXN0b21EYXRhKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KGUsbikpKSYmdm9pZCAwIT09cj9yOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIGd7Ci8qKgogICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RvcmV9IHN0b3JlIC0gVGhlIHN0b3JlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZihgaW5zdGFuY2VfJHtnLl9pbnN0YW5jZUlEfWAsZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBPSURDIHNlcnZpY2UgZW5kcG9pbnRzIHRoYXQgYXJlIGZldGNoZWQgZnJvbSB0aGUgYC53ZWxsLWtub3duYCBlbmRwb2ludC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgYXV0aC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjcnlwdG8gaGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRDcnlwdG9IZWxwZXIKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxEPUMsUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1QLmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09UC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PVAuY2FsbChlKX1mdW5jdGlvbiBOKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgaj17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1QLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09UC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09UC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09UC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1QLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6TixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspTihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIE4odCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0QodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0scT1qO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYocS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO3EuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihxLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxxLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7cS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6cS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sQj1qO2Z1bmN0aW9uIEooKXt0aGlzLmhhbmRsZXJzPVtdfUoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEoucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1KLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFk9JCxWPXo7ZnVuY3Rpb24gRyhlKXtpZihZPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChZPT09JHx8IVkpJiZzZXRUaW1lb3V0KXJldHVybiBZPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWS5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihZPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFY9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihWPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFY9PT16fHwhVikmJmNsZWFyVGltZW91dClyZXR1cm4gVj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtWKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9aixtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1qLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9aixDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLERlPWosUGU9RGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49RGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPWosTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLE5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LGplPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LHFlPVBlLHhlPVNlLEtlPXdlLEJlPU9lLEplPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPU5lKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9qZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fHFlKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgQmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1qLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFllKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgVmUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoVmU9SmUpLFZlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFllKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFllKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1qLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1qLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1qLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1qLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PWosUnQ9aixDdD1DLER0PWJ0LFB0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBEdCh0KSxyPUN0KER0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixEdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoUHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1EdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxPdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe090LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPU90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe090LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntPdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O0x0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLEx0PU90PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0sTHQpO2NsYXNzIEh0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHMsZSl9c3RhdGljIGdldFNpZ25PdXRVUkwoKXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocykpJiZ2b2lkIDAhPT1lP2U6IiJ9c3RhdGljIHJlbW92ZVBLQ0UoZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShlKX1zdGF0aWMgY2FuQ29udGludWVTaWduSW4oZSx0KXtyZXR1cm4hKGUmJiFOdC5oYXNFcnJvckluVVJMKCkmJiFOdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIE50LmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKX1zdGF0aWMgd2FzU2lnbkluQ2FsbGVkKCl7cmV0dXJuISghTnQuaGFzRXJyb3JJblVSTCgpJiYhTnQuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KFMpLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKGU9d2luZG93LmxvY2F0aW9uLnNlYXJjaCl7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKGU9d2luZG93LmxvY2F0aW9uLmhyZWYpe2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldChfKSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odyk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHcsSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX12YXIganQ9W10scXQ9W10seHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksS3Q9ITE7ZnVuY3Rpb24gQnQoKXtLdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpanRbdF09ZVt0XSxxdFtlLmNoYXJDb2RlQXQodCldPXQ7cXRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHF0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBKdChlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goanRbKGk9cik+PjE4JjYzXStqdFtpPj4xMiY2M10ranRbaT4+NiY2M10ranRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEZ0KGUpe3ZhciB0O0t0fHxCdCgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKEp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9anRbdD4+Ml0saSs9anRbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz1qdFt0Pj4xMF0saSs9anRbdD4+NCY2M10saSs9anRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBXdChlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiAkdChlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIHp0PXt9LnRvU3RyaW5nLFl0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXp0LmNhbGwoZSl9O1p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Vy5UWVBFRF9BUlJBWV9TVVBQT1JUfHxXLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIFZ0PUd0KCk7ZnVuY3Rpb24gR3QoKXtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gWHQoZSx0KXtpZihHdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgWnQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWnQoZSx0LG4pe2lmKCEoWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIFp0KSlyZXR1cm4gbmV3IFp0KGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHRuKHRoaXMsZSl9cmV0dXJuIFF0KHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFF0KGUsdCxuLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scik7WnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189WnQucHJvdG90eXBlOmU9bm4oZSx0KTtyZXR1cm4gZX0oZSx0LG4scik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXsic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKTtpZighWnQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfHNuKHQsbiksaT0oZT1YdChlLHIpKS53cml0ZSh0LG4pO2khPT1yJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihvbih0KSl7dmFyIG49MHxybih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1YdChlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwocj10Lmxlbmd0aCkhPXI/WHQoZSwwKTpubihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZZdCh0LmRhdGEpKXJldHVybiBubihlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGVuKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdG4oZSx0KXtpZihlbih0KSxlPVh0KGUsdDwwPzA6MHxybih0KSksIVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gbm4oZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxybih0Lmxlbmd0aCk7ZT1YdChlLG4pO2Zvcih2YXIgcj0wO3I8bjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7aWYoZT49R3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrR3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIHNuKGUsdCl7aWYob24oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFVuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTG4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gVW4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gYW4oZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYoKG4+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gYm4odGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG1uKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gX24odGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFNuKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHluKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGtuKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGNuKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gdW4oZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVp0LmZyb20odCxyKSksb24odCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpsbihlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTpsbihlLFt0XSxuLHIsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbG4oZSx0LG4scixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixuLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPW47bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKG4rYz5hJiYobj1hLWMpLG89bjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGg9MDtoPGM7aCsrKWlmKHUoZSxvK2gpIT09dSh0LGgpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZG4oZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSk+aSYmKHI9aSk6cj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtyPm8vMiYmKHI9by8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIGhuKGUsdCxuLHIpe3JldHVybiBIbihVbih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBmbihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gZm4oZSx0LG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIEhuKExuKHQpLGUsbixyKX1mdW5jdGlvbiB2bihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylyPShuPWUuY2hhckNvZGVBdChzKSk+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/RnQoZSk6RnQoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBtbihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsZD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkrZDw9bilzd2l0Y2goZCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsZD0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLGkrPWR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXduKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbj0iIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz13bikpO3JldHVybiBufShyKX1adC5wb29sU2l6ZT04MTkyLFp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1adC5wcm90b3R5cGUsZX0sWnQuZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFF0KG51bGwsZSx0LG4pfSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoWnQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxadC5fX3Byb3RvX189VWludDhBcnJheSksWnQuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZW4odCksdDw9MD9YdChlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP1h0KGUsdCkuZmlsbChuLHIpOlh0KGUsdCkuZmlsbChuKTpYdChlLHQpfShudWxsLGUsdCxuKX0sWnQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRuKG51bGwsZSl9LFp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuaXNCdWZmZXI9TW4sWnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFvbihlKXx8IW9uKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxadC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxadC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gWnQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1adC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZighb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxadC5ieXRlTGVuZ3RoPXNuLFp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsWnQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Miljbih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWnQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCljbih0aGlzLHQsdCszKSxjbih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWNuKHRoaXMsdCx0KzcpLGNuKHRoaXMsdCsxLHQrNiksY24odGhpcyx0KzIsdCs1KSxjbih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9tbih0aGlzLDAsZSk6YW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxadC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09WnQuY29tcGFyZSh0aGlzLGUpfSxadC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxadC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0ocj4+Pj0wKSxzPShuPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UocixpKSx1PWUuc2xpY2UodCxuKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LFp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG4pfSxadC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITApfSxadC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1bih0aGlzLGUsdCxuLCExKX0sWnQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+aSkmJihuPWkpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBkbih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBobih0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBnbih0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LFp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB3bj00MDk2O2Z1bmN0aW9uIF9uKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGJuKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIGk9IiIsbz10O288bjsrK28paSs9T24oZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24ga24oZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFbihlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gVG4oZSx0LG4scixpLG8pe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtpPG87KytpKWVbbitpXT0odCYyNTU8PDgqKHI/aToxLWkpKT4+PjgqKHI/aToxLWkpfWZ1bmN0aW9uIFJuKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtpPG87KytpKWVbbitpXT10Pj4+OCoocj9pOjMtaSkmMjU1fWZ1bmN0aW9uIENuKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sNCksJHQoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gUG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sOCksJHQoZSx0LG4sciw1Miw4KSxuKzh9WnQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksKHQ9dm9pZCAwPT09dD9yOn5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSx0PGUmJih0PWUpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189WnQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO249bmV3IFp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKW5bb109dGhpc1tvK2VdfXJldHVybiBufSxadC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LFp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sWnQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByPj0oaSo9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0sWnQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LFp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LFp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sWnQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksV3QodGhpcyxlLCEwLDIzLDQpfSxadC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsNTIsOCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsNTIsOCl9LFp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxUbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPW4tMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwxLDI1NSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6QW4odGhpcyxlLHQsITApLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sWnQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMTI3LC0xMjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LFp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIERuKHRoaXMsZSx0LCEwLG4pfSxadC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGksbz1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK25dO2Vsc2UgaWYobzwxZTN8fCFadC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbitvKSx0KTtyZXR1cm4gb30sWnQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIVp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPW9uKGUpP2U6VW4obmV3IFp0KGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgSW49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFVuKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPHI7KytzKXtpZigobj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBMbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzO0t0fHxCdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyB4dCgzKmEvNC1vKSxyPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAsbj0wO3Q8cjt0Kz00LG4rPTMpaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxOHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHF0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxxdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1xdFtlLmNoYXJDb2RlQXQodCldPDwyfHF0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxMHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8cXRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoSW4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEhuKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8ciYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIE1uKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8Tm4oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmTm4oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE5uKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIGpuPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjpadCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxadC5hbGxvYygrZSl9LGlzQnVmZmVyOk1uLGtNYXhMZW5ndGg6VnR9KSxxbj17ZXhwb3J0czp7fX0seG49e30sS249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEtuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1adC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHhuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQm49S247ZnVuY3Rpb24gSm4oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxadC5pc0J1ZmZlcihlKT9XbihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6V24oWnQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEJuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIFduKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgJG4sem49Sm47em4uZW5jb2RlPUpuLHpuLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmZyb20oRm4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSx6bi50b0Jhc2U2ND1Gbix6bi5mcm9tQmFzZTY0PVduLHpuLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBadC5mcm9tKEZuKGUpLCJiYXNlNjQiKX0seG4uZGVmYXVsdD16biwoJG49cW4pLmV4cG9ydHM9eG4uZGVmYXVsdCwkbi5leHBvcnRzLmRlZmF1bHQ9JG4uZXhwb3J0czt2YXIgWW49cW4uZXhwb3J0cyxWbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9blswXSxhPW5bMV0sYz1uWzJdLHU9blszXSxsPW5bNF0sZD1uWzVdLGg9bls2XSxmPW5bN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1JnJbdl0pPDwyNHwoMjU1JnJbdisxXSk8PDE2fCgyNTUmclt2KzJdKTw8OHwyNTUmclt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmRefmwmaCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWgsaD1kLGQ9bCxsPXUreXwwLHU9YyxjPWEsYT1zLHM9eSttfDA7blswXSs9cyxuWzFdKz1hLG5bMl0rPWMsblszXSs9dSxuWzRdKz1sLG5bNV0rPWQsbls2XSs9aCxuWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgcj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKHI9bih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLHIsdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLHI9dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW3JdPTEyODtmb3IodmFyIGE9cisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHRoaXMuc3RhdGUubGVuZ3RoO24rKyl0aGlzLnN0YXRlW25dPWVbbl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9cjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgcix0aGlzLm91dGVyPW5ldyByLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IHIpLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IHIpLnVwZGF0ZShlKSxuPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1uZXcgaShlKS51cGRhdGUodCkscj1uLmRpZ2VzdCgpO3JldHVybiBuLmNsZWFuKCkscn1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBpPXJbMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxuJiZ0LnVwZGF0ZShuKSx0LnVwZGF0ZShyKSx0LmZpbmlzaChlKSxyWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09ciYmKHI9MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksZD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksaD1kLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KHIpLHA9MDtwPHI7cCsrKWg9PT1kLmxlbmd0aCYmKGEoZCxsLG4sbyksaD0wKSxmW3BdPWRbaCsrXTtyZXR1cm4gbC5jbGVhbigpLGQuZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxuLHIpe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkociksZD0wO2QqczxyO2QrKyl7dmFyIGg9ZCsxO2FbMF09aD4+PjI0JjI1NSxhWzFdPWg+Pj4xNiYyNTUsYVsyXT1oPj4+OCYyNTUsYVszXT1oPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfShWbik7dmFyIEduPVQoVm4uZXhwb3J0cyksWG49Y3J5cHRvO2NvbnN0IFpuPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksUW49bmV3IFRleHRFbmNvZGVyLGVyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCB0cj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9ZXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgbnIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyByciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLG49InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIGlyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIG9yIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3Mgc3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIGFyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3MgY3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyB1ciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgbHIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBkciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBociBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZnIoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBwcihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiBncihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHZyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHlyKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke259LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLG4pfXZhciBtcj0oZSwuLi50KT0+e2xldCBuPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtuKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/bis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOm4rPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9uKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/bis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYobis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxufSx3cj1lPT5abihlKTtjb25zdCBfcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIFNyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IGJyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHNyKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGZyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gWG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0cihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsWG4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBrcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighd3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihtcihlLC4uLl9yLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCF3cihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKG1yKGUsLi4uX3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxuKX07Y29uc3QgRXI9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxuKXtpZihabih0KSlyZXR1cm4geXIodCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihtcih0LC4uLl9yKSk7cmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKG1yKHQsLi4uX3IsIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZnIoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IHNyKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFhuLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBUcihlLHQsbil7dmFyIHI7aWYoIVNyKGUpKXRocm93IG5ldyBhcigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgYXIoJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgYXIoIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhU3IoZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PXRyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKGVyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgbjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKG4mJjAhPT1uLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYobi5oYXMoZSkpcmV0dXJuITE7bi5hZGQoZSl9ZWxzZSBuPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBzcihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KGFyLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyBhcignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyBhcignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgb3IoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxrcihjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCksbj1uZXcgVWludDhBcnJheSh0KTtsZXQgcj0wO3JldHVybiBlLmZvckVhY2goKGU9PntuLnNldChlLHIpLHIrPWUubGVuZ3RofSkpLG59KFFuLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLFFuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD10cihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IEVyKGMsdCxoLGQpKXRocm93IG5ldyBocjtsZXQgZjtmPWE/dHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Rbi5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgQXI9ODY0MDAsUnI9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIENyPWU9Pntjb25zdCB0PVJyLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qQXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IERyPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBQcj0oZSx0LG49e30pPT57Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fERyKGUudHlwKSE9PURyKHIpKSl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIVNyKGkpKXRocm93IG5ldyBjcigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1DcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6ZH09bixoPShmPWR8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmgrbCl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWgtbCl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWgtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpDcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBJcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPWVyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBhcigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgYXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IFRyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBjcigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlByKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBPcihlKXtyZXR1cm4gU3IoZSl9Y2xhc3MgVXJ7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShPcil9KGUpKXRocm93IG5ldyB1cigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGxyO2lmKDEhPT1hKXRocm93IG5ldyBkcjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFTcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP2JyKHsuLi5lLGFsZzp0LGV4dDohMX0pOnRyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBzcignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBicih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIExyPXtleHBvcnRzOnt9fSxIcj17ZXhwb3J0czp7fX0sTXI9QShqbik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgbj1NcixyPW4uQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHIoZSx0LG4pfXIuZnJvbSYmci5hbGxvYyYmci5hbGxvY1Vuc2FmZSYmci5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGkobix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpKHIsbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlLHQsbil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9cihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIG4/aS5maWxsKHQsbik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19KEhyLEhyLmV4cG9ydHMpO3ZhciBOcj02NTUzNixqcj00Mjk0OTY3Mjk1O3ZhciBxcj1Ici5leHBvcnRzLkJ1ZmZlcix4cj1FLmNyeXB0b3x8RS5tc0NyeXB0bzt4ciYmeHIuZ2V0UmFuZG9tVmFsdWVzP0xyLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPmpyKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49cXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+TnIpZm9yKHZhciByPTA7cjxlO3IrPU5yKXhyLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitOcikpO2Vsc2UgeHIuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB2ZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwsbil9KSk7cmV0dXJuIG59OkxyLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBLcj1Mci5leHBvcnRzO2NsYXNzIEJye2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gWW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIFluLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIFp0LmZyb20oR24oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gS3IoZSl9dmVyaWZ5Snd0KGUsdCxuLHIsaSxvLHMpe3JldHVybiBJcihlLChhPXtrZXlzOlt0XX0sVXIucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBVcihhKSkpLHthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9Pnt2YXIgdDtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1DUllQVE8tVVRJTFMtVkotSVYwMSIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUucmVhc29uKSYmdm9pZCAwIT09dD90OkpTT04uc3RyaW5naWZ5KGUpLGAke251bGw9PWU/dm9pZCAwOmUuY29kZX0gJHtudWxsPT1lP3ZvaWQgMDplLmNsYWltfWApKX0pKTt2YXIgYX19b3JpZ2luLHkuU2Vzc2lvblN0b3JhZ2U7Y2xhc3MgSnJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYobi5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KG4uZXhwaXJlc19pbiksbz1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShvKSl9fSkpfWdldFJlZnJlc2hUaW1lb3V0VGltZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk/SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk6LTF9KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodClyZXR1cm4gdm9pZCBjbGVhclRpbWVvdXQodCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTstMSE9PWUmJmNsZWFyVGltZW91dChlKX0pKX19Y2xhc3MgRnJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dH1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1OdC5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2Ugcy5zdG9yYWdlPT09eS5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuc3RvcmFnZSE9PXkuV2ViV29ya2VyPyhOdC5zZXRTaWduT3V0VVJMKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldFNpZ25PdXRVUkwoKSksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpKSxyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmcy5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJnIoKSk6dGhpcy5fc3BhSGVscGVyJiZ0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKX10cnlTaWduSW5TaWxlbnRseSh0LG4scil7dmFyIGk7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZihOdC5pc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCkpcmV0dXJuIHlpZWxkIHIucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpLFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2NvbnN0IG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJwSUZyYW1lIikscz1udWxsPT09KGk9bnVsbD09bz92b2lkIDA6by5jb250ZW50RG9jdW1lbnQpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldEVsZW1lbnRCeUlkKCJwcm9tcHROb25lSUZyYW1lIik7dHJ5e2NvbnN0IGU9eWllbGQgdCgpO3Muc3JjPWV9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfXJldHVybiBuZXcgUHJvbWlzZSgoKHQscik9Pntjb25zdCBpPXNldFRpbWVvdXQoKCgpPT57dCghMSl9KSwxZTQpLG89cz0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLGEsYyx1O2NvbnN0IGw9cy5kYXRhOyJjaGVja19zZXNzaW9uX3NpZ25lZF9vdXQiPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxjbGVhclRpbWVvdXQoaSksdCghMSkpLCJjaGVja19zZXNzaW9uX3NpZ25lZF9pbiI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYobnVsbD09PShlPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29kZSkmJm4obnVsbD09PShhPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29kZSxudWxsPT09KGM9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zZXNzaW9uU3RhdGUsbnVsbD09PSh1PW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhdGUpLnRoZW4oKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChlKX0pKS5jYXRjaCgoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxyKGUpfSkpLmZpbmFsbHkoKCgpPT57Y2xlYXJUaW1lb3V0KGkpfSkpfSkpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKX0pKX0pKX1oYW5kbGVTaWduSW4odCxuLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHlpZWxkIHQoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7aWYoZS5zdG9yYWdlIT09eS5XZWJXb3JrZXImJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKSkpcmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChfKSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoUyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUoXyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKFMpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT15LldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0RGVjb2RlZElEUElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldENyeXB0b0hlbHBlcigpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRJRFRva2VuKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfWdldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX0pKX1nZXRJRFBBY2Nlc3NUb2tlbigpe3ZhciB0O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0odD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuYWNjZXNzX3Rva2VufSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPSh7ZGF0YTpuLHBvcnRzOmF9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHUsbCxkLGgsZixwO2NvbnN0IHk9YVswXTtpZihuLnR5cGU9PT12fHxyKXN3aXRjaChuLnR5cGUpe2Nhc2Ugdjp0cnl7Y29uc3QgYT1PYmplY3QuYXNzaWduKHt9LG4uZGF0YSk7cj15aWVsZCgodCxuKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgSHQsaT1uZXcgQnIsbz1uZXcgZyhyLGkpO3lpZWxkIG8uaW5pdGlhbGl6ZSh0KTtjb25zdCBzPW5ldyBKcihvKSxhPW4obyxzKSxjPW8uZ2V0RGF0YUxheWVyKCksdT1MdC5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT11P3ZvaWQgMDp1LmluaXQpJiYoeWllbGQgdS5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KTtlLmF0dGFjaFRva2VuJiYoZS5zaG91bGRBdHRhY2hJRFBBY2Nlc3NUb2tlbj90LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGEuZ2V0SURQQWNjZXNzVG9rZW4oKX1gfSk6dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBhLmdldEFjY2Vzc1Rva2VuKCl9YH0pKX0pKSkpKSx7ZGlzYWJsZUh0dHBIYW5kbGVyOigpPT57YS5kaXNhYmxlSHR0cEhhbmRsZXIodSl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57YS5lbmFibGVIdHRwSGFuZGxlcih1KX0sZ2V0QWNjZXNzVG9rZW46KCk9PmEuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLHI9eWllbGQgby5nZXRQS0NFQ29kZShuKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6cn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldENyeXB0b0hlbHBlcjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0Q3J5cHRvSGVscGVyKCl9KSksZ2V0RGVjb2RlZElEUElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFBJRFRva2VuKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdCh1LHQpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0QWxsKHQsdSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5hLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBhLnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LG4scixpKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbix2b2lkIDAscixpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEN1c3RvbUdyYW50KHQpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpO3JldHVybiBvLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dChlKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBjLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3MuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkscy5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KGEpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKGEsdCksci5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHMpLHIuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGkpLHIuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2sobykseS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnIuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1uP3ZvaWQgMDpuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlLG51bGw9PT0obD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOntjb25zdCBlPW4uZGF0YSx0PW51bGw9PWU/dm9pZCAwOmUuZGF0YTtpZighMD09PShudWxsPT09KHA9bnVsbD09PShmPW4uZGF0YSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZGF0YSl8fHZvaWQgMD09PXA/dm9pZCAwOnAuZm9ybURhdGEpKXtjb25zdCBuPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgZSBpbiB0KSJmb3JtRGF0YSIhPT1lJiZuLmFwcGVuZChlLHRbZV0pO2UuZGF0YT1ufXIuaHR0cFJlcXVlc3QoZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrfWNhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXl8fHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBGcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1,function(t){return N=N||function(t,e,n){var l=void 0===e?null:e,i=function(t,e){var n=atob(t);if(e){for(var l=new Uint8Array(n.length),i=0,c=n.length;i<c;++i)l[i]=n.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(l.buffer))}return n}(t,void 0!==n&&n),c=i.indexOf("\n",10)+1,o=i.substring(c)+(l?"//# sourceMappingURL="+l:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0Q3J5cHRvSGVscGVyKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj10LndlbGxLbm93bkVuZHBvaW50O2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLG4scixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShuPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1uP246IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0ocj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09cj9yOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShuPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBhPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFhfHwwPT09YS50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2F9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLG4pfSkpfXNldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksZSxyKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSx5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKX0pKX19Y2xhc3MgZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLG4pLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsbixyKXt2YXIgaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShpPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1pP2k6bnVsbCxvPXQmJkpTT04ucGFyc2UodCkscz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse1tuXTpyfSksYT1KU09OLnN0cmluZ2lmeShzKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUsYSl9KSl9cmVtb3ZlVmFsdWUoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW25dO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUsdCl7cmV0dXJuIHQ/YCR7ZX0tJHt0aGlzLl9pZH0tJHt0fWA6YCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9c2V0VGVtcG9yYXJ5RGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXNldFNlc3Npb25EYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfXNldEN1c3RvbURhdGEoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoZSxyKSxuKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKCl7dmFyIGU7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRDdXN0b21EYXRhKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KGUsbikpKSYmdm9pZCAwIT09cj9yOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSl9KSl9Z2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfXNldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUsbil9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLG4pfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxpKSxlLG4pfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGkpLGUsbil9KSl9cmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pLGUpfSkpfX1jb25zdCBwPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6bi5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIGd7Ci8qKgogICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RvcmV9IHN0b3JlIC0gVGhlIHN0b3JlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZihgaW5zdGFuY2VfJHtnLl9pbnN0YW5jZUlEfWAsZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBPSURDIHNlcnZpY2UgZW5kcG9pbnRzIHRoYXQgYXJlIGZldGNoZWQgZnJvbSB0aGUgYC53ZWxsLWtub3duYCBlbmRwb2ludC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgYXV0aC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBkZWNvZGVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJRCB0b2tlbiBhbmQgcmV0dXJucyBpdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjcnlwdG8gaGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY3J5cHRvSGVscGVyID0gYXdhaXQgYXV0aC5DcnlwdG9IZWxwZXIoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRDcnlwdG9IZWxwZXIKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxEPUMsUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1QLmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09UC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PVAuY2FsbChlKX1mdW5jdGlvbiBOKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgaj17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1QLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09UC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09UC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09UC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1QLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6TixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspTihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIE4odCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0QodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0scT1qO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYocS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO3EuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihxLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxxLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7cS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6cS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sQj1qO2Z1bmN0aW9uIEooKXt0aGlzLmhhbmRsZXJzPVtdfUoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEoucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1KLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFk9JCxWPXo7ZnVuY3Rpb24gRyhlKXtpZihZPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChZPT09JHx8IVkpJiZzZXRUaW1lb3V0KXJldHVybiBZPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gWShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gWS5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihZPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFY9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihWPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFY9PT16fHwhVikmJmNsZWFyVGltZW91dClyZXR1cm4gVj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtWKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9aixtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1qLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9aixDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLERlPWosUGU9RGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49RGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPWosTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLE5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LGplPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LHFlPVBlLHhlPVNlLEtlPXdlLEJlPU9lLEplPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPU5lKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9qZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fHFlKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgQmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1qLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFllKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgVmUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoVmU9SmUpLFZlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFllKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFllKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1qLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1qLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1qLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1qLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PWosUnQ9aixDdD1DLER0PWJ0LFB0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBEdCh0KSxyPUN0KER0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixEdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoUHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1EdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIHQuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxPdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49bn0pKX1lbmFibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe090LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPU90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe090LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntPdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O0x0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLEx0PU90PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQsbixzKTppKHQsbikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHMpLHN9KFtlPT57fV0sTHQpO2NsYXNzIEh0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxuKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQsbil9KSl9Z2V0RGF0YSh0KXt2YXIgbixyO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KG49dGhpcy5fZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpKSYmdm9pZCAwIT09cj9yOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgcmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUoKXtjb25zdCBlPWxvY2F0aW9uLmhyZWY7aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZS5yZXBsYWNlKC9cP2NvZGU9LiokLywiIikpfXN0YXRpYyBnZXRQS0NFKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn1zdGF0aWMgc2V0UEtDRShlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX1zdGF0aWMgc2V0U2lnbk91dFVSTChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHMsZSl9c3RhdGljIGdldFNpZ25PdXRVUkwoKXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocykpJiZ2b2lkIDAhPT1lP2U6IiJ9c3RhdGljIHJlbW92ZVBLQ0UoZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShlKX1zdGF0aWMgY2FuQ29udGludWVTaWduSW4oZSx0KXtyZXR1cm4hKGUmJiFOdC5oYXNFcnJvckluVVJMKCkmJiFOdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXQpfXN0YXRpYyBpc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCl7cmV0dXJuIE50LmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKX1zdGF0aWMgd2FzU2lnbkluQ2FsbGVkKCl7cmV0dXJuISghTnQuaGFzRXJyb3JJblVSTCgpJiYhTnQuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX1zdGF0aWMgd2FzU2lsZW50U2lnbkluQ2FsbGVkKCl7Y29uc3QgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9c3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKGcuaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZSkseWllbGQgZy5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLCEwfXJldHVybiExfSkpfXN0YXRpYyBkaWRTaWduT3V0RmFpbCgpe2lmKGcuZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHQ9ZS5zZWFyY2hQYXJhbXMuZ2V0KF8pLG49ZS5zZWFyY2hQYXJhbXMuZ2V0KFMpLHI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXTtyZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscikse2Rlc2NyaXB0aW9uOm51bGwhPW4/bjoiIixlcnJvcjpudWxsIT10P3Q6IiJ9fXJldHVybiExfXN0YXRpYyBpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl7dmFyIGU7Y29uc3QgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX1zdGF0aWMgaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKGU9d2luZG93LmxvY2F0aW9uLnNlYXJjaCl7cmV0dXJuL1s/Jl1jb2RlPVteJl0rLy50ZXN0KGUpfXN0YXRpYyBoYXNFcnJvckluVVJMKGU9d2luZG93LmxvY2F0aW9uLmhyZWYpe2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldChfKSYmInNpZ25fb3V0X3N1Y2Nlc3MiIT09dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpfXN0YXRpYyBjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odyk7cmV0dXJuIShlP0pTT04ucGFyc2UoZSk6bnVsbCl9c3RhdGljIHNldFByb21wdE5vbmVSZXF1ZXN0U2VudChlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHcsSlNPTi5zdHJpbmdpZnkoZSkpfXN0YXRpYyB3YWl0VGlsbFBhZ2VSZWRpcmVjdCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9bnVsbCE9dD90OjNlMzt5aWVsZCBuZXcgUHJvbWlzZSgodD0+c2V0VGltZW91dCh0LDFlMyplKSkpfSkpfX12YXIganQ9W10scXQ9W10seHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksS3Q9ITE7ZnVuY3Rpb24gQnQoKXtLdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3QpanRbdF09ZVt0XSxxdFtlLmNoYXJDb2RlQXQodCldPXQ7cXRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHF0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBKdChlLHQsbil7Zm9yKHZhciByLGksbz1bXSxzPXQ7czxuO3MrPTMpcj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goanRbKGk9cik+PjE4JjYzXStqdFtpPj4xMiY2M10ranRbaT4+NiY2M10ranRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEZ0KGUpe3ZhciB0O0t0fHxCdCgpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPW4lMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1uLXI7YTxjO2ErPXMpby5wdXNoKEp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09cj8odD1lW24tMV0saSs9anRbdD4+Ml0saSs9anRbdDw8NCY2M10saSs9Ij09Iik6Mj09PXImJih0PShlW24tMl08PDgpK2Vbbi0xXSxpKz1qdFt0Pj4xMF0saSs9anRbdD4+NCY2M10saSs9anRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBXdChlLHQsbixyLGkpe3ZhciBvLHMsYT04Kmktci0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsZD1uP2ktMTowLGg9bj8tMToxLGY9ZVt0K2RdO2ZvcihkKz1oLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2RdLGQrPWgsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPXI7bD4wO3M9MjU2KnMrZVt0K2RdLGQrPWgsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsciksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1yKX1mdW5jdGlvbiAkdChlLHQsbixyLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGQ9bD4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1yPzA6by0xLHA9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMrZD49MT9oL2M6aCpNYXRoLnBvdygyLDEtZCkpKmM+PTImJihzKyssYy89MikscytkPj1sPyhhPTAscz1sKTpzK2Q+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWQpOihhPXQqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbbitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW24rZi1wXXw9MTI4Kmd9dmFyIHp0PXt9LnRvU3RyaW5nLFl0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXp0LmNhbGwoZSl9O1p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Vy5UWVBFRF9BUlJBWV9TVVBQT1JUfHxXLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIFZ0PUd0KCk7ZnVuY3Rpb24gR3QoKXtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gWHQoZSx0KXtpZihHdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgWnQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gWnQoZSx0LG4pe2lmKCEoWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIFp0KSlyZXR1cm4gbmV3IFp0KGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHRuKHRoaXMsZSl9cmV0dXJuIFF0KHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFF0KGUsdCxuLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLHIpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1uJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxuKTpuZXcgVWludDhBcnJheSh0LG4scik7WnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189WnQucHJvdG90eXBlOmU9bm4oZSx0KTtyZXR1cm4gZX0oZSx0LG4scik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXsic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKTtpZighWnQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfHNuKHQsbiksaT0oZT1YdChlLHIpKS53cml0ZSh0LG4pO2khPT1yJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihvbih0KSl7dmFyIG49MHxybih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1YdChlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwocj10Lmxlbmd0aCkhPXI/WHQoZSwwKTpubihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZZdCh0LmRhdGEpKXJldHVybiBubihlLHQuZGF0YSl9dmFyIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGVuKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdG4oZSx0KXtpZihlbih0KSxlPVh0KGUsdDwwPzA6MHxybih0KSksIVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjx0OysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gbm4oZSx0KXt2YXIgbj10Lmxlbmd0aDwwPzA6MHxybih0Lmxlbmd0aCk7ZT1YdChlLG4pO2Zvcih2YXIgcj0wO3I8bjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7aWYoZT49R3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrR3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIHNuKGUsdCl7aWYob24oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgcj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFVuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTG4oZSkubGVuZ3RoO2RlZmF1bHQ6aWYocilyZXR1cm4gVW4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gYW4oZSx0LG4pe3ZhciByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuIiI7aWYoKG4+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gYm4odGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG1uKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gX24odGhpcyx0LG4pO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFNuKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHluKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGtuKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIGNuKGUsdCxuKXt2YXIgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gdW4oZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVp0LmZyb20odCxyKSksb24odCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpsbihlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTpsbihlLFt0XSxuLHIsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbG4oZSx0LG4scixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJigidWNzMiI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1yfHwidXRmMTZsZSI9PT1yfHwidXRmLTE2bGUiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixuLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPW47bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKG4rYz5hJiYobj1hLWMpLG89bjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGg9MDtoPGM7aCsrKWlmKHUoZSxvK2gpIT09dSh0LGgpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZG4oZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSk+aSYmKHI9aSk6cj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtyPm8vMiYmKHI9by8yKTtmb3IodmFyIHM9MDtzPHI7KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbbitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIGhuKGUsdCxuLHIpe3JldHVybiBIbihVbih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiBmbihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBwbihlLHQsbixyKXtyZXR1cm4gZm4oZSx0LG4scil9ZnVuY3Rpb24gZ24oZSx0LG4scil7cmV0dXJuIEhuKExuKHQpLGUsbixyKX1mdW5jdGlvbiB2bihlLHQsbixyKXtyZXR1cm4gSG4oZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcylyPShuPWUuY2hhckNvZGVBdChzKSk+PjgsaT1uJTI1NixvLnB1c2goaSksby5wdXNoKHIpO3JldHVybiBvfSh0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/RnQoZSk6RnQoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBtbihlLHQsbil7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9W10saT10O2k8bjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsZD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkrZDw9bilzd2l0Y2goZCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsZD0xKTpsPjY1NTM1JiYobC09NjU1MzYsci5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksci5wdXNoKGwpLGkrPWR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PXduKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgbj0iIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz13bikpO3JldHVybiBufShyKX1adC5wb29sU2l6ZT04MTkyLFp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1adC5wcm90b3R5cGUsZX0sWnQuZnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFF0KG51bGwsZSx0LG4pfSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoWnQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxadC5fX3Byb3RvX189VWludDhBcnJheSksWnQuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZW4odCksdDw9MD9YdChlLHQpOnZvaWQgMCE9PW4/InN0cmluZyI9PXR5cGVvZiByP1h0KGUsdCkuZmlsbChuLHIpOlh0KGUsdCkuZmlsbChuKTpYdChlLHQpfShudWxsLGUsdCxuKX0sWnQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRuKG51bGwsZSl9LFp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuaXNCdWZmZXI9TW4sWnQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFvbihlKXx8IW9uKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgscj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihuLHIpO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe249ZVtpXSxyPXRbaV07YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxadC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxadC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gWnQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDt2YXIgcj1adC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZighb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxadC5ieXRlTGVuZ3RoPXNuLFp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsWnQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Miljbih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sWnQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCljbih0aGlzLHQsdCszKSxjbih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWNuKHRoaXMsdCx0KzcpLGNuKHRoaXMsdCsxLHQrNiksY24odGhpcyx0KzIsdCs1KSxjbih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9tbih0aGlzLDAsZSk6YW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxadC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09WnQuY29tcGFyZSh0aGlzLGUpfSxadC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxadC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLGkpe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI+PWkmJnQ+PW4pcmV0dXJuIDA7aWYocj49aSlyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0ocj4+Pj0wKSxzPShuPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UocixpKSx1PWUuc2xpY2UodCxuKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LFp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LG4pfSxadC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITApfSxadC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1bih0aGlzLGUsdCxuLCExKX0sWnQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+aSkmJihuPWkpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBkbih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBobih0aGlzLGUsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gZm4odGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcG4odGhpcyxlLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBnbih0aGlzLGUsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZuKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LFp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB3bj00MDk2O2Z1bmN0aW9uIF9uKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O2k8bjsrK2kpcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIGJuKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghbnx8bjwwfHxuPnIpJiYobj1yKTtmb3IodmFyIGk9IiIsbz10O288bjsrK28paSs9T24oZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24ga24oZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFbihlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gVG4oZSx0LG4scixpLG8pe2lmKCFvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQW4oZSx0LG4scil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiwyKTtpPG87KytpKWVbbitpXT0odCYyNTU8PDgqKHI/aToxLWkpKT4+PjgqKHI/aToxLWkpfWZ1bmN0aW9uIFJuKGUsdCxuLHIpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtpPG87KytpKWVbbitpXT10Pj4+OCoocj9pOjMtaSkmMjU1fWZ1bmN0aW9uIENuKGUsdCxuLHIsaSxvKXtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sNCksJHQoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gUG4oZSx0LG4scixpKXtyZXR1cm4gaXx8Q24oZSwwLG4sOCksJHQoZSx0LG4sciw1Miw4KSxuKzh9WnQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksKHQ9dm9pZCAwPT09dD9yOn5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSx0PGUmJih0PWUpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189WnQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO249bmV3IFp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKW5bb109dGhpc1tvK2VdfXJldHVybiBufSxadC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxadC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LFp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sWnQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybiByPj0oaSo9MTI4KSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0sWnQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEVuKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLG89dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tcl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LFp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxFbihlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxadC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LFp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sWnQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksV3QodGhpcyxlLCEwLDIzLDQpfSxadC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsNTIsOCl9LFp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw4LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITEsNTIsOCl9LFp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7KGU9K2UsdHw9MCxufD0wLHIpfHxUbih0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciBpPW4tMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwxLDI1NSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6QW4odGhpcyxlLHQsITApLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiw2NTUzNSwwKSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrbn0sWnQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0fD0wLCFyKXt2YXIgaT1NYXRoLnBvdygyLDgqbi0xKTtUbih0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMTI3LC0xMjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LFp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6QW4odGhpcyxlLHQsITEpLHQrMn0sWnQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6Um4odGhpcyxlLHQsITApLHQrNH0sWnQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Um4odGhpcyxlLHQsITEpLHQrNH0sWnQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIERuKHRoaXMsZSx0LCEwLG4pfSxadC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITEsbil9LFp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJnI8biYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGksbz1yLW47aWYodGhpcz09PWUmJm48dCYmdDxyKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK25dO2Vsc2UgaWYobzwxZTN8fCFadC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbitvKSx0KTtyZXR1cm4gb30sWnQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIVp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPW9uKGUpP2U6VW4obmV3IFp0KGUscikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgSW49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFVuKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciByPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPHI7KytzKXtpZigobj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PXIpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9bjtjb250aW51ZX1uPTY1NTM2KyhpLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBMbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzO0t0fHxCdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyB4dCgzKmEvNC1vKSxyPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAsbj0wO3Q8cjt0Kz00LG4rPTMpaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxOHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfHF0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxxdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1xdFtlLmNoYXJDb2RlQXQodCldPDwyfHF0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1xdFtlLmNoYXJDb2RlQXQodCldPDwxMHxxdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8cXRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoSW4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEhuKGUsdCxuLHIpe2Zvcih2YXIgaT0wO2k8ciYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIE1uKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8Tm4oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmTm4oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE5uKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIGpuPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjpadCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxadC5hbGxvYygrZSl9LGlzQnVmZmVyOk1uLGtNYXhMZW5ndGg6VnR9KSxxbj17ZXhwb3J0czp7fX0seG49e30sS249e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEtuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dCU0O2lmKCFuKXJldHVybiBlO3ZhciByPXQsaT00LW4sbz10K2kscz1adC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLHIrKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHhuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQm49S247ZnVuY3Rpb24gSm4oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxadC5pc0J1ZmZlcihlKT9XbihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6V24oWnQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLEJuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIFduKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgJG4sem49Sm47em4uZW5jb2RlPUpuLHpuLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmZyb20oRm4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSx6bi50b0Jhc2U2ND1Gbix6bi5mcm9tQmFzZTY0PVduLHpuLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBadC5mcm9tKEZuKGUpLCJiYXNlNjQiKX0seG4uZGVmYXVsdD16biwoJG49cW4pLmV4cG9ydHM9eG4uZGVmYXVsdCwkbi5leHBvcnRzLmRlZmF1bHQ9JG4uZXhwb3J0czt2YXIgWW49cW4uZXhwb3J0cyxWbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LG4pe3ZhciByPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiBuKGUsbixyLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsZCxoLGYscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9blswXSxhPW5bMV0sYz1uWzJdLHU9blszXSxsPW5bNF0sZD1uWzVdLGg9bls2XSxmPW5bN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1JnJbdl0pPDwyNHwoMjU1JnJbdisxXSk8PDE2fCgyNTUmclt2KzJdKTw8OHwyNTUmclt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmRefmwmaCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWgsaD1kLGQ9bCxsPXUreXwwLHU9YyxjPWEsYT1zLHM9eSttfDA7blswXSs9cyxuWzFdKz1hLG5bMl0rPWMsblszXSs9dSxuWzRdKz1sLG5bNV0rPWQsbls2XSs9aCxuWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgcj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKHI9bih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLHIsdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtyKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLHI9dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW3JdPTEyODtmb3IodmFyIGE9cisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxuKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHRoaXMuc3RhdGUubGVuZ3RoO24rKyl0aGlzLnN0YXRlW25dPWVbbl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9cjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgcix0aGlzLm91dGVyPW5ldyByLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IHIpLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IHIpLnVwZGF0ZShlKSxuPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1uZXcgaShlKS51cGRhdGUodCkscj1uLmRpZ2VzdCgpO3JldHVybiBuLmNsZWFuKCkscn1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBpPXJbMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxuJiZ0LnVwZGF0ZShuKSx0LnVwZGF0ZShyKSx0LmZpbmlzaChlKSxyWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09ciYmKHI9MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksZD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksaD1kLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KHIpLHA9MDtwPHI7cCsrKWg9PT1kLmxlbmd0aCYmKGEoZCxsLG4sbyksaD0wKSxmW3BdPWRbaCsrXTtyZXR1cm4gbC5jbGVhbigpLGQuZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxuLHIpe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkociksZD0wO2QqczxyO2QrKyl7dmFyIGg9ZCsxO2FbMF09aD4+PjI0JjI1NSxhWzFdPWg+Pj4xNiYyNTUsYVsyXT1oPj4+OCYyNTUsYVszXT1oPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9bjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZkKnMrZjxyO2YrKylsW2QqcytmXT1jW2ZdfWZvcihkPTA7ZDxzO2QrKyljW2RdPXVbZF09MDtmb3IoZD0wO2Q8NDtkKyspYVtkXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShyKTt2YXIgaT1yLmRlZmF1bHQ7Zm9yKHZhciBvIGluIHIpaVtvXT1yW29dO2UuZXhwb3J0cz1pfSgpfShWbik7dmFyIEduPVQoVm4uZXhwb3J0cyksWG49Y3J5cHRvO2NvbnN0IFpuPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksUW49bmV3IFRleHRFbmNvZGVyLGVyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCB0cj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9ZXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgbnIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyByciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLG49InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIGlyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPW59c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIG9yIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3Mgc3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIGFyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3MgY3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyB1ciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3MgbHIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBkciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBociBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gZnIoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBwcihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiBncihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHZyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIHlyKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgbj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke259LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLG4pfXZhciBtcj0oZSwuLi50KT0+e2xldCBuPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtuKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/bis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOm4rPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9uKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/bis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYobis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxufSx3cj1lPT5abihlKTtjb25zdCBfcj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIFNyKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IG49ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7KW49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1ufWNvbnN0IGJyPWFzeW5jIGU9Pnt2YXIgdCxuO2NvbnN0e2FsZ29yaXRobTpyLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxuO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHNyKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LG49WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LG49WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0sbj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LG49ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LG49ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIGZyKCkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO2lmKCJFZDI1NTE5IiE9PWUuY3J2KXRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpO3Q9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOm59fShlKSxvPVtyLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShuPWUua2V5X29wcykmJnZvaWQgMCE9PW4/bjppXTtpZigiUEJLREYyIj09PXIubmFtZSlyZXR1cm4gWG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0cihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsWG4uc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCBrcj0oZSx0LG4pPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighd3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihtcihlLC4uLl9yLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCF3cihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKG1yKGUsLi4uX3IpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7X3Iuam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke19yLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxuKX07Y29uc3QgRXI9YXN5bmMoZSx0LG4scik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxuKXtpZihabih0KSlyZXR1cm4geXIodCxlLG4pLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihtcih0LC4uLl9yKSk7cmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW25dKX10aHJvdyBuZXcgVHlwZUVycm9yKG1yKHQsLi4uX3IsIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UgZnIoKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOnJ9PXQ7cmV0dXJue25hbWU6cixuYW1lZEN1cnZlOnJ9O2RlZmF1bHQ6dGhyb3cgbmV3IHNyKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFhuLnN1YnRsZS52ZXJpZnkobyxpLG4scil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBUcihlLHQsbil7dmFyIHI7aWYoIVNyKGUpKXRocm93IG5ldyBhcigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgYXIoJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgYXIoIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhU3IoZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PXRyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKGVyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgbjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKG4mJjAhPT1uLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYobi5oYXMoZSkpcmV0dXJuITE7bi5hZGQoZSl9ZWxzZSBuPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1yLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIXJ8fHZvaWQgMD09PXIuY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShyLmNyaXQpfHwwPT09ci5jcml0Lmxlbmd0aHx8ci5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PW4/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMobiksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIHIuY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBzcihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09clt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KHIuY3JpdCl9KGFyLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1uP3ZvaWQgMDpuLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyBhcignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyBhcignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1uJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixuLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgb3IoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSxrcihjLHQsInZlcmlmeSIpO2NvbnN0IGQ9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCksbj1uZXcgVWludDhBcnJheSh0KTtsZXQgcj0wO3JldHVybiBlLmZvckVhY2goKGU9PntuLnNldChlLHIpLHIrPWUubGVuZ3RofSkpLG59KFFuLmVuY29kZShudWxsIT09KHI9ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1yP3I6IiIpLFFuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksaD10cihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IEVyKGMsdCxoLGQpKXRocm93IG5ldyBocjtsZXQgZjtmPWE/dHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Rbi5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgQXI9ODY0MDAsUnI9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIENyPWU9Pntjb25zdCB0PVJyLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChuKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKm4pO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpuKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKG4qQXIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqbik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpuKX19O2NvbnN0IERyPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBQcj0oZSx0LG49e30pPT57Y29uc3R7dHlwOnJ9PW47aWYociYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fERyKGUudHlwKSE9PURyKHIpKSl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIVNyKGkpKXRocm93IG5ldyBjcigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1uO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309bjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09bjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiBuLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1DcihuLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1uLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6ZH09bixoPShmPWR8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmgrbCl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWgtbCl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWgtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpDcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBJcihlLHQsbil7dmFyIHI7Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPWVyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBhcigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpyLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgYXIoIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IFRyKHtwYXlsb2FkOmkscHJvdGVjdGVkOnIsc2lnbmF0dXJlOm99LHQsbiksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxuKTtpZigobnVsbD09PShyPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBjcigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlByKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxuKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBPcihlKXtyZXR1cm4gU3IoZSl9Y2xhc3MgVXJ7Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShPcil9KGUpKXRocm93IG5ldyB1cigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpuLGtpZDpyfT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KG4pLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHImJih0PXI9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1uJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChuKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IGxyO2lmKDEhPT1hKXRocm93IG5ldyBkcjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbbl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKCFTcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1ufHwobj0hMCE9PWUuZXh0KSxuP2JyKHsuLi5lLGFsZzp0LGV4dDohMX0pOnRyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBzcignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBicih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxuKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbbl09ZX1yZXR1cm4gY1tuXX19dmFyIExyPXtleHBvcnRzOnt9fSxIcj17ZXhwb3J0czp7fX0sTXI9QShqbik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgbj1NcixyPW4uQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHIoZSx0LG4pfXIuZnJvbSYmci5hbGxvYyYmci5hbGxvY1Vuc2FmZSYmci5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGkobix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpKHIsbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlLHQsbil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9cihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIG4/aS5maWxsKHQsbik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19KEhyLEhyLmV4cG9ydHMpO3ZhciBOcj02NTUzNixqcj00Mjk0OTY3Mjk1O3ZhciBxcj1Ici5leHBvcnRzLkJ1ZmZlcix4cj1FLmNyeXB0b3x8RS5tc0NyeXB0bzt4ciYmeHIuZ2V0UmFuZG9tVmFsdWVzP0xyLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPmpyKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIG49cXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+TnIpZm9yKHZhciByPTA7cjxlO3IrPU5yKXhyLmdldFJhbmRvbVZhbHVlcyhuLnNsaWNlKHIscitOcikpO2Vsc2UgeHIuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB2ZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwsbil9KSk7cmV0dXJuIG59OkxyLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBLcj1Mci5leHBvcnRzO2NsYXNzIEJye2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gWW4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIFluLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIFp0LmZyb20oR24oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gS3IoZSl9dmVyaWZ5Snd0KGUsdCxuLHIsaSxvLHMpe3JldHVybiBJcihlLChhPXtrZXlzOlt0XX0sVXIucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBVcihhKSkpLHthbGdvcml0aG1zOm4sYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9Pnt2YXIgdDtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1DUllQVE8tVVRJTFMtVkotSVYwMSIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUucmVhc29uKSYmdm9pZCAwIT09dD90OkpTT04uc3RyaW5naWZ5KGUpLGAke251bGw9PWU/dm9pZCAwOmUuY29kZX0gJHtudWxsPT1lP3ZvaWQgMDplLmNsYWltfWApKX0pKTt2YXIgYX19b3JpZ2luLHkuU2Vzc2lvblN0b3JhZ2U7Y2xhc3MgSnJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYobi5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KG4uZXhwaXJlc19pbiksbz1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShvKSl9fSkpfWdldFJlZnJlc2hUaW1lb3V0VGltZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk/SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk6LTF9KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodClyZXR1cm4gdm9pZCBjbGVhclRpbWVvdXQodCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTstMSE9PWUmJmNsZWFyVGltZW91dChlKX0pKX19Y2xhc3MgRnJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dH1lbmFibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5lbmFibGVIYW5kbGVyKSYmZS5lbmFibGVIYW5kbGVyKCl9ZGlzYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmRpc2FibGVIYW5kbGVyKSYmZS5kaXNhYmxlSGFuZGxlcigpfWluaXRpYWxpemVTZXNzaW9uTWFuZ2VyKGUsdCxuLHIsaSl7dmFyIG8scyxhO2kuaW5pdGlhbGl6ZShlLmNsaWVudElELG51bGwhPT0obz10LmNoZWNrU2Vzc2lvbklmcmFtZSkmJnZvaWQgMCE9PW8/bzoiIixuLG51bGwhPT0ocz1lLmNoZWNrU2Vzc2lvbkludGVydmFsKSYmdm9pZCAwIT09cz9zOjMsbnVsbCE9PShhPWUuc2Vzc2lvblJlZnJlc2hJbnRlcnZhbCkmJnZvaWQgMCE9PWE/YTozMDAsZS5zaWduSW5SZWRpcmVjdFVSTCxyKX1yZXF1ZXN0Q3VzdG9tR3JhbnQodCxuKXt2YXIgcixpLG87cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcz0hMCxhPSExO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7cz0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7YT0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiLEpTT04uc3RyaW5naWZ5KHQpKSxzfHxhP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuKHQpLHQucmV0dXJuc1Nlc3Npb24/KHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBjKCJTUEEtTUFJTl9USFJFQURfQ0xJRU5ULVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9Z2V0Q3VzdG9tR3JhbnRDb25maWdEYXRhKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKX1yZWZyZXNoQWNjZXNzVG9rZW4odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCB0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO3JldHVybiBlJiYoeWllbGQgdGhpcy5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KSksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1OdC5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2Ugcy5zdG9yYWdlPT09eS5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuc3RvcmFnZSE9PXkuV2ViV29ya2VyPyhOdC5zZXRTaWduT3V0VVJMKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldFNpZ25PdXRVUkwoKSksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpKSxyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmcy5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJnIoKSk6dGhpcy5fc3BhSGVscGVyJiZ0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKX10cnlTaWduSW5TaWxlbnRseSh0LG4scil7dmFyIGk7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZihOdC5pc0luaXRpYWxpemVkU2lsZW50U2lnbkluKCkpcmV0dXJuIHlpZWxkIHIucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpLFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2NvbnN0IG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJwSUZyYW1lIikscz1udWxsPT09KGk9bnVsbD09bz92b2lkIDA6by5jb250ZW50RG9jdW1lbnQpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldEVsZW1lbnRCeUlkKCJwcm9tcHROb25lSUZyYW1lIik7dHJ5e2NvbnN0IGU9eWllbGQgdCgpO3Muc3JjPWV9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfXJldHVybiBuZXcgUHJvbWlzZSgoKHQscik9Pntjb25zdCBpPXNldFRpbWVvdXQoKCgpPT57dCghMSl9KSwxZTQpLG89cz0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLGEsYyx1O2NvbnN0IGw9cy5kYXRhOyJjaGVja19zZXNzaW9uX3NpZ25lZF9vdXQiPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxjbGVhclRpbWVvdXQoaSksdCghMSkpLCJjaGVja19zZXNzaW9uX3NpZ25lZF9pbiI9PShudWxsPT1sP3ZvaWQgMDpsLnR5cGUpJiYobnVsbD09PShlPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29kZSkmJm4obnVsbD09PShhPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29kZSxudWxsPT09KGM9bnVsbD09bD92b2lkIDA6bC5kYXRhKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zZXNzaW9uU3RhdGUsbnVsbD09PSh1PW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhdGUpLnRoZW4oKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChlKX0pKS5jYXRjaCgoZT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxyKGUpfSkpLmZpbmFsbHkoKCgpPT57Y2xlYXJUaW1lb3V0KGkpfSkpfSkpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKX0pKX0pKX1oYW5kbGVTaWduSW4odCxuLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2lmKHlpZWxkIHQoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSk7aWYoZS5zdG9yYWdlIT09eS5XZWJXb3JrZXImJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKSkpcmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChfKSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoUyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUoXyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKFMpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT15LldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0RGVjb2RlZElEUElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldENyeXB0b0hlbHBlcigpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRJRFRva2VuKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfWdldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX0pKX1nZXRJRFBBY2Nlc3NUb2tlbigpe3ZhciB0O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0odD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuYWNjZXNzX3Rva2VufSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPSh7ZGF0YTpuLHBvcnRzOmF9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHUsbCxkLGgsZixwO2NvbnN0IHk9YVswXTtpZihuLnR5cGU9PT12fHxyKXN3aXRjaChuLnR5cGUpe2Nhc2Ugdjp0cnl7Y29uc3QgYT1PYmplY3QuYXNzaWduKHt9LG4uZGF0YSk7cj15aWVsZCgodCxuKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgSHQsaT1uZXcgQnIsbz1uZXcgZyhyLGkpO3lpZWxkIG8uaW5pdGlhbGl6ZSh0KTtjb25zdCBzPW5ldyBKcihvKSxhPW4obyxzKSxjPW8uZ2V0RGF0YUxheWVyKCksdT1MdC5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT11P3ZvaWQgMDp1LmluaXQpJiYoeWllbGQgdS5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KTtlLmF0dGFjaFRva2VuJiYoZS5zaG91bGRBdHRhY2hJRFBBY2Nlc3NUb2tlbj90LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGEuZ2V0SURQQWNjZXNzVG9rZW4oKX1gfSk6dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBhLmdldEFjY2Vzc1Rva2VuKCl9YH0pKX0pKSkpKSx7ZGlzYWJsZUh0dHBIYW5kbGVyOigpPT57YS5kaXNhYmxlSHR0cEhhbmRsZXIodSl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57YS5lbmFibGVIdHRwSGFuZGxlcih1KX0sZ2V0QWNjZXNzVG9rZW46KCk9PmEuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLHI9eWllbGQgby5nZXRQS0NFQ29kZShuKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6cn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldENyeXB0b0hlbHBlcjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0Q3J5cHRvSGVscGVyKCl9KSksZ2V0RGVjb2RlZElEUElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFBJRFRva2VuKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdCh1LHQpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0QWxsKHQsdSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5hLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBhLnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LG4scixpKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbix2b2lkIDAscixpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEN1c3RvbUdyYW50KHQpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0UmVmcmVzaFRpbWVvdXRUaW1lcigpO3JldHVybiBvLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dChlKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBjLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3MuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkscy5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KGEpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKGEsdCksci5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHMpLHIuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGkpLHIuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2sobykseS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnIuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1uP3ZvaWQgMDpuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlLG51bGw9PT0obD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOntjb25zdCBlPW4uZGF0YSx0PW51bGw9PWU/dm9pZCAwOmUuZGF0YTtpZighMD09PShudWxsPT09KHA9bnVsbD09PShmPW4uZGF0YSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZGF0YSl8fHZvaWQgMD09PXA/dm9pZCAwOnAuZm9ybURhdGEpKXtjb25zdCBuPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgZSBpbiB0KSJmb3JtRGF0YSIhPT1lJiZuLmFwcGVuZChlLHRbZV0pO2UuZGF0YT1ufXIuaHR0cFJlcXVlc3QoZSkudGhlbigoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrfWNhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChuLmRhdGEpLnRoZW4oKGU9Pnt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe3kucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXt5LnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7eS5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXl8fHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIHkucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBGcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1),new Worker(N,t)});!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(J||(J={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant",t.SignOutFailed="sign-out-failed"}(H||(H={}));const U="Y2hlY2tTZXNzaW9u";class k{constructor(t,e){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=e}enableHttpHandler(t){(null==t?void 0:t.enableHandler)&&t.enableHandler()}disableHttpHandler(t){(null==t?void 0:t.disableHandler)&&t.disableHandler()}initializeSessionManger(t,e,n,l,i){var c,o,d;i.initialize(t.clientID,null!==(c=e.checkSessionIframe)&&void 0!==c?c:"",n,null!==(o=t.checkSessionInterval)&&void 0!==o?o:3,null!==(d=t.sessionRefreshInterval)&&void 0!==d?d:300,t.signInRedirectURL,l)}requestCustomGrant(t,e){var n,i,c;return l(this,void 0,void 0,(function*(){let o=!0,d=!1;if(null==t?void 0:t.tokenEndpoint){o=!1;for(const e of[...null!==(i=null===(n=yield this._dataLayer.getConfigData())||void 0===n?void 0:n.resourceServerURLs)&&void 0!==i?i:[],t.baseUrl])if(e&&(null===(c=t.tokenEndpoint)||void 0===c?void 0:c.startsWith(e))){d=!0;break}}return t.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),o||d?this._authenticationClient.requestCustomGrant(t).then(n=>l(this,void 0,void 0,(function*(){return e&&"function"==typeof e&&e(t),t.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):n}))).catch(t=>Promise.reject(t)):Promise.reject(new W("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 l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}))}refreshAccessToken(t){return l(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const e=yield this.getCustomGrantConfigData();return e&&(yield this.requestCustomGrant(e,t)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(t){return Promise.reject(t)}}))}httpRequest(t,e,n,i,c,o){var d,a;return l(this,void 0,void 0,(function*(){let r=!1;const u=yield this._dataLayer.getConfigData();for(const t of[...null!==(d=yield null==u?void 0:u.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(t&&(null===(a=null==e?void 0:e.url)||void 0===a?void 0:a.startsWith(t))){r=!0;break}return r?t.request(e).then(t=>Promise.resolve(t)).catch(d=>l(this,void 0,void 0,(function*(){var l,a,r;if(401===(null===(l=null==d?void 0:d.response)||void 0===l?void 0:l.status)||!(null==d?void 0:d.response)){let u;try{u=yield this.refreshAccessToken(o)}catch(l){throw n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},d),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new W("SPA-AUTH_HELPER-HR-SE01",null!==(a=null==l?void 0:l.name)&&void 0!==a?a:"Refresh token request failed.",null!==(r=null==l?void 0:l.message)&&void 0!==r?r:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(u)try{const n=yield t.request(e);return Promise.resolve(n)}catch(l){return n&&("function"==typeof i&&(yield i(l)),"function"==typeof c&&c()),Promise.reject(l)}}return n&&("function"==typeof i&&(yield i(d)),"function"==typeof c&&c()),Promise.reject(d)}))):Promise.reject(new W("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(t,e,n,i,c){var o,d,a;return l(this,void 0,void 0,(function*(){let r=!0;const u=yield this._dataLayer.getConfigData();for(const e of t){let t=!1;for(const n of[...null!==(d=null===(o=yield u)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(n&&(null===(a=e.url)||void 0===a?void 0:a.startsWith(n))){t=!0;break}if(!t){r=!1;break}}const s=[];if(r)return t.forEach(t=>{s.push(e.request(t))}),(null==e?void 0:e.all)&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>l(this,void 0,void 0,(function*(){var o,d,a;if(401===(null===(o=null==t?void 0:t.response)||void 0===o?void 0:o.status)||!(null==t?void 0:t.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(e){throw n&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new W("SPA-AUTH_HELPER-HRA-SE01",null!==(d=null==e?void 0:e.name)&&void 0!==d?d:"Refresh token request failed.",null!==(a=null==e?void 0:e.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return e.all&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>l(this,void 0,void 0,(function*(){return n&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})))}return n&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})));throw new W("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,e,n,i,c){return l(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getConfigData();if(o.storage===J.BrowserMemory&&o.enablePKCE&&e){const t=x.getPKCE(C.extractPKCEKeyFromStateParam(e));yield this._authenticationClient.setPKCECode(C.extractPKCEKeyFromStateParam(e),t)}else o.storage===J.WebWorker&&i&&(yield this._authenticationClient.setPKCECode(i,null!=c?c:""));return t?this._authenticationClient.requestAccessToken(t,null!=e?e:"",null!=c?c:"").then(()=>l(this,void 0,void 0,(function*(){return o.storage!==J.WebWorker?(x.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&o.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}))).catch(t=>Promise.reject(t)):Promise.reject(new W("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(t,e,n){var i;return l(this,void 0,void 0,(function*(){if(x.isInitializedSilentSignIn())return yield n.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById("rpIFrame"),o=null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById("promptNoneIFrame");try{const e=yield t();o.src=e}catch(t){return Promise.reject(t)}return new Promise((t,n)=>{const i=setTimeout(()=>{t(!1)},1e4),c=o=>l(this,void 0,void 0,(function*(){var l,d,a,r;const u=o.data;"check_session_signed_out"==(null==u?void 0:u.type)&&(window.removeEventListener("message",c),clearTimeout(i),t(!1)),"check_session_signed_in"==(null==u?void 0:u.type)&&(null===(l=null==u?void 0:u.data)||void 0===l?void 0:l.code)&&e(null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.code,null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.sessionState,null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.state).then(e=>{window.removeEventListener("message",c),t(e)}).catch(t=>{window.removeEventListener("message",c),n(t)}).finally(()=>{clearTimeout(i)})}));window.addEventListener("message",c)})}))}handleSignIn(t,e,n){return l(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!==J.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&e(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const i=new URL(window.location.href).searchParams.get("error"),c=new URL(window.location.href).searchParams.get("error_description");if(i){const t=new URL(window.location.href);throw t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),new W("SPA-AUTH_HELPER-SI-SE01",i,null!=c?c:"")}if(l.storage===J.WebWorker&&n){const t=yield n();if(t)return t}}))}getBasicUserInfo(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var t;return l(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData())||void 0===t?void 0:t.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return l(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class B{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(t){return l(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData();if(e.refresh_token){const n=parseInt(e.expires_in),i=setTimeout(()=>l(this,void 0,void 0,(function*(){yield t.refreshAccessToken()})),1e3*(n<=10?n:n-10));yield this._dataLayer.setTemporaryDataParameter(Z,JSON.stringify(i))}}))}getRefreshTimeoutTimer(){return l(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(Z))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Z)):-1}))}clearRefreshTokenTimeout(t){return l(this,void 0,void 0,(function*(){if(t)return void clearTimeout(t);const e=yield this.getRefreshTimeoutTimer();-1!==e&&clearTimeout(e)}))}}class F{constructor(){}static generateSuccessMessage(t){return{blob:(null==t?void 0:t.data)instanceof Blob?null==t?void 0:t.data:null,data:JSON.stringify(null!=t?t:""),success:!0}}static generateFailureMessage(t){return(null==t?void 0:t.toJSON)&&delete t.toJSON,{error:JSON.stringify(null!=t?t:""),success:!1}}}class x{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(t){var e;return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:""}static setPKCE(t,e){sessionStorage.setItem(t,e)}static setSignOutURL(t){sessionStorage.setItem(G,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(G))&&void 0!==t?t:""}static removePKCE(t){sessionStorage.removeItem(t)}static canContinueSignIn(t,e){return!(t&&!x.hasErrorInURL()&&!x.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return x.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!x.hasErrorInURL()&&!x.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){return l(this,void 0,void 0,(function*(){if(K.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),yield K.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(K.didSignOutFail(window.location.href)){const t=new URL(window.location.href),e=t.searchParams.get("error"),n=t.searchParams.get("error_description"),l=window.location.href.split("?")[0];return history.pushState({},document.title,l),{description:null!=n?n:"",error:null!=e?e:""}}return!1}static isSilentStatePresentInURL(){var t;const e=new URL(window.location.href).searchParams.get("state");return null!==(t=null==e?void 0:e.includes("sign-in-silently"))&&void 0!==t&&t}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){const e=new URL(t);return!!e.searchParams.get("error")&&e.searchParams.get("state")!==g}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return l(this,void 0,void 0,(function*(){const e=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*e))}))}}const T=(()=>{let t,e,n,i,c,o,d,a,r,u,s;const Z=(l,d,a,r,u,Z,m)=>{t=l,e=d,n=a,i=r,c=Z,o=u,s=m,i>-1&&b(),o>-1&&(u=setInterval(()=>{p()},1e3*o))},b=()=>l(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const d="opIFrame",r=document.getElementById("rpIFrame");(null===(o=null==r?void 0:r.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=e+"?client_id="+t+"&redirect_uri="+c,a=setInterval((function(){var i;return l(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n=`${t} ${l}`,c=document.getElementById("rpIFrame"),o=(null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(d)).contentWindow;null==o||o.postMessage(n,e)}}))}),1e3*i),h()})),m=()=>{clearInterval(a),clearInterval(void 0)},h=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var n;return l(this,void 0,void 0,(function*(){!e||(null==e?void 0:e.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield d():"changed"===t.data&&p())}))}),!1)},p=()=>l(void 0,void 0,void 0,(function*(){var t;const e=document.getElementById("rpIFrame"),n=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");if(x.canSendPromptNoneRequest()){x.setPromptNoneRequestSent(!0);const t=e=>{var n,l,i;"set_session_state_from_iframe"===(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)&&(u(null!==(i=null===(l=null==e?void 0:e.data)||void 0===l?void 0:l.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))};r!==J.BrowserMemory&&r!==J.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield s({prompt:"none",responseMode:"query",state:U});n.src=e}})),G=t=>l(void 0,void 0,void 0,(function*(){var e,n;const l=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(I),c=window.parent.parent;if(null!==l&&(l.includes(U)||l.includes("sign-in-silently"))){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if(l.includes("sign-in-silently")){const t={data:{code:o,sessionState:null!=i?i:"",state:l},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(r===J.LocalStorage||r===J.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(n=null===(e=null===window||void 0===window?void 0:window.parent)||void 0===e?void 0:e.parent)||void 0===n||n.postMessage(t)}return x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}{if(l.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}x.setPromptNoneRequestSent(!1);const t=yield d();return yield K.clearUserSessionData(),c.location.href=t,window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}}return!1}));return(t,e,n)=>l(void 0,void 0,void 0,(function*(){var l;let i=document.createElement("iframe");i.setAttribute("id","rpIFrame"),i.style.display="none";let c=!1;for(i.onload=()=>{var t,e,n,l;i=document.getElementById("rpIFrame");const o=null==i?void 0:i.contentDocument,d=null==o?void 0:o.createElement("iframe");d&&(d.setAttribute("id","opIFrame"),d.style.display="none");const a=null==o?void 0:o.createElement("iframe");a&&(a.setAttribute("id","promptNoneIFrame"),a.style.display="none"),d&&(null===(e=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(d)),a&&(null===(l=null===(n=null==i?void 0:i.contentDocument)||void 0===n?void 0:n.body)||void 0===l||l.appendChild(a)),c=!0},null===(l=null===document||void 0===document?void 0:document.body)||void 0===l||l.appendChild(i),d=t,r=e,u=n;!1===c;)yield new Promise(t=>setTimeout(t,1));return{initialize:Z,receivePromptNoneResponse:G,reset:m}}))})();var A="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var z={exports:{}},w=function(t,e){return function(){for(var n=new Array(arguments.length),l=0;l<n.length;l++)n[l]=arguments[l];return t.apply(e,n)}},Q=w,P=Object.prototype.toString;function j(t){return Array.isArray(t)}function M(t){return void 0===t}function E(t){return"[object ArrayBuffer]"===P.call(t)}function D(t){return null!==t&&"object"==typeof t}function O(t){if("[object Object]"!==P.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function _(t){return"[object Function]"===P.call(t)}function q(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),j(t))for(var n=0,l=t.length;n<l;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var $={isArray:j,isArrayBuffer:E,isBuffer:function(t){return null!==t&&!M(t)&&null!==t.constructor&&!M(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===P.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&E(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:D,isPlainObject:O,isUndefined:M,isDate:function(t){return"[object Date]"===P.call(t)},isFile:function(t){return"[object File]"===P.call(t)},isBlob:function(t){return"[object Blob]"===P.call(t)},isFunction:_,isStream:function(t){return D(t)&&_(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===P.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:q,merge:function t(){var e={};function n(n,l){O(e[l])&&O(n)?e[l]=t(e[l],n):O(n)?e[l]=t({},n):j(n)?e[l]=n.slice():e[l]=n}for(var l=0,i=arguments.length;l<i;l++)q(arguments[l],n);return e},extend:function(t,e,n){return q(e,(function(e,l){t[l]=n&&"function"==typeof e?Q(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}},tt=$;function et(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var nt=function(t,e,n){if(!e)return t;var l;if(n)l=n(e);else if(tt.isURLSearchParams(e))l=e.toString();else{var i=[];tt.forEach(e,(function(t,e){null!=t&&(tt.isArray(t)?e+="[]":t=[t],tt.forEach(t,(function(t){tt.isDate(t)?t=t.toISOString():tt.isObject(t)&&(t=JSON.stringify(t)),i.push(et(e)+"="+et(t))})))})),l=i.join("&")}if(l){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+l}return t},lt=$;function it(){this.handlers=[]}it.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},it.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},it.prototype.forEach=function(t){lt.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var ct=it,ot=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function dt(){throw new Error("setTimeout has not been defined")}function at(){throw new Error("clearTimeout has not been defined")}var rt=dt,ut=at;function st(t){if(rt===setTimeout)return setTimeout(t,0);if((rt===dt||!rt)&&setTimeout)return rt=setTimeout,setTimeout(t,0);try{return rt(t,0)}catch(e){try{return rt.call(null,t,0)}catch(e){return rt.call(this,t,0)}}}"function"==typeof ot.setTimeout&&(rt=setTimeout),"function"==typeof ot.clearTimeout&&(ut=clearTimeout);var Zt,bt=[],mt=!1,ht=-1;function pt(){mt&&Zt&&(mt=!1,Zt.length?bt=Zt.concat(bt):ht=-1,bt.length&&It())}function It(){if(!mt){var t=st(pt);mt=!0;for(var e=bt.length;e;){for(Zt=bt,bt=[];++ht<e;)Zt&&Zt[ht].run();ht=-1,e=bt.length}Zt=null,mt=!1,function(t){if(ut===clearTimeout)return clearTimeout(t);if((ut===at||!ut)&&clearTimeout)return ut=clearTimeout,clearTimeout(t);try{ut(t)}catch(e){try{return ut.call(null,t)}catch(e){return ut.call(this,t)}}}(t)}}function Gt(t,e){this.fun=t,this.array=e}function gt(){}Gt.prototype.run=function(){this.fun.apply(null,this.array)};var Xt=gt,yt=gt,Vt=gt,Wt=gt,Ct=gt,Rt=gt,ft=gt,St=ot.performance||{},vt=St.now||St.mozNow||St.msNow||St.oNow||St.webkitNow||function(){return(new Date).getTime()},Yt=new Date,Kt={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];bt.push(new Gt(t,e)),1!==bt.length||mt||st(It)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Xt,addListener:yt,once:Vt,off:Wt,removeListener:Ct,removeAllListeners:Rt,emit:ft,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*vt.call(St),n=Math.floor(e),l=Math.floor(e%1*1e9);return t&&(n-=t[0],(l-=t[1])<0&&(n--,l+=1e9)),[n,l]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-Yt)/1e3}},Nt=$,Jt=function(t,e,n,l,i){return t.config=e,n&&(t.code=n),t.request=l,t.response=i,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},t},Ht={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Lt=Jt,Ut=function(t,e,n,l,i){var c=new Error(t);return Lt(c,e,n,l,i)},kt=Ut,Bt=$,Ft=Bt.isStandardBrowserEnv()?{write:function(t,e,n,l,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Bt.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),Bt.isString(l)&&o.push("path="+l),Bt.isString(i)&&o.push("domain="+i),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},xt=$,Tt=["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"],At=$,zt=At.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function l(t){var l=t;return e&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=l(window.location.href),function(e){var n=At.isString(e)?l(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function wt(t){this.message=t}wt.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},wt.prototype.__CANCEL__=!0;var Qt=wt,Pt=$,jt=Ft,Mt=nt,Et=zt,Dt=Ut,Ot=Ht,_t=Qt,qt=$,$t=function(t,e){Nt.forEach(t,(function(n,l){l!==e&&l.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[l])}))},te=Jt,ee={"Content-Type":"application/x-www-form-urlencoded"};function ne(t,e){!qt.isUndefined(t)&&qt.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var le,ie={transitional:Ht,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Kt&&"[object process]"===Object.prototype.toString.call(Kt))&&(le=function(t){return new Promise((function(e,n){var l,i=t.data,c=t.headers,o=t.responseType;function d(){t.cancelToken&&t.cancelToken.unsubscribe(l),t.signal&&t.signal.removeEventListener("abort",l)}Pt.isFormData(i)&&delete c["Content-Type"];var a=new XMLHttpRequest;if(t.auth){var r=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(r+":"+u)}var s=function(t,e){return t&&!function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}(e)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}(t.baseURL,t.url);function Z(){if(a){var l="getAllResponseHeaders"in a?function(t){var e,n,l,i={};return t?(xt.forEach(t.split("\n"),(function(t){if(l=t.indexOf(":"),e=xt.trim(t.substr(0,l)).toLowerCase(),n=xt.trim(t.substr(l+1)),e){if(i[e]&&Tt.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i}(a.getAllResponseHeaders()):null;(function(t,e,n){var l=n.config.validateStatus;n.status&&l&&!l(n.status)?e(kt("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)})((function(t){e(t),d()}),(function(t){n(t),d()}),{data:o&&"text"!==o&&"json"!==o?a.response:a.responseText,status:a.status,statusText:a.statusText,headers:l,config:t,request:a}),a=null}}if(a.open(t.method.toUpperCase(),Mt(s,t.params,t.paramsSerializer),!0),a.timeout=t.timeout,"onloadend"in a?a.onloadend=Z:a.onreadystatechange=function(){a&&4===a.readyState&&(0!==a.status||a.responseURL&&0===a.responseURL.indexOf("file:"))&&setTimeout(Z)},a.onabort=function(){a&&(n(Dt("Request aborted",t,"ECONNABORTED",a)),a=null)},a.onerror=function(){n(Dt("Network Error",t,null,a)),a=null},a.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",l=t.transitional||Ot;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(Dt(e,t,l.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",a)),a=null},Pt.isStandardBrowserEnv()){var b=(t.withCredentials||Et(s))&&t.xsrfCookieName?jt.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in a&&Pt.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:a.setRequestHeader(e,t)})),Pt.isUndefined(t.withCredentials)||(a.withCredentials=!!t.withCredentials),o&&"json"!==o&&(a.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&a.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&a.upload&&a.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(l=function(t){a&&(n(!t||t&&t.type?new _t("canceled"):t),a.abort(),a=null)},t.cancelToken&&t.cancelToken.subscribe(l),t.signal&&(t.signal.aborted?l():t.signal.addEventListener("abort",l))),i||(i=null),a.send(i)}))}),le),transformRequest:[function(t,e){return $t(e,"Accept"),$t(e,"Content-Type"),qt.isFormData(t)||qt.isArrayBuffer(t)||qt.isBuffer(t)||qt.isStream(t)||qt.isFile(t)||qt.isBlob(t)?t:qt.isArrayBufferView(t)?t.buffer:qt.isURLSearchParams(t)?(ne(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):qt.isObject(t)||e&&"application/json"===e["Content-Type"]?(ne(e,"application/json"),function(t,e,n){if(qt.isString(t))try{return(0,JSON.parse)(t),qt.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||ie.transitional,n=e&&e.silentJSONParsing,l=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||l&&qt.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw te(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};qt.forEach(["delete","get","head"],(function(t){ie.headers[t]={}})),qt.forEach(["post","put","patch"],(function(t){ie.headers[t]=qt.merge(ee)}));var ce=ie,oe=$,de=ce,ae=function(t){return!(!t||!t.__CANCEL__)},re=$,ue=function(t,e,n){var l=this||de;return oe.forEach(n,(function(n){t=n.call(l,t,e)})),t},se=ae,Ze=ce,be=Qt;function me(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new be("canceled")}var he=$,pe=function(t,e){e=e||{};var n={};function l(t,e){return he.isPlainObject(t)&&he.isPlainObject(e)?he.merge(t,e):he.isPlainObject(e)?he.merge({},e):he.isArray(e)?e.slice():e}function i(n){return he.isUndefined(e[n])?he.isUndefined(t[n])?void 0:l(void 0,t[n]):l(t[n],e[n])}function c(t){if(!he.isUndefined(e[t]))return l(void 0,e[t])}function o(n){return he.isUndefined(e[n])?he.isUndefined(t[n])?void 0:l(void 0,t[n]):l(void 0,e[n])}function d(n){return n in e?l(t[n],e[n]):n in t?l(void 0,t[n]):void 0}var a={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:d};return he.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=a[t]||i,l=e(t);he.isUndefined(l)&&e!==d||(n[t]=l)})),n},Ie={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Ie[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var Ge={};Ie.transitional=function(t,e,n){function l(t,e){return"[Axios v0.26.1] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,c){if(!1===t)throw new Error(l(i," has been removed"+(e?" in "+e:"")));return e&&!Ge[i]&&(Ge[i]=!0,console.warn(l(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,c)}};var ge=$,Xe=nt,ye=ct,Ve=function(t){return me(t),t.headers=t.headers||{},t.data=ue.call(t,t.data,t.headers,t.transformRequest),t.headers=re.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),re.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||Ze.adapter)(t).then((function(e){return me(t),e.data=ue.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return se(e)||(me(t),e&&e.response&&(e.response.data=ue.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},We=pe,Ce={assertOptions:function(t,e,n){if("object"!=typeof t)throw new TypeError("options must be an object");for(var l=Object.keys(t),i=l.length;i-- >0;){var c=l[i],o=e[c];if(o){var d=t[c],a=void 0===d||o(d,c,t);if(!0!==a)throw new TypeError("option "+c+" must be "+a)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:Ie},Re=Ce.validators;function fe(t){this.defaults=t,this.interceptors={request:new ye,response:new ye}}fe.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=We(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&Ce.assertOptions(n,{silentJSONParsing:Re.transitional(Re.boolean),forcedJSONParsing:Re.transitional(Re.boolean),clarifyTimeoutError:Re.transitional(Re.boolean)},!1);var l=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,l.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var d=[Ve,void 0];for(Array.prototype.unshift.apply(d,l),d=d.concat(o),c=Promise.resolve(e);d.length;)c=c.then(d.shift(),d.shift());return c}for(var a=e;l.length;){var r=l.shift(),u=l.shift();try{a=r(a)}catch(t){u(t);break}}try{c=Ve(a)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},fe.prototype.getUri=function(t){return t=We(this.defaults,t),Xe(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},ge.forEach(["delete","get","head","options"],(function(t){fe.prototype[t]=function(e,n){return this.request(We(n||{},{method:t,url:e,data:(n||{}).data}))}})),ge.forEach(["post","put","patch"],(function(t){fe.prototype[t]=function(e,n,l){return this.request(We(l||{},{method:t,url:e,data:n}))}}));var Se=fe,ve=Qt;function Ye(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,l=n._listeners.length;for(e=0;e<l;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,l=new Promise((function(t){n.subscribe(t),e=t})).then(t);return l.cancel=function(){n.unsubscribe(e)},l},t((function(t){n.reason||(n.reason=new ve(t),e(n.reason))}))}Ye.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Ye.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Ye.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Ye.source=function(){var t;return{token:new Ye((function(e){t=e})),cancel:t}};var Ke=Ye,Ne=$,Je=$,He=w,Le=Se,Ue=pe,ke=function t(e){var n=new Le(e),l=He(Le.prototype.request,n);return Je.extend(l,Le.prototype,n),Je.extend(l,n),l.create=function(n){return t(Ue(e,n))},l}(ce);ke.Axios=Le,ke.Cancel=Qt,ke.CancelToken=Ke,ke.isCancel=ae,ke.VERSION="0.26.1",ke.all=function(t){return Promise.all(t)},ke.spread=function(t){return function(e){return t.apply(null,e)}},ke.isAxiosError=function(t){return Ne.isObject(t)&&!0===t.isAxiosError},z.exports=ke,z.exports.default=ke;var Be,Fe=z.exports;let xe=Be=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=Fe.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Be),this.axiosInstance.interceptors.request.use(t=>l(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=Fe.all,this.axiosInstance.spread=Fe.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(t){return l(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const e=null==t?void 0:t.data,n=new FormData;Object.keys(e).forEach(t=>{n.append(t,e[t])}),t.data=n}return t.startTimeInMs=(new Date).getTime(),Be.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Be.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Be.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,e){return l(this,void 0,void 0,(function*(){Be.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){Be.isHandlerEnabled=!0}disableHandler(){Be.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Be.DEFAULT_HANDLER_DISABLE_TIMEOUT){Be.isHandlerEnabled=!1,setTimeout(()=>{Be.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};xe.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,xe=Be=function(t,e,n,l){var i,c=arguments.length,o=c<3?e:null===l?l=Object.getOwnPropertyDescriptor(e,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,l);else for(var d=t.length-1;d>=0;d--)(i=t[d])&&(o=(c<3?i(o):c>3?i(e,n,o):i(e,n))||o);return c>3&&o&&Object.defineProperty(e,n,o),o}([t=>{}],xe);class Te{setData(t,e){return l(this,void 0,void 0,(function*(){localStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Ae{constructor(){this._data=new Map}setData(t,e){return l(this,void 0,void 0,(function*(){this._data.set(t,e)}))}getData(t){var e,n;return l(this,void 0,void 0,(function*(){return null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class ze{setData(t,e){return l(this,void 0,void 0,(function*(){sessionStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}var we=[],Qe=[],Pe="undefined"!=typeof Uint8Array?Uint8Array:Array,je=!1;function Me(){je=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)we[e]=t[e],Qe[t.charCodeAt(e)]=e;Qe["-".charCodeAt(0)]=62,Qe["_".charCodeAt(0)]=63}function Ee(t,e,n){for(var l,i,c=[],o=e;o<n;o+=3)l=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(we[(i=l)>>18&63]+we[i>>12&63]+we[i>>6&63]+we[63&i]);return c.join("")}function De(t){var e;je||Me();for(var n=t.length,l=n%3,i="",c=[],o=16383,d=0,a=n-l;d<a;d+=o)c.push(Ee(t,d,d+o>a?a:d+o));return 1===l?(e=t[n-1],i+=we[e>>2],i+=we[e<<4&63],i+="=="):2===l&&(e=(t[n-2]<<8)+t[n-1],i+=we[e>>10],i+=we[e>>4&63],i+=we[e<<2&63],i+="="),c.push(i),c.join("")}function Oe(t,e,n,l,i){var c,o,d=8*i-l-1,a=(1<<d)-1,r=a>>1,u=-7,s=n?i-1:0,Z=n?-1:1,b=t[e+s];for(s+=Z,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[e+s],s+=Z,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=l;u>0;o=256*o+t[e+s],s+=Z,u-=8);if(0===c)c=1-r;else{if(c===a)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,l),c-=r}return(b?-1:1)*o*Math.pow(2,c-l)}function _e(t,e,n,l,i,c){var o,d,a,r=8*c-i-1,u=(1<<r)-1,s=u>>1,Z=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=l?0:c-1,m=l?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(d=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-o))<1&&(o--,a*=2),(e+=o+s>=1?Z/a:Z*Math.pow(2,1-s))*a>=2&&(o++,a/=2),o+s>=u?(d=0,o=u):o+s>=1?(d=(e*a-1)*Math.pow(2,i),o+=s):(d=e*Math.pow(2,s-1)*Math.pow(2,i),o=0));i>=8;t[n+b]=255&d,b+=m,d/=256,i-=8);for(o=o<<i|d,r+=i;r>0;t[n+b]=255&o,b+=m,o/=256,r-=8);t[n+b-m]|=128*h}var qe={}.toString,$e=Array.isArray||function(t){return"[object Array]"==qe.call(t)};ln.TYPED_ARRAY_SUPPORT=void 0===ot.TYPED_ARRAY_SUPPORT||ot.TYPED_ARRAY_SUPPORT;var tn=en();function en(){return ln.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function nn(t,e){if(en()<e)throw new RangeError("Invalid typed array length");return ln.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=ln.prototype:(null===t&&(t=new ln(e)),t.length=e),t}function ln(t,e,n){if(!(ln.TYPED_ARRAY_SUPPORT||this instanceof ln))return new ln(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return dn(this,t)}return cn(this,t,e,n)}function cn(t,e,n,l){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,l){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(l||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===l?new Uint8Array(e):void 0===l?new Uint8Array(e,n):new Uint8Array(e,n,l),ln.TYPED_ARRAY_SUPPORT?(t=e).__proto__=ln.prototype:t=an(t,e),t}(t,e,n,l):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!ln.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var l=0|sn(e,n),i=(t=nn(t,l)).write(e,n);return i!==l&&(t=t.slice(0,i)),t}(t,e,n):function(t,e){if(un(e)){var n=0|rn(e.length);return 0===(t=nn(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(l=e.length)!=l?nn(t,0):an(t,e);if("Buffer"===e.type&&$e(e.data))return an(t,e.data)}var l;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function on(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function dn(t,e){if(on(e),t=nn(t,e<0?0:0|rn(e)),!ln.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function an(t,e){var n=e.length<0?0:0|rn(e.length);t=nn(t,n);for(var l=0;l<n;l+=1)t[l]=255&e[l];return t}function rn(t){if(t>=en())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+en().toString(16)+" bytes");return 0|t}function un(t){return!(null==t||!t._isBuffer)}function sn(t,e){if(un(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var l=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Bn(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Fn(t).length;default:if(l)return Bn(t).length;e=(""+e).toLowerCase(),l=!0}}function Zn(t,e,n){var l=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return fn(this,e,n);case"utf8":case"utf-8":return Wn(this,e,n);case"ascii":return Cn(this,e,n);case"latin1":case"binary":return Rn(this,e,n);case"base64":return Vn(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Sn(this,e,n);default:if(l)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),l=!0}}function bn(t,e,n){var l=t[e];t[e]=t[n],t[n]=l}function mn(t,e,n,l,i){if(0===t.length)return-1;if("string"==typeof n?(l=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=ln.from(e,l)),un(e))return 0===e.length?-1:hn(t,e,n,l,i);if("number"==typeof e)return e&=255,ln.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):hn(t,[e],n,l,i);throw new TypeError("val must be string, number or Buffer")}function hn(t,e,n,l,i){var c,o=1,d=t.length,a=e.length;if(void 0!==l&&("ucs2"===(l=String(l).toLowerCase())||"ucs-2"===l||"utf16le"===l||"utf-16le"===l)){if(t.length<2||e.length<2)return-1;o=2,d/=2,a/=2,n/=2}function r(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(c=n;c<d;c++)if(r(t,c)===r(e,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===a)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(n+a>d&&(n=d-a),c=n;c>=0;c--){for(var s=!0,Z=0;Z<a;Z++)if(r(t,c+Z)!==r(e,Z)){s=!1;break}if(s)return c}return-1}function pn(t,e,n,l){n=Number(n)||0;var i=t.length-n;l?(l=Number(l))>i&&(l=i):l=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");l>c/2&&(l=c/2);for(var o=0;o<l;++o){var d=parseInt(e.substr(2*o,2),16);if(isNaN(d))return o;t[n+o]=d}return o}function In(t,e,n,l){return xn(Bn(e,t.length-n),t,n,l)}function Gn(t,e,n,l){return xn(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,l)}function gn(t,e,n,l){return Gn(t,e,n,l)}function Xn(t,e,n,l){return xn(Fn(e),t,n,l)}function yn(t,e,n,l){return xn(function(t,e){for(var n,l,i,c=[],o=0;o<t.length&&!((e-=2)<0);++o)l=(n=t.charCodeAt(o))>>8,i=n%256,c.push(i),c.push(l);return c}(e,t.length-n),t,n,l)}function Vn(t,e,n){return 0===e&&n===t.length?De(t):De(t.slice(e,n))}function Wn(t,e,n){n=Math.min(t.length,n);for(var l=[],i=e;i<n;){var c,o,d,a,r=t[i],u=null,s=r>239?4:r>223?3:r>191?2:1;if(i+s<=n)switch(s){case 1:r<128&&(u=r);break;case 2:128==(192&(c=t[i+1]))&&(a=(31&r)<<6|63&c)>127&&(u=a);break;case 3:c=t[i+1],o=t[i+2],128==(192&c)&&128==(192&o)&&(a=(15&r)<<12|(63&c)<<6|63&o)>2047&&(a<55296||a>57343)&&(u=a);break;case 4:c=t[i+1],o=t[i+2],d=t[i+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(a=(15&r)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&a<1114112&&(u=a)}null===u?(u=65533,s=1):u>65535&&(u-=65536,l.push(u>>>10&1023|55296),u=56320|1023&u),l.push(u),i+=s}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var n="",l=0;l<e;)n+=String.fromCharCode.apply(String,t.slice(l,l+=4096));return n}(l)}function Cn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(127&t[i]);return l}function Rn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(t[i]);return l}function fn(t,e,n){var l=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>l)&&(n=l);for(var i="",c=e;c<n;++c)i+=kn(t[c]);return i}function Sn(t,e,n){for(var l=t.slice(e,n),i="",c=0;c<l.length;c+=2)i+=String.fromCharCode(l[c]+256*l[c+1]);return i}function vn(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function Yn(t,e,n,l,i,c){if(!un(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<c)throw new RangeError('"value" argument is out of bounds');if(n+l>t.length)throw new RangeError("Index out of range")}function Kn(t,e,n,l){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-n,2);i<c;++i)t[n+i]=(e&255<<8*(l?i:1-i))>>>8*(l?i:1-i)}function Nn(t,e,n,l){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-n,4);i<c;++i)t[n+i]=e>>>8*(l?i:3-i)&255}function Jn(t,e,n,l,i,c){if(n+l>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function Hn(t,e,n,l,i){return i||Jn(t,0,n,4),_e(t,e,n,l,23,4),n+4}function Ln(t,e,n,l,i){return i||Jn(t,0,n,8),_e(t,e,n,l,52,8),n+8}ln.poolSize=8192,ln._augment=function(t){return t.__proto__=ln.prototype,t},ln.from=function(t,e,n){return cn(null,t,e,n)},ln.TYPED_ARRAY_SUPPORT&&(ln.prototype.__proto__=Uint8Array.prototype,ln.__proto__=Uint8Array),ln.alloc=function(t,e,n){return function(t,e,n,l){return on(e),e<=0?nn(t,e):void 0!==n?"string"==typeof l?nn(t,e).fill(n,l):nn(t,e).fill(n):nn(t,e)}(null,t,e,n)},ln.allocUnsafe=function(t){return dn(null,t)},ln.allocUnsafeSlow=function(t){return dn(null,t)},ln.isBuffer=Tn,ln.compare=function(t,e){if(!un(t)||!un(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,l=e.length,i=0,c=Math.min(n,l);i<c;++i)if(t[i]!==e[i]){n=t[i],l=e[i];break}return n<l?-1:l<n?1:0},ln.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},ln.concat=function(t,e){if(!$e(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return ln.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var l=ln.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var c=t[n];if(!un(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(l,i),i+=c.length}return l},ln.byteLength=sn,ln.prototype._isBuffer=!0,ln.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)bn(this,e,e+1);return this},ln.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)bn(this,e,e+3),bn(this,e+1,e+2);return this},ln.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)bn(this,e,e+7),bn(this,e+1,e+6),bn(this,e+2,e+5),bn(this,e+3,e+4);return this},ln.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Wn(this,0,t):Zn.apply(this,arguments)},ln.prototype.equals=function(t){if(!un(t))throw new TypeError("Argument must be a Buffer");return this===t||0===ln.compare(this,t)},ln.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},ln.prototype.compare=function(t,e,n,l,i){if(!un(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===l&&(l=0),void 0===i&&(i=this.length),e<0||n>t.length||l<0||i>this.length)throw new RangeError("out of range index");if(l>=i&&e>=n)return 0;if(l>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(l>>>=0),o=(n>>>=0)-(e>>>=0),d=Math.min(c,o),a=this.slice(l,i),r=t.slice(e,n),u=0;u<d;++u)if(a[u]!==r[u]){c=a[u],o=r[u];break}return c<o?-1:o<c?1:0},ln.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},ln.prototype.indexOf=function(t,e,n){return mn(this,t,e,n,!0)},ln.prototype.lastIndexOf=function(t,e,n){return mn(this,t,e,n,!1)},ln.prototype.write=function(t,e,n,l){if(void 0===e)l="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)l=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===l&&(l="utf8")):(l=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");l||(l="utf8");for(var c=!1;;)switch(l){case"hex":return pn(this,t,e,n);case"utf8":case"utf-8":return In(this,t,e,n);case"ascii":return Gn(this,t,e,n);case"latin1":case"binary":return gn(this,t,e,n);case"base64":return Xn(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return yn(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+l);l=(""+l).toLowerCase(),c=!0}},ln.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},ln.prototype.slice=function(t,e){var n,l=this.length;if((t=~~t)<0?(t+=l)<0&&(t=0):t>l&&(t=l),(e=void 0===e?l:~~e)<0?(e+=l)<0&&(e=0):e>l&&(e=l),e<t&&(e=t),ln.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=ln.prototype;else{var i=e-t;n=new ln(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+t]}return n},ln.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l},ln.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t+--e],i=1;e>0&&(i*=256);)l+=this[t+--e]*i;return l},ln.prototype.readUInt8=function(t,e){return e||vn(t,1,this.length),this[t]},ln.prototype.readUInt16LE=function(t,e){return e||vn(t,2,this.length),this[t]|this[t+1]<<8},ln.prototype.readUInt16BE=function(t,e){return e||vn(t,2,this.length),this[t]<<8|this[t+1]},ln.prototype.readUInt32LE=function(t,e){return e||vn(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},ln.prototype.readUInt32BE=function(t,e){return e||vn(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},ln.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l>=(i*=128)&&(l-=Math.pow(2,8*e)),l},ln.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||vn(t,e,this.length);for(var l=e,i=1,c=this[t+--l];l>0&&(i*=256);)c+=this[t+--l]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},ln.prototype.readInt8=function(t,e){return e||vn(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},ln.prototype.readInt16LE=function(t,e){e||vn(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},ln.prototype.readInt16BE=function(t,e){e||vn(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},ln.prototype.readInt32LE=function(t,e){return e||vn(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},ln.prototype.readInt32BE=function(t,e){return e||vn(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},ln.prototype.readFloatLE=function(t,e){return e||vn(t,4,this.length),Oe(this,t,!0,23,4)},ln.prototype.readFloatBE=function(t,e){return e||vn(t,4,this.length),Oe(this,t,!1,23,4)},ln.prototype.readDoubleLE=function(t,e){return e||vn(t,8,this.length),Oe(this,t,!0,52,8)},ln.prototype.readDoubleBE=function(t,e){return e||vn(t,8,this.length),Oe(this,t,!1,52,8)},ln.prototype.writeUIntLE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Yn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,c=0;for(this[e]=255&t;++c<n&&(i*=256);)this[e+c]=t/i&255;return e+n},ln.prototype.writeUIntBE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Yn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+n},ln.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,1,255,0),ln.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},ln.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,2,65535,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Kn(this,t,e,!0),e+2},ln.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,2,65535,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Kn(this,t,e,!1),e+2},ln.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,4,4294967295,0),ln.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):Nn(this,t,e,!0),e+4},ln.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,4,4294967295,0),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Nn(this,t,e,!1),e+4},ln.prototype.writeIntLE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Yn(this,t,e,n,i-1,-i)}var c=0,o=1,d=0;for(this[e]=255&t;++c<n&&(o*=256);)t<0&&0===d&&0!==this[e+c-1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+n},ln.prototype.writeIntBE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Yn(this,t,e,n,i-1,-i)}var c=n-1,o=1,d=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[e+c+1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+n},ln.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,1,127,-128),ln.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},ln.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,2,32767,-32768),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Kn(this,t,e,!0),e+2},ln.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,2,32767,-32768),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Kn(this,t,e,!1),e+2},ln.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,4,2147483647,-2147483648),ln.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):Nn(this,t,e,!0),e+4},ln.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||Yn(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),ln.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Nn(this,t,e,!1),e+4},ln.prototype.writeFloatLE=function(t,e,n){return Hn(this,t,e,!0,n)},ln.prototype.writeFloatBE=function(t,e,n){return Hn(this,t,e,!1,n)},ln.prototype.writeDoubleLE=function(t,e,n){return Ln(this,t,e,!0,n)},ln.prototype.writeDoubleBE=function(t,e,n){return Ln(this,t,e,!1,n)},ln.prototype.copy=function(t,e,n,l){if(n||(n=0),l||0===l||(l=this.length),e>=t.length&&(e=t.length),e||(e=0),l>0&&l<n&&(l=n),l===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(l<0)throw new RangeError("sourceEnd out of bounds");l>this.length&&(l=this.length),t.length-e<l-n&&(l=t.length-e+n);var i,c=l-n;if(this===t&&n<e&&e<l)for(i=c-1;i>=0;--i)t[i+e]=this[i+n];else if(c<1e3||!ln.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},ln.prototype.fill=function(t,e,n,l){if("string"==typeof t){if("string"==typeof e?(l=e,e=0,n=this.length):"string"==typeof n&&(l=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==l&&"string"!=typeof l)throw new TypeError("encoding must be a string");if("string"==typeof l&&!ln.isEncoding(l))throw new TypeError("Unknown encoding: "+l)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var o=un(t)?t:Bn(new ln(t,l).toString()),d=o.length;for(c=0;c<n-e;++c)this[c+e]=o[c%d]}return this};var Un=/[^+\/0-9A-Za-z-_]/g;function kn(t){return t<16?"0"+t.toString(16):t.toString(16)}function Bn(t,e){var n;e=e||1/0;for(var l=t.length,i=null,c=[],o=0;o<l;++o){if((n=t.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===l){(e-=3)>-1&&c.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function Fn(t){return function(t){var e,n,l,i,c,o;je||Me();var d=t.length;if(d%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[d-2]?2:"="===t[d-1]?1:0,o=new Pe(3*d/4-c),l=c>0?d-4:d;var a=0;for(e=0,n=0;e<l;e+=4,n+=3)i=Qe[t.charCodeAt(e)]<<18|Qe[t.charCodeAt(e+1)]<<12|Qe[t.charCodeAt(e+2)]<<6|Qe[t.charCodeAt(e+3)],o[a++]=i>>16&255,o[a++]=i>>8&255,o[a++]=255&i;return 2===c?(i=Qe[t.charCodeAt(e)]<<2|Qe[t.charCodeAt(e+1)]>>4,o[a++]=255&i):1===c&&(i=Qe[t.charCodeAt(e)]<<10|Qe[t.charCodeAt(e+1)]<<4|Qe[t.charCodeAt(e+2)]>>2,o[a++]=i>>8&255,o[a++]=255&i),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(Un,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function xn(t,e,n,l){for(var i=0;i<l&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function Tn(t){return null!=t&&(!!t._isBuffer||An(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&An(t.slice(0,0))}(t))}function An(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var zn=Object.freeze({__proto__:null,Buffer:ln,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),ln.alloc(+t)},isBuffer:Tn,kMaxLength:tn}),wn={exports:{}},Qn={},Pn={};Object.defineProperty(Pn,"__esModule",{value:!0}),Pn.default=function(t){var e=t.length,n=e%4;if(!n)return t;var l=e,i=4-n,c=e+i,o=ln.alloc(c);for(o.write(t);i--;)o.write("=",l++);return o.toString()},Object.defineProperty(Qn,"__esModule",{value:!0});var jn=Pn;function Mn(t,e){return void 0===e&&(e="utf8"),ln.isBuffer(t)?Dn(t.toString("base64")):Dn(ln.from(t,e).toString("base64"))}function En(t){return t=t.toString(),jn.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function Dn(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var On,_n=Mn;_n.encode=Mn,_n.decode=function(t,e){return void 0===e&&(e="utf8"),ln.from(En(t),"base64").toString(e)},_n.toBase64=En,_n.fromBase64=Dn,_n.toBuffer=function(t){return ln.from(En(t),"base64")},Qn.default=_n,(On=wn).exports=Qn.default,On.exports.default=On.exports;var qn=wn.exports,$n={exports:{}};!function(t){!function(e,n){var l={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,l,i,c){for(var o,d,a,r,u,s,Z,b,m,h,p,I,G;c>=64;){for(o=n[0],d=n[1],a=n[2],r=n[3],u=n[4],s=n[5],Z=n[6],b=n[7],h=0;h<16;h++)p=i+4*h,t[h]=(255&l[p])<<24|(255&l[p+1])<<16|(255&l[p+2])<<8|255&l[p+3];for(h=16;h<64;h++)I=((m=t[h-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,G=((m=t[h-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[h]=(I+t[h-7]|0)+(G+t[h-16]|0);for(h=0;h<64;h++)I=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&s^~u&Z)|0)+(b+(e[h]+t[h]|0)|0)|0,G=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&a^d&a)|0,b=Z,Z=s,s=u,u=r+I|0,r=a,a=d,d=o,o=I+G|0;n[0]+=o,n[1]+=d,n[2]+=a,n[3]+=r,n[4]+=u,n[5]+=s,n[6]+=Z,n[7]+=b,i+=64,c-=64}return i}var l=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var l=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[l++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(l=n(this.temp,this.state,t,l,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[l++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,l=this.bufferLength,i=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[l]=128;for(var d=l+1;d<o-8;d++)this.buffer[d]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(d=0;d<8;d++)t[4*d+0]=this.state[d]>>>24&255,t[4*d+1]=this.state[d]>>>16&255,t[4*d+2]=this.state[d]>>>8&255,t[4*d+3]=this.state[d]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=l;var i=function(){function t(t){this.inner=new l,this.outer=new l,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new l).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new l).update(t),n=e.digest();return e.clean(),n}function o(t,e){var n=new i(t).update(e),l=n.digest();return n.clean(),l}function d(t,e,n,l){var i=l[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),n&&e.update(n),e.update(l),e.finish(t),l[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=o;var a=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,l){void 0===e&&(e=a),void 0===l&&(l=32);for(var c=new Uint8Array([1]),r=o(e,t),u=new i(r),s=new Uint8Array(u.digestLength),Z=s.length,b=new Uint8Array(l),m=0;m<l;m++)Z===s.length&&(d(s,u,n,c),Z=0),b[m]=s[Z++];return u.clean(),s.fill(0),c.fill(0),b},t.pbkdf2=function(t,e,n,l){for(var c=new i(t),o=c.digestLength,d=new Uint8Array(4),a=new Uint8Array(o),r=new Uint8Array(o),u=new Uint8Array(l),s=0;s*o<l;s++){var Z=s+1;d[0]=Z>>>24&255,d[1]=Z>>>16&255,d[2]=Z>>>8&255,d[3]=Z>>>0&255,c.reset(),c.update(e),c.update(d),c.finish(r);for(var b=0;b<o;b++)a[b]=r[b];for(b=2;b<=n;b++){c.reset(),c.update(r).finish(r);for(var m=0;m<o;m++)a[m]^=r[m]}for(b=0;b<o&&s*o+b<l;b++)u[s*o+b]=a[b]}for(s=0;s<o;s++)a[s]=r[s]=0;for(s=0;s<4;s++)d[s]=0;return c.clean(),u}}(l);var i=l.default;for(var c in l)i[c]=l[c];t.exports=i}()}($n);var tl=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}($n.exports),el=crypto;const nl=t=>t instanceof CryptoKey,ll=new TextEncoder,il=new TextDecoder,cl=t=>{let e=t;e instanceof Uint8Array&&(e=il.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>{const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n})(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class ol extends Error{constructor(t){var e;super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(e=Error.captureStackTrace)||void 0===e||e.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class dl extends ol{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class al extends ol{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_EXPIRED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_EXPIRED"}}class rl extends ol{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class ul extends ol{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class sl extends ol{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class Zl extends ol{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class bl extends ol{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class ml extends ol{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 hl extends ol{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 pl extends ol{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 Il(){return"function"==typeof WebSocketPair}function Gl(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function gl(t,e){return t.name===e}function Xl(t){return parseInt(t.name.slice(4),10)}var yl=(t,...e)=>{let n="Key must be ";if(e.length>2){const t=e.pop();n+=`one of type ${e.join(", ")}, or ${t}.`}else 2===e.length?n+=`one of type ${e[0]} or ${e[1]}.`:n+=`of type ${e[0]}.`;return null==t?n+=" Received "+t:"function"==typeof t&&t.name?n+=" Received function "+t.name:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(n+=" Received an instance of "+t.constructor.name),n},Vl=t=>nl(t);const Wl=["CryptoKey"];function Cl(t){if("object"!=typeof(e=t)||null===e||"[object Object]"!==Object.prototype.toString.call(t))return!1;var e;if(null===Object.getPrototypeOf(t))return!0;let n=t;for(;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(t)===n}const Rl=async t=>{var e,n;const{algorithm:l,keyUsages:i}=function(t){let e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-"+t.alg.slice(-3)},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new ul(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.slice(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},n=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},n=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case Il()&&"OKP":if("EdDSA"!==t.alg)throw new ul('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==t.crv)throw new ul('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=t.d?["sign"]:["verify"];break;default:throw new ul('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}(t),c=[l,null!==(e=t.ext)&&void 0!==e&&e,null!==(n=t.key_ops)&&void 0!==n?n:i];if("PBKDF2"===l.name)return el.subtle.importKey("raw",cl(t.k),...c);const o={...t};return delete o.alg,el.subtle.importKey("jwk",o,...c)},fl=async(t,e,n,l)=>{const i=await function(t,e,n){if(nl(e))return function(t,e,...n){switch(e){case"HS256":case"HS384":case"HS512":{if(!gl(t.algorithm,"HMAC"))throw Gl("HMAC");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!gl(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Gl("RSASSA-PKCS1-v1_5");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!gl(t.algorithm,"RSA-PSS"))throw Gl("RSA-PSS");const n=parseInt(e.slice(2),10);if(Xl(t.algorithm.hash)!==n)throw Gl("SHA-"+n,"algorithm.hash");break}case Il()&&"EdDSA":if(!gl(t.algorithm,"NODE-ED25519"))throw Gl("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!gl(t.algorithm,"ECDSA"))throw Gl("ECDSA");const n=function(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(e);if(t.algorithm.namedCurve!==n)throw Gl(n,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(t,e){if(e.length&&!e.some(e=>t.usages.includes(e))){let t="CryptoKey does not support this operation, its usages must include ";if(e.length>2){const n=e.pop();t+=`one of ${e.join(", ")}, or ${n}.`}else 2===e.length?t+=`one of ${e[0]} or ${e[1]}.`:t+=e[0]+".";throw new TypeError(t)}}(t,n)}(e,t,n),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(yl(e,...Wl));return el.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[n])}throw new TypeError(yl(e,...Wl,"Uint8Array"))}(t,e,"verify");((t,e)=>{if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:n}=e.algorithm;if("number"!=typeof n||n<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,i);const c=function(t,e){const n="SHA-"+t.slice(-3);switch(t){case"HS256":case"HS384":case"HS512":return{hash:n,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:n,name:"RSA-PSS",saltLength:t.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:n,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:n,name:"ECDSA",namedCurve:e.namedCurve};case Il()&&"EdDSA":const{namedCurve:l}=e;return{name:l,namedCurve:l};default:throw new ul(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await el.subtle.verify(c,i,n,l)}catch(t){return!1}};async function Sl(t,e,n){var l;if(!Cl(t))throw new sl("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new sl('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new sl("JWS Protected Header incorrect type");if(void 0===t.payload)throw new sl("JWS Payload missing");if("string"!=typeof t.signature)throw new sl("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Cl(t.header))throw new sl("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=cl(t.protected);try{i=JSON.parse(il.decode(e))}catch(t){throw new sl("JWS Protected Header is invalid")}}if(!((...t)=>{const e=t.filter(Boolean);if(0===e.length||1===e.length)return!0;let n;for(const t of e){const e=Object.keys(t);if(n&&0!==n.size)for(const t of e){if(n.has(t))return!1;n.add(t)}else n=new Set(e)}return!0})(i,t.header))throw new sl("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...i,...t.header};let o=!0;if(function(t,e,n,l,i){if(void 0!==i.crit&&void 0===l.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!l||void 0===l.crit)return new Set;if(!Array.isArray(l.crit)||0===l.crit.length||l.crit.some(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let c;c=void 0!==n?new Map([...Object.entries(n),...e.entries()]):e;for(const e of l.crit){if(!c.has(e))throw new ul(`Extension Header Parameter "${e}" is not recognized`);if(void 0===i[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(c.get(e)&&void 0===l[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(l.crit)}(sl,new Map([["b64",!0]]),null==n?void 0:n.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new sl('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:d}=c;if("string"!=typeof d||!d)throw new sl('JWS "alg" (Algorithm) Header Parameter missing or invalid');const a=n&&((t,e)=>{if(void 0!==e&&(!Array.isArray(e)||e.some(t=>"string"!=typeof t)))throw new TypeError('"algorithms" option must be an array of strings');if(e)return new Set(e)})(0,n.algorithms);if(a&&!a.has(d))throw new rl('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new sl("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new sl("JWS Payload must be a string or an Uint8Array instance");let r=!1;"function"==typeof e&&(e=await e(i,t),r=!0),((t,e,n)=>{t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?(t=>{if(!(t instanceof Uint8Array)){if(!Vl(t))throw new TypeError(yl(t,...Wl,"Uint8Array"));if("secret"!==t.type)throw new TypeError(Wl.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Vl(t))throw new TypeError(yl(t,...Wl));if("secret"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(Wl.join(" or ")+' instances for asymmetric algorithm encryption must be of type "public"')})(e,n)})(d,e,"verify");const u=function(...t){const e=t.reduce((t,{length:e})=>t+e,0),n=new Uint8Array(e);let l=0;return t.forEach(t=>{n.set(t,l),l+=t.length}),n}(ll.encode(null!==(l=t.protected)&&void 0!==l?l:""),ll.encode("."),"string"==typeof t.payload?ll.encode(t.payload):t.payload),s=cl(t.signature);if(!await fl(d,e,s,u))throw new pl;let Z;Z=o?cl(t.payload):"string"==typeof t.payload?ll.encode(t.payload):t.payload;const b={payload:Z};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),r?{...b,key:e}:b}const vl=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var Yl=t=>{const e=vl.exec(t);if(!e)throw new TypeError("Invalid time period format");const n=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(86400*n);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}};const Kl=t=>t.toLowerCase().replace(/^application\//,"");var Nl=(t,e,n={})=>{const{typ:l}=n;if(l&&("string"!=typeof t.typ||Kl(t.typ)!==Kl(l)))throw new dl('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse(il.decode(e))}catch(t){}if(!Cl(i))throw new Zl("JWT Claims Set must be a top-level JSON object");const{issuer:c}=n;if(c&&!(Array.isArray(c)?c:[c]).includes(i.iss))throw new dl('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=n;if(o&&i.sub!==o)throw new dl('unexpected "sub" claim value',"sub","check_failed");const{audience:d}=n;if(d&&(r="string"==typeof d?[d]:d,!("string"==typeof(a=i.aud)?r.includes(a):Array.isArray(a)&&r.some(Set.prototype.has.bind(new Set(a))))))throw new dl('unexpected "aud" claim value',"aud","check_failed");var a,r;let u;switch(typeof n.clockTolerance){case"string":u=Yl(n.clockTolerance);break;case"number":u=n.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=n,Z=(b=s||new Date,Math.floor(b.getTime()/1e3));var b;if((void 0!==i.iat||n.maxTokenAge)&&"number"!=typeof i.iat)throw new dl('"iat" claim must be a number',"iat","invalid");if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new dl('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>Z+u)throw new dl('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new dl('"exp" claim must be a number',"exp","invalid");if(i.exp<=Z-u)throw new al('"exp" claim timestamp check failed',"exp","check_failed")}if(n.maxTokenAge){const t=Z-i.iat;if(t-u>("number"==typeof n.maxTokenAge?n.maxTokenAge:Yl(n.maxTokenAge)))throw new al('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new dl('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Jl(t){return Cl(t)}class Hl{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Jl)}(t))throw new bl("JSON Web Key Set malformed");var e;this._jwks=(e=t,"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e)))}async getKey(t,e){const{alg:n,kid:l}={...t,...e.header},i=function(t){switch("string"==typeof t&&t.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new ul('Unsupported "alg" value for a JSON Web Key Set')}}(n),c=this._jwks.keys.filter(t=>{let e=i===t.kty;if(e&&"string"==typeof l&&(e=l===t.kid),e&&"string"==typeof t.alg&&(e=n===t.alg),e&&"string"==typeof t.use&&(e="sig"===t.use),e&&Array.isArray(t.key_ops)&&(e=t.key_ops.includes("verify")),e&&"EdDSA"===n&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(n){case"ES256":e="P-256"===t.crv;break;case"ES256K":e="secp256k1"===t.crv;break;case"ES384":e="P-384"===t.crv;break;case"ES512":e="P-521"===t.crv}return e}),{0:o,length:d}=c;if(0===d)throw new ml;if(1!==d)throw new hl;const a=this._cached.get(o)||this._cached.set(o,{}).get(o);if(void 0===a[n]){const t=await async function(t,e,n){if(!Cl(t))throw new TypeError("JWK must be an object");if(e||(e=t.alg),"string"!=typeof e||!e)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=n||(n=!0!==t.ext),n?Rl({...t,alg:e,ext:!1}):cl(t.k);case"RSA":if(void 0!==t.oth)throw new ul('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Rl({...t,alg:e});default:throw new ul('Unsupported "kty" (Key Type) Parameter value')}}({...o,ext:!0},n);if(t instanceof Uint8Array||"public"!==t.type)throw new bl("JSON Web Key Set members must be public keys");a[n]=t}return a[n]}}var Ll={exports:{}},Ul={exports:{}},kl=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var l=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,l.get?l:{enumerable:!0,get:function(){return t[n]}})})),e}(zn);
432
+ /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var n=kl,l=n.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function c(t,e,n){return l(t,e,n)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=c),c.prototype=Object.create(l.prototype),i(l,c),c.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return l(t,e,n)},c.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=l(t);return void 0!==e?"string"==typeof n?i.fill(e,n):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}}(Ul,Ul.exports);var Bl=Ul.exports.Buffer,Fl=A.crypto||A.msCrypto;Fl&&Fl.getRandomValues?Ll.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var n=Bl.allocUnsafe(t);if(t>0)if(t>65536)for(var l=0;l<t;l+=65536)Fl.getRandomValues(n.slice(l,l+65536));else Fl.getRandomValues(n);return"function"==typeof e?Kt.nextTick((function(){e(null,n)})):n}:Ll.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var xl=Ll.exports;class Tl{base64URLEncode(t){return qn.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return qn.decode(t).toString()}hashSha256(t){return ln.from(tl((new TextEncoder).encode(t)))}generateRandomBytes(t){return xl(t)}verifyJwt(t,e,n,l,i,c,o){return async function(t,e,n){var l;const i=await async function(t,e,n){if(t instanceof Uint8Array&&(t=il.decode(t)),"string"!=typeof t)throw new sl("Compact JWS must be a string or Uint8Array");const{0:l,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new sl("Invalid Compact JWS");const d=await Sl({payload:i,protected:l,signature:c},e,n),a={payload:d.payload,protectedHeader:d.protectedHeader};return"function"==typeof e?{...a,key:d.key}:a}(t,e,n);if((null===(l=i.protectedHeader.crit)||void 0===l?void 0:l.includes("b64"))&&!1===i.protectedHeader.b64)throw new Zl("JWTs MUST NOT use unencoded payload");const c={payload:Nl(i.protectedHeader,i.payload,n),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(d={keys:[e]},Hl.prototype.getKey.bind(new Hl(d))),{algorithms:n,audience:l,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0)).catch(t=>{var e;return Promise.reject(new W("SPA-CRYPTO-UTILS-VJ-IV01",null!==(e=null==t?void 0:t.reason)&&void 0!==e?e:JSON.stringify(t),`${null==t?void 0:t.code} ${null==t?void 0:t.claim}`))});var d}}const Al=(t,e)=>l(void 0,void 0,void 0,(function*(){var n;const i=(t=>{switch(t){case J.LocalStorage:return new Te;case J.SessionStorage:return new ze;case J.BrowserMemory:return new Ae;default:return new ze}})(t.storage),o=new Tl,d=new K(i,o);yield d.initialize(t);const a=new B(d),r=d.getDataLayer(),u=yield T(()=>l(void 0,void 0,void 0,(function*(){return d.getSignOutURL()})),null!==(n=t.storage)&&void 0!==n?n:J.SessionStorage,t=>r.setSessionDataParameter(I,null!=t?t:"")),s=e(d,a);let Z=!1;const b=xe.getInstance();let m,h,G=!0;(null==b?void 0:b.init)&&(yield b.init(!0,t=>l(void 0,void 0,void 0,(function*(){const e=Object.assign({attachToken:!0},t);e.attachToken&&(e.shouldAttachIDPAccessToken?t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield s.getIDPAccessToken())}):t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield s.getAccessToken())}))}))));const g=()=>l(void 0,void 0,void 0,(function*(){const t=yield d.getOIDCServiceEndpoints(),e=yield r.getConfigData();s.initializeSessionManger(e,t,()=>l(void 0,void 0,void 0,(function*(){return(yield d.getBasicUserInfo()).sessionState})),t=>l(void 0,void 0,void 0,(function*(){return d.getAuthorizationURL(t)})),u)})),y=()=>l(void 0,void 0,void 0,(function*(){return yield u.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(I,null!=t?t:"")})))})),V=t=>{t.preventSignOutURLUpdate&&(Z=!0)},W=(t,e,n)=>l(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(t,e,g,void 0,n)})),R=()=>l(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),e=yield d.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(e);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===J.BrowserMemory&&t.enablePKCE){const t=n.searchParams.get(X);x.setPKCE(C.extractPKCEKeyFromStateParam(null!=t?t:""),yield d.getPKCECode(null!=t?t:""))}return l}));return{disableHttpHandler:()=>(s.disableHttpHandler(b),G=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(b),G=!0,!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getCryptoHelper:()=>l(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>l(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>b,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){return yield s.httpRequest(b,t,G,m,h)})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(t,b,G,m,h)})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),refreshAccessToken:()=>l(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(V)}catch(t){return Promise.reject(t)}})),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(t,V)})),revokeAccessToken:()=>l(void 0,void 0,void 0,(function*(){const t=yield a.getRefreshTimeoutTimer();return d.revokeAccessToken().then(()=>(u.reset(),a.clearRefreshTokenTimeout(t),Promise.resolve(!0))).catch(t=>Promise.reject(t))})),setHttpRequestErrorCallback:t=>{m=t},setHttpRequestFinishCallback:t=>{(null==b?void 0:b.setHttpRequestFinishCallback)&&b.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==b?void 0:b.setHttpRequestStartCallback)&&b.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==b?void 0:b.setHttpRequestSuccessCallback)&&b.setHttpRequestSuccessCallback(t)},signIn:(e,n,i,o)=>l(void 0,void 0,void 0,(function*(){var a,r,u;const Z=yield s.handleSignIn(y,g);if(Z)return Z;{let s,Z,b;return(null==t?void 0:t.responseMode)===c.formPost&&n?(s=n,Z=null!=i?i:"",b=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(p))&&void 0!==a?a:"",Z=null!==(r=new URL(window.location.href).searchParams.get(I))&&void 0!==r?r:"",b=null!==(u=new URL(window.location.href).searchParams.get(X))&&void 0!==u?u:"",x.removeAuthorizationCode()),s&&b?W(s,Z,b):d.getAuthorizationURL(e).then(e=>l(void 0,void 0,void 0,(function*(){if(t.storage===J.BrowserMemory&&t.enablePKCE){const t=C.extractPKCEKeyFromStateParam(b);x.setPKCE(t,yield d.getPKCECode(b))}return location.href=e,yield x.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))}})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield d.isAuthenticated())&&!Z?location.href=yield d.getSignOutURL():location.href=x.getSignOutURL(),a.clearRefreshTokenTimeout(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData(),yield x.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(R,W,u)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const e=yield r.getConfigData(),n=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},e),t);yield d.updateConfig(l),l.enableOIDCSessionManagement&&n&&(u.reset(),g())}))}})),zl=(t,e,n)=>l(void 0,void 0,void 0,(function*(){var i;let o;const d=null!==(i=null==t?void 0:t.requestTimeout)&&void 0!==i?i:6e4;let a=!0,r=!1;const u=(t=>{switch(t){case J.LocalStorage:return new Te;case J.SessionStorage:return new ze;case J.BrowserMemory:return new Ae;default:return new ze}})(t.storage),s=new Tl,Z=new K(u,s);yield Z.initialize(t);const b=new B(Z),m=yield T(()=>l(void 0,void 0,void 0,(function*(){const t={type:"sign-out"};try{return yield g(t)}catch(t){return x.getSignOutURL()}})),t.storage,t=>y(t)),h=n(Z,b),G=new e,g=t=>{const e=new MessageChannel;return G.postMessage(t,[e.port2]),new Promise((t,n)=>{const l=setTimeout(()=>{n(new W("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+d/1e3+" since dispatching the request"))},d);return e.port1.onmessage=({data:i})=>{if(clearTimeout(l),e.port1.close(),e.port2.close(),null==i?void 0:i.success){const e=(null==i?void 0:i.data)?JSON.parse(null==i?void 0:i.data):null;(null==i?void 0:i.blob)&&(e.data=null==i?void 0:i.blob),t(e)}else n(i.error?JSON.parse(i.error):null)}})},y=t=>g({data:t,type:"set_session_state"}),V=()=>g({type:"start_auto_refresh_token"}),R=()=>l(void 0,void 0,void 0,(function*(){const t=yield H(),e=yield L();h.initializeSessionManger(e,t,()=>l(void 0,void 0,void 0,(function*(){return(yield U()).sessionState})),t=>l(void 0,void 0,void 0,(function*(){return(yield S(t)).authorizationURL})),m)})),f=()=>l(void 0,void 0,void 0,(function*(){var t;const e=yield L(),n=yield g({data:{prompt:"none",state:"sign-in-silently"},type:"get_auth_url"}),l=C.extractPKCEKeyFromStateParam(null!==(t=new URL(n.authorizationURL).searchParams.get(X))&&void 0!==t?t:"");n.pkce&&e.enablePKCE&&x.setPKCE(l,n.pkce);const i=n.authorizationURL,c=new URL(i);return c.searchParams.set("response_mode","query"),c.toString()})),S=t=>l(void 0,void 0,void 0,(function*(){const e=yield L();return g({data:t,type:"get_auth_url"}).then(t=>l(void 0,void 0,void 0,(function*(){var n;if(t.pkce&&e.enablePKCE){const e=C.extractPKCEKeyFromStateParam(null!==(n=new URL(t.authorizationURL).searchParams.get(X))&&void 0!==n?n:"");x.setPKCE(e,t.pkce)}return Promise.resolve(t)})))})),v=(t,e,n)=>l(void 0,void 0,void 0,(function*(){const l=yield L(),i=C.extractPKCEKeyFromStateParam(n),c={data:{code:t,pkce:l.enablePKCE?x.getPKCE(i):void 0,sessionState:e,state:n},type:"request_get_token"};return l.enablePKCE&&x.removePKCE(i),g(c).then(t=>g({type:"get_sign_out_url"}).then(e=>(x.setSignOutURL(e),l.enableOIDCSessionManagement&&R(),V(),Promise.resolve(t))).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(t))})),Y=()=>l(void 0,void 0,void 0,(function*(){return yield m.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){return y(t)})))})),N=()=>l(void 0,void 0,void 0,(function*(){if(yield k())return yield V(),t.enableOIDCSessionManagement&&R(),U()})),H=()=>g({type:"get-oidc-service-endpoints"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),L=()=>g({type:"get_config_data"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),U=()=>g({type:"get-basic-user-info"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),k=()=>g({type:"is_authenticated"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t));return{disableHttpHandler:()=>g({type:"disable_http_handler"}).then(()=>(a=!1,Promise.resolve(!0))).catch(t=>Promise.reject(t)),enableHttpHandler:()=>g({type:"enable_http_handler"}).then(()=>(a=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t)),getBasicUserInfo:U,getCryptoHelper:()=>g({type:"get-crypto-helper"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getDecodedIDPIDToken:()=>g({type:"get-decoded-idp-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getDecodedIDToken:()=>g({type:"get-decoded-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getIDToken:()=>g({type:"get_id_token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getOIDCServiceEndpoints:H,httpRequest:t=>((null==t?void 0:t.data)&&(null==t?void 0:t.data)instanceof FormData&&(t.data=Object.assign(Object.assign({},Object.fromEntries(null==t?void 0:t.data.entries())),{formData:!0})),g({data:t,type:"http-request"}).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)})))),httpRequestAll:t=>g({data:t,type:"http-request-all"}).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)}))),initialize:()=>(o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),G.onmessage=({data:t})=>{switch(t.type){case"request-finish":(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case"request-start":(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case"request-success":(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},g({data:t,type:"init"}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(t))),isAuthenticated:k,refreshAccessToken:()=>g({type:"refresh_access-token"}),requestCustomGrant:t=>g({data:t,type:"request-custom-grant"}).then(e=>(t.preventSignOutURLUpdate&&(r=!0),Promise.resolve(e))).catch(t=>Promise.reject(t)),revokeAccessToken:()=>g({type:"revoke-access-token"}).then(t=>(m.reset(),Promise.resolve(t))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{t&&"function"==typeof t&&(o.requestErrorCallback=t)},setHttpRequestFinishCallback:t=>{t&&"function"==typeof t&&(o.requestFinishCallback=t)},setHttpRequestStartCallback:t=>{t&&"function"==typeof t&&(o.requestStartCallback=t)},setHttpRequestSuccessCallback:t=>{t&&"function"==typeof t&&(o.requestSuccessCallback=t)},signIn:(e,n,i,o)=>l(void 0,void 0,void 0,(function*(){var d,a,r;const u=yield h.handleSignIn(Y,R,N);if(u)return u;{let u,s,Z;return(null==t?void 0:t.responseMode)===c.formPost&&n?(u=n,s=null!=i?i:"",Z=null!=o?o:""):(u=null!==(d=new URL(window.location.href).searchParams.get(p))&&void 0!==d?d:"",s=null!==(a=new URL(window.location.href).searchParams.get(I))&&void 0!==a?a:"",Z=null!==(r=new URL(window.location.href).searchParams.get(X))&&void 0!==r?r:"",x.removeAuthorizationCode()),u&&Z?v(u,s,Z):S(e).then(t=>l(void 0,void 0,void 0,(function*(){return location.href=t.authorizationURL,yield x.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))).catch(t=>Promise.reject(t))}})),signOut:()=>k().then(t=>l(void 0,void 0,void 0,(function*(){return t&&!r?g({type:"sign-out"}).then(t=>l(void 0,void 0,void 0,(function*(){return window.location.href=t,yield x.waitTillPageRedirect(),Promise.resolve(!0)}))).catch(t=>Promise.reject(t)):(window.location.href=x.getSignOutURL(),yield x.waitTillPageRedirect(),Promise.resolve(!0))}))).catch(t=>Promise.reject(t)),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){return yield h.trySignInSilently(f,v,m)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const e=yield L(),n=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},e),t),i={data:l,type:"update_config"};yield g(i),l.enableOIDCSessionManagement&&n&&(m.reset(),R())}))}})),wl={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:J.SessionStorage};class Ql{constructor(t){this._authHelper=k,this._worker=L,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=t}instantiateAuthHelper(t){this._authHelper=t||k}instantiateWorker(t){this._worker=t||L}_isInitialized(){return l(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)1e4===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1)),t++;return!0}))}_validateMethod(){return l(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!!(yield this.isAuthenticated())||Promise.reject(new W("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new W("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
433
433
  /**
434
434
  * This method returns the instance of the singleton class.
435
435
  *
@@ -523,7 +523,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
523
523
  * @memberof AsgardeoSPAClient
524
524
  *
525
525
  * @preserve
526
- */signIn(t,e,n,i){var c;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),F.canContinueSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect),e))return null==t||delete t.callOnlyOnRedirect,null===(c=this._client)||void 0===c?void 0:c.signIn(t,e,n,i).then(t=>(this._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t),t))}))}trySignInSilently(){var t;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!F.wasSignInCalled())return null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then(t=>{if(this._onSignInCallback&&t){const e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e)}return t})}))}
526
+ */signIn(t,e,n,i){var c;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),x.canContinueSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect),e))return null==t||delete t.callOnlyOnRedirect,null===(c=this._client)||void 0===c?void 0:c.signIn(t,e,n,i).then(t=>(this._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t),t))}))}trySignInSilently(){var t;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!x.wasSignInCalled())return null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then(t=>{if(this._onSignInCallback&&t){const e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e)}return t})}))}
527
527
  /**
528
528
  * This method initiates the sign-out flow.
529
529
  *
@@ -859,7 +859,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
859
859
  * @memberof AsgardeoSPAClient
860
860
  *
861
861
  * @preserve
862
- */isAuthenticated(){var t;return l(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.isAuthenticated()}))}on(t,e,n){var i,c,o,d;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!e||"function"!=typeof e)throw new W("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case H.SignIn:this._onSignInCallback=e;break;case H.SignOut:this._onSignOutCallback=e,(yield F.isSignOutSuccessful())&&this._onSignOutCallback();break;case H.RevokeAccessToken:this._onEndUserSession=e;break;case H.Initialize:this._onInitialize=e;break;case H.HttpRequestError:null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(e);break;case H.HttpRequestFinish:null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(e);break;case H.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(e);break;case H.HttpRequestSuccess:null===(d=this._client)||void 0===d||d.setHttpRequestSuccessCallback(e);break;case H.CustomGrant:n&&this._onCustomGrant.set(n,e);break;case H.SignOutFailed:{this._onSignOutFailedCallback=e;const t=F.didSignOutFail();t&&this._onSignOutFailedCallback(t);break}default:throw new W("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
862
+ */isAuthenticated(){var t;return l(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.isAuthenticated()}))}on(t,e,n){var i,c,o,d;return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!e||"function"!=typeof e)throw new W("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case H.SignIn:this._onSignInCallback=e;break;case H.SignOut:this._onSignOutCallback=e,(yield x.isSignOutSuccessful())&&this._onSignOutCallback();break;case H.RevokeAccessToken:this._onEndUserSession=e;break;case H.Initialize:this._onInitialize=e;break;case H.HttpRequestError:null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(e);break;case H.HttpRequestFinish:null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(e);break;case H.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(e);break;case H.HttpRequestSuccess:null===(d=this._client)||void 0===d||d.setHttpRequestSuccessCallback(e);break;case H.CustomGrant:n&&this._onCustomGrant.set(n,e);break;case H.SignOutFailed:{this._onSignOutFailedCallback=e;const t=x.didSignOutFail();t&&this._onSignOutFailedCallback(t);break}default:throw new W("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
863
863
  /**
864
864
  * This method enables callback functions attached to the http client.
865
865
  *
@@ -911,4 +911,4 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
911
911
  * @memberof AsgardeoAuthClient
912
912
  *
913
913
  * @preserve
914
- */updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===J.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}Ql._instances=new Map;class jl extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}const Pl=t=>{const e=self;let n;e.onmessage=({data:e,ports:d})=>l(void 0,void 0,void 0,(function*(){var r,a,u,s;const Z=d[0];if("init"===e.type||n)switch(e.type){case"init":try{const d=Object.assign({},e.data);n=yield((t,e)=>l(void 0,void 0,void 0,(function*(){const n=new Ae,i=new Tl,c=new K(n,i);yield c.initialize(t);const o=new B(c),d=e(c,o),r=c.getDataLayer(),a=Fe.getInstance();return(null==a?void 0:a.init)&&(yield a.init(!0,t=>l(void 0,void 0,void 0,(function*(){const e=Object.assign({attachToken:!0},t);e.attachToken&&(e.shouldAttachIDPAccessToken?t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield d.getIDPAccessToken())}):t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield d.getAccessToken())}))})))),{disableHttpHandler:()=>{d.disableHttpHandler(a)},enableHttpHandler:()=>{d.enableHttpHandler(a)},getAccessToken:()=>d.getAccessToken(),getAuthorizationURL:t=>l(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){var e;const n=null!==(e=new URL(t).searchParams.get(X))&&void 0!==e?e:"",l=yield c.getPKCECode(n);return{authorizationURL:t,pkce:l}}))).catch(t=>Promise.reject(t))})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return d.getBasicUserInfo()})),getConfigData:()=>l(void 0,void 0,void 0,(function*(){return r.getConfigData()})),getCryptoHelper:()=>l(void 0,void 0,void 0,(function*(){return d.getCryptoHelper()})),getDecodedIDPIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getDecodedIDPIDToken()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getDecodedIDToken()})),getIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return d.getOIDCServiceEndpoints()})),getSignOutURL:()=>l(void 0,void 0,void 0,(function*(){return yield c.getSignOutURL()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){return yield d.httpRequest(a,t)})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){return yield d.httpRequestAll(t,a)})),isAuthenticated:()=>d.isAuthenticated(),refreshAccessToken:()=>l(void 0,void 0,void 0,(function*(){try{return yield d.refreshAccessToken()}catch(t){return Promise.reject(t)}})),requestAccessToken:(t,e,n,i)=>l(void 0,void 0,void 0,(function*(){return yield d.requestAccessToken(t,e,void 0,n,i)})),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){return yield d.requestCustomGrant(t)})),revokeAccessToken:()=>l(void 0,void 0,void 0,(function*(){const t=yield o.getRefreshTimeoutTimer();return c.revokeAccessToken().then(()=>(o.clearRefreshTokenTimeout(t),Promise.resolve(!0))).catch(t=>Promise.reject(t))})),setHttpRequestFinishCallback:t=>{(null==a?void 0:a.setHttpRequestFinishCallback)&&a.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==a?void 0:a.setHttpRequestStartCallback)&&a.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==a?void 0:a.setHttpRequestSuccessCallback)&&a.setHttpRequestSuccessCallback(t)},setSessionState:t=>l(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(I,t)})),signOut:()=>l(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield c.getSignOutURL()})),startAutoRefreshToken:()=>l(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(d)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){yield c.updateConfig(t)}))}})))(d,t),n.setHttpRequestFinishCallback(o),n.setHttpRequestStartCallback(i),n.setHttpRequestSuccessCallback(c),Z.postMessage(x.generateSuccessMessage())}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get_auth_url":n.getAuthorizationURL(null==e?void 0:e.data).then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"request_get_token":n.requestAccessToken(null===(r=null==e?void 0:e.data)||void 0===r?void 0:r.code,null===(a=null==e?void 0:e.data)||void 0===a?void 0:a.sessionState,null===(u=null==e?void 0:e.data)||void 0===u?void 0:u.pkce,null===(s=null==e?void 0:e.data)||void 0===s?void 0:s.state).then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"http-request":n.httpRequest(e.data).then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"http-request-all":n.httpRequestAll(e.data).then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"sign-out":try{Z.postMessage(x.generateSuccessMessage(yield n.signOut()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"request-custom-grant":n.requestCustomGrant(e.data).then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"revoke-access-token":n.revokeAccessToken().then(t=>{Z.postMessage(x.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(x.generateFailureMessage(t))});break;case"get-oidc-service-endpoints":try{Z.postMessage(x.generateSuccessMessage(yield n.getOIDCServiceEndpoints()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get-basic-user-info":try{Z.postMessage(x.generateSuccessMessage(yield n.getBasicUserInfo()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get-decoded-id-token":try{Z.postMessage(x.generateSuccessMessage(yield n.getDecodedIDToken()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get-crypto-helper":try{Z.postMessage(x.generateSuccessMessage(yield n.getCryptoHelper()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get_id_token":try{Z.postMessage(x.generateSuccessMessage(yield n.getIDToken()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"enable_http_handler":n.enableHttpHandler(),Z.postMessage(x.generateSuccessMessage());break;case"disable_http_handler":n.disableHttpHandler(),Z.postMessage(x.generateSuccessMessage());break;case"is_authenticated":try{Z.postMessage(x.generateSuccessMessage(yield n.isAuthenticated()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get_sign_out_url":try{Z.postMessage(x.generateSuccessMessage(yield n.getSignOutURL()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"refresh_access-token":try{Z.postMessage(x.generateSuccessMessage(yield n.refreshAccessToken()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"start_auto_refresh_token":try{Z.postMessage(x.generateSuccessMessage(n.startAutoRefreshToken()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"set_session_state":try{Z.postMessage(x.generateSuccessMessage(yield n.setSessionState(null==e?void 0:e.data)))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"update_config":try{Z.postMessage(x.generateSuccessMessage(yield n.updateConfig(null==e?void 0:e.data)))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;case"get_config_data":try{Z.postMessage(x.generateSuccessMessage(yield n.getConfigData()))}catch(t){Z.postMessage(x.generateFailureMessage(t))}break;default:null==Z||Z.postMessage(x.generateFailureMessage(new W("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.",`The message type provided, ${e.type}, is invalid.`)))}else Z.postMessage(x.generateFailureMessage(new W("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 i=()=>{e.postMessage({type:"request-start"})},c=t=>{e.postMessage({data:JSON.stringify(null!=t?t:""),type:"request-success"})},o=()=>{e.postMessage({type:"request-finish"})}}}).call(this,n(163))},function(t,e,n){var l=n(130),i=n(71);t.exports=function(t){var e=l(t,"string");return i(e)?e:e+""}},function(t,e,n){var l,i,c=n(1),o=n(48),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u&&(i=(l=u.split("."))[0]>0&&l[0]<4?1:+(l[0]+l[1])),!i&&o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(i=+l[1]),t.exports=i},function(t,e,n){var l=n(169),i=n(134).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return l(t,i)}},function(t,e,n){"use strict";var l=n(55),i=n(16),c=n(43);t.exports=function(t,e,n){var o=l(e);o in t?i.f(t,o,c(0,n)):t[o]=n}},function(t,e,n){var l=n(40);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,e,n){var l=n(3);t.exports=l([].slice)},function(t,e,n){var l=n(64),i=n(27),c=n(91),o=n(7)("iterator");t.exports=function(t){if(null!=t)return i(t,o)||i(t,"@@iterator")||c[l(t)]}},function(t,e,n){"use strict";var l=n(6),i=function(t){var e,n;this.promise=new t((function(t,l){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=l})),this.resolve=l(e),this.reject=l(n)};t.exports.f=function(t){return new i(t)}},function(t,e,n){var l=n(24),i=n(101);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.1",mode:l?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){var l=n(1),i=n(135),c=n(10),o=n(40),d=n(7)("toStringTag"),r=l.Object,a="Arguments"==o(function(){return arguments}());t.exports=i?o:function(t){var e,n,l;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=r(t),d))?n:a?o(e):"Object"==(l=o(e))&&c(e.callee)?"Arguments":l}},function(t,e,n){var l=n(3),i=n(4),c=n(10),o=n(64),d=n(11),r=n(103),a=function(){},u=[],s=d("Reflect","construct"),Z=/^\s*(?:class|function)\b/,b=l(Z.exec),m=!Z.exec(a),h=function(t){if(!c(t))return!1;try{return s(a,u,t),!0}catch(t){return!1}},p=function(t){if(!c(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return m||!!b(Z,r(t))}catch(t){return!0}};p.sham=!0,t.exports=!s||i((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?p:h},function(t,e,n){"use strict";var l=n(11),i=n(16),c=n(7),o=n(9),d=c("species");t.exports=function(t){var e=l(t),n=i.f;o&&e&&!e[d]&&n(e,d,{configurable:!0,get:function(){return this}})}},function(t,e,n){var l=n(0),i=n(3),c=n(86),o=n(12),d=n(15),r=n(16).f,a=n(57),u=n(136),s=n(114),Z=n(85),b=n(93),m=!1,h=Z("meta"),p=0,I=function(t){r(t,h,{value:{objectID:"O"+p++,weakData:{}}})},G=t.exports={enable:function(){G.enable=function(){},m=!0;var t=a.f,e=i([].splice),n={};n[h]=1,t(n).length&&(a.f=function(n){for(var l=t(n),i=0,c=l.length;i<c;i++)if(l[i]===h){e(l,i,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,h)){if(!s(t))return"F";if(!e)return"E";I(t)}return t[h].objectID},getWeakData:function(t,e){if(!d(t,h)){if(!s(t))return!0;if(!e)return!1;I(t)}return t[h].weakData},onFreeze:function(t){return b&&m&&s(t)&&!d(t,h)&&I(t),t}};c[h]=!0},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),d=n(28),r=n(46),a=n(7),u=n(20),s=n(11),Z=n(27),b=n(126),m=s("Promise"),h=u.set,p=u.getterFor("AsyncIteratorProxy"),I=a("toStringTag");t.exports=function(t,e){var n=function(t){t.type="AsyncIteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,h(this,t)};return n.prototype=r(o(b),{next:function(n){var i=this,o=!!arguments.length;return new m((function(d){var r=p(i),a=o?[r.ignoreArgument?void 0:n]:e?[]:[void 0];r.ignoreArgument=!1,d(r.done?{done:!0,value:void 0}:c(l(t,r,m,a)))}))},return:function(t){var e=this;return new m((function(n,i){var o=p(e),d=o.iterator;o.done=!0;var r=Z(d,"return");if(void 0===r)return n({done:!0,value:t});m.resolve(l(r,d,t)).then((function(e){c(e),n({done:!0,value:t})}),i)}))},throw:function(t){var e=this;return new m((function(n,i){var c=p(e),o=c.iterator;c.done=!0;var d=Z(o,"throw");if(void 0===d)return i(t);n(l(d,o,t))}))}}),e||d(n.prototype,I,"Generator"),n}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),d=n(28),r=n(46),a=n(7),u=n(20),s=n(27),Z=n(92).IteratorPrototype,b=u.set,m=u.getterFor("IteratorProxy"),h=a("toStringTag");t.exports=function(t,e){var n=function(t){t.type="IteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,b(this,t)};return n.prototype=r(o(Z),{next:function(n){var i=m(this),c=arguments.length?[i.ignoreArg?void 0:n]:e?[]:[void 0];i.ignoreArg=!1;var o=i.done?void 0:l(t,i,c);return{done:i.done,value:o}},return:function(t){var e=m(this),n=e.iterator;e.done=!0;var i=s(n,"return");return{done:!0,value:i?c(l(i,n,t)).value:t}},throw:function(t){var e=m(this),n=e.iterator;e.done=!0;var i=s(n,"throw");if(i)return l(i,n,t);throw t}}),e||d(n.prototype,h,"Generator"),n}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Set.prototype.values,t)}},function(t,e,n){var l=n(1),i=n(11),c=n(10),o=n(36),d=n(164),r=l.Object;t.exports=d?function(t){return"symbol"==typeof t}:function(t){var e=i("Symbol");return c(e)&&o(e.prototype,r(t))}},function(t,e,n){var l=n(56),i=n(4);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&l&&l<41}))},function(t,e,n){var l=n(1).String;t.exports=function(t){try{return l(t)}catch(t){return"Object"}}},function(t,e,n){var l=n(9),i=n(15),c=Function.prototype,o=l&&Object.getOwnPropertyDescriptor,d=i(c,"name"),r=d&&"something"===function(){}.name,a=d&&(!l||l&&o(c,"name").configurable);t.exports={EXISTS:d,PROPER:r,CONFIGURABLE:a}},function(t,e,n){var l=n(169),i=n(134);t.exports=Object.keys||function(t){return l(t,i)}},function(t,e,n){var l=n(223);t.exports=function(t,e){return new(l(t))(0===e?0:e)}},function(t,e,n){"use strict";var l=n(92).IteratorPrototype,i=n(29),c=n(43),o=n(41),d=n(91),r=function(){return this};t.exports=function(t,e,n,a){var u=e+" Iterator";return t.prototype=i(l,{next:c(+!a,n)}),o(t,u,!1,!0),d[u]=r,t}},function(t,e,n){var l=n(40),i=n(1);t.exports="process"==l(i.process)},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=n(117),d=l("".replace),r="["+o+"]",a=RegExp("^"+r+r+"*"),u=RegExp(r+r+"*$"),s=function(t){return function(e){var n=c(i(e));return 1&t&&(n=d(n,a,"")),2&t&&(n=d(n,u,"")),n}};t.exports={start:s(1),end:s(2),trim:s(3)}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,n){var l=n(1);t.exports=l.Promise},function(t,e,n){var l=n(3),i=n(35),c=n(14),o=n(26),d=l("".charAt),r=l("".charCodeAt),a=l("".slice),u=function(t){return function(e,n){var l,u,s=c(o(e)),Z=i(n),b=s.length;return Z<0||Z>=b?t?"":void 0:(l=r(s,Z))<55296||l>56319||Z+1===b||(u=r(s,Z+1))<56320||u>57343?t?d(s,Z):l:t?a(s,Z,Z+2):u-56320+(l-55296<<10)+65536}};t.exports={codeAt:u(!1),charAt:u(!0)}},function(t,e,n){var l=n(4);t.exports=!l((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){var l=n(1),i=n(3),c=n(4),o=n(40),d=l.Object,r=i("".split);t.exports=c((function(){return!d("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?r(t,""):d(t)}:d},function(t,e,n){var l=n(3),i=0,c=Math.random(),o=l(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+c,36)}},function(t,e){t.exports={}},function(t,e,n){var l=n(34),i=n(49),c=n(21),o=function(t){return function(e,n,o){var d,r=l(e),a=c(r),u=i(o,a);if(t&&n!=n){for(;a>u;)if((d=r[u++])!=d)return!0}else for(;a>u;u++)if((t||u in r)&&r[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,n){var l=n(4),i=n(10),c=/#|\.prototype\./,o=function(t,e){var n=r[d(t)];return n==u||n!=a&&(i(e)?l(e):!!e)},d=o.normalize=function(t){return String(t).replace(c,".").toLowerCase()},r=o.data={},a=o.NATIVE="N",u=o.POLYFILL="P";t.exports=o},function(t,e,n){var l=n(1),i=n(49),c=n(21),o=n(58),d=l.Array,r=Math.max;t.exports=function(t,e,n){for(var l=c(t),a=i(e,l),u=i(void 0===n?l:n,l),s=d(r(u-a,0)),Z=0;a<u;a++,Z++)o(s,Z,t[a]);return s.length=Z,s}},function(t,e,n){var l=n(4),i=n(7),c=n(56),o=i("species");t.exports=function(t){return c>=51||!l((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e){t.exports={}},function(t,e,n){"use strict";var l,i,c,o=n(4),d=n(10),r=n(29),a=n(32),u=n(19),s=n(7),Z=n(24),b=s("iterator"),m=!1;[].keys&&("next"in(c=[].keys())?(i=a(a(c)))!==Object.prototype&&(l=i):m=!0),null==l||o((function(){var t={};return l[b].call(t)!==t}))?l={}:Z&&(l=r(l)),d(l[b])||u(l,b,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:m}},function(t,e,n){var l=n(4);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){var l=n(1).TypeError;t.exports=function(t,e){if(t<e)throw l("Not enough arguments");return t}},function(t,e,n){var l=n(1),i=n(81),c=n(10),o=n(88),d=n(103),r=n(7),a=n(352),u=n(24),s=n(56),Z=i&&i.prototype,b=r("species"),m=!1,h=c(l.PromiseRejectionEvent),p=o("Promise",(function(){var t=d(i),e=t!==String(i);if(!e&&66===s)return!0;if(u&&(!Z.catch||!Z.finally))return!0;if(s>=51&&/native code/.test(t))return!1;var n=new i((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[b]=l,!(m=n.then((function(){}))instanceof l)||!e&&a&&!h}));t.exports={CONSTRUCTOR:p,REJECTION_EVENT:h,SUBCLASSING:m}},function(t,e,n){var l=n(12),i=n(40),c=n(7)("match");t.exports=function(t){var e;return l(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==i(t))}},function(t,e,n){var l=n(1),i=n(5),c=n(2),o=n(10),d=n(40),r=n(122),a=l.TypeError;t.exports=function(t,e){var n=t.exec;if(o(n)){var l=i(n,t,e);return null!==l&&c(l),l}if("RegExp"===d(t))return i(r,t,e);throw a("RegExp#exec called on incompatible receiver")}},function(t,e,n){var l=n(1),i=n(35),c=l.RangeError;t.exports=function(t){var e=i(t);if(e<0)throw c("The argument can't be less than 0");return e}},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(2),d=n(11),r=n(27),a=l.TypeError,u=function(t){var e=0==t,n=1==t,l=2==t,u=3==t;return function(t,s,Z){o(t);var b=d("Promise"),m=c(t.next),h=0,p=void 0!==s;return!p&&e||c(s),new b((function(c,d){var I=function(e,n){try{var l=r(t,"return");if(l)return b.resolve(i(l,t)).then((function(){e(n)}),(function(t){d(t)}))}catch(t){return d(t)}e(n)},G=function(t){I(d,t)},g=function(){try{if(e&&h>9007199254740991&&p)throw a("The allowed number of iterations has been exceeded");b.resolve(o(i(m,t))).then((function(t){try{if(o(t).done)e?(Z.length=h,c(Z)):c(!u&&(l||void 0));else{var i=t.value;p?b.resolve(e?s(i,h):s(i)).then((function(t){n?g():l?t?g():I(c,!1):e?(Z[h++]=t,g()):t?I(c,u||i):g()}),G):(Z[h++]=i,g())}}catch(t){G(t)}}),G)}catch(t){G(t)}};g()}))}};t.exports={toArray:u(0),forEach:u(1),every:u(2),some:u(3),find:u(4)}},function(t,e,n){"use strict";var l={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,c=i&&!l.call({1:2},1);e.f=c?function(t){var e=i(this,t);return!!e&&e.enumerable}:l},function(t,e,n){var l=n(1),i=n(131),c=l["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,n){var l=n(1),i=n(12),c=l.document,o=i(c)&&i(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,e,n){var l=n(3),i=n(10),c=n(101),o=l(Function.toString);i(c.inspectSource)||(c.inspectSource=function(t){return o(t)}),t.exports=c.inspectSource},function(t,e,n){var l=n(63),i=n(85),c=l("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var l=n(9),i=n(167),c=n(16),o=n(2),d=n(34),r=n(75);e.f=l&&!i?Object.defineProperties:function(t,e){o(t);for(var n,l=d(e),i=r(e),a=i.length,u=0;a>u;)c.f(t,n=i[u++],l[n]);return t}},function(t,e,n){var l=n(5),i=n(2),c=n(27);t.exports=function(t,e,n){var o,d;i(t);try{if(!(o=c(t,"return"))){if("throw"===e)throw n;return n}o=l(o,t)}catch(t){d=!0,o=t}if("throw"===e)throw n;if(d)throw o;return i(o),n}},function(t,e,n){var l=n(7)("iterator"),i=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){i=!0}};o[l]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var c={};c[l]=function(){return{next:function(){return{done:n=!0}}}},t(c)}catch(t){}return n}},function(t,e,n){"use strict";var l=n(34),i=n(44),c=n(91),o=n(20),d=n(16).f,r=n(140),a=n(24),u=n(9),s=o.set,Z=o.getterFor("Array Iterator");t.exports=r(Array,"Array",(function(t,e){s(this,{type:"Array Iterator",target:l(t),index:0,kind:e})}),(function(){var t=Z(this),e=t.target,n=t.kind,l=t.index++;return!e||l>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:l,done:!1}:"values"==n?{value:e[l],done:!1}:{value:[l,e[l]],done:!1}}),"values");var b=c.Arguments=c.Array;if(i("keys"),i("values"),i("entries"),!a&&u&&"values"!==b.name)try{d(b,"name",{value:"values"})}catch(t){}},function(t,e,n){var l=n(1),i=n(6),c=n(13),o=n(84),d=n(21),r=l.TypeError,a=function(t){return function(e,n,l,a){i(n);var u=c(e),s=o(u),Z=d(u),b=t?Z-1:0,m=t?-1:1;if(l<2)for(;;){if(b in s){a=s[b],b+=m;break}if(b+=m,t?b<0:Z<=b)throw r("Reduce of empty array with no initial value")}for(;t?b>=0:Z>b;b+=m)b in s&&(a=n(a,s[b],b,u));return a}};t.exports={left:a(!1),right:a(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(9),o=n(144),d=n(74),r=n(28),a=n(46),u=n(4),s=n(42),Z=n(35),b=n(37),m=n(183),h=n(270),p=n(32),I=n(51),G=n(57).f,g=n(16).f,X=n(137),y=n(89),V=n(41),W=n(20),C=d.PROPER,R=d.CONFIGURABLE,f=W.get,Y=W.set,v=l.ArrayBuffer,S=v,K=S&&S.prototype,N=l.DataView,J=N&&N.prototype,H=Object.prototype,L=l.Array,U=l.RangeError,k=i(X),B=i([].reverse),x=h.pack,F=h.unpack,T=function(t){return[255&t]},A=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},w=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Q=function(t){return x(t,23,4)},j=function(t){return x(t,52,8)},P=function(t,e){g(t.prototype,e,{get:function(){return f(this)[e]}})},M=function(t,e,n,l){var i=m(n),c=f(t);if(i+e>c.byteLength)throw U("Wrong index");var o=f(c.buffer).bytes,d=i+c.byteOffset,r=y(o,d,d+e);return l?r:B(r)},E=function(t,e,n,l,i,c){var o=m(n),d=f(t);if(o+e>d.byteLength)throw U("Wrong index");for(var r=f(d.buffer).bytes,a=o+d.byteOffset,u=l(+i),s=0;s<e;s++)r[a+s]=u[c?s:e-s-1]};if(o){var D=C&&"ArrayBuffer"!==v.name;if(u((function(){v(1)}))&&u((function(){new v(-1)}))&&!u((function(){return new v,new v(1.5),new v(NaN),D&&!R})))D&&R&&r(v,"name","ArrayBuffer");else{(S=function(t){return s(this,K),new v(m(t))}).prototype=K;for(var O,_=G(v),q=0;_.length>q;)(O=_[q++])in S||r(S,O,v[O]);K.constructor=S}I&&p(J)!==H&&I(J,H);var $=new N(new S(2)),tt=i(J.setInt8);$.setInt8(0,2147483648),$.setInt8(1,2147483649),!$.getInt8(0)&&$.getInt8(1)||a(J,{setInt8:function(t,e){tt(this,t,e<<24>>24)},setUint8:function(t,e){tt(this,t,e<<24>>24)}},{unsafe:!0})}else K=(S=function(t){s(this,K);var e=m(t);Y(this,{bytes:k(L(e),0),byteLength:e}),c||(this.byteLength=e)}).prototype,J=(N=function(t,e,n){s(this,J),s(t,K);var l=f(t).byteLength,i=Z(e);if(i<0||i>l)throw U("Wrong offset");if(i+(n=void 0===n?l-i:b(n))>l)throw U("Wrong length");Y(this,{buffer:t,byteLength:n,byteOffset:i}),c||(this.buffer=t,this.byteLength=n,this.byteOffset=i)}).prototype,c&&(P(S,"byteLength"),P(N,"buffer"),P(N,"byteLength"),P(N,"byteOffset")),a(J,{getInt8:function(t){return M(this,1,t)[0]<<24>>24},getUint8:function(t){return M(this,1,t)[0]},getInt16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return F(M(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return F(M(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){E(this,1,t,T,e)},setUint8:function(t,e){E(this,1,t,T,e)},setInt16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){E(this,4,t,Q,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){E(this,8,t,j,e,arguments.length>2?arguments[2]:void 0)}});V(S,"ArrayBuffer"),V(N,"DataView"),t.exports={ArrayBuffer:S,DataView:N}},function(t,e,n){var l=n(1),i=n(65),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a constructor")}},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(88),d=n(19),r=n(67),a=n(8),u=n(42),s=n(10),Z=n(12),b=n(4),m=n(108),h=n(41),p=n(115);t.exports=function(t,e,n){var I=-1!==t.indexOf("Map"),G=-1!==t.indexOf("Weak"),g=I?"set":"add",X=i[t],y=X&&X.prototype,V=X,W={},C=function(t){var e=c(y[t]);d(y,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(G&&!Z(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return G&&!Z(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(G&&!Z(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(o(t,!s(X)||!(G||y.forEach&&!b((function(){(new X).entries().next()})))))V=n.getConstructor(e,t,I,g),r.enable();else if(o(t,!0)){var R=new V,f=R[g](G?{}:-0,1)!=R,Y=b((function(){R.has(1)})),v=m((function(t){new X(t)})),S=!G&&b((function(){for(var t=new X,e=5;e--;)t[g](e,e);return!t.has(-0)}));v||((V=e((function(t,e){u(t,y);var n=p(new X,t,V);return null!=e&&a(e,n[g],{that:n,AS_ENTRIES:I}),n}))).prototype=y,y.constructor=V),(Y||S)&&(C("delete"),C("has"),I&&C("get")),(S||f)&&C(g),G&&y.clear&&delete y.clear}return W[t]=V,l({global:!0,forced:V!=X},W),h(V,t),G||n.setStrong(V,t,I),V}},function(t,e,n){var l=n(4),i=n(12),c=n(40),o=n(148),d=Object.isExtensible,r=l((function(){d(1)}));t.exports=r||o?function(t){return!!i(t)&&((!o||"ArrayBuffer"!=c(t))&&(!d||d(t)))}:d},function(t,e,n){var l=n(10),i=n(12),c=n(51);t.exports=function(t,e,n){var o,d;return c&&l(o=e.constructor)&&o!==n&&i(d=o.prototype)&&d!==n.prototype&&c(t,d),t}},function(t,e){var n=Math.expm1,l=Math.exp;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:l(t)-1}:n},function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},function(t,e,n){"use strict";var l=n(24),i=n(1),c=n(4),o=n(143);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},function(t,e,n){var l,i,c,o,d=n(1),r=n(18),a=n(22),u=n(10),s=n(15),Z=n(4),b=n(170),m=n(60),h=n(102),p=n(94),I=n(193),G=n(78),g=d.setImmediate,X=d.clearImmediate,y=d.process,V=d.Dispatch,W=d.Function,C=d.MessageChannel,R=d.String,f=0,Y={};try{l=d.location}catch(t){}var v=function(t){if(s(Y,t)){var e=Y[t];delete Y[t],e()}},S=function(t){return function(){v(t)}},K=function(t){v(t.data)},N=function(t){d.postMessage(R(t),l.protocol+"//"+l.host)};g&&X||(g=function(t){p(arguments.length,1);var e=u(t)?t:W(t),n=m(arguments,1);return Y[++f]=function(){r(e,void 0,n)},i(f),f},X=function(t){delete Y[t]},G?i=function(t){y.nextTick(S(t))}:V&&V.now?i=function(t){V.now(S(t))}:C&&!I?(o=(c=new C).port2,c.port1.onmessage=K,i=a(o.postMessage,o)):d.addEventListener&&u(d.postMessage)&&!d.importScripts&&l&&"file:"!==l.protocol&&!Z(N)?(i=N,d.addEventListener("message",K,!1)):i="onreadystatechange"in h("script")?function(t){b.appendChild(h("script")).onreadystatechange=function(){b.removeChild(this),v(t)}}:function(t){setTimeout(S(t),0)}),t.exports={set:g,clear:X}},function(t,e,n){var l=n(5),i=n(15),c=n(36),o=n(153),d=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in d||i(t,"flags")||!c(d,t)?e:l(o,t)}},function(t,e,n){var l=n(4),i=n(1).RegExp,c=l((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),o=c||l((function(){return!i("a","y").sticky})),d=c||l((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:d,MISSED_STICKY:o,UNSUPPORTED_Y:c}},function(t,e,n){"use strict";var l,i,c=n(5),o=n(3),d=n(14),r=n(153),a=n(121),u=n(63),s=n(29),Z=n(20).get,b=n(199),m=n(200),h=u("native-string-replace",String.prototype.replace),p=RegExp.prototype.exec,I=p,G=o("".charAt),g=o("".indexOf),X=o("".replace),y=o("".slice),V=(i=/b*/g,c(p,l=/a/,"a"),c(p,i,"a"),0!==l.lastIndex||0!==i.lastIndex),W=a.BROKEN_CARET,C=void 0!==/()??/.exec("")[1];(V||C||W||b||m)&&(I=function(t){var e,n,l,i,o,a,u,b=this,m=Z(b),R=d(t),f=m.raw;if(f)return f.lastIndex=b.lastIndex,e=c(I,f,R),b.lastIndex=f.lastIndex,e;var Y=m.groups,v=W&&b.sticky,S=c(r,b),K=b.source,N=0,J=R;if(v&&(S=X(S,"y",""),-1===g(S,"g")&&(S+="g"),J=y(R,b.lastIndex),b.lastIndex>0&&(!b.multiline||b.multiline&&"\n"!==G(R,b.lastIndex-1))&&(K="(?: "+K+")",J=" "+J,N++),n=new RegExp("^(?:"+K+")",S)),C&&(n=new RegExp("^"+K+"$(?!\\s)",S)),V&&(l=b.lastIndex),i=c(p,v?n:b,J),v?i?(i.input=y(i.input,N),i[0]=y(i[0],N),i.index=b.lastIndex,b.lastIndex+=i[0].length):b.lastIndex=0:V&&i&&(b.lastIndex=b.global?i.index+i[0].length:l),C&&i&&i.length>1&&c(h,i[0],n,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(i[o]=void 0)})),i&&Y)for(i.groups=a=s(null),o=0;o<Y.length;o++)a[(u=Y[o])[0]]=i[u[1]];return i}),t.exports=I},function(t,e,n){"use strict";n(154);var l=n(3),i=n(19),c=n(122),o=n(4),d=n(7),r=n(28),a=d("species"),u=RegExp.prototype;t.exports=function(t,e,n,s){var Z=d(t),b=!o((function(){var e={};return e[Z]=function(){return 7},7!=""[t](e)})),m=b&&!o((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[a]=function(){return n},n.flags="",n[Z]=/./[Z]),n.exec=function(){return e=!0,null},n[Z](""),!e}));if(!b||!m||n){var h=l(/./[Z]),p=e(Z,""[t],(function(t,e,n,i,o){var d=l(t),r=e.exec;return r===c||r===u.exec?b&&!o?{done:!0,value:h(e,n,i)}:{done:!0,value:d(n,e,i)}:{done:!1}}));i(String.prototype,t,p[0]),i(u,Z,p[1])}s&&r(u[Z],"sham",!0)}},function(t,e,n){"use strict";var l=n(82).charAt;t.exports=function(t,e,n){return e+(n?l(t,e).length:1)}},function(t,e,n){var l=n(17),i=n(33),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,n){var l,i,c=n(1),o=n(101),d=n(10),r=n(29),a=n(32),u=n(19),s=n(7),Z=n(24),b=s("asyncIterator"),m=c.AsyncIterator,h=o.AsyncIteratorPrototype;if(h)l=h;else if(d(m))l=m.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=a(a(a(Function("return async function*(){}()")()))),a(i)===Object.prototype&&(l=i)}catch(t){}l?Z&&(l=r(l)):l={},d(l[b])||u(l,b,(function(){return this})),t.exports=l},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t,e=c(this),n=i(e.delete),o=!0,d=0,r=arguments.length;d<r;d++)t=l(n,e,arguments[d]),o=o&&t;return!!o}},function(t,e,n){"use strict";var l=n(22),i=n(5),c=n(6),o=n(112),d=n(8),r=[].push;t.exports=function(t){var e,n,a,u,s=arguments.length,Z=s>1?arguments[1]:void 0;return o(this),(e=void 0!==Z)&&c(Z),null==t?new this:(n=[],e?(a=0,u=l(Z,s>2?arguments[2]:void 0),d(t,(function(t){i(r,n,u(t,a++))}))):d(t,r,{that:n}),new this(n))}},function(t,e,n){"use strict";var l=n(60);t.exports=function(){return new this(l(arguments))}},function(t,e,n){var l=n(1),i=n(5),c=n(12),o=n(71),d=n(27),r=n(165),a=n(7),u=l.TypeError,s=a("toPrimitive");t.exports=function(t,e){if(!c(t)||o(t))return t;var n,l=d(t,s);if(l){if(void 0===e&&(e="default"),n=i(l,t,e),!c(n)||o(n))return n;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),r(t,e)}},function(t,e,n){var l=n(1),i=Object.defineProperty;t.exports=function(t,e){try{i(l,t,{value:e,configurable:!0,writable:!0})}catch(n){l[t]=e}return e}},function(t,e,n){var l=n(15),i=n(133),c=n(31),o=n(16);t.exports=function(t,e,n){for(var d=i(e),r=o.f,a=c.f,u=0;u<d.length;u++){var s=d[u];l(t,s)||n&&l(n,s)||r(t,s,a(e,s))}}},function(t,e,n){var l=n(11),i=n(3),c=n(57),o=n(105),d=n(2),r=i([].concat);t.exports=l("Reflect","ownKeys")||function(t){var e=c.f(d(t)),n=o.f;return n?r(e,n(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,e,n){var l=n(40),i=n(34),c=n(57).f,o=n(89),d="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return d&&"Window"==l(t)?function(t){try{return c(t)}catch(t){return o(d)}}(t):c(i(t))}},function(t,e,n){"use strict";var l=n(13),i=n(49),c=n(21);t.exports=function(t){for(var e=l(this),n=c(e),o=arguments.length,d=i(o>1?arguments[1]:void 0,n),r=o>2?arguments[2]:void 0,a=void 0===r?n:i(r,n);a>d;)e[d++]=t;return e}},function(t,e,n){var l=n(2),i=n(107);t.exports=function(t,e,n,c){try{return c?e(l(n)[0],n[1]):e(n)}catch(e){i(t,"throw",e)}}},function(t,e,n){var l=n(7),i=n(91),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(24),o=n(74),d=n(10),r=n(77),a=n(32),u=n(51),s=n(41),Z=n(28),b=n(19),m=n(7),h=n(91),p=n(92),I=o.PROPER,G=o.CONFIGURABLE,g=p.IteratorPrototype,X=p.BUGGY_SAFARI_ITERATORS,y=m("iterator"),V=function(){return this};t.exports=function(t,e,n,o,m,p,W){r(n,e,o);var C,R,f,Y=function(t){if(t===m&&J)return J;if(!X&&t in K)return K[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},v=e+" Iterator",S=!1,K=t.prototype,N=K[y]||K["@@iterator"]||m&&K[m],J=!X&&N||Y(m),H="Array"==e&&K.entries||N;if(H&&(C=a(H.call(new t)))!==Object.prototype&&C.next&&(c||a(C)===g||(u?u(C,g):d(C[y])||b(C,y,V)),s(C,v,!0,!0),c&&(h[v]=V)),I&&"values"==m&&N&&"values"!==N.name&&(!c&&G?Z(K,"name","values"):(S=!0,J=function(){return i(N,this)})),m)if(R={values:Y("values"),keys:p?J:Y("keys"),entries:Y("entries")},W)for(f in R)(X||S||!(f in K))&&b(K,f,R[f]);else l({target:e,proto:!0,forced:X||S},R);return c&&!W||K[y]===J||b(K,y,J,{name:m}),h[e]=J,R}},function(t,e,n){var l=n(4);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var l=n(89),i=Math.floor,c=function(t,e){var n=t.length,r=i(n/2);return n<8?o(t,e):d(t,c(l(t,0,r),e),c(l(t,r),e),e)},o=function(t,e){for(var n,l,i=t.length,c=1;c<i;){for(l=c,n=t[c];l&&e(t[l-1],n)>0;)t[l]=t[--l];l!==c++&&(t[l]=n)}return t},d=function(t,e,n,l){for(var i=e.length,c=n.length,o=0,d=0;o<i||d<c;)t[o+d]=o<i&&d<c?l(e[o],n[d])<=0?e[o++]:n[d++]:o<i?e[o++]:n[d++];return t};t.exports=c},function(t,e,n){var l=n(48).match(/AppleWebKit\/(\d+)\./);t.exports=!!l&&+l[1]},function(t,e){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,e,n){var l=n(3),i=n(37),c=n(14),o=n(146),d=n(26),r=l(o),a=l("".slice),u=Math.ceil,s=function(t){return function(e,n,l){var o,s,Z=c(d(e)),b=i(n),m=Z.length,h=void 0===l?" ":c(l);return b<=m||""==h?Z:((s=r(h,u((o=b-m)/h.length))).length>o&&(s=a(s,0,o)),t?Z+s:s+Z)}};t.exports={start:s(!1),end:s(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(35),c=n(14),o=n(26),d=l.RangeError;t.exports=function(t){var e=c(o(this)),n="",l=i(t);if(l<0||l==1/0)throw d("Wrong number of repetitions");for(;l>0;(l>>>=1)&&(e+=e))1&l&&(n+=e);return n}},function(t,e,n){n(287)},function(t,e,n){var l=n(4);t.exports=l((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){var l=n(3);t.exports=l(1..valueOf)},function(t,e,n){var l=n(12),i=Math.floor;t.exports=Number.isInteger||function(t){return!l(t)&&isFinite(t)&&i(t)===t}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),d=n(79).trim,r=n(117),a=l.parseInt,u=l.Symbol,s=u&&u.iterator,Z=/^[+-]?0x/i,b=c(Z.exec),m=8!==a(r+"08")||22!==a(r+"0x16")||s&&!i((function(){a(Object(s))}));t.exports=m?function(t,e){var n=d(o(t));return a(n,e>>>0||(b(Z,n)?16:10))}:a},function(t,e,n){"use strict";var l=n(2);t.exports=function(){var t=l(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){"use strict";var l=n(0),i=n(122);l({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,n){var l=n(1),i=n(96),c=l.TypeError;t.exports=function(t){if(i(t))throw c("The method doesn't accept regular expressions");return t}},function(t,e,n){var l=n(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[l]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,n){var l=n(74).PROPER,i=n(4),c=n(117);t.exports=function(t){return i((function(){return!!c[t]()||"​…᠎"!=="​…᠎"[t]()||l&&c[t].name!==t}))}},function(t,e,n){var l=n(1),i=n(4),c=n(108),o=n(17).NATIVE_ARRAY_BUFFER_VIEWS,d=l.ArrayBuffer,r=l.Int8Array;t.exports=!o||!i((function(){r(1)}))||!i((function(){new r(-1)}))||!c((function(t){new r,new r(null),new r(1.5),new r(t)}),!0)||i((function(){return 1!==new r(new d(2),1,void 0).length}))},function(t,e,n){n(449)},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(10),d=n(2),r=l.TypeError;t.exports=function(t,e){var n,l=d(this),a=c(l.get),u=c(l.has),s=c(l.set),Z=arguments.length>2?arguments[2]:void 0;if(!o(e)&&!o(Z))throw r("At least one callback required");return i(u,l,t)?(n=i(a,l,t),o(e)&&(n=e(n),i(s,l,t,n))):o(Z)&&(n=Z(),i(s,l,t,n)),n}},function(t,e,n){"use strict";var l=n(20),i=n(77),c=n(15),o=n(75),d=n(13),r=l.set,a=l.getterFor("Object Iterator");t.exports=i((function(t,e){var n=d(t);r(this,{type:"Object Iterator",mode:e,object:n,keys:o(n),index:0})}),"Object",(function(){for(var t=a(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,{value:void 0,done:!0};var n=e[t.index++],l=t.object;if(c(l,n)){switch(t.mode){case"keys":return{value:n,done:!1};case"values":return{value:l[n],done:!1}}return{value:[n,l[n]],done:!1}}}}))},function(t,e,n){var l=n(1),i=n(10),c=n(7)("observable"),o=l.Observable,d=o&&o.prototype;t.exports=!(i(o)&&i(o.from)&&i(o.of)&&i(d.subscribe)&&i(d[c]))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var l=n(72);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var l=n(1),i=n(5),c=n(10),o=n(12),d=l.TypeError;t.exports=function(t,e){var n,l;if("string"===e&&c(n=t.toString)&&!o(l=i(n,t)))return l;if(c(n=t.valueOf)&&!o(l=i(n,t)))return l;if("string"!==e&&c(n=t.toString)&&!o(l=i(n,t)))return l;throw d("Can't convert object to primitive value")}},function(t,e,n){var l=n(9),i=n(4),c=n(102);t.exports=!l&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var l=n(9),i=n(4);t.exports=l&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,n){var l=n(1),i=n(10),c=n(103),o=l.WeakMap;t.exports=i(o)&&/native code/.test(c(o))},function(t,e,n){var l=n(3),i=n(15),c=n(34),o=n(87).indexOf,d=n(86),r=l([].push);t.exports=function(t,e){var n,l=c(t),a=0,u=[];for(n in l)!i(d,n)&&i(l,n)&&r(u,n);for(;e.length>a;)i(l,n=e[a++])&&(~o(u,n)||r(u,n));return u}},function(t,e,n){var l=n(11);t.exports=l("document","documentElement")},function(t,e,n){var l=n(7);e.f=l},function(t,e,n){var l=n(5),i=n(11),c=n(7),o=n(19);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,d=c("toPrimitive");e&&!e[d]&&o(e,d,(function(t){return l(n,this)}))}},function(t,e,n){var l=n(72);t.exports=l&&!!Symbol.for&&!!Symbol.keyFor},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(5),d=n(3),r=n(4),a=n(59),u=n(10),s=n(12),Z=n(71),b=n(60),m=n(72),h=i("JSON","stringify"),p=d(/./.exec),I=d("".charAt),G=d("".charCodeAt),g=d("".replace),X=d(1..toString),y=/[\uD800-\uDFFF]/g,V=/^[\uD800-\uDBFF]$/,W=/^[\uDC00-\uDFFF]$/,C=!m||r((function(){var t=i("Symbol")();return"[null]"!=h([t])||"{}"!=h({a:t})||"{}"!=h(Object(t))})),R=r((function(){return'"\\udf06\\ud834"'!==h("\udf06\ud834")||'"\\udead"'!==h("\udead")})),f=function(t,e){var n=b(arguments),l=e;if((s(e)||void 0!==t)&&!Z(t))return a(e)||(e=function(t,e){if(u(l)&&(e=o(l,this,t,e)),!Z(e))return e}),n[1]=e,c(h,null,n)},Y=function(t,e,n){var l=I(n,e-1),i=I(n,e+1);return p(V,t)&&!p(W,i)||p(W,t)&&!p(V,l)?"\\u"+X(G(t,0),16):t};h&&l({target:"JSON",stat:!0,forced:C||R},{stringify:function(t,e,n){var l=b(arguments),i=c(C?f:h,null,l);return R&&"string"==typeof i?g(i,y,Y):i}})},function(t,e,n){"use strict";var l=n(13),i=n(49),c=n(21),o=Math.min;t.exports=[].copyWithin||function(t,e){var n=l(this),d=c(n),r=i(t,d),a=i(e,d),u=arguments.length>2?arguments[2]:void 0,s=o((void 0===u?d:i(u,d))-a,d-r),Z=1;for(a<r&&r<a+s&&(Z=-1,a+=s-1,r+=s-1);s-- >0;)a in n?n[r]=n[a]:delete n[r],r+=Z,a+=Z;return n}},function(t,e,n){"use strict";var l=n(1),i=n(59),c=n(21),o=n(22),d=l.TypeError,r=function(t,e,n,l,a,u,s,Z){for(var b,m,h=a,p=0,I=!!s&&o(s,Z);p<l;){if(p in n){if(b=I?I(n[p],p,e):n[p],u>0&&i(b))m=c(b),h=r(t,e,b,m,h,u-1)-1;else{if(h>=9007199254740991)throw d("Exceed the acceptable array length");t[h]=b}h++}p++}return h};t.exports=r},function(t,e,n){"use strict";var l=n(30).forEach,i=n(50)("forEach");t.exports=i?[].forEach:function(t){return l(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){"use strict";var l=n(1),i=n(22),c=n(5),o=n(13),d=n(138),r=n(139),a=n(65),u=n(21),s=n(58),Z=n(45),b=n(61),m=l.Array;t.exports=function(t){var e=o(t),n=a(this),l=arguments.length,h=l>1?arguments[1]:void 0,p=void 0!==h;p&&(h=i(h,l>2?arguments[2]:void 0));var I,G,g,X,y,V,W=b(e),C=0;if(!W||this==m&&r(W))for(I=u(e),G=n?new this(I):m(I);I>C;C++)V=p?h(e[C],C):e[C],s(G,C,V);else for(y=(X=Z(e,W)).next,G=n?new this:[];!(g=c(y,X)).done;C++)V=p?d(X,h,[g.value,C],!0):g.value,s(G,C,V);return G.length=C,G}},function(t,e,n){var l=n(1),i=n(10),c=l.String,o=l.TypeError;t.exports=function(t){if("object"==typeof t||i(t))return t;throw o("Can't set "+c(t)+" as a prototype")}},function(t,e,n){"use strict";var l=n(18),i=n(34),c=n(35),o=n(21),d=n(50),r=Math.min,a=[].lastIndexOf,u=!!a&&1/[1].lastIndexOf(1,-0)<0,s=d("lastIndexOf"),Z=u||!s;t.exports=Z?function(t){if(u)return l(a,this,arguments)||0;var e=i(this),n=o(e),d=n-1;for(arguments.length>1&&(d=r(d,c(arguments[1]))),d<0&&(d=n+d);d>=0;d--)if(d in e&&e[d]===t)return d||0;return-1}:a},function(t,e,n){var l=n(48).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,e,n){var l=n(48);t.exports=/MSIE|Trident/.test(l)},function(t,e,n){var l=n(1),i=n(35),c=n(37),o=l.RangeError;t.exports=function(t){if(void 0===t)return 0;var e=i(t),n=c(e);if(e!==n)throw o("Wrong length or index");return n}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(6),o=n(12),d=n(15),r=n(60),a=n(83),u=l.Function,s=i([].concat),Z=i([].join),b={},m=function(t,e,n){if(!d(b,e)){for(var l=[],i=0;i<e;i++)l[i]="a["+i+"]";b[e]=u("C,a","return new C("+Z(l,",")+")")}return b[e](t,n)};t.exports=a?u.bind:function(t){var e=c(this),n=e.prototype,l=r(arguments,1),i=function(){var n=s(l,r(arguments));return this instanceof i?m(e,n.length,n):e.apply(t,n)};return o(n)&&(i.prototype=n),i}},function(t,e,n){"use strict";var l=n(16).f,i=n(29),c=n(46),o=n(22),d=n(42),r=n(8),a=n(140),u=n(66),s=n(9),Z=n(67).fastKey,b=n(20),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,e,n,a){var u=t((function(t,l){d(t,b),m(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),s||(t.size=0),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),b=u.prototype,p=h(e),I=function(t,e,n){var l,i,c=p(t),o=G(t,e);return o?o.value=n:(c.last=o={index:i=Z(e,!0),key:e,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),s?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},G=function(t,e){var n,l=p(t),i=Z(e);if("F"!==i)return l.index[i];for(n=l.first;n;n=n.next)if(n.key==e)return n};return c(b,{clear:function(){for(var t=p(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,s?t.size=0:this.size=0},delete:function(t){var e=p(this),n=G(this,t);if(n){var l=n.next,i=n.previous;delete e.index[n.index],n.removed=!0,i&&(i.next=l),l&&(l.previous=i),e.first==n&&(e.first=l),e.last==n&&(e.last=i),s?e.size--:this.size--}return!!n},forEach:function(t){for(var e,n=p(this),l=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(l(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!G(this,t)}}),c(b,n?{get:function(t){var e=G(this,t);return e&&e.value},set:function(t,e){return I(this,0===t?0:t,e)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),s&&l(b,"size",{get:function(){return p(this).size}}),u},setStrong:function(t,e,n){var l=e+" Iterator",i=h(e),c=h(l);a(t,e,(function(t,e){m(this,{type:l,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(e)}}},function(t,e){var n=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:n(1+t)}},function(t,e,n){var l=n(149),i=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),r=c(2,127)*(2-d),a=c(2,-126);t.exports=Math.fround||function(t){var e,n,c=i(t),u=l(t);return c<a?u*(c/a/d+1/o-1/o)*a*d:(n=(e=(1+d/o)*c)-(e-c))>r||n!=n?u*(1/0):u*n}},function(t,e,n){var l=n(1).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),d=n(79).trim,r=n(117),a=c("".charAt),u=l.parseFloat,s=l.Symbol,Z=s&&s.iterator,b=1/u(r+"-0")!=-1/0||Z&&!i((function(){u(Object(Z))}));t.exports=b?function(t){var e=d(o(t)),n=u(e);return 0===n&&"-"==a(e,0)?-0:n}:u},function(t,e,n){"use strict";var l=n(9),i=n(3),c=n(5),o=n(4),d=n(75),r=n(105),a=n(100),u=n(13),s=n(84),Z=Object.assign,b=Object.defineProperty,m=i([].concat);t.exports=!Z||o((function(){if(l&&1!==Z({b:1},Z(b({},"a",{enumerable:!0,get:function(){b(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=Z({},t)[n]||"abcdefghijklmnopqrst"!=d(Z({},e)).join("")}))?function(t,e){for(var n=u(t),i=arguments.length,o=1,Z=r.f,b=a.f;i>o;)for(var h,p=s(arguments[o++]),I=Z?m(d(p),Z(p)):d(p),G=I.length,g=0;G>g;)h=I[g++],l&&!c(b,p,h)||(n[h]=p[h]);return n}:Z},function(t,e,n){var l=n(9),i=n(3),c=n(75),o=n(34),d=i(n(100).f),r=i([].push),a=function(t){return function(e){for(var n,i=o(e),a=c(i),u=a.length,s=0,Z=[];u>s;)n=a[s++],l&&!d(i,n)||r(Z,t?[n,i[n]]:i[n]);return Z}};t.exports={entries:a(!0),values:a(!1)}},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){var l=n(48);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,e,n){var l,i,c,o,d,r,a,u,s=n(1),Z=n(22),b=n(31).f,m=n(119).set,h=n(193),p=n(349),I=n(350),G=n(78),g=s.MutationObserver||s.WebKitMutationObserver,X=s.document,y=s.process,V=s.Promise,W=b(s,"queueMicrotask"),C=W&&W.value;C||(l=function(){var t,e;for(G&&(t=y.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?o():c=void 0,t}}c=void 0,t&&t.enter()},h||G||I||!g||!X?!p&&V&&V.resolve?((a=V.resolve(void 0)).constructor=V,u=Z(a.then,a),o=function(){u(l)}):G?o=function(){y.nextTick(l)}:(m=Z(m,s),o=function(){m(l)}):(d=!0,r=X.createTextNode(""),new g(l).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=C||function(t){var e={fn:t,next:void 0};c&&(c.next=e),i||(i=e,o()),c=e}},function(t,e,n){var l=n(1);t.exports=function(t,e){var n=l.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},function(t,e,n){var l=n(81),i=n(108),c=n(95).CONSTRUCTOR;t.exports=c||!i((function(t){l.all(t).then(void 0,(function(){}))}))},function(t,e,n){var l=n(2),i=n(12),c=n(62);t.exports=function(t,e){if(l(t),i(e)&&e.constructor===t)return e;var n=c.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var l=n(15);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,n){"use strict";var l=n(82).charAt,i=n(14),c=n(20),o=n(140),d=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=r(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=l(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var l=n(48);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,e,n){var l=n(3),i=n(13),c=Math.floor,o=l("".charAt),d=l("".replace),r=l("".slice),a=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,l,s,Z){var b=n+t.length,m=l.length,h=u;return void 0!==s&&(s=i(s),h=a),d(Z,h,(function(i,d){var a;switch(o(d,0)){case"$":return"$";case"&":return t;case"`":return r(e,0,n);case"'":return r(e,b);case"<":a=s[r(d,1,-1)];break;default:var u=+d;if(0===u)return i;if(u>m){var Z=c(u/10);return 0===Z?i:Z<=m?void 0===l[Z-1]?o(d,1):l[Z-1]+o(d,1):i}a=l[u-1]}return void 0===a?"":a}))}},function(t,e,n){"use strict";var l=n(79).end,i=n(157);t.exports=i("trimEnd")?function(){return l(this)}:"".trimEnd},function(t,e,n){"use strict";var l=n(79).start,i=n(157);t.exports=i("trimStart")?function(){return l(this)}:"".trimStart},function(t,e,n){var l=n(1),i=n(98),c=l.RangeError;t.exports=function(t,e){var n=i(t);if(n%e)throw c("Wrong offset");return n}},function(t,e,n){var l=n(22),i=n(5),c=n(112),o=n(13),d=n(21),r=n(45),a=n(61),u=n(139),s=n(17).aTypedArrayConstructor;t.exports=function(t){var e,n,Z,b,m,h,p=c(this),I=o(t),G=arguments.length,g=G>1?arguments[1]:void 0,X=void 0!==g,y=a(I);if(y&&!u(y))for(h=(m=r(I,y)).next,I=[];!(b=i(h,m)).done;)I.push(b.value);for(X&&G>2&&(g=l(g,arguments[2])),n=d(I),Z=new(s(p))(n),e=0;n>e;e++)Z[e]=X?g(I[e],e):I[e];return Z}},function(t,e,n){"use strict";var l=n(3),i=n(46),c=n(67).getWeakData,o=n(2),d=n(12),r=n(42),a=n(8),u=n(30),s=n(15),Z=n(20),b=Z.set,m=Z.getterFor,h=u.find,p=u.findIndex,I=l([].splice),G=0,g=function(t){return t.frozen||(t.frozen=new X)},X=function(){this.entries=[]},y=function(t,e){return h(t.entries,(function(t){return t[0]===e}))};X.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var n=y(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=p(this.entries,(function(e){return e[0]===t}));return~e&&I(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,l){var u=t((function(t,i){r(t,Z),b(t,{type:e,id:G++,frozen:void 0}),null!=i&&a(i,t[l],{that:t,AS_ENTRIES:n})})),Z=u.prototype,h=m(e),p=function(t,e,n){var l=h(t),i=c(o(e),!0);return!0===i?g(l).set(e,n):i[l.id]=n,t};return i(Z,{delete:function(t){var e=h(this);if(!d(t))return!1;var n=c(t);return!0===n?g(e).delete(t):n&&s(n,e.id)&&delete n[e.id]},has:function(t){var e=h(this);if(!d(t))return!1;var n=c(t);return!0===n?g(e).has(t):n&&s(n,e.id)}}),i(Z,n?{get:function(t){var e=h(this);if(d(t)){var n=c(t);return!0===n?g(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return p(this,t,e)}}:{add:function(t){return p(this,t,!0)}}),u}}},function(t,e,n){var l=n(5),i=n(210),c=n(2),o=n(45),d=n(27),r=n(7)("asyncIterator");t.exports=function(t,e){var n=arguments.length<2?d(t,r):e;return n?c(l(n,t)):new i(o(t))}},function(t,e,n){"use strict";var l=n(18),i=n(2),c=n(29),o=n(27),d=n(46),r=n(20),a=n(11),u=n(126),s=a("Promise"),Z=r.set,b=r.getterFor("AsyncFromSyncIterator"),m=function(t,e,n){var l=t.done;s.resolve(t.value).then((function(t){e({done:l,value:t})}),n)},h=function(t){Z(this,{type:"AsyncFromSyncIterator",iterator:i(t),next:t.next})};h.prototype=d(c(u),{next:function(t){var e=b(this),n=!!arguments.length;return new s((function(c,o){var d=i(l(e.next,e.iterator,n?[t]:[]));m(d,c,o)}))},return:function(t){var e=b(this).iterator,n=!!arguments.length;return new s((function(c,d){var r=o(e,"return");if(void 0===r)return c({done:!0,value:t});var a=i(l(r,e,n?[t]:[]));m(a,c,d)}))},throw:function(t){var e=b(this).iterator,n=!!arguments.length;return new s((function(c,d){var r=o(e,"throw");if(void 0===r)return d(t);var a=i(l(r,e,n?[t]:[]));m(a,c,d)}))}}),t.exports=h},function(t,e,n){n(147),n(159);var l=n(1),i=n(11),c=n(29),o=n(12),d=l.Object,r=l.TypeError,a=i("Map"),u=i("WeakMap"),s=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};s.prototype.get=function(t,e){return this[t]||(this[t]=e())},s.prototype.next=function(t,e,n){var l=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new u):this.primitives||(this.primitives=new a),i=l.get(e);return i||l.set(e,i=new s),i};var Z=new s;t.exports=function(){var t,e,n=Z,l=arguments.length;for(t=0;t<l;t++)o(e=arguments[t])&&(n=n.next(t,e,!0));if(this===d&&n===Z)throw r("Composite keys must contain a non-primitive component");for(t=0;t<l;t++)o(e=arguments[t])||(n=n.next(t,e,!1));return n}},function(t,e){t.exports=Math.scale||function(t,e,n,l,i){var c=+t,o=+e,d=+n,r=+l,a=+i;return c!=c||o!=o||d!=d||r!=r||a!=a?NaN:c===1/0||c===-1/0?c:(c-o)*(a-r)/(d-o)+r}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t=c(this),e=i(t.add),n=0,o=arguments.length;n<o;n++)l(e,t,arguments[n]);return t}},function(t,e){t.exports={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}},function(t,e,n){var l=n(102)("span").classList,i=l&&l.constructor&&l.constructor.prototype;t.exports=i===Object.prototype?void 0:i},function(t,e,n){var l=n(1),i=n(18),c=n(10),o=n(48),d=n(60),r=n(94),a=/MSIE .\./.test(o),u=l.Function,s=function(t){return a?function(e,n){var l=r(arguments.length,1)>2,o=c(e)?e:u(e),a=l?d(arguments,2):void 0;return t(l?function(){i(o,this,a)}:o,n)}:t};t.exports={setTimeout:s(l.setTimeout),setInterval:s(l.setInterval)}},function(t,e,n){var l=n(4),i=n(7),c=n(24),o=i("iterator");t.exports=!l((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,l){e.delete("b"),n+=l+t})),c&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},function(t,e,n){"use strict";n(109);var l=n(0),i=n(1),c=n(5),o=n(3),d=n(9),r=n(217),a=n(19),u=n(46),s=n(41),Z=n(77),b=n(20),m=n(42),h=n(10),p=n(15),I=n(22),G=n(64),g=n(2),X=n(12),y=n(14),V=n(29),W=n(43),C=n(45),R=n(61),f=n(94),Y=n(7),v=n(142),S=Y("iterator"),K=b.set,N=b.getterFor("URLSearchParams"),J=b.getterFor("URLSearchParamsIterator"),H=Object.getOwnPropertyDescriptor,L=function(t){if(!d)return i(t);var e=H(i,t);return e&&e.value},U=L("fetch"),k=L("Request"),B=L("Headers"),x=k&&k.prototype,F=B&&B.prototype,T=i.RegExp,A=i.TypeError,z=i.decodeURIComponent,w=i.encodeURIComponent,Q=o("".charAt),j=o([].join),P=o([].push),M=o("".replace),E=o([].shift),D=o([].splice),O=o("".split),_=o("".slice),q=/\+/g,$=Array(4),tt=function(t){return $[t-1]||($[t-1]=T("((?:%[\\da-f]{2}){"+t+"})","gi"))},et=function(t){try{return z(t)}catch(e){return t}},nt=function(t){var e=M(t,q," "),n=4;try{return z(e)}catch(t){for(;n;)e=M(e,tt(n--),et);return e}},lt=/[!'()~]|%20/g,it={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ct=function(t){return it[t]},ot=function(t){return M(w(t),lt,ct)},dt=Z((function(t,e){K(this,{type:"URLSearchParamsIterator",iterator:C(N(t).entries),kind:e})}),"Iterator",(function(){var t=J(this),e=t.kind,n=t.iterator.next(),l=n.value;return n.done||(n.value="keys"===e?l.key:"values"===e?l.value:[l.key,l.value]),n}),!0),rt=function(t){this.entries=[],this.url=null,void 0!==t&&(X(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===Q(t,0)?_(t,1):t:y(t)))};rt.prototype={type:"URLSearchParams",bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,l,i,o,d,r,a=R(t);if(a)for(n=(e=C(t,a)).next;!(l=c(n,e)).done;){if(o=(i=C(g(l.value))).next,(d=c(o,i)).done||(r=c(o,i)).done||!c(o,i).done)throw A("Expected sequence with length 2");P(this.entries,{key:y(d.value),value:y(r.value)})}else for(var u in t)p(t,u)&&P(this.entries,{key:u,value:y(t[u])})},parseQuery:function(t){if(t)for(var e,n,l=O(t,"&"),i=0;i<l.length;)(e=l[i++]).length&&(n=O(e,"="),P(this.entries,{key:nt(E(n)),value:nt(j(n,"="))}))},serialize:function(){for(var t,e=this.entries,n=[],l=0;l<e.length;)t=e[l++],P(n,ot(t.key)+"="+ot(t.value));return j(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var at=function(){m(this,ut);var t=arguments.length>0?arguments[0]:void 0;K(this,new rt(t))},ut=at.prototype;if(u(ut,{append:function(t,e){f(arguments.length,2);var n=N(this);P(n.entries,{key:y(t),value:y(e)}),n.updateURL()},delete:function(t){f(arguments.length,1);for(var e=N(this),n=e.entries,l=y(t),i=0;i<n.length;)n[i].key===l?D(n,i,1):i++;e.updateURL()},get:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=0;l<e.length;l++)if(e[l].key===n)return e[l].value;return null},getAll:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=[],i=0;i<e.length;i++)e[i].key===n&&P(l,e[i].value);return l},has:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=0;l<e.length;)if(e[l++].key===n)return!0;return!1},set:function(t,e){f(arguments.length,1);for(var n,l=N(this),i=l.entries,c=!1,o=y(t),d=y(e),r=0;r<i.length;r++)(n=i[r]).key===o&&(c?D(i,r--,1):(c=!0,n.value=d));c||P(i,{key:o,value:d}),l.updateURL()},sort:function(){var t=N(this);v(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=N(this).entries,l=I(t,arguments.length>1?arguments[1]:void 0),i=0;i<n.length;)l((e=n[i++]).value,e.key,this)},keys:function(){return new dt(this,"keys")},values:function(){return new dt(this,"values")},entries:function(){return new dt(this,"entries")}},{enumerable:!0}),a(ut,S,ut.entries,{name:"entries"}),a(ut,"toString",(function(){return N(this).serialize()}),{enumerable:!0}),s(at,"URLSearchParams"),l({global:!0,forced:!r},{URLSearchParams:at}),!r&&h(B)){var st=o(F.has),Zt=o(F.set),bt=function(t){if(X(t)){var e,n=t.body;if("URLSearchParams"===G(n))return e=t.headers?new B(t.headers):new B,st(e,"content-type")||Zt(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),V(t,{body:W(0,y(n)),headers:W(0,e)})}return t};if(h(U)&&l({global:!0,enumerable:!0,noTargetGet:!0,forced:!0},{fetch:function(t){return U(t,arguments.length>1?bt(arguments[1]):{})}}),h(k)){var mt=function(t){return m(this,x),new k(t,arguments.length>1?bt(arguments[1]):{})};x.constructor=mt,mt.prototype=x,l({global:!0,forced:!0,noTargetGet:!0},{Request:mt})}}t.exports={URLSearchParams:at,getState:N}},function(t,n){t.exports=e},function(t,e,n){n(221),n(224),n(225),n(174),n(226)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(24),r=n(9),a=n(72),u=n(4),s=n(15),Z=n(36),b=n(2),m=n(34),h=n(55),p=n(14),I=n(43),G=n(29),g=n(75),X=n(57),y=n(136),V=n(105),W=n(31),C=n(16),R=n(106),f=n(100),Y=n(19),v=n(63),S=n(104),K=n(86),N=n(85),J=n(7),H=n(171),L=n(25),U=n(172),k=n(41),B=n(20),x=n(30).forEach,F=S("hidden"),T=B.set,A=B.getterFor("Symbol"),z=Object.prototype,w=i.Symbol,Q=w&&w.prototype,j=i.TypeError,P=i.QObject,M=W.f,E=C.f,D=y.f,O=f.f,_=o([].push),q=v("symbols"),$=v("op-symbols"),tt=v("wks"),et=!P||!P.prototype||!P.prototype.findChild,nt=r&&u((function(){return 7!=G(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,n){var l=M(z,e);l&&delete z[e],E(t,e,n),l&&t!==z&&E(z,e,l)}:E,lt=function(t,e){var n=q[t]=G(Q);return T(n,{type:"Symbol",tag:t,description:e}),r||(n.description=e),n},it=function(t,e,n){t===z&&it($,e,n),b(t);var l=h(e);return b(n),s(q,l)?(n.enumerable?(s(t,F)&&t[F][l]&&(t[F][l]=!1),n=G(n,{enumerable:I(0,!1)})):(s(t,F)||E(t,F,I(1,{})),t[F][l]=!0),nt(t,l,n)):E(t,l,n)},ct=function(t,e){b(t);var n=m(e),l=g(n).concat(at(n));return x(l,(function(e){r&&!c(ot,n,e)||it(t,e,n[e])})),t},ot=function(t){var e=h(t),n=c(O,this,e);return!(this===z&&s(q,e)&&!s($,e))&&(!(n||!s(this,e)||!s(q,e)||s(this,F)&&this[F][e])||n)},dt=function(t,e){var n=m(t),l=h(e);if(n!==z||!s(q,l)||s($,l)){var i=M(n,l);return!i||!s(q,l)||s(n,F)&&n[F][l]||(i.enumerable=!0),i}},rt=function(t){var e=D(m(t)),n=[];return x(e,(function(t){s(q,t)||s(K,t)||_(n,t)})),n},at=function(t){var e=t===z,n=D(e?$:m(t)),l=[];return x(n,(function(t){!s(q,t)||e&&!s(z,t)||_(l,q[t])})),l};a||(Y(Q=(w=function(){if(Z(Q,this))throw j("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?p(arguments[0]):void 0,e=N(t),n=function(t){this===z&&c(n,$,t),s(this,F)&&s(this[F],e)&&(this[F][e]=!1),nt(this,e,I(1,t))};return r&&et&&nt(z,e,{configurable:!0,set:n}),lt(e,t)}).prototype,"toString",(function(){return A(this).tag})),Y(w,"withoutSetter",(function(t){return lt(N(t),t)})),f.f=ot,C.f=it,R.f=ct,W.f=dt,X.f=y.f=rt,V.f=at,H.f=function(t){return lt(J(t),t)},r&&(E(Q,"description",{configurable:!0,get:function(){return A(this).description}}),d||Y(z,"propertyIsEnumerable",ot,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!a,sham:!a},{Symbol:w}),x(g(tt),(function(t){L(t)})),l({target:"Symbol",stat:!0,forced:!a},{useSetter:function(){et=!0},useSimple:function(){et=!1}}),l({target:"Object",stat:!0,forced:!a,sham:!r},{create:function(t,e){return void 0===e?G(t):ct(G(t),e)},defineProperty:it,defineProperties:ct,getOwnPropertyDescriptor:dt}),l({target:"Object",stat:!0,forced:!a},{getOwnPropertyNames:rt}),U(),k(w,"Symbol"),K[F]=!0},function(t,e,n){var l=n(1);t.exports=l},function(t,e,n){var l=n(1),i=n(59),c=n(65),o=n(12),d=n(7)("species"),r=l.Array;t.exports=function(t){var e;return i(t)&&(e=t.constructor,(c(e)&&(e===r||i(e.prototype))||o(e)&&null===(e=e[d]))&&(e=void 0)),void 0===e?r:e}},function(t,e,n){var l=n(0),i=n(11),c=n(15),o=n(14),d=n(63),r=n(173),a=d("string-to-symbol-registry"),u=d("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!r},{for:function(t){var e=o(t);if(c(a,e))return a[e];var n=i("Symbol")(e);return a[e]=n,u[n]=e,n}})},function(t,e,n){var l=n(0),i=n(15),c=n(71),o=n(73),d=n(63),r=n(173),a=d("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!r},{keyFor:function(t){if(!c(t))throw TypeError(o(t)+" is not a symbol");if(i(a,t))return a[t]}})},function(t,e,n){var l=n(0),i=n(72),c=n(4),o=n(105),d=n(13);l({target:"Object",stat:!0,forced:!i||c((function(){o.f(1)}))},{getOwnPropertySymbols:function(t){var e=o.f;return e?e(d(t)):[]}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(1),o=n(3),d=n(15),r=n(10),a=n(36),u=n(14),s=n(16).f,Z=n(132),b=c.Symbol,m=b&&b.prototype;if(i&&r(b)&&(!("description"in m)||void 0!==b().description)){var h={},p=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:u(arguments[0]),e=a(m,this)?new b(t):void 0===t?b():b(t);return""===t&&(h[e]=!0),e};Z(p,b),p.prototype=m,m.constructor=p;var I="Symbol(test)"==String(b("test")),G=o(m.toString),g=o(m.valueOf),X=/^Symbol\((.*)\)[^)]+$/,y=o("".replace),V=o("".slice);s(m,"description",{configurable:!0,get:function(){var t=g(this),e=G(t);if(d(h,t))return"";var n=I?V(e,7,-1):y(e,X,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:p})}},function(t,e,n){n(25)("asyncIterator")},function(t,e,n){n(25)("hasInstance")},function(t,e,n){n(25)("isConcatSpreadable")},function(t,e,n){n(25)("iterator")},function(t,e,n){n(25)("match")},function(t,e,n){n(25)("matchAll")},function(t,e,n){n(25)("replace")},function(t,e,n){n(25)("search")},function(t,e,n){n(25)("species")},function(t,e,n){n(25)("split")},function(t,e,n){var l=n(25),i=n(172);l("toPrimitive"),i()},function(t,e,n){var l=n(11),i=n(25),c=n(41);i("toStringTag"),c(l("Symbol"),"Symbol")},function(t,e,n){n(25)("unscopables")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(59),d=n(12),r=n(13),a=n(21),u=n(58),s=n(76),Z=n(90),b=n(7),m=n(56),h=b("isConcatSpreadable"),p=i.TypeError,I=m>=51||!c((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),G=Z("concat"),g=function(t){if(!d(t))return!1;var e=t[h];return void 0!==e?!!e:o(t)};l({target:"Array",proto:!0,forced:!I||!G},{concat:function(t){var e,n,l,i,c,o=r(this),d=s(o,0),Z=0;for(e=-1,l=arguments.length;e<l;e++)if(g(c=-1===e?o:arguments[e])){if(Z+(i=a(c))>9007199254740991)throw p("Maximum allowed index exceeded");for(n=0;n<i;n++,Z++)n in c&&u(d,Z,c[n])}else{if(Z>=9007199254740991)throw p("Maximum allowed index exceeded");u(d,Z++,c)}return d.length=Z,d}})},function(t,e,n){var l=n(0),i=n(175),c=n(44);l({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,n){"use strict";var l=n(0),i=n(30).every;l({target:"Array",proto:!0,forced:!n(50)("every")},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(137),c=n(44);l({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,n){"use strict";var l=n(0),i=n(30).filter;l({target:"Array",proto:!0,forced:!n(90)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(30).find,c=n(44),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,e,n){"use strict";var l=n(0),i=n(30).findIndex,c=n(44),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(13),o=n(21),d=n(35),r=n(76);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),n=o(e),l=r(e,0);return l.length=i(l,e,e,n,0,void 0===t?1:d(t)),l}})},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(6),o=n(13),d=n(21),r=n(76);l({target:"Array",proto:!0},{flatMap:function(t){var e,n=o(this),l=d(n);return c(t),(e=r(n,0)).length=i(e,n,n,l,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},function(t,e,n){"use strict";var l=n(0),i=n(177);l({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,n){var l=n(0),i=n(178);l({target:"Array",stat:!0,forced:!n(108)((function(t){Array.from(t)}))},{from:i})},function(t,e,n){"use strict";var l=n(0),i=n(87).includes,c=n(44);l({target:"Array",proto:!0},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(87).indexOf,o=n(50),d=i([].indexOf),r=!!d&&1/d([1],1,-0)<0,a=o("indexOf");l({target:"Array",proto:!0,forced:r||!a},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return r?d(this,t,e)||0:c(this,t,e)}})},function(t,e,n){n(0)({target:"Array",stat:!0},{isArray:n(59)})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(84),o=n(34),d=n(50),r=i([].join),a=c!=Object,u=d("join",",");l({target:"Array",proto:!0,forced:a||!u},{join:function(t){return r(o(this),void 0===t?",":t)}})},function(t,e,n){var l=n(0),i=n(180);l({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,n){"use strict";var l=n(0),i=n(30).map;l({target:"Array",proto:!0,forced:!n(90)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(65),d=n(58),r=i.Array;l({target:"Array",stat:!0,forced:c((function(){function t(){}return!(r.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new(o(this)?this:r)(e);e>t;)d(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var l=n(0),i=n(110).left,c=n(50),o=n(56),d=n(78);l({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(110).right,c=n(50),o=n(56),d=n(78);l({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(59),o=i([].reverse),d=[1,2];l({target:"Array",proto:!0,forced:String(d)===String(d.reverse())},{reverse:function(){return c(this)&&(this.length=this.length),o(this)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(59),o=n(65),d=n(12),r=n(49),a=n(21),u=n(34),s=n(58),Z=n(7),b=n(90),m=n(60),h=b("slice"),p=Z("species"),I=i.Array,G=Math.max;l({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var n,l,i,Z=u(this),b=a(Z),h=r(t,b),g=r(void 0===e?b:e,b);if(c(Z)&&(n=Z.constructor,(o(n)&&(n===I||c(n.prototype))||d(n)&&null===(n=n[p]))&&(n=void 0),n===I||void 0===n))return m(Z,h,g);for(l=new(void 0===n?I:n)(G(g-h,0)),i=0;h<g;h++,i++)h in Z&&s(l,i,Z[h]);return l.length=i,l}})},function(t,e,n){"use strict";var l=n(0),i=n(30).some;l({target:"Array",proto:!0,forced:!n(50)("some")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(6),o=n(13),d=n(21),r=n(14),a=n(4),u=n(142),s=n(50),Z=n(181),b=n(182),m=n(56),h=n(143),p=[],I=i(p.sort),G=i(p.push),g=a((function(){p.sort(void 0)})),X=a((function(){p.sort(null)})),y=s("sort"),V=!a((function(){if(m)return m<70;if(!(Z&&Z>3)){if(b)return!0;if(h)return h<603;var t,e,n,l,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(l=0;l<47;l++)p.push({k:e+l,v:n})}for(p.sort((function(t,e){return e.v-t.v})),l=0;l<p.length;l++)e=p[l].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));l({target:"Array",proto:!0,forced:g||!X||!y||!V},{sort:function(t){void 0!==t&&c(t);var e=o(this);if(V)return void 0===t?I(e):I(e,t);var n,l,i=[],a=d(e);for(l=0;l<a;l++)l in e&&G(i,e[l]);for(u(i,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:r(e)>r(n)?1:-1}}(t)),n=i.length,l=0;l<n;)e[l]=i[l++];for(;l<a;)delete e[l++];return e}})},function(t,e,n){n(66)("Array")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(49),o=n(35),d=n(21),r=n(13),a=n(76),u=n(58),s=n(90)("splice"),Z=i.TypeError,b=Math.max,m=Math.min;l({target:"Array",proto:!0,forced:!s},{splice:function(t,e){var n,l,i,s,h,p,I=r(this),G=d(I),g=c(t,G),X=arguments.length;if(0===X?n=l=0:1===X?(n=0,l=G-g):(n=X-2,l=m(b(o(e),0),G-g)),G+n-l>9007199254740991)throw Z("Maximum allowed length exceeded");for(i=a(I,l),s=0;s<l;s++)(h=g+s)in I&&u(i,s,I[h]);if(i.length=l,n<l){for(s=g;s<G-l;s++)p=s+n,(h=s+l)in I?I[p]=I[h]:delete I[p];for(s=G;s>G-l+n;s--)delete I[s-1]}else if(n>l)for(s=G-l;s>g;s--)p=s+n-1,(h=s+l-1)in I?I[p]=I[h]:delete I[p];for(s=0;s<n;s++)I[s+g]=arguments[s+2];return I.length=G-l+n,i}})},function(t,e,n){n(44)("flat")},function(t,e,n){n(44)("flatMap")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(111),o=n(66),d=c.ArrayBuffer;l({global:!0,forced:i.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,e,n){var l=n(1).Array,i=Math.abs,c=Math.pow,o=Math.floor,d=Math.log,r=Math.LN2;t.exports={pack:function(t,e,n){var a,u,s,Z=l(n),b=8*n-e-1,m=(1<<b)-1,h=m>>1,p=23===e?c(2,-24)-c(2,-77):0,I=t<0||0===t&&1/t<0?1:0,G=0;for((t=i(t))!=t||t===1/0?(u=t!=t?1:0,a=m):(a=o(d(t)/r),t*(s=c(2,-a))<1&&(a--,s*=2),(t+=a+h>=1?p/s:p*c(2,1-h))*s>=2&&(a++,s/=2),a+h>=m?(u=0,a=m):a+h>=1?(u=(t*s-1)*c(2,e),a+=h):(u=t*c(2,h-1)*c(2,e),a=0));e>=8;)Z[G++]=255&u,u/=256,e-=8;for(a=a<<e|u,b+=e;b>0;)Z[G++]=255&a,a/=256,b-=8;return Z[--G]|=128*I,Z},unpack:function(t,e){var n,l=t.length,i=8*l-e-1,o=(1<<i)-1,d=o>>1,r=i-7,a=l-1,u=t[a--],s=127&u;for(u>>=7;r>0;)s=256*s+t[a--],r-=8;for(n=s&(1<<-r)-1,s>>=-r,r+=e;r>0;)n=256*n+t[a--],r-=8;if(0===s)s=1-d;else{if(s===o)return n?NaN:u?-1/0:1/0;n+=c(2,e),s-=d}return(u?-1:1)*n*c(2,s-e)}}},function(t,e,n){var l=n(0),i=n(17);l({target:"ArrayBuffer",stat:!0,forced:!i.NATIVE_ARRAY_BUFFER_VIEWS},{isView:i.isView})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(111),d=n(2),r=n(49),a=n(37),u=n(33),s=o.ArrayBuffer,Z=o.DataView,b=Z.prototype,m=i(s.prototype.slice),h=i(b.getUint8),p=i(b.setUint8);l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:c((function(){return!new s(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(m&&void 0===e)return m(d(this),t);for(var n=d(this).byteLength,l=r(t,n),i=r(void 0===e?n:e,n),c=new(u(this,s))(a(i-l)),o=new Z(this),b=new Z(c),I=0;l<i;)p(b,I++,h(o,l++));return c}})},function(t,e,n){n(274)},function(t,e,n){var l=n(0),i=n(111);l({global:!0,forced:!n(144)},{DataView:i.DataView})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=i.Date,d=c(o.prototype.getTime);l({target:"Date",stat:!0},{now:function(){return d(new o)}})},function(t,e,n){var l=n(0),i=n(277);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(145).start,d=l.RangeError,r=Math.abs,a=Date.prototype,u=a.toISOString,s=i(a.getTime),Z=i(a.getUTCDate),b=i(a.getUTCFullYear),m=i(a.getUTCHours),h=i(a.getUTCMilliseconds),p=i(a.getUTCMinutes),I=i(a.getUTCMonth),G=i(a.getUTCSeconds);t.exports=c((function(){return"0385-07-25T07:06:39.999Z"!=u.call(new Date(-50000000000001))}))||!c((function(){u.call(new Date(NaN))}))?function(){if(!isFinite(s(this)))throw d("Invalid time value");var t=b(this),e=h(this),n=t<0?"-":t>9999?"+":"";return n+o(r(t),n?6:4,0)+"-"+o(I(this)+1,2,0)+"-"+o(Z(this),2,0)+"T"+o(m(this),2,0)+":"+o(p(this),2,0)+":"+o(G(this),2,0)+"."+o(e,3,0)+"Z"}:u},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(13),o=n(130);l({target:"Date",proto:!0,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var e=c(this),n=o(e,"number");return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},function(t,e,n){var l=n(15),i=n(19),c=n(280),o=n(7)("toPrimitive"),d=Date.prototype;l(d,o)||i(d,o,c)},function(t,e,n){"use strict";var l=n(1),i=n(2),c=n(165),o=l.TypeError;t.exports=function(t){if(i(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return c(this,t)}},function(t,e,n){var l=n(3),i=n(19),c=Date.prototype,o=l(c.toString),d=l(c.getTime);"Invalid Date"!=String(new Date(NaN))&&i(c,"toString",(function(){var t=d(this);return t==t?o(this):"Invalid Date"}))},function(t,e,n){var l=n(0),i=n(184);l({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},function(t,e,n){"use strict";var l=n(10),i=n(12),c=n(16),o=n(32),d=n(7)("hasInstance"),r=Function.prototype;d in r||c.f(r,d,{value:function(t){if(!l(this)||!i(t))return!1;var e=this.prototype;if(!i(e))return t instanceof this;for(;t=o(t);)if(e===t)return!0;return!1}})},function(t,e,n){var l=n(9),i=n(74).EXISTS,c=n(3),o=n(16).f,d=Function.prototype,r=c(d.toString),a=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,u=c(a.exec);l&&!i&&o(d,"name",{configurable:!0,get:function(){try{return u(a,r(this))[1]}catch(t){return""}}})},function(t,e,n){n(0)({global:!0},{globalThis:n(1)})},function(t,e,n){var l=n(1);n(41)(l.JSON,"JSON",!0)},function(t,e,n){"use strict";n(113)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){var l=n(0),i=n(186),c=Math.acosh,o=Math.log,d=Math.sqrt,r=Math.LN2;l({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+r:i(t-1+d(t-1)*d(t+1))}})},function(t,e,n){var l=n(0),i=Math.asinh,c=Math.log,o=Math.sqrt;l({target:"Math",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):c(e+o(e*e+1)):e}})},function(t,e,n){var l=n(0),i=Math.atanh,c=Math.log;l({target:"Math",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,e,n){var l=n(0),i=n(149),c=Math.abs,o=Math.pow;l({target:"Math",stat:!0},{cbrt:function(t){return i(t=+t)*o(c(t),1/3)}})},function(t,e,n){var l=n(0),i=Math.floor,c=Math.log,o=Math.LOG2E;l({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-i(c(t+.5)*o):32}})},function(t,e,n){var l=n(0),i=n(116),c=Math.cosh,o=Math.abs,d=Math.E;l({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var e=i(o(t)-1)+1;return(e+1/(e*d*d))*(d/2)}})},function(t,e,n){var l=n(0),i=n(116);l({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,n){n(0)({target:"Math",stat:!0},{fround:n(187)})},function(t,e,n){var l=n(0),i=Math.hypot,c=Math.abs,o=Math.sqrt;l({target:"Math",stat:!0,forced:!!i&&i(1/0,NaN)!==1/0},{hypot:function(t,e){for(var n,l,i=0,d=0,r=arguments.length,a=0;d<r;)a<(n=c(arguments[d++]))?(i=i*(l=a/n)*l+1,a=n):i+=n>0?(l=n/a)*l:n;return a===1/0?1/0:a*o(i)}})},function(t,e,n){var l=n(0),i=n(4),c=Math.imul;l({target:"Math",stat:!0,forced:i((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l;return 0|i*c+((65535&n>>>16)*c+i*(65535&l>>>16)<<16>>>0)}})},function(t,e,n){n(0)({target:"Math",stat:!0},{log10:n(299)})},function(t,e){var n=Math.log,l=Math.LOG10E;t.exports=Math.log10||function(t){return n(t)*l}},function(t,e,n){n(0)({target:"Math",stat:!0},{log1p:n(186)})},function(t,e,n){var l=n(0),i=Math.log,c=Math.LN2;l({target:"Math",stat:!0},{log2:function(t){return i(t)/c}})},function(t,e,n){n(0)({target:"Math",stat:!0},{sign:n(149)})},function(t,e,n){var l=n(0),i=n(4),c=n(116),o=Math.abs,d=Math.exp,r=Math.E;l({target:"Math",stat:!0,forced:i((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(r/2)}})},function(t,e,n){var l=n(0),i=n(116),c=Math.exp;l({target:"Math",stat:!0},{tanh:function(t){var e=i(t=+t),n=i(-t);return e==1/0?1:n==1/0?-1:(e-n)/(c(t)+c(-t))}})},function(t,e,n){n(41)(Math,"Math",!0)},function(t,e,n){var l=n(0),i=Math.ceil,c=Math.floor;l({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:i)(t)}})},function(t,e,n){"use strict";var l=n(9),i=n(1),c=n(3),o=n(88),d=n(19),r=n(15),a=n(115),u=n(36),s=n(71),Z=n(130),b=n(4),m=n(57).f,h=n(31).f,p=n(16).f,I=n(150),G=n(79).trim,g=i.Number,X=g.prototype,y=i.TypeError,V=c("".slice),W=c("".charCodeAt),C=function(t){var e=Z(t,"number");return"bigint"==typeof e?e:R(e)},R=function(t){var e,n,l,i,c,o,d,r,a=Z(t,"number");if(s(a))throw y("Cannot convert a Symbol value to a number");if("string"==typeof a&&a.length>2)if(a=G(a),43===(e=W(a,0))||45===e){if(88===(n=W(a,2))||120===n)return NaN}else if(48===e){switch(W(a,1)){case 66:case 98:l=2,i=49;break;case 79:case 111:l=8,i=55;break;default:return+a}for(o=(c=V(a,2)).length,d=0;d<o;d++)if((r=W(c,d))<48||r>i)return NaN;return parseInt(c,l)}return+a};if(o("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var f,Y=function(t){var e=arguments.length<1?0:g(C(t)),n=this;return u(X,n)&&b((function(){I(n)}))?a(Object(e),n,Y):e},v=l?m(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),S=0;v.length>S;S++)r(g,f=v[S])&&!r(Y,f)&&p(Y,f,h(g,f));Y.prototype=X,X.constructor=Y,d(i,"Number",Y)}},function(t,e,n){n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isFinite:n(188)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isInteger:n(151)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,e,n){var l=n(0),i=n(151),c=Math.abs;l({target:"Number",stat:!0},{isSafeInteger:function(t){return i(t)&&c(t)<=9007199254740991}})},function(t,e,n){n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,n){n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,n){var l=n(0),i=n(189);l({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),d=n(150),r=n(146),a=n(4),u=i.RangeError,s=i.String,Z=Math.floor,b=c(r),m=c("".slice),h=c(1..toFixed),p=function(t,e,n){return 0===e?n:e%2==1?p(t,e-1,n*t):p(t*t,e/2,n)},I=function(t,e,n){for(var l=-1,i=n;++l<6;)i+=e*t[l],t[l]=i%1e7,i=Z(i/1e7)},G=function(t,e){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=Z(l/e),l=l%e*1e7},g=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var l=s(t[e]);n=""===n?l:n+b("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:a((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!a((function(){h({})}))},{toFixed:function(t){var e,n,l,i,c=d(this),r=o(t),a=[0,0,0,0,0,0],Z="",h="0";if(r<0||r>20)throw u("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return s(c);if(c<0&&(Z="-",c=-c),c>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(c*p(2,69,1))-69)<0?c*p(2,-e,1):c/p(2,e,1),n*=4503599627370496,(e=52-e)>0){for(I(a,0,n),l=r;l>=7;)I(a,1e7,0),l-=7;for(I(a,p(10,l,1),0),l=e-1;l>=23;)G(a,1<<23),l-=23;G(a,1<<l),I(a,1,1),G(a,2),h=g(a)}else I(a,0,n),I(a,1<<-e,0),h=g(a)+b("0",r);return h=r>0?Z+((i=h.length)<=r?"0."+b("0",r-i)+h:m(h,0,i-r)+"."+m(h,i-r)):Z+h}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(150),d=i(1..toPrecision);l({target:"Number",proto:!0,forced:c((function(){return"1"!==d(1,void 0)}))||!c((function(){d({})}))},{toPrecision:function(t){return void 0===t?d(o(this)):d(o(this),t)}})},function(t,e,n){var l=n(0),i=n(190);l({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},function(t,e,n){n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(29)})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),d=n(13),r=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){r.f(d(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(9),c=n(106).f;l({target:"Object",stat:!0,forced:Object.defineProperties!==c,sham:!i},{defineProperties:c})},function(t,e,n){var l=n(0),i=n(9),c=n(16).f;l({target:"Object",stat:!0,forced:Object.defineProperty!==c,sham:!i},{defineProperty:c})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),d=n(13),r=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){r.f(d(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(191).entries;l({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(93),c=n(4),o=n(12),d=n(67).onFreeze,r=Object.freeze;l({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!i},{freeze:function(t){return r&&o(t)?r(d(t)):t}})},function(t,e,n){var l=n(0),i=n(8),c=n(58);l({target:"Object",stat:!0},{fromEntries:function(t){var e={};return i(t,(function(t,n){c(e,t,n)}),{AS_ENTRIES:!0}),e}})},function(t,e,n){var l=n(0),i=n(4),c=n(34),o=n(31).f,d=n(9),r=i((function(){o(1)}));l({target:"Object",stat:!0,forced:!d||r,sham:!d},{getOwnPropertyDescriptor:function(t,e){return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(9),c=n(133),o=n(34),d=n(31),r=n(58);l({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,l=o(t),i=d.f,a=c(l),u={},s=0;a.length>s;)void 0!==(n=i(l,e=a[s++]))&&r(u,e,n);return u}})},function(t,e,n){var l=n(0),i=n(4),c=n(136).f;l({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,e,n){var l=n(0),i=n(4),c=n(13),o=n(32),d=n(141);l({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,e,n){n(0)({target:"Object",stat:!0},{is:n(192)})},function(t,e,n){var l=n(0),i=n(114);l({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),d=n(148),r=Object.isFrozen;l({target:"Object",stat:!0,forced:i((function(){r(1)}))||d},{isFrozen:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!r&&r(t))}})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),d=n(148),r=Object.isSealed;l({target:"Object",stat:!0,forced:i((function(){r(1)}))||d},{isSealed:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!r&&r(t))}})},function(t,e,n){var l=n(0),i=n(13),c=n(75);l({target:"Object",stat:!0,forced:n(4)((function(){c(1)}))},{keys:function(t){return c(i(t))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),d=n(55),r=n(32),a=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var e,n=o(this),l=d(t);do{if(e=a(n,l))return e.get}while(n=r(n))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),d=n(55),r=n(32),a=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var e,n=o(this),l=d(t);do{if(e=a(n,l))return e.set}while(n=r(n))}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),d=n(4),r=Object.preventExtensions;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&i(t)?r(c(t)):t}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),d=n(4),r=Object.seal;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{seal:function(t){return r&&i(t)?r(c(t)):t}})},function(t,e,n){n(0)({target:"Object",stat:!0},{setPrototypeOf:n(51)})},function(t,e,n){var l=n(135),i=n(19),c=n(343);l||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,n){"use strict";var l=n(135),i=n(64);t.exports=l?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,n){var l=n(0),i=n(191).values;l({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(189);l({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,n){n(348),n(353),n(354),n(355),n(356),n(357)},function(t,e,n){"use strict";var l,i,c,o=n(0),d=n(24),r=n(78),a=n(1),u=n(5),s=n(19),Z=n(46),b=n(51),m=n(41),h=n(66),p=n(6),I=n(10),G=n(12),g=n(42),X=n(33),y=n(119).set,V=n(194),W=n(195),C=n(80),R=n(351),f=n(20),Y=n(81),v=n(95),S=n(62),K=v.CONSTRUCTOR,N=v.REJECTION_EVENT,J=v.SUBCLASSING,H=f.getterFor("Promise"),L=f.set,U=Y&&Y.prototype,k=Y,B=U,x=a.TypeError,F=a.document,T=a.process,A=S.f,z=A,w=!!(F&&F.createEvent&&a.dispatchEvent),Q=function(t){var e;return!(!G(t)||!I(e=t.then))&&e},j=function(t,e){var n,l,i,c=e.value,o=1==e.state,d=o?t.ok:t.fail,r=t.resolve,a=t.reject,s=t.domain;try{d?(o||(2===e.rejection&&O(e),e.rejection=1),!0===d?n=c:(s&&s.enter(),n=d(c),s&&(s.exit(),i=!0)),n===t.promise?a(x("Promise-chain cycle")):(l=Q(n))?u(l,n,r,a):r(n)):a(c)}catch(t){s&&!i&&s.exit(),a(t)}},P=function(t,e){t.notified||(t.notified=!0,V((function(){for(var n,l=t.reactions;n=l.get();)j(n,t);t.notified=!1,e&&!t.rejection&&E(t)})))},M=function(t,e,n){var l,i;w?((l=F.createEvent("Event")).promise=e,l.reason=n,l.initEvent(t,!1,!0),a.dispatchEvent(l)):l={promise:e,reason:n},!N&&(i=a["on"+t])?i(l):"unhandledrejection"===t&&W("Unhandled promise rejection",n)},E=function(t){u(y,a,(function(){var e,n=t.facade,l=t.value;if(D(t)&&(e=C((function(){r?T.emit("unhandledRejection",l,n):M("unhandledrejection",n,l)})),t.rejection=r||D(t)?2:1,e.error))throw e.value}))},D=function(t){return 1!==t.rejection&&!t.parent},O=function(t){u(y,a,(function(){var e=t.facade;r?T.emit("rejectionHandled",e):M("rejectionhandled",e,t.value)}))},_=function(t,e,n){return function(l){t(e,l,n)}},q=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,P(t,!0))},$=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw x("Promise can't be resolved itself");var l=Q(e);l?V((function(){var n={done:!1};try{u(l,e,_($,n,t),_(q,n,t))}catch(e){q(n,e,t)}})):(t.value=e,t.state=1,P(t,!1))}catch(e){q({done:!1},e,t)}}};if(K&&(B=(k=function(t){g(this,B),p(t),u(l,this);var e=H(this);try{t(_($,e),_(q,e))}catch(t){q(e,t)}}).prototype,(l=function(t){L(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new R,rejection:!1,state:0,value:void 0})}).prototype=Z(B,{then:function(t,e){var n=H(this),l=A(X(this,k));return n.parent=!0,l.ok=!I(t)||t,l.fail=I(e)&&e,l.domain=r?T.domain:void 0,0==n.state?n.reactions.add(l):V((function(){j(l,n)})),l.promise}}),i=function(){var t=new l,e=H(t);this.promise=t,this.resolve=_($,e),this.reject=_(q,e)},S.f=A=function(t){return t===k||void 0===t?new i(t):z(t)},!d&&I(Y)&&U!==Object.prototype)){c=U.then,J||s(U,"then",(function(t,e){var n=this;return new k((function(t,e){u(c,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete U.constructor}catch(t){}b&&b(U,B)}o({global:!0,wrap:!0,forced:K},{Promise:k}),m(k,"Promise",!1,!0),h("Promise")},function(t,e,n){var l=n(48),i=n(1);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==i.Pebble},function(t,e,n){var l=n(48);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,e){var n=function(){this.head=null,this.tail=null};n.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=n},function(t,e){t.exports="object"==typeof window&&"object"!=typeof Deno},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),r=n(8);l({target:"Promise",stat:!0,forced:n(196)},{all:function(t){var e=this,n=o.f(e),l=n.resolve,a=n.reject,u=d((function(){var n=c(e.resolve),o=[],d=0,u=1;r(t,(function(t){var c=d++,r=!1;u++,i(n,e,t).then((function(t){r||(r=!0,o[c]=t,--u||l(o))}),a)})),--u||l(o)}));return u.error&&a(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(95).CONSTRUCTOR,o=n(81),d=n(11),r=n(10),a=n(19),u=o&&o.prototype;if(l({target:"Promise",proto:!0,forced:c,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&r(o)){var s=d("Promise").prototype.catch;u.catch!==s&&a(u,"catch",s,{unsafe:!0})}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),r=n(8);l({target:"Promise",stat:!0,forced:n(196)},{race:function(t){var e=this,n=o.f(e),l=n.reject,a=d((function(){var o=c(e.resolve);r(t,(function(t){i(o,e,t).then(n.resolve,l)}))}));return a.error&&l(a.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(62);l({target:"Promise",stat:!0,forced:n(95).CONSTRUCTOR},{reject:function(t){var e=c.f(this);return i(e.reject,void 0,t),e.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(24),o=n(81),d=n(95).CONSTRUCTOR,r=n(197),a=i("Promise"),u=c&&!d;l({target:"Promise",stat:!0,forced:c||d},{resolve:function(t){return r(u&&this===a?o:this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),r=n(8);l({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=o.f(e),l=n.resolve,a=n.reject,u=d((function(){var n=c(e.resolve),o=[],d=0,a=1;r(t,(function(t){var c=d++,r=!1;a++,i(n,e,t).then((function(t){r||(r=!0,o[c]={status:"fulfilled",value:t},--a||l(o))}),(function(t){r||(r=!0,o[c]={status:"rejected",reason:t},--a||l(o))}))})),--a||l(o)}));return u.error&&a(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(81),o=n(4),d=n(11),r=n(10),a=n(33),u=n(197),s=n(19),Z=c&&c.prototype;if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){Z.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=a(this,d("Promise")),n=r(t);return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}}),!i&&r(c)){var b=d("Promise").prototype.finally;Z.finally!==b&&s(Z,"finally",b,{unsafe:!0})}},function(t,e,n){var l=n(0),i=n(18),c=n(6),o=n(2);l({target:"Reflect",stat:!0,forced:!n(4)((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,n){return i(c(t),e,o(n))}})},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(184),d=n(112),r=n(2),a=n(12),u=n(29),s=n(4),Z=i("Reflect","construct"),b=Object.prototype,m=[].push,h=s((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),p=!s((function(){Z((function(){}))})),I=h||p;l({target:"Reflect",stat:!0,forced:I,sham:I},{construct:function(t,e){d(t),r(e);var n=arguments.length<3?t:d(arguments[2]);if(p&&!h)return Z(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var l=[null];return c(m,l,e),new(c(o,t,l))}var i=n.prototype,s=u(a(i)?i:b),I=c(t,s,e);return a(I)?I:s}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(55),d=n(16);l({target:"Reflect",stat:!0,forced:n(4)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!i},{defineProperty:function(t,e,n){c(t);var l=o(e);c(n);try{return d.f(t,l,n),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(2),c=n(31).f;l({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=c(i(t),e);return!(n&&!n.configurable)&&delete t[e]}})},function(t,e,n){var l=n(0),i=n(5),c=n(12),o=n(2),d=n(198),r=n(31),a=n(32);l({target:"Reflect",stat:!0},{get:function t(e,n){var l,u,s=arguments.length<3?e:arguments[2];return o(e)===s?e[n]:(l=r.f(e,n))?d(l)?l.value:void 0===l.get?void 0:i(l.get,s):c(u=a(e))?t(u,n,s):void 0}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(31);l({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return o.f(c(t),e)}})},function(t,e,n){var l=n(0),i=n(2),c=n(32);l({target:"Reflect",stat:!0,sham:!n(141)},{getPrototypeOf:function(t){return c(i(t))}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{has:function(t,e){return e in t}})},function(t,e,n){var l=n(0),i=n(2),c=n(114);l({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),c(t)}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(133)})},function(t,e,n){var l=n(0),i=n(11),c=n(2);l({target:"Reflect",stat:!0,sham:!n(93)},{preventExtensions:function(t){c(t);try{var e=i("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(5),c=n(2),o=n(12),d=n(198),r=n(4),a=n(16),u=n(31),s=n(32),Z=n(43);l({target:"Reflect",stat:!0,forced:r((function(){var t=function(){},e=a.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}))},{set:function t(e,n,l){var r,b,m,h=arguments.length<4?e:arguments[3],p=u.f(c(e),n);if(!p){if(o(b=s(e)))return t(b,n,l,h);p=Z(0)}if(d(p)){if(!1===p.writable||!o(h))return!1;if(r=u.f(h,n)){if(r.get||r.set||!1===r.writable)return!1;r.value=l,a.f(h,n,r)}else a.f(h,n,Z(0,l))}else{if(void 0===(m=p.set))return!1;i(m,h,l)}return!0}})},function(t,e,n){var l=n(0),i=n(2),c=n(179),o=n(51);o&&l({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){i(t),c(e);try{return o(t,e),!0}catch(t){return!1}}})},function(t,e,n){var l=n(9),i=n(1),c=n(3),o=n(88),d=n(115),r=n(28),a=n(57).f,u=n(36),s=n(96),Z=n(14),b=n(120),m=n(121),h=n(374),p=n(19),I=n(4),G=n(15),g=n(20).enforce,X=n(66),y=n(7),V=n(199),W=n(200),C=y("match"),R=i.RegExp,f=R.prototype,Y=i.SyntaxError,v=c(f.exec),S=c("".charAt),K=c("".replace),N=c("".indexOf),J=c("".slice),H=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,L=/a/g,U=/a/g,k=new R(L)!==L,B=m.MISSED_STICKY,x=m.UNSUPPORTED_Y,F=l&&(!k||B||V||W||I((function(){return U[C]=!1,R(L)!=L||R(U)==U||"/a/i"!=R(L,"i")})));if(o("RegExp",F)){for(var T=function(t,e){var n,l,i,c,o,a,m=u(f,this),h=s(t),p=void 0===e,I=[],X=t;if(!m&&h&&p&&t.constructor===T)return t;if((h||u(f,t))&&(t=t.source,p&&(e=b(X))),t=void 0===t?"":Z(t),e=void 0===e?"":Z(e),X=t,V&&"dotAll"in L&&(l=!!e&&N(e,"s")>-1)&&(e=K(e,/s/g,"")),n=e,B&&"sticky"in L&&(i=!!e&&N(e,"y")>-1)&&x&&(e=K(e,/y/g,"")),W&&(t=(c=function(t){for(var e,n=t.length,l=0,i="",c=[],o={},d=!1,r=!1,a=0,u="";l<=n;l++){if("\\"===(e=S(t,l)))e+=S(t,++l);else if("]"===e)d=!1;else if(!d)switch(!0){case"["===e:d=!0;break;case"("===e:v(H,J(t,l+1))&&(l+=2,r=!0),i+=e,a++;continue;case">"===e&&r:if(""===u||G(o,u))throw new Y("Invalid capture group name");o[u]=!0,c[c.length]=[u,a],r=!1,u="";continue}r?u+=e:i+=e}return[i,c]}(t))[0],I=c[1]),o=d(R(t,e),m?this:f,T),(l||i||I.length)&&(a=g(o),l&&(a.dotAll=!0,a.raw=T(function(t){for(var e,n=t.length,l=0,i="",c=!1;l<=n;l++)"\\"!==(e=S(t,l))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+S(t,++l);return i}(t),n)),i&&(a.sticky=!0),I.length&&(a.groups=I)),t!==X)try{r(o,"source",""===X?"(?:)":X)}catch(t){}return o},A=a(R),z=0;A.length>z;)h(T,R,A[z++]);f.constructor=T,T.prototype=f,p(i,"RegExp",T)}X("RegExp")},function(t,e,n){var l=n(16).f;t.exports=function(t,e,n){n in t||l(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},function(t,e,n){var l=n(9),i=n(16),c=n(153),o=n(4),d=RegExp.prototype;l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(d,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(d,"flags",{configurable:!0,get:c})},function(t,e,n){var l=n(1),i=n(9),c=n(121).MISSED_STICKY,o=n(40),d=n(16).f,r=n(20).get,a=RegExp.prototype,u=l.TypeError;i&&c&&d(a,"sticky",{configurable:!0,get:function(){if(this!==a){if("RegExp"===o(this))return!!r(this).sticky;throw u("Incompatible receiver, RegExp required")}}})},function(t,e,n){"use strict";n(154);var l,i,c=n(0),o=n(1),d=n(5),r=n(3),a=n(10),u=n(12),s=(l=!1,(i=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&l),Z=o.Error,b=r(/./.test);c({target:"RegExp",proto:!0,forced:!s},{test:function(t){var e=this.exec;if(!a(e))return b(this,t);var n=d(e,this,t);if(null!==n&&!u(n))throw new Z("RegExp exec method returned something other than an Object or null");return!!n}})},function(t,e,n){"use strict";var l=n(74).PROPER,i=n(19),c=n(2),o=n(14),d=n(4),r=n(120),a=RegExp.prototype.toString,u=d((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),s=l&&"toString"!=a.name;(u||s)&&i(RegExp.prototype,"toString",(function(){var t=c(this);return"/"+o(t.source)+"/"+o(r(t))}),{unsafe:!0})},function(t,e,n){n(380)},function(t,e,n){"use strict";n(113)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){"use strict";var l=n(0),i=n(82).codeAt;l({target:"String",proto:!0},{codePointAt:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,d=n(37),r=n(14),a=n(155),u=n(26),s=n(156),Z=n(24),b=c("".endsWith),m=c("".slice),h=Math.min,p=s("endsWith");i({target:"String",proto:!0,forced:!!(Z||p||(l=o(String.prototype,"endsWith"),!l||l.writable))&&!p},{endsWith:function(t){var e=r(u(this));a(t);var n=arguments.length>1?arguments[1]:void 0,l=e.length,i=void 0===n?l:h(d(n),l),c=r(t);return b?b(e,c,i):m(e,i-c.length,i)===c}})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=n(49),d=i.RangeError,r=String.fromCharCode,a=String.fromCodePoint,u=c([].join);l({target:"String",stat:!0,forced:!!a&&1!=a.length},{fromCodePoint:function(t){for(var e,n=[],l=arguments.length,i=0;l>i;){if(e=+arguments[i++],o(e,1114111)!==e)throw d(e+" is not a valid code point");n[i]=e<65536?r(e):r(55296+((e-=65536)>>10),e%1024+56320)}return u(n,"")}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(155),o=n(26),d=n(14),r=n(156),a=i("".indexOf);l({target:"String",proto:!0,forced:!r("includes")},{includes:function(t){return!!~a(d(o(this)),d(c(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(37),d=n(14),r=n(26),a=n(27),u=n(124),s=n(97);i("match",(function(t,e,n){return[function(e){var n=r(this),i=null==e?void 0:a(e,t);return i?l(i,e,n):new RegExp(e)[t](d(n))},function(t){var l=c(this),i=d(t),r=n(e,l,i);if(r.done)return r.value;if(!l.global)return s(l,i);var a=l.unicode;l.lastIndex=0;for(var Z,b=[],m=0;null!==(Z=s(l,i));){var h=d(Z[0]);b[m]=h,""===h&&(l.lastIndex=u(i,o(l.lastIndex),a)),m++}return 0===m?null:b}]}))},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(77),r=n(26),a=n(37),u=n(14),s=n(2),Z=n(40),b=n(96),m=n(120),h=n(27),p=n(19),I=n(4),G=n(7),g=n(33),X=n(124),y=n(97),V=n(20),W=n(24),C=G("matchAll"),R=V.set,f=V.getterFor("RegExp String Iterator"),Y=RegExp.prototype,v=i.TypeError,S=o("".indexOf),K=o("".matchAll),N=!!K&&!I((function(){K("a",/./)})),J=d((function(t,e,n,l){R(this,{type:"RegExp String Iterator",regexp:t,string:e,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=f(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,l=y(e,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===u(l[0])&&(e.lastIndex=X(n,a(e.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),H=function(t){var e,n,l,i=s(this),c=u(t),o=g(i,RegExp),d=u(m(i));return e=new o(o===RegExp?i.source:i,d),n=!!~S(d,"g"),l=!!~S(d,"u"),e.lastIndex=a(i.lastIndex),new J(e,c,n,l)};l({target:"String",proto:!0,forced:N},{matchAll:function(t){var e,n,l,i,o=r(this);if(null!=t){if(b(t)&&(e=u(r(m(t))),!~S(e,"g")))throw v("`.matchAll` does not allow non-global regexes");if(N)return K(o,t);if(void 0===(l=h(t,C))&&W&&"RegExp"==Z(t)&&(l=H),l)return c(l,t,o)}else if(N)return K(o,t);return n=u(o),i=new RegExp(t,"g"),W?c(H,i,n):i[C](n)}}),W||C in Y||p(Y,C,H)},function(t,e,n){"use strict";var l=n(0),i=n(145).end;l({target:"String",proto:!0,forced:n(202)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(145).start;l({target:"String",proto:!0,forced:n(202)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(3),c=n(34),o=n(13),d=n(14),r=n(21),a=i([].push),u=i([].join);l({target:"String",stat:!0},{raw:function(t){for(var e=c(o(t).raw),n=r(e),l=arguments.length,i=[],s=0;n>s;){if(a(i,d(e[s++])),s===n)return u(i,"");s<l&&a(i,d(arguments[s]))}}})},function(t,e,n){n(0)({target:"String",proto:!0},{repeat:n(146)})},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),d=n(4),r=n(2),a=n(10),u=n(35),s=n(37),Z=n(14),b=n(26),m=n(124),h=n(27),p=n(203),I=n(97),G=n(7)("replace"),g=Math.max,X=Math.min,y=c([].concat),V=c([].push),W=c("".indexOf),C=c("".slice),R="$0"==="a".replace(/./,"$0"),f=!!/./[G]&&""===/./[G]("a","$0");o("replace",(function(t,e,n){var c=f?"$":"$0";return[function(t,n){var l=b(this),c=null==t?void 0:h(t,G);return c?i(c,t,l,n):i(e,Z(l),t,n)},function(t,i){var o=r(this),d=Z(t);if("string"==typeof i&&-1===W(i,c)&&-1===W(i,"$<")){var b=n(e,o,d,i);if(b.done)return b.value}var h=a(i);h||(i=Z(i));var G=o.global;if(G){var R=o.unicode;o.lastIndex=0}for(var f=[];;){var Y=I(o,d);if(null===Y)break;if(V(f,Y),!G)break;""===Z(Y[0])&&(o.lastIndex=m(d,s(o.lastIndex),R))}for(var v,S="",K=0,N=0;N<f.length;N++){for(var J=Z((Y=f[N])[0]),H=g(X(u(Y.index),d.length),0),L=[],U=1;U<Y.length;U++)V(L,void 0===(v=Y[U])?v:String(v));var k=Y.groups;if(h){var B=y([J],L,H,d);void 0!==k&&V(B,k);var x=Z(l(i,void 0,B))}else x=p(J,d,H,L,k,i);H>=K&&(S+=C(d,K,H)+x,K=H+J.length)}return S+C(d,K)}]}),!!d((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!R||f)},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(26),d=n(192),r=n(14),a=n(27),u=n(97);i("search",(function(t,e,n){return[function(e){var n=o(this),i=null==e?void 0:a(e,t);return i?l(i,e,n):new RegExp(e)[t](r(n))},function(t){var l=c(this),i=r(t),o=n(e,l,i);if(o.done)return o.value;var a=l.lastIndex;d(a,0)||(l.lastIndex=0);var s=u(l,i);return d(l.lastIndex,a)||(l.lastIndex=a),null===s?-1:s.index}]}))},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),d=n(96),r=n(2),a=n(26),u=n(33),s=n(124),Z=n(37),b=n(14),m=n(27),h=n(89),p=n(97),I=n(122),G=n(121),g=n(4),X=G.UNSUPPORTED_Y,y=Math.min,V=[].push,W=c(/./.exec),C=c(V),R=c("".slice);o("split",(function(t,e,n){var c;return c="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var c=b(a(this)),o=void 0===n?4294967295:n>>>0;if(0===o)return[];if(void 0===t)return[c];if(!d(t))return i(e,c,t,o);for(var r,u,s,Z=[],m=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),p=0,G=new RegExp(t.source,m+"g");(r=i(I,G,c))&&!((u=G.lastIndex)>p&&(C(Z,R(c,p,r.index)),r.length>1&&r.index<c.length&&l(V,Z,h(r,1)),s=r[0].length,p=u,Z.length>=o));)G.lastIndex===r.index&&G.lastIndex++;return p===c.length?!s&&W(G,"")||C(Z,""):C(Z,R(c,p)),Z.length>o?h(Z,0,o):Z}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i(e,this,t,n)}:e,[function(e,n){var l=a(this),o=null==e?void 0:m(e,t);return o?i(o,e,l,n):i(c,b(l),e,n)},function(t,l){var i=r(this),o=b(t),d=n(c,i,o,l,c!==e);if(d.done)return d.value;var a=u(i,RegExp),m=i.unicode,h=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(X?"g":"y"),I=new a(X?"^(?:"+i.source+")":i,h),G=void 0===l?4294967295:l>>>0;if(0===G)return[];if(0===o.length)return null===p(I,o)?[o]:[];for(var g=0,V=0,W=[];V<o.length;){I.lastIndex=X?0:V;var f,Y=p(I,X?R(o,V):o);if(null===Y||(f=y(Z(I.lastIndex+(X?V:0)),o.length))===g)V=s(o,V,m);else{if(C(W,R(o,g,V)),W.length===G)return W;for(var v=1;v<=Y.length-1;v++)if(C(W,Y[v]),W.length===G)return W;V=g=f}}return C(W,R(o,g)),W}]}),!!g((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),X)},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,d=n(37),r=n(14),a=n(155),u=n(26),s=n(156),Z=n(24),b=c("".startsWith),m=c("".slice),h=Math.min,p=s("startsWith");i({target:"String",proto:!0,forced:!!(Z||p||(l=o(String.prototype,"startsWith"),!l||l.writable))&&!p},{startsWith:function(t){var e=r(u(this));a(t);var n=d(h(arguments.length>1?arguments[1]:void 0,e.length)),l=r(t);return b?b(e,l,n):m(e,n,n+l.length)===l}})},function(t,e,n){"use strict";var l=n(0),i=n(79).trim;l({target:"String",proto:!0,forced:n(157)("trim")},{trim:function(){return i(this)}})},function(t,e,n){n(397);var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},function(t,e,n){var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},function(t,e,n){n(399);var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},function(t,e,n){var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,n){n(52)("Float32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Float64",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}),!0)},function(t,e,n){n(52)("Uint16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){"use strict";var l=n(3),i=n(17),c=l(n(175)),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("copyWithin",(function(t,e){return c(o(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).every,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("every",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(5),c=n(137),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){var e=arguments.length;return i(c,o(this),t,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).filter,c=n(426),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("filter",(function(t){var e=i(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,e)}))},function(t,e,n){var l=n(427),i=n(125);t.exports=function(t,e){return l(i(t),e)}},function(t,e,n){var l=n(21);t.exports=function(t,e){for(var n=0,i=l(e),c=new t(i);i>n;)c[n]=e[n++];return c}},function(t,e,n){"use strict";var l=n(17),i=n(30).find,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("find",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).findIndex,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("findIndex",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).forEach,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("forEach",(function(t){i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(158);(0,n(17).exportTypedArrayStaticMethod)("from",n(207),l)},function(t,e,n){"use strict";var l=n(17),i=n(87).includes,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("includes",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(87).indexOf,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("indexOf",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(4),c=n(3),o=n(17),d=n(109),r=n(7)("iterator"),a=l.Uint8Array,u=c(d.values),s=c(d.keys),Z=c(d.entries),b=o.aTypedArray,m=o.exportTypedArrayMethod,h=a&&a.prototype,p=!i((function(){h[r].call([1])})),I=!!h&&h.values&&h[r]===h.values&&"values"===h.values.name,G=function(){return u(b(this))};m("entries",(function(){return Z(b(this))}),p),m("keys",(function(){return s(b(this))}),p),m("values",G,p||!I,{name:"values"}),m(r,G,p||!I,{name:"values"})},function(t,e,n){"use strict";var l=n(17),i=n(3),c=l.aTypedArray,o=l.exportTypedArrayMethod,d=i([].join);o("join",(function(t){return d(c(this),t)}))},function(t,e,n){"use strict";var l=n(17),i=n(18),c=n(180),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return i(c,o(this),e>1?[t,arguments[1]]:[t])}))},function(t,e,n){"use strict";var l=n(17),i=n(30).map,c=n(125),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("map",(function(t){return i(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(c(t))(e)}))}))},function(t,e,n){"use strict";var l=n(17),i=n(158),c=l.aTypedArrayConstructor;(0,l.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(c(this))(e);e>t;)n[t]=arguments[t++];return n}),i)},function(t,e,n){"use strict";var l=n(17),i=n(110).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(110).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=l.aTypedArray,c=l.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,e=i(this).length,n=o(e/2),l=0;l<n;)t=this[l],this[l++]=this[--e],this[e]=t;return this}))},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(17),o=n(21),d=n(206),r=n(13),a=n(4),u=l.RangeError,s=l.Int8Array,Z=s&&s.prototype,b=Z&&Z.set,m=c.aTypedArray,h=c.exportTypedArrayMethod,p=!a((function(){var t=new Uint8ClampedArray(2);return i(b,t,{length:1,0:3},1),3!==t[1]})),I=p&&c.NATIVE_ARRAY_BUFFER_VIEWS&&a((function(){var t=new s(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));h("set",(function(t){m(this);var e=d(arguments.length>1?arguments[1]:void 0,1),n=r(t);if(p)return i(b,this,n,e);var l=this.length,c=o(n),a=0;if(c+e>l)throw u("Wrong length");for(;a<c;)this[e+a]=n[a++]}),!p||I)},function(t,e,n){"use strict";var l=n(17),i=n(125),c=n(4),o=n(60),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("slice",(function(t,e){for(var n=o(d(this),t,e),l=i(this),c=0,r=n.length,a=new l(r);r>c;)a[c]=n[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,e,n){"use strict";var l=n(17),i=n(30).some,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("some",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(6),d=n(142),r=n(17),a=n(181),u=n(182),s=n(56),Z=n(143),b=r.aTypedArray,m=r.exportTypedArrayMethod,h=l.Uint16Array,p=h&&i(h.prototype.sort),I=!(!p||c((function(){p(new h(2),null)}))&&c((function(){p(new h(2),{})}))),G=!!p&&!c((function(){if(s)return s<74;if(a)return a<67;if(u)return!0;if(Z)return Z<602;var t,e,n=new h(516),l=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,l[t]=t-2*e+3;for(p(n,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));m("sort",(function(t){return void 0!==t&&o(t),G?p(this,t):d(b(this),function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t))}),!G||I)},function(t,e,n){"use strict";var l=n(17),i=n(37),c=n(49),o=n(125),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("subarray",(function(t,e){var n=d(this),l=n.length,r=c(t,l);return new(o(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,i((void 0===e?l:c(e,l))-r))}))},function(t,e,n){"use strict";var l=n(1),i=n(18),c=n(17),o=n(4),d=n(60),r=l.Int8Array,a=c.aTypedArray,u=c.exportTypedArrayMethod,s=[].toLocaleString,Z=!!r&&o((function(){s.call(new r(1))}));u("toLocaleString",(function(){return i(s,Z?d(a(this)):a(this),d(arguments))}),o((function(){return[1,2].toLocaleString()!=new r([1,2]).toLocaleString()}))||!o((function(){r.prototype.toLocaleString.call([1,2])})))},function(t,e,n){"use strict";var l=n(17).exportTypedArrayMethod,i=n(4),c=n(1),o=n(3),d=c.Uint8Array,r=d&&d.prototype||{},a=[].toString,u=o([].join);i((function(){a.call({})}))&&(a=function(){return u(this)});var s=r.toString!=a;l("toString",a,s)},function(t,e,n){"use strict";var l,i=n(1),c=n(3),o=n(46),d=n(67),r=n(113),a=n(208),u=n(12),s=n(114),Z=n(20).enforce,b=n(168),m=!i.ActiveXObject&&"ActiveXObject"in i,h=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},p=r("WeakMap",h,a);if(b&&m){l=a.getConstructor(h,"WeakMap",!0),d.enable();var I=p.prototype,G=c(I.delete),g=c(I.has),X=c(I.get),y=c(I.set);o(I,{delete:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),G(this,t)||e.frozen.delete(t)}return G(this,t)},has:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),g(this,t)||e.frozen.has(t)}return g(this,t)},get:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),g(this,t)?X(this,t):e.frozen.get(t)}return X(this,t)},set:function(t,e){if(u(t)&&!s(t)){var n=Z(this);n.frozen||(n.frozen=new l),g(this,t)?y(this,t,e):n.frozen.set(t,e)}else y(this,t,e);return this}})}},function(t,e,n){n(451)},function(t,e,n){"use strict";n(113)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(208))},function(t,e,n){n(453)},function(t,e,n){n(454)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(36),o=n(32),d=n(51),r=n(132),a=n(29),u=n(28),s=n(43),Z=n(455),b=n(456),m=n(8),h=n(457),p=n(7),I=n(458),G=p("toStringTag"),g=i.Error,X=[].push,y=function(t,e){var n,l=arguments.length>2?arguments[2]:void 0,i=c(V,this);d?n=d(new g,i?o(this):V):(n=i?this:a(V),u(n,G,"Error")),void 0!==e&&u(n,"message",h(e)),I&&u(n,"stack",Z(n.stack,1)),b(n,l);var r=[];return m(t,X,{that:r}),u(n,"errors",r),n};d?d(y,g):r(y,g,{name:!0});var V=y.prototype=a(g.prototype,{constructor:s(1,y),message:s(1,""),name:s(1,"AggregateError")});l({global:!0},{AggregateError:y})},function(t,e,n){var l=n(3),i=Error,c=l("".replace),o=String(i("zxcasd").stack),d=/\n\s*at [^:]*:[^\n]*/,r=d.test(o);t.exports=function(t,e){if(r&&"string"==typeof t&&!i.prepareStackTrace)for(;e--;)t=c(t,d,"");return t}},function(t,e,n){var l=n(12),i=n(28);t.exports=function(t,e){l(e)&&"cause"in e&&i(t,"cause",e.cause)}},function(t,e,n){var l=n(14);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:l(t)}},function(t,e,n){var l=n(4),i=n(43);t.exports=!l((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},function(t,e,n){var l=n(0),i=n(59),c=Object.isFrozen,o=function(t,e){if(!c||!i(t)||!c(t))return!1;for(var n,l=0,o=t.length;l<o;)if(!("string"==typeof(n=t[l++])||e&&void 0===n))return!1;return 0!==o};l({target:"Array",stat:!0,sham:!0,forced:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var e=t.raw;return e.length===t.length&&o(e,!1)}})},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(21),d=n(16).f;l&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(21),d=n(16).f;l&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),n=o(e);return e[0==n?0:n-1]=t}}),i("lastItem"))},function(t,e,n){"use strict";var l=n(0),i=n(42),c=n(28),o=n(15),d=n(7),r=n(126),a=n(24),u=d("toStringTag"),s=function(){i(this,r)};s.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),!a&&o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",s),l({global:!0,forced:a},{AsyncIterator:s})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(68)((function(t,e){var n=this,l=n.iterator;return t.resolve(c(i(n.next,l,e))).then((function(t){return c(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),d=n(68)((function(t,e){var n=this;return new t((function(l,o){var d=function(){try{t.resolve(c(i(n.next,n.iterator,n.remaining?[]:e))).then((function(t){try{c(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,d()):l({done:!1,value:t.value})}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new d({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).every;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{every:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(68)((function(t,e){var n=this,l=n.filterer;return new t((function(c,d){var r=function(){try{t.resolve(o(i(n.next,n.iterator,e))).then((function(e){try{if(o(e).done)n.done=!0,c({done:!0,value:void 0});else{var i=e.value;t.resolve(l(i)).then((function(t){t?c({done:!1,value:i}):r()}),d)}}catch(t){d(t)}}),d)}catch(t){d(t)}};r()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new d({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).find;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{find:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(68),r=n(209),a=d((function(t){var e,n=this,l=n.mapper;return new t((function(d,a){var u=function(){try{t.resolve(o(i(n.next,n.iterator))).then((function(i){try{o(i).done?(n.done=!0,d({done:!0,value:void 0})):t.resolve(l(i.value)).then((function(t){try{return n.innerIterator=e=r(t),n.innerNext=c(e.next),s()}catch(t){a(t)}}),a)}catch(t){a(t)}}),a)}catch(t){a(t)}},s=function(){if(e=n.innerIterator)try{t.resolve(o(i(n.innerNext,e))).then((function(t){try{o(t).done?(n.innerIterator=n.innerNext=null,u()):d({done:!1,value:t.value})}catch(t){a(t)}}),a)}catch(t){a(t)}else u()};s()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new a({iterator:o(this),mapper:c(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).forEach;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{forEach:function(t){return i(this,t)}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),d=n(36),r=n(126),a=n(68),u=n(209),s=n(45),Z=n(61),b=n(27),m=n(7),h=n(210),p=m("asyncIterator"),I=a((function(t,e){return c(i(this.next,this.iterator,e))}),!0);l({target:"AsyncIterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=b(n,p);return l&&(e=u(n,l),d(r,e))?e:void 0===e&&(l=Z(n))?new h(s(n,l)):new I({iterator:void 0!==e?e:n})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(68)((function(t,e){var n=this,l=n.mapper;return t.resolve(o(i(n.next,n.iterator,e))).then((function(e){return o(e).done?(n.done=!0,{done:!0,value:void 0}):t.resolve(l(e.value)).then((function(t){return{done:!1,value:t}}))}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{map:function(t){return new d({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),d=n(2),r=n(11)("Promise"),a=i.TypeError;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=d(this),n=o(e.next),l=arguments.length<2,i=l?void 0:arguments[1];return o(t),new r((function(o,u){var s=function(){try{r.resolve(d(c(n,e))).then((function(e){try{if(d(e).done)l?u(a("Reduce of empty iterator with no initial value")):o(i);else{var n=e.value;l?(l=!1,i=n,s()):r.resolve(t(i,n)).then((function(t){i=t,s()}),u)}}catch(t){u(t)}}),u)}catch(t){u(t)}};s()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(99).some;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{some:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),d=n(98),r=n(68)((function(t,e){var n,l,o=this.iterator;return this.remaining--?i(this.next,o,e):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=o.return)?t.resolve(c(n,o)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{take:function(t){return new r({iterator:o(this),remaining:d(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).toArray;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{toArray:function(){return i(this,void 0,[])}})},function(t,e,n){var l=n(0),i=n(1),c=n(18),o=n(211),d=n(11),r=n(29),a=i.Object,u=function(){var t=d("Object","freeze");return t?t(r(null)):r(null)};l({global:!0,forced:!0},{compositeKey:function(){return c(o,a,arguments).get("object",u)}})},function(t,e,n){var l=n(0),i=n(211),c=n(11),o=n(18);l({global:!0,forced:!0},{compositeSymbol:function(){return 1==arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):o(i,null,arguments).get("symbol",c("Symbol"))}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(42),o=n(10),d=n(28),r=n(4),a=n(15),u=n(7),s=n(92).IteratorPrototype,Z=n(24),b=u("toStringTag"),m=i.Iterator,h=Z||!o(m)||m.prototype!==s||!r((function(){m({})})),p=function(){c(this,s)};a(s,b)||d(s,b,"Iterator"),!h&&a(s,"constructor")&&s.constructor!==Object||d(s,"constructor",p),p.prototype=s,l({global:!0,forced:h},{Iterator:p})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(69)((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),d=n(98),r=n(69)((function(t){for(var e,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,e=o(c(l,n)),this.done=!!e.done)return;if(e=o(i(l,n,t)),!(this.done=!!e.done))return e.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new r({iterator:o(this),remaining:d(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{every:function(t){return o(this),c(t),!i(this,(function(e,n){if(!t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(69),r=n(138),a=d((function(t){for(var e,n,l=this.iterator,c=this.filterer,d=this.next;;){if(e=o(i(d,l,t)),this.done=!!e.done)return;if(n=e.value,r(l,c,n))return n}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new a({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{find:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),d=n(2),r=n(61),a=n(69),u=n(107),s=i.TypeError,Z=a((function(){for(var t,e,n,l,i=this.iterator,a=this.mapper;;)try{if(l=this.innerIterator){if(!(t=d(c(this.innerNext,l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=d(c(this.next,i)),this.done=!!t.done)return;if(e=a(t.value),!(n=r(e)))throw s(".flatMap callback should return an iterable object");this.innerIterator=l=d(c(n,e)),this.innerNext=o(l.next)}catch(t){u(i,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new Z({iterator:d(this),mapper:o(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),d=n(36),r=n(92).IteratorPrototype,a=n(69),u=n(45),s=n(61),Z=a((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);l({target:"Iterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=s(n);if(l){if(e=u(n,l),d(r,e))return e}else e=n;return new Z({iterator:e})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(69),r=n(138),a=d((function(t){var e=this.iterator,n=o(i(this.next,e,t));if(!(this.done=!!n.done))return r(e,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{map:function(t){return new a({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(8),o=n(6),d=n(2),r=i.TypeError;l({target:"Iterator",proto:!0,real:!0,forced:!0},{reduce:function(t){d(this),o(t);var e=arguments.length<2,n=e?void 0:arguments[1];if(c(this,(function(l){e?(e=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),e)throw r("Reduce of empty iterator with no initial value");return n}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{some:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),d=n(69),r=n(107),a=d((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,r(e,"normal",void 0);var n=c(i(this.next,e,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{take:function(t){return new a({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2),o=[].push;l({target:"Iterator",proto:!0,real:!0,forced:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!d(n,(function(t,n,i){if(!l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),d=n(6),r=n(2),a=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=r(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(a(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){l(n,t,e)&&o(b,Z,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(3),o=n(6),d=n(45),r=n(8),a=c([].push);l({target:"Map",stat:!0,forced:!0},{groupBy:function(t,e){o(e);var n=d(t),l=new this,c=o(l.has),u=o(l.get),s=o(l.set);return r(n,(function(t){var n=e(t);i(c,l,n)?a(i(u,l,n),t):i(s,l,n,[t])}),{IS_ITERATOR:!0}),l}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(500),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return d(c(i(this)),(function(e,n,l){if(o(n,t))return l()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(8),o=n(6);l({target:"Map",stat:!0,forced:!0},{keyBy:function(t,e){var n=new this;o(e);var l=o(n.set);return c(t,(function(t){i(l,n,e(t),t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){return o(c(i(this)),(function(e,n,l){if(n===t)return l(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),d=n(6),r=n(2),a=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=r(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(a(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){o(b,Z,l(n,t,e),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),d=n(6),r=n(2),a=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=r(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(a(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){o(b,Z,t,l(n,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(2),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(t){for(var e=c(this),n=i(e.set),l=arguments.length,d=0;d<l;)o(arguments[d++],n,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(2),o=n(6),d=n(47),r=n(8),a=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=c(this),n=d(e),l=arguments.length<2,i=l?void 0:arguments[1];if(o(t),r(n,(function(n,c){l?(l=!1,i=c):i=t(i,c,n,e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),l)throw a("Reduce of empty map with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(2),d=n(6),r=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var n=o(this),l=d(n.get),i=d(n.has),a=d(n.set),u=arguments.length;d(e);var s=c(i,n,t);if(!s&&u<3)throw r("Updating absent value");var Z=s?c(l,n,t):d(u>2?arguments[2]:void 0)(t,n);return c(a,n,t,e(Z,t,n)),n}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){var l=n(0),i=Math.min,c=Math.max;l({target:"Math",stat:!0,forced:!0},{clamp:function(t,e,n){return i(n,c(e,t))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,n){var l=n(0),i=180/Math.PI;l({target:"Math",stat:!0,forced:!0},{degrees:function(t){return t*i}})},function(t,e,n){var l=n(0),i=n(212),c=n(187);l({target:"Math",stat:!0,forced:!0},{fscale:function(t,e,n,l,o){return c(i(t,e,n,l,o))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{iaddh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)+(l>>>0)+((i&c|(i|c)&~(i+c>>>0))>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{imulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>16,d=l>>16,r=(o*c>>>0)+(i*c>>>16);return o*d+(r>>16)+((i*d>>>0)+(65535&r)>>16)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{isubh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)-(l>>>0)-((~i&c|~(i^c)&i-c>>>0)>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{RAD_PER_DEG:180/Math.PI})},function(t,e,n){var l=n(0),i=Math.PI/180;l({target:"Math",stat:!0,forced:!0},{radians:function(t){return t*i}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{scale:n(212)})},function(t,e,n){var l=n(0),i=n(1),c=n(2),o=n(188),d=n(77),r=n(20),a=r.set,u=r.getterFor("Seeded Random Generator"),s=i.TypeError,Z=d((function(t){a(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=u(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));l({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var e=c(t).seed;if(!o(e))throw s('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new Z(e)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{umulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>>16,d=l>>>16,r=(o*c>>>0)+(i*c>>>16);return o*d+(r>>>16)+((i*d>>>0)+(65535&r)>>>16)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),d=n(152),r=i.RangeError,a=i.SyntaxError,u=i.TypeError,s=/^[\da-z]+$/,Z=c("".charAt),b=c(s.exec),m=c(1..toString),h=c("".slice);l({target:"Number",stat:!0,forced:!0},{fromString:function(t,e){var n,l,i=1;if("string"!=typeof t)throw u("Invalid number representation");if(!t.length)throw a("Invalid number representation");if("-"==Z(t,0)&&(i=-1,!(t=h(t,1)).length))throw a("Invalid number representation");if((n=void 0===e?10:o(e))<2||n>36)throw r("Invalid radix");if(!b(s,t)||m(l=d(t,n),n)!==t)throw a("Invalid number representation");return i*l}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,n){n(530),n(531),n(532)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(9),o=n(66),d=n(6),r=n(10),a=n(2),u=n(12),s=n(42),Z=n(27),b=n(16).f,m=n(19),h=n(46),p=n(195),I=n(7),G=n(20),g=n(162),X=I("observable"),y=G.getterFor,V=G.set,W=y("Observable"),C=y("Subscription"),R=y("SubscriptionObserver"),f=function(t){this.observer=a(t),this.cleanup=void 0,this.subscriptionObserver=void 0};f.prototype={type:"Subscription",clean:function(){var t=this.cleanup;if(t){this.cleanup=void 0;try{t()}catch(t){p(t)}}},close:function(){if(!c){var t=this.facade,e=this.subscriptionObserver;t.closed=!0,e&&(e.closed=!0)}this.observer=void 0},isClosed:function(){return void 0===this.observer}};var Y=function(t,e){var n,l=V(this,new f(t));c||(this.closed=!1);try{(n=Z(t,"start"))&&i(n,t,this)}catch(t){p(t)}if(!l.isClosed()){var o=l.subscriptionObserver=new v(l);try{var a=e(o),u=a;null!=a&&(l.cleanup=r(a.unsubscribe)?function(){u.unsubscribe()}:d(a))}catch(t){return void o.error(t)}l.isClosed()&&l.clean()}};Y.prototype=h({},{unsubscribe:function(){var t=C(this);t.isClosed()||(t.close(),t.clean())}}),c&&b(Y.prototype,"closed",{configurable:!0,get:function(){return C(this).isClosed()}});var v=function(t){V(this,{type:"SubscriptionObserver",subscriptionState:t}),c||(this.closed=!1)};v.prototype=h({},{next:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;try{var l=Z(n,"next");l&&i(l,n,t)}catch(t){p(t)}}},error:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;e.close();try{var l=Z(n,"error");l?i(l,n,t):p(t)}catch(t){p(t)}e.clean()}},complete:function(){var t=R(this).subscriptionState;if(!t.isClosed()){var e=t.observer;t.close();try{var n=Z(e,"complete");n&&i(n,e)}catch(t){p(t)}t.clean()}}}),c&&b(v.prototype,"closed",{configurable:!0,get:function(){return R(this).subscriptionState.isClosed()}});var S=function(t){s(this,K),V(this,{type:"Observable",subscriber:d(t)})},K=S.prototype;h(K,{subscribe:function(t){var e=arguments.length;return new Y(r(t)?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:u(t)?t:{},W(this).subscriber)}}),m(K,X,(function(){return this})),l({global:!0,forced:g},{Observable:S}),o("Observable")},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(2),d=n(65),r=n(45),a=n(27),u=n(8),s=n(7),Z=n(162),b=s("observable");l({target:"Observable",stat:!0,forced:Z},{from:function(t){var e=d(this)?this:i("Observable"),n=a(o(t),b);if(n){var l=o(c(n,t));return l.constructor===e?l:new e((function(t){return l.subscribe(t)}))}var s=r(t);return new e((function(t){u(s,(function(e,n){if(t.next(e),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(65),o=n(162),d=i("Array");l({target:"Observable",stat:!0,forced:o},{of:function(){for(var t=c(this)?this:i("Observable"),e=arguments.length,n=d(e),l=0;l<e;)n[l]=arguments[l++];return new t((function(t){for(var l=0;l<e;l++)if(t.next(n[l]),t.closed)return;t.complete()}))}})},function(t,e,n){n(534)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(11),d=n(62),r=n(80),a=n(8);l({target:"Promise",stat:!0},{any:function(t){var e=this,n=o("AggregateError"),l=d.f(e),u=l.resolve,s=l.reject,Z=r((function(){var l=c(e.resolve),o=[],d=0,r=1,Z=!1;a(t,(function(t){var c=d++,a=!1;r++,i(l,e,t).then((function(t){a||Z||(Z=!0,u(t))}),(function(t){a||Z||(a=!0,o[c]=t,--r||s(new n(o,"No one promise resolved")))}))})),--r||s(new n(o,"No one promise resolved"))}));return Z.error&&s(Z.value),l.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(62),c=n(80);l({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=i.f(this),n=c(t);return(n.error?e.reject:e.resolve)(n.value),e.promise}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.set;l({target:"Reflect",stat:!0},{defineMetadata:function(t,e,n){var l=arguments.length<4?void 0:o(arguments[3]);d(t,e,c(n),l)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.getMap,r=i.store;l({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var n=arguments.length<3?void 0:o(arguments[2]),l=d(c(e),n,!1);if(void 0===l||!l.delete(t))return!1;if(l.size)return!0;var i=r.get(e);return i.delete(n),!!i.size||r.delete(e)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=n(32),d=i.has,r=i.get,a=i.toKey,u=function(t,e,n){if(d(t,e,n))return r(t,e,n);var l=o(e);return null!==l?u(t,l,n):void 0};l({target:"Reflect",stat:!0},{getMetadata:function(t,e){var n=arguments.length<3?void 0:a(arguments[2]);return u(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(3),c=n(53),o=n(2),d=n(32),r=i(n(540)),a=i([].concat),u=c.keys,s=c.toKey,Z=function(t,e){var n=u(t,e),l=d(t);if(null===l)return n;var i=Z(l,e);return i.length?n.length?r(a(n,i)):i:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:s(arguments[1]);return Z(o(t),e)}})},function(t,e,n){"use strict";var l=n(11),i=n(3),c=n(6),o=n(21),d=n(13),r=n(76),a=l("Map"),u=a.prototype,s=i(u.forEach),Z=i(u.has),b=i(u.set),m=i([].push);t.exports=function(t){var e,n,l,i=d(this),u=o(i),h=r(i,0),p=new a,I=null!=t?c(t):function(t){return t};for(e=0;e<u;e++)l=I(n=i[e]),Z(p,l)||b(p,l,n);return s(p,(function(t){m(h,t)})),h}},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.get,d=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.keys,d=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:d(arguments[1]);return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=n(32),d=i.has,r=i.toKey,a=function(t,e,n){if(d(t,e,n))return!0;var l=o(e);return null!==l&&a(t,l,n)};l({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var n=arguments.length<3?void 0:r(arguments[2]);return a(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.has,d=i.toKey;l({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.set;l({target:"Reflect",stat:!0},{metadata:function(t,e){return function(n,l){d(t,e,c(n),o(l))}}})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),r=n(33),a=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){var e=d(this),n=new(r(e,i("Set")))(e),l=o(n.delete);return a(t,(function(t){c(l,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!d(n,(function(t,n){if(!l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),r=n(22),a=n(33),u=n(70),s=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=d(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0),Z=new(a(e,i("Set"))),b=o(Z.add);return s(n,(function(t){l(t,t,e)&&c(b,Z,t)}),{IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n){if(l(t,t,e))return n(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),r=n(33),a=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){var e=d(this),n=new(r(e,i("Set"))),l=o(e.has),u=o(n.add);return a(t,(function(t){c(l,e,t)&&c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){var e=o(this),n=c(e.has);return!d(t,(function(t,l){if(!0===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(10),r=n(2),a=n(45),u=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){var e=a(this),n=r(t),l=n.has;return d(l)||(n=new(i("Set"))(t),l=o(n.has)),!u(e,(function(t,e){if(!1===c(l,n,t))return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){var e=o(this),n=c(e.has);return!d(t,(function(t,l){if(!1===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(2),o=n(14),d=n(70),r=n(8),a=i([].join),u=[].push;l({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=c(this),n=d(e),l=void 0===t?",":o(t),i=[];return r(n,u,{that:i,IS_ITERATOR:!0}),a(i,l)}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),d=n(6),r=n(2),a=n(33),u=n(70),s=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=r(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(a(e,i("Set"))),b=d(Z.add);return s(n,(function(t){o(b,Z,l(t,t,e))}),{IS_ITERATOR:!0}),Z}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(6),o=n(2),d=n(70),r=n(8),a=i.TypeError;l({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=o(this),n=d(e),l=arguments.length<2,i=l?void 0:arguments[1];if(c(t),r(n,(function(n){l?(l=!1,i=n):i=t(i,n,n,e)}),{IS_ITERATOR:!0}),l)throw a("Reduce of empty set with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n){if(l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),r=n(33),a=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){var e=d(this),n=new(r(e,i("Set")))(e),l=o(n.delete),u=o(n.add);return a(t,(function(t){c(l,n,t)||c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(6),o=n(2),d=n(33),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){var e=o(this),n=new(d(e,i("Set")))(e);return r(t,c(n.add),{that:n}),n}})},function(t,e,n){"use strict";var l=n(0),i=n(82).charAt,c=n(26),o=n(35),d=n(14);l({target:"String",proto:!0,forced:!0},{at:function(t){var e=d(c(this)),n=e.length,l=o(t),r=l>=0?l:n+l;return r<0||r>=n?void 0:i(e,r)}})},function(t,e,n){"use strict";var l=n(0),i=n(77),c=n(26),o=n(14),d=n(20),r=n(82),a=r.codeAt,u=r.charAt,s=d.set,Z=d.getterFor("String Iterator"),b=i((function(t){s(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=Z(this),n=e.string,l=e.index;return l>=n.length?{value:void 0,done:!0}:(t=u(n,l),e.index+=t.length,{value:{codePoint:a(t,0),position:l},done:!1})}));l({target:"String",proto:!0,forced:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,n){n(567)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(26),r=n(10),a=n(96),u=n(14),s=n(27),Z=n(120),b=n(203),m=n(7),h=n(24),p=m("replace"),I=i.TypeError,G=o("".indexOf),g=o("".replace),X=o("".slice),y=Math.max,V=function(t,e,n){return n>t.length?-1:""===e?n:G(t,e,n)};l({target:"String",proto:!0},{replaceAll:function(t,e){var n,l,i,o,m,W,C,R,f,Y=d(this),v=0,S=0,K="";if(null!=t){if((n=a(t))&&(l=u(d(Z(t))),!~G(l,"g")))throw I("`.replaceAll` does not allow non-global regexes");if(i=s(t,p))return c(i,t,Y,e);if(h&&n)return g(u(Y),t,e)}for(o=u(Y),m=u(t),(W=r(e))||(e=u(e)),C=m.length,R=y(1,C),v=V(o,m,0);-1!==v;)f=W?u(e(m,v,o)):b(m,o,v,[],void 0,e),K+=X(o,S,v)+f,S=v+C,v=V(o,m,v+R);return S<o.length&&(K+=X(o,S)),K}})},function(t,e,n){n(25)("asyncDispose")},function(t,e,n){n(25)("dispose")},function(t,e,n){n(25)("observable")},function(t,e,n){n(25)("patternMatch")},function(t,e,n){n(25)("replaceAll")},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(177),d=n(28),r=function(t){if(t&&t.forEach!==o)try{d(t,"forEach",o)}catch(e){t.forEach=o}};for(var a in i)i[a]&&r(l[a]&&l[a].prototype);r(c)},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(109),d=n(28),r=n(7),a=r("iterator"),u=r("toStringTag"),s=o.values,Z=function(t,e){if(t){if(t[a]!==s)try{d(t,a,s)}catch(e){t[a]=s}if(t[u]||d(t,u,e),i[e])for(var n in o)if(t[n]!==o[n])try{d(t,n,o[n])}catch(e){t[n]=o[n]}}};for(var b in i)Z(l[b]&&l[b].prototype,b);Z(c,"DOMTokenList")},function(t,e,n){n(584),n(585)},function(t,e,n){var l=n(0),i=n(1),c=n(119).clear;l({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==c},{clearImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(119).set;l({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==c},{setImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(194),o=n(6),d=n(94),r=n(78),a=i.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){d(arguments.length,1),o(t);var e=r&&a.domain;c(e?e.bind(t):t)}})},function(t,e,n){n(588),n(589)},function(t,e,n){var l=n(0),i=n(1),c=n(216).setInterval;l({global:!0,bind:!0,forced:i.setInterval!==c},{setInterval:c})},function(t,e,n){var l=n(0),i=n(1),c=n(216).setTimeout;l({global:!0,bind:!0,forced:i.setTimeout!==c},{setTimeout:c})},function(t,e,n){n(591)},function(t,e,n){"use strict";n(201);var l,i=n(0),c=n(9),o=n(217),d=n(1),r=n(22),a=n(3),u=n(106).f,s=n(19),Z=n(42),b=n(15),m=n(190),h=n(178),p=n(89),I=n(82).codeAt,G=n(592),g=n(14),X=n(41),y=n(94),V=n(218),W=n(20),C=W.set,R=W.getterFor("URL"),f=V.URLSearchParams,Y=V.getState,v=d.URL,S=d.TypeError,K=d.parseInt,N=Math.floor,J=Math.pow,H=a("".charAt),L=a(/./.exec),U=a([].join),k=a(1..toString),B=a([].pop),x=a([].push),F=a("".replace),T=a([].shift),A=a("".split),z=a("".slice),w=a("".toLowerCase),Q=a([].unshift),j=/[a-z]/i,P=/[\d+-.a-z]/i,M=/\d/,E=/^0x/i,D=/^[0-7]+$/,O=/^\d+$/,_=/^[\da-f]+$/i,q=/[\0\t\n\r #%/:<>?@[\\\]^|]/,$=/[\0\t\n\r #/:<>?@[\\\]^|]/,tt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,et=/[\t\n\r]/g,nt=function(t){var e,n,l,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)Q(e,t%256),t=N(t/256);return U(e,".")}if("object"==typeof t){for(e="",l=function(t){for(var e=null,n=1,l=null,i=0,c=0;c<8;c++)0!==t[c]?(i>n&&(e=l,n=i),l=null,i=0):(null===l&&(l=c),++i);return i>n&&(e=l,n=i),e}(t),n=0;n<8;n++)i&&0===t[n]||(i&&(i=!1),l===n?(e+=n?":":"::",i=!0):(e+=k(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},lt={},it=m({},lt,{" ":1,'"':1,"<":1,">":1,"`":1}),ct=m({},it,{"#":1,"?":1,"{":1,"}":1}),ot=m({},ct,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),dt=function(t,e){var n=I(t,0);return n>32&&n<127&&!b(e,t)?t:encodeURIComponent(t)},rt={ftp:21,file:null,http:80,https:443,ws:80,wss:443},at=function(t,e){var n;return 2==t.length&&L(j,H(t,0))&&(":"==(n=H(t,1))||!e&&"|"==n)},ut=function(t){var e;return t.length>1&&at(z(t,0,2))&&(2==t.length||"/"===(e=H(t,2))||"\\"===e||"?"===e||"#"===e)},st=function(t){return"."===t||"%2e"===w(t)},Zt={},bt={},mt={},ht={},pt={},It={},Gt={},gt={},Xt={},yt={},Vt={},Wt={},Ct={},Rt={},ft={},Yt={},vt={},St={},Kt={},Nt={},Jt={},Ht=function(t,e,n){var l,i,c,o=g(t);if(e){if(i=this.parse(o))throw S(i);this.searchParams=null}else{if(void 0!==n&&(l=new Ht(n,!0)),i=this.parse(o,null,l))throw S(i);(c=Y(new f)).bindURL(this),this.searchParams=c}};Ht.prototype={type:"URL",parse:function(t,e,n){var i,c,o,d,r,a=this,u=e||Zt,s=0,Z="",m=!1,I=!1,G=!1;for(t=g(t),e||(a.scheme="",a.username="",a.password="",a.host=null,a.port=null,a.path=[],a.query=null,a.fragment=null,a.cannotBeABaseURL=!1,t=F(t,tt,"")),t=F(t,et,""),i=h(t);s<=i.length;){switch(c=i[s],u){case Zt:if(!c||!L(j,c)){if(e)return"Invalid scheme";u=mt;continue}Z+=w(c),u=bt;break;case bt:if(c&&(L(P,c)||"+"==c||"-"==c||"."==c))Z+=w(c);else{if(":"!=c){if(e)return"Invalid scheme";Z="",u=mt,s=0;continue}if(e&&(a.isSpecial()!=b(rt,Z)||"file"==Z&&(a.includesCredentials()||null!==a.port)||"file"==a.scheme&&!a.host))return;if(a.scheme=Z,e)return void(a.isSpecial()&&rt[a.scheme]==a.port&&(a.port=null));Z="","file"==a.scheme?u=Rt:a.isSpecial()&&n&&n.scheme==a.scheme?u=ht:a.isSpecial()?u=gt:"/"==i[s+1]?(u=pt,s++):(a.cannotBeABaseURL=!0,x(a.path,""),u=Kt)}break;case mt:if(!n||n.cannotBeABaseURL&&"#"!=c)return"Invalid scheme";if(n.cannotBeABaseURL&&"#"==c){a.scheme=n.scheme,a.path=p(n.path),a.query=n.query,a.fragment="",a.cannotBeABaseURL=!0,u=Jt;break}u="file"==n.scheme?Rt:It;continue;case ht:if("/"!=c||"/"!=i[s+1]){u=It;continue}u=Xt,s++;break;case pt:if("/"==c){u=yt;break}u=St;continue;case It:if(a.scheme=n.scheme,c==l)a.username=n.username,a.password=n.password,a.host=n.host,a.port=n.port,a.path=p(n.path),a.query=n.query;else if("/"==c||"\\"==c&&a.isSpecial())u=Gt;else if("?"==c)a.username=n.username,a.password=n.password,a.host=n.host,a.port=n.port,a.path=p(n.path),a.query="",u=Nt;else{if("#"!=c){a.username=n.username,a.password=n.password,a.host=n.host,a.port=n.port,a.path=p(n.path),a.path.length--,u=St;continue}a.username=n.username,a.password=n.password,a.host=n.host,a.port=n.port,a.path=p(n.path),a.query=n.query,a.fragment="",u=Jt}break;case Gt:if(!a.isSpecial()||"/"!=c&&"\\"!=c){if("/"!=c){a.username=n.username,a.password=n.password,a.host=n.host,a.port=n.port,u=St;continue}u=yt}else u=Xt;break;case gt:if(u=Xt,"/"!=c||"/"!=H(Z,s+1))continue;s++;break;case Xt:if("/"!=c&&"\\"!=c){u=yt;continue}break;case yt:if("@"==c){m&&(Z="%40"+Z),m=!0,o=h(Z);for(var X=0;X<o.length;X++){var y=o[X];if(":"!=y||G){var V=dt(y,ot);G?a.password+=V:a.username+=V}else G=!0}Z=""}else if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&a.isSpecial()){if(m&&""==Z)return"Invalid authority";s-=h(Z).length+1,Z="",u=Vt}else Z+=c;break;case Vt:case Wt:if(e&&"file"==a.scheme){u=Yt;continue}if(":"!=c||I){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&a.isSpecial()){if(a.isSpecial()&&""==Z)return"Invalid host";if(e&&""==Z&&(a.includesCredentials()||null!==a.port))return;if(d=a.parseHost(Z))return d;if(Z="",u=vt,e)return;continue}"["==c?I=!0:"]"==c&&(I=!1),Z+=c}else{if(""==Z)return"Invalid host";if(d=a.parseHost(Z))return d;if(Z="",u=Ct,e==Wt)return}break;case Ct:if(!L(M,c)){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&a.isSpecial()||e){if(""!=Z){var W=K(Z,10);if(W>65535)return"Invalid port";a.port=a.isSpecial()&&W===rt[a.scheme]?null:W,Z=""}if(e)return;u=vt;continue}return"Invalid port"}Z+=c;break;case Rt:if(a.scheme="file","/"==c||"\\"==c)u=ft;else{if(!n||"file"!=n.scheme){u=St;continue}if(c==l)a.host=n.host,a.path=p(n.path),a.query=n.query;else if("?"==c)a.host=n.host,a.path=p(n.path),a.query="",u=Nt;else{if("#"!=c){ut(U(p(i,s),""))||(a.host=n.host,a.path=p(n.path),a.shortenPath()),u=St;continue}a.host=n.host,a.path=p(n.path),a.query=n.query,a.fragment="",u=Jt}}break;case ft:if("/"==c||"\\"==c){u=Yt;break}n&&"file"==n.scheme&&!ut(U(p(i,s),""))&&(at(n.path[0],!0)?x(a.path,n.path[0]):a.host=n.host),u=St;continue;case Yt:if(c==l||"/"==c||"\\"==c||"?"==c||"#"==c){if(!e&&at(Z))u=St;else if(""==Z){if(a.host="",e)return;u=vt}else{if(d=a.parseHost(Z))return d;if("localhost"==a.host&&(a.host=""),e)return;Z="",u=vt}continue}Z+=c;break;case vt:if(a.isSpecial()){if(u=St,"/"!=c&&"\\"!=c)continue}else if(e||"?"!=c)if(e||"#"!=c){if(c!=l&&(u=St,"/"!=c))continue}else a.fragment="",u=Jt;else a.query="",u=Nt;break;case St:if(c==l||"/"==c||"\\"==c&&a.isSpecial()||!e&&("?"==c||"#"==c)){if(".."===(r=w(r=Z))||"%2e."===r||".%2e"===r||"%2e%2e"===r?(a.shortenPath(),"/"==c||"\\"==c&&a.isSpecial()||x(a.path,"")):st(Z)?"/"==c||"\\"==c&&a.isSpecial()||x(a.path,""):("file"==a.scheme&&!a.path.length&&at(Z)&&(a.host&&(a.host=""),Z=H(Z,0)+":"),x(a.path,Z)),Z="","file"==a.scheme&&(c==l||"?"==c||"#"==c))for(;a.path.length>1&&""===a.path[0];)T(a.path);"?"==c?(a.query="",u=Nt):"#"==c&&(a.fragment="",u=Jt)}else Z+=dt(c,ct);break;case Kt:"?"==c?(a.query="",u=Nt):"#"==c?(a.fragment="",u=Jt):c!=l&&(a.path[0]+=dt(c,lt));break;case Nt:e||"#"!=c?c!=l&&("'"==c&&a.isSpecial()?a.query+="%27":a.query+="#"==c?"%23":dt(c,lt)):(a.fragment="",u=Jt);break;case Jt:c!=l&&(a.fragment+=dt(c,it))}s++}},parseHost:function(t){var e,n,l;if("["==H(t,0)){if("]"!=H(t,t.length-1))return"Invalid host";if(!(e=function(t){var e,n,l,i,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,s=0,Z=function(){return H(t,s)};if(":"==Z()){if(":"!=H(t,1))return;s+=2,u=++a}for(;Z();){if(8==a)return;if(":"!=Z()){for(e=n=0;n<4&&L(_,Z());)e=16*e+K(Z(),16),s++,n++;if("."==Z()){if(0==n)return;if(s-=n,a>6)return;for(l=0;Z();){if(i=null,l>0){if(!("."==Z()&&l<4))return;s++}if(!L(M,Z()))return;for(;L(M,Z());){if(c=K(Z(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;s++}r[a]=256*r[a]+i,2!=++l&&4!=l||a++}if(4!=l)return;break}if(":"==Z()){if(s++,!Z())return}else if(Z())return;r[a++]=e}else{if(null!==u)return;s++,u=++a}}if(null!==u)for(o=a-u,a=7;0!=a&&o>0;)d=r[a],r[a--]=r[u+o-1],r[u+--o]=d;else if(8!=a)return;return r}(z(t,1,-1))))return"Invalid host";this.host=e}else if(this.isSpecial()){if(t=G(t),L(q,t))return"Invalid host";if(null===(e=function(t){var e,n,l,i,c,o,d,r=A(t,".");if(r.length&&""==r[r.length-1]&&r.length--,(e=r.length)>4)return t;for(n=[],l=0;l<e;l++){if(""==(i=r[l]))return t;if(c=10,i.length>1&&"0"==H(i,0)&&(c=L(E,i)?16:8,i=z(i,8==c?1:2)),""===i)o=0;else{if(!L(10==c?O:8==c?D:_,i))return t;o=K(i,c)}x(n,o)}for(l=0;l<e;l++)if(o=n[l],l==e-1){if(o>=J(256,5-e))return null}else if(o>255)return null;for(d=B(n),l=0;l<n.length;l++)d+=n[l]*J(256,3-l);return d}(t)))return"Invalid host";this.host=e}else{if(L($,t))return"Invalid host";for(e="",n=h(t),l=0;l<n.length;l++)e+=dt(n[l],lt);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return b(rt,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&at(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,n=t.username,l=t.password,i=t.host,c=t.port,o=t.path,d=t.query,r=t.fragment,a=e+":";return null!==i?(a+="//",t.includesCredentials()&&(a+=n+(l?":"+l:"")+"@"),a+=nt(i),null!==c&&(a+=":"+c)):"file"==e&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+U(o,"/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},setHref:function(t){var e=this.parse(t);if(e)throw S(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new Lt(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+nt(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(g(t)+":",Zt)},getUsername:function(){return this.username},setUsername:function(t){var e=h(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<e.length;n++)this.username+=dt(e[n],ot)}},getPassword:function(){return this.password},setPassword:function(t){var e=h(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<e.length;n++)this.password+=dt(e[n],ot)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?nt(t):nt(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,Vt)},getHostname:function(){var t=this.host;return null===t?"":nt(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Wt)},getPort:function(){var t=this.port;return null===t?"":g(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=g(t))?this.port=null:this.parse(t,Ct))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+U(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,vt))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=g(t))?this.query=null:("?"==H(t,0)&&(t=z(t,1)),this.query="",this.parse(t,Nt)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=g(t))?("#"==H(t,0)&&(t=z(t,1)),this.fragment="",this.parse(t,Jt)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Lt=function(t){var e=Z(this,Ut),n=y(arguments.length,1)>1?arguments[1]:void 0,l=C(e,new Ht(t,!1,n));c||(e.href=l.serialize(),e.origin=l.getOrigin(),e.protocol=l.getProtocol(),e.username=l.getUsername(),e.password=l.getPassword(),e.host=l.getHost(),e.hostname=l.getHostname(),e.port=l.getPort(),e.pathname=l.getPathname(),e.search=l.getSearch(),e.searchParams=l.getSearchParams(),e.hash=l.getHash())},Ut=Lt.prototype,kt=function(t,e){return{get:function(){return R(this)[t]()},set:e&&function(t){return R(this)[e](t)},configurable:!0,enumerable:!0}};if(c&&u(Ut,{href:kt("serialize","setHref"),origin:kt("getOrigin"),protocol:kt("getProtocol","setProtocol"),username:kt("getUsername","setUsername"),password:kt("getPassword","setPassword"),host:kt("getHost","setHost"),hostname:kt("getHostname","setHostname"),port:kt("getPort","setPort"),pathname:kt("getPathname","setPathname"),search:kt("getSearch","setSearch"),searchParams:kt("getSearchParams"),hash:kt("getHash","setHash")}),s(Ut,"toJSON",(function(){return R(this).serialize()}),{enumerable:!0}),s(Ut,"toString",(function(){return R(this).serialize()}),{enumerable:!0}),v){var Bt=v.createObjectURL,xt=v.revokeObjectURL;Bt&&s(Lt,"createObjectURL",r(Bt,v)),xt&&s(Lt,"revokeObjectURL",r(xt,v))}X(Lt,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Lt})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,d="Overflow: input needs wider integers to process",r=l.RangeError,a=i(o.exec),u=Math.floor,s=String.fromCharCode,Z=i("".charCodeAt),b=i([].join),m=i([].push),h=i("".replace),p=i("".split),I=i("".toLowerCase),G=function(t){return t+22+75*(t<26)},g=function(t,e,n){var l=0;for(t=n?u(t/700):t>>1,t+=u(t/e);t>455;)t=u(t/35),l+=36;return u(l+36*t/(t+38))},X=function(t){var e,n,l=[],i=(t=function(t){for(var e=[],n=0,l=t.length;n<l;){var i=Z(t,n++);if(i>=55296&&i<=56319&&n<l){var c=Z(t,n++);56320==(64512&c)?m(e,((1023&i)<<10)+(1023&c)+65536):(m(e,i),n--)}else m(e,i)}return e}(t)).length,c=128,o=0,a=72;for(e=0;e<t.length;e++)(n=t[e])<128&&m(l,s(n));var h=l.length,p=h;for(h&&m(l,"-");p<i;){var I=2147483647;for(e=0;e<t.length;e++)(n=t[e])>=c&&n<I&&(I=n);var X=p+1;if(I-c>u((2147483647-o)/X))throw r(d);for(o+=(I-c)*X,c=I,e=0;e<t.length;e++){if((n=t[e])<c&&++o>2147483647)throw r(d);if(n==c){for(var y=o,V=36;;){var W=V<=a?1:V>=a+26?26:V-a;if(y<W)break;var C=y-W,R=36-W;m(l,s(G(W+C%R))),y=u(C/R),V+=36}m(l,s(G(y))),a=g(o,X,p==h),o=0,p++}}o++,c++}return b(l,"")};t.exports=function(t){var e,n,l=[],i=p(h(I(t),o,"."),".");for(e=0;e<i.length;e++)n=i[e],m(l,a(c,n)?"xn--"+X(n):n);return b(l,".")}},function(t,e,n){"use strict";var l=n(0),i=n(5);l({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},function(t,e,n){n(218)},function(t,e,n){var l=function(t){"use strict";var e=Object.prototype,n=e.hasOwnProperty,l="function"==typeof Symbol?Symbol:{},i=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",o=l.toStringTag||"@@toStringTag";function d(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,n){return t[e]=n}}function r(t,e,n,l){var i=e&&e.prototype instanceof s?e:s,c=Object.create(i.prototype),o=new W(l||[]);return c._invoke=function(t,e,n){var l="suspendedStart";return function(i,c){if("executing"===l)throw new Error("Generator is already running");if("completed"===l){if("throw"===i)throw c;return R()}for(n.method=i,n.arg=c;;){var o=n.delegate;if(o){var d=X(o,n);if(d){if(d===u)continue;return d}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===l)throw l="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);l="executing";var r=a(t,e,n);if("normal"===r.type){if(l=n.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:n.done}}"throw"===r.type&&(l="completed",n.method="throw",n.arg=r.arg)}}}(t,n,o),c}function a(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function s(){}function Z(){}function b(){}var m={};d(m,i,(function(){return this}));var h=Object.getPrototypeOf,p=h&&h(h(C([])));p&&p!==e&&n.call(p,i)&&(m=p);var I=b.prototype=s.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function g(t,e){var l;this._invoke=function(i,c){function o(){return new e((function(l,o){!function l(i,c,o,d){var r=a(t[i],t,c);if("throw"!==r.type){var u=r.arg,s=u.value;return s&&"object"==typeof s&&n.call(s,"__await")?e.resolve(s.__await).then((function(t){l("next",t,o,d)}),(function(t){l("throw",t,o,d)})):e.resolve(s).then((function(t){u.value=t,o(u)}),(function(t){return l("throw",t,o,d)}))}d(r.arg)}(i,c,l,o)}))}return l=l?l.then(o,o):o()}}function X(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,X(t,e),"throw"===e.method))return u;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var l=a(n,t.iterator,e.arg);if("throw"===l.type)return e.method="throw",e.arg=l.arg,e.delegate=null,u;var i=l.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,u):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,u)}function y(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function V(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(y,this),this.reset(!0)}function C(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var l=-1,c=function e(){for(;++l<t.length;)if(n.call(t,l))return e.value=t[l],e.done=!1,e;return e.value=void 0,e.done=!0,e};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return Z.prototype=b,d(I,"constructor",b),d(b,"constructor",Z),Z.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===Z||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(I),t},t.awrap=function(t){return{__await:t}},G(g.prototype),d(g.prototype,c,(function(){return this})),t.AsyncIterator=g,t.async=function(e,n,l,i,c){void 0===c&&(c=Promise);var o=new g(r(e,n,l,i),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(I),d(I,o,"Generator"),d(I,i,(function(){return this})),d(I,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var l=e.pop();if(l in t)return n.value=l,n.done=!1,n}return n.done=!0,n}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function l(n,l){return o.type="throw",o.arg=t,e.next=n,l&&(e.method="next",e.arg=void 0),!!l}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],o=c.completion;if("root"===c.tryLoc)return l("end");if(c.tryLoc<=this.prev){var d=n.call(c,"catchLoc"),r=n.call(c,"finallyLoc");if(d&&r){if(this.prev<c.catchLoc)return l(c.catchLoc,!0);if(this.prev<c.finallyLoc)return l(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return l(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return l(c.finallyLoc)}}}},abrupt:function(t,e){for(var l=this.tryEntries.length-1;l>=0;--l){var i=this.tryEntries[l];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var c=i;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=e,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),u},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),u}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var l=n.completion;if("throw"===l.type){var i=l.arg;V(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:C(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=l}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=l:Function("r","regeneratorRuntime = r")(l)}},function(t,e,n){"use strict";n.r(e),n.d(e,"AUTHORIZATION_CODE",(function(){return l.a})),n.d(e,"AsgardeoAuthClient",(function(){return l.b})),n.d(e,"AsgardeoAuthException",(function(){return l.c})),n.d(e,"AsgardeoSPAClient",(function(){return l.d})),n.d(e,"AuthenticationHelper",(function(){return l.e})),n.d(e,"AuthenticationUtils",(function(){return l.f})),n.d(e,"CLIENT_ID_TAG",(function(){return l.g})),n.d(e,"CLIENT_SECRET_TAG",(function(){return l.h})),n.d(e,"CryptoHelper",(function(){return l.i})),n.d(e,"DataLayer",(function(){return l.j})),n.d(e,"Hooks",(function(){return l.k})),n.d(e,"MainThreadClient",(function(){return l.l})),n.d(e,"OIDC_SCOPE",(function(){return l.m})),n.d(e,"PKCE_CODE_VERIFIER",(function(){return l.n})),n.d(e,"PKCE_SEPARATOR",(function(){return l.o})),n.d(e,"REFRESH_TOKEN_TIMER",(function(){return l.p})),n.d(e,"ResponseMode",(function(){return l.q})),n.d(e,"SCOPE_TAG",(function(){return l.r})),n.d(e,"SESSION_STATE",(function(){return l.s})),n.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.t})),n.d(e,"SIGN_OUT_URL",(function(){return l.u})),n.d(e,"SPAHelper",(function(){return l.v})),n.d(e,"SPAUtils",(function(){return l.w})),n.d(e,"STATE",(function(){return l.x})),n.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return l.y})),n.d(e,"Storage",(function(){return l.z})),n.d(e,"Stores",(function(){return l.A})),n.d(e,"TOKEN_TAG",(function(){return l.B})),n.d(e,"USERNAME_TAG",(function(){return l.C})),n.d(e,"WebWorkerClass",(function(){return l.D})),n.d(e,"WebWorkerClient",(function(){return l.E})),n.d(e,"workerReceiver",(function(){return l.F})),n.d(e,"AuthProvider",(function(){return W})),n.d(e,"useAuthContext",(function(){return C})),n.d(e,"SecureRoute",(function(){return S})),n.d(e,"AuthenticatedComponent",(function(){return K})),n.d(e,"SecureApp",(function(){return J}));n(220),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(109),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(271),n(272),n(273),n(275),n(276),n(278),n(279),n(281),n(282),n(283),n(284),n(285),n(174),n(286),n(147),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(344),n(345),n(346),n(347),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(154),n(375),n(376),n(377),n(378),n(379),n(381),n(382),n(383),n(384),n(201),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(398),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),n(159),n(450),n(452),n(459),n(460),n(461),n(462),n(463),n(464),n(465),n(466),n(467),n(468),n(469),n(470),n(471),n(472),n(473),n(474),n(475),n(476),n(477),n(478),n(479),n(480),n(481),n(482),n(483),n(484),n(485),n(486),n(487),n(488),n(489),n(490),n(491),n(492),n(493),n(494),n(495),n(496),n(497),n(498),n(499),n(501),n(502),n(503),n(504),n(505),n(506),n(507),n(508),n(509),n(510),n(511),n(512),n(513),n(514),n(515),n(516),n(517),n(518),n(519),n(520),n(521),n(522),n(523),n(524),n(525),n(526),n(527),n(528),n(529),n(533),n(535),n(536),n(537),n(538),n(539),n(541),n(542),n(543),n(544),n(545),n(546),n(547),n(548),n(549),n(550),n(551),n(552),n(553),n(554),n(555),n(556),n(557),n(558),n(559),n(560),n(561),n(562),n(563),n(564),n(565),n(566),n(568),n(569),n(570),n(571),n(572),n(573),n(574),n(575),n(576),n(577),n(578),n(579),n(580),n(581),n(582),n(583),n(586),n(587),n(590),n(593),n(594),n(595);var l=n(54),i=n(23),c=n.n(i);function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function d(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function r(t,e,n,l,i,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?e(r):Promise.resolve(r).then(l,i)}function a(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){r(c,l,i,o,d,"next",t)}function d(t){r(c,l,i,o,d,"throw",t)}o(void 0)}))}}function u(t,e){for(var n=0;n<e.length;n++){var l=e[n];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(t,l.key,l)}}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Z=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"_authState",t.DEFAULT_STATE),s(this,"_client",void 0),this._client=null!=e?e:l.d.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var e,n,i,c,o,r,Z,b,m,h,p,I,G,g,X,y,V,W,C,R,f;return e=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(f=a(regeneratorRuntime.mark((function t(e,n,l,i,c,o,r){var u=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(l,i,c,o).then(function(){var t=a(regeneratorRuntime.mark((function t(l){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(l){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,u._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}i={allowedScopes:l.allowedScopes,displayName:l.displayName,email:l.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:l.sub,username:l.username},u.updateState(i),e(d(d({},n),i)),r&&r(l);case 9:return t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e,n,l,i,c,o){return f.apply(this,arguments)})},{key:"signOut",value:function(t,e,n){return this._client.signOut().then((function(t){return n&&n(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(R=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return R.apply(this,arguments)})},{key:"httpRequest",value:(C=a(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return C.apply(this,arguments)})},{key:"httpRequestAll",value:(W=a(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return W.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,e,n){var l=this;return this._client.requestCustomGrant(t).then((function(i){if(i)return t.returnsSession&&(l.updateState(d(d(d({},l.getState()),i),{},{isAuthenticated:!0,isLoading:!1})),n(d(d({},i),{},{isAuthenticated:!0,isLoading:!1}))),e&&e(i),i})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(V=a(regeneratorRuntime.mark((function e(n){var l=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._client.revokeAccessToken().then((function(){return l.updateState(d(d({},t.DEFAULT_STATE),{},{isLoading:!1})),n(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e,this)}))),function(t){return V.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(X=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return X.apply(this,arguments)})},{key:"getDecodedIDToken",value:(g=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return g.apply(this,arguments)})},{key:"getDecodedIDPIDToken",value:(G=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getIDToken",value:(I=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(p=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDPAccessToken",value:(h=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDPAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(Z=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return Z.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"updateConfig",value:(o=a(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,e,n){return t===l.k.CustomGrant?this._client.on(t,e,n):this._client.on(t,e)}},{key:"trySignInSilently",value:(c=a(regeneratorRuntime.mark((function t(e,n){var l=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=a(regeneratorRuntime.mark((function t(i){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i){t.next=4;break}return l.updateState(d(d({},l.getState()),{},{isLoading:!1})),n(d(d({},e),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,l._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=i).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:c.sub,username:c.username},l.updateState(o),n(d(d({},e),o));case 11:return t.abrupt("return",i);case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e){return c.apply(this,arguments)})}])&&u(e.prototype,n),i&&u(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();s(Z,"DEFAULT_STATE",void 0),Z.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var b=Z;function m(t,e,n,l,i,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?e(r):Promise.resolve(r).then(l,i)}function h(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){m(c,l,i,o,d,"next",t)}function d(t){m(c,l,i,o,d,"throw",t)}o(void 0)}))}}function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function I(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?p(Object(n),!0).forEach((function(e){G(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function G(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var l,i,c=[],o=!0,d=!1;try{for(n=n.call(t);!(o=(l=n.next()).done)&&(c.push(l.value),!e||c.length!==e);o=!0);}catch(t){d=!0,i=t}finally{try{o||null==n.return||n.return()}finally{if(d)throw i}}return c}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return X(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return X(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,l=new Array(e);n<e;n++)l[n]=t[n];return l}var y={disableTrySignInSilently:!0},V=Object(i.createContext)(null),W=function(t){var e=t.children,n=t.config,o=t.fallback,d=t.getAuthParams,r=t.onSignOut,a=t.plugin,u=Object(i.useMemo)((function(){return new b(a)}),[a]),s=g(Object(i.useState)(u.getState()),2),Z=s[0],m=s[1],p=g(Object(i.useState)(!1),2),G=p[0],X=p[1],W=Object(i.useMemo)((function(){return I(I({},y),n)}),[n]),C=function(){var t=h(regeneratorRuntime.mark((function t(e,n,l,i,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,S(null),t.next=4,u.signIn(m,Z,e,n,l,i,c);case 4:return t.abrupt("return",t.sent);case 7:return t.prev=7,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(e,n,l,i,c){return t.apply(this,arguments)}}(),R=function(t,e,n){return t===l.k.CustomGrant?u.on(t,e,n):u.on(t,e)},f=function(){return u.trySignInSilently(Z,m)},Y=g(Object(i.useState)(),2),v=Y[0],S=Y[1];return Object(i.useEffect)((function(){Z.isAuthenticated||h(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=X,t.next=3,u.init(W);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[W]),Object(i.useEffect)((function(){h(regeneratorRuntime.mark((function t(){var e,n,i,c,o,a,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,R(l.k.SignOut,(function(){e=!0,r&&r()}));case 3:if(!Z.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(W.skipRedirectCallback){t.next=22;break}if(i=null,!d||"function"!=typeof d){t.next=11;break}return t.next=10,d();case 10:i=t.sent;case 11:if(c=new URL(location.href),!(l.w.hasAuthSearchParamsInURL()&&new URL(c.origin+c.pathname).toString()===new URL(null==W?void 0:W.signInRedirectURL).toString()||null!==(n=i)&&void 0!==n&&n.authorizationCode||c.searchParams.get("error"))){t.next=22;break}return t.prev=13,t.next=16,C({callOnlyOnRedirect:!0},null===(o=i)||void 0===o?void 0:o.authorizationCode,null===(a=i)||void 0===a?void 0:a.sessionState,null===(s=i)||void 0===s?void 0:s.state);case 16:S(null),t.next=22;break;case 19:t.prev=19,t.t0=t.catch(13),t.t0&&Object.prototype.hasOwnProperty.call(t.t0,"code")&&S(t.t0);case 22:if(!u.getState().isAuthenticated){t.next=24;break}return t.abrupt("return");case 24:if(!W.disableTrySignInSilently&&!e){t.next=27;break}return m(I(I({},Z),{},{isLoading:!1})),t.abrupt("return");case 27:return t.next=29,f().then((function(){S(null)})).catch((function(t){t&&Object.prototype.hasOwnProperty.call(t,"code")&&S(t)}));case 29:case"end":return t.stop()}}),t,null,[[13,19]])})))()}),[W]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return u.disableHttpHandler()},enableHttpHandler:function(){return u.enableHttpHandler()},getAccessToken:function(){return u.getAccessToken()},getBasicUserInfo:function(){return u.getBasicUserInfo()},getDecodedIDPIDToken:function(){return u.getDecodedIDPIDToken()},getDecodedIDToken:function(){return u.getDecodedIDToken()},getHttpClient:function(){return u.getHttpClient()},getIDToken:function(){return u.getIDToken()},getOIDCServiceEndpoints:function(){return u.getOIDCServiceEndpoints()},httpRequest:function(t){return u.httpRequest(t)},httpRequestAll:function(t){return u.httpRequestAll(t)},isAuthenticated:function(){return u.isAuthenticated()},on:R,refreshAccessToken:function(){return u.refreshAccessToken()},requestCustomGrant:function(t,e){return u.requestCustomGrant(t,e,m)},revokeAccessToken:function(){return u.revokeAccessToken(m)},signIn:C,signOut:function(t){return u.signOut(m,Z,t)},state:Z,trySignInSilently:f,updateConfig:function(t){return u.updateConfig(t)},error:v}},G?e:null!=o?o:null)},C=function(){return Object(i.useContext)(V)},R=n(219),f=["component","callback"];function Y(){return(Y=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(t[l]=n[l])}return t}).apply(this,arguments)}function v(t,e){if(null==t)return{};var n,l,i=function(t,e){if(null==t)return{};var n,l,i={},c=Object.keys(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var S=function(t){var e=C().state,n=t.component,l=t.callback,o=v(t,f);return Object(i.useEffect)((function(){e.isAuthenticated||l&&l()}),[e.isAuthenticated]),e.isAuthenticated?c.a.createElement(R.Route,Y({},o,{render:function(t){return c.a.createElement(n,t)}})):null},K=function(t){var e=t.fallback,n=t.children,l=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",l?n:null!=e?e:null," ")};function N(t,e,n,l,i,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?e(r):Promise.resolve(r).then(l,i)}var J=function(t){var e=t.children,n=t.fallback,l=t.onSignIn,o=t.overrideSignIn,d=C(),r=d.state,a=r.isAuthenticated,u=r.isLoading,s=d.signIn;return Object(i.useEffect)((function(){var t;a||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,s();case 7:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){N(c,l,i,o,d,"next",t)}function d(t){N(c,l,i,o,d,"throw",t)}o(void 0)}))})(),a&&l&&"function"==typeof l&&l()}),[a,u]),c.a.createElement(K,{fallback:n},c.a.createElement(i.Suspense,{fallback:n},e))}}])}));
914
+ */updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===J.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}Ql._instances=new Map;class Pl extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}const jl=t=>{const e=self;let n;e.onmessage=({data:e,ports:d})=>l(void 0,void 0,void 0,(function*(){var a,r,u,s,Z,b;const m=d[0];if("init"===e.type||n)switch(e.type){case"init":try{const d=Object.assign({},e.data);n=yield((t,e)=>l(void 0,void 0,void 0,(function*(){const n=new Ae,i=new Tl,c=new K(n,i);yield c.initialize(t);const o=new B(c),d=e(c,o),a=c.getDataLayer(),r=xe.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,t=>l(void 0,void 0,void 0,(function*(){const e=Object.assign({attachToken:!0},t);e.attachToken&&(e.shouldAttachIDPAccessToken?t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield d.getIDPAccessToken())}):t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield d.getAccessToken())}))})))),{disableHttpHandler:()=>{d.disableHttpHandler(r)},enableHttpHandler:()=>{d.enableHttpHandler(r)},getAccessToken:()=>d.getAccessToken(),getAuthorizationURL:t=>l(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){var e;const n=null!==(e=new URL(t).searchParams.get(X))&&void 0!==e?e:"",l=yield c.getPKCECode(n);return{authorizationURL:t,pkce:l}}))).catch(t=>Promise.reject(t))})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return d.getBasicUserInfo()})),getConfigData:()=>l(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getCryptoHelper:()=>l(void 0,void 0,void 0,(function*(){return d.getCryptoHelper()})),getDecodedIDPIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getDecodedIDPIDToken()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getDecodedIDToken()})),getIDToken:()=>l(void 0,void 0,void 0,(function*(){return d.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return d.getOIDCServiceEndpoints()})),getSignOutURL:()=>l(void 0,void 0,void 0,(function*(){return yield c.getSignOutURL()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){return yield d.httpRequest(r,t)})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){return yield d.httpRequestAll(t,r)})),isAuthenticated:()=>d.isAuthenticated(),refreshAccessToken:()=>l(void 0,void 0,void 0,(function*(){try{return yield d.refreshAccessToken()}catch(t){return Promise.reject(t)}})),requestAccessToken:(t,e,n,i)=>l(void 0,void 0,void 0,(function*(){return yield d.requestAccessToken(t,e,void 0,n,i)})),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){return yield d.requestCustomGrant(t)})),revokeAccessToken:()=>l(void 0,void 0,void 0,(function*(){const t=yield o.getRefreshTimeoutTimer();return c.revokeAccessToken().then(()=>(o.clearRefreshTokenTimeout(t),Promise.resolve(!0))).catch(t=>Promise.reject(t))})),setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(t)},setSessionState:t=>l(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(I,t)})),signOut:()=>l(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield c.getSignOutURL()})),startAutoRefreshToken:()=>l(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(d)})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){yield c.updateConfig(t)}))}})))(d,t),n.setHttpRequestFinishCallback(o),n.setHttpRequestStartCallback(i),n.setHttpRequestSuccessCallback(c),m.postMessage(F.generateSuccessMessage())}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get_auth_url":n.getAuthorizationURL(null==e?void 0:e.data).then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break;case"request_get_token":n.requestAccessToken(null===(a=null==e?void 0:e.data)||void 0===a?void 0:a.code,null===(r=null==e?void 0:e.data)||void 0===r?void 0:r.sessionState,null===(u=null==e?void 0:e.data)||void 0===u?void 0:u.pkce,null===(s=null==e?void 0:e.data)||void 0===s?void 0:s.state).then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break;case"http-request":{const t=e.data,l=null==t?void 0:t.data;if(!0===(null===(b=null===(Z=e.data)||void 0===Z?void 0:Z.data)||void 0===b?void 0:b.formData)){const e=new FormData;for(const t in l)"formData"!==t&&e.append(t,l[t]);t.data=e}n.httpRequest(t).then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break}case"http-request-all":n.httpRequestAll(e.data).then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break;case"sign-out":try{m.postMessage(F.generateSuccessMessage(yield n.signOut()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"request-custom-grant":n.requestCustomGrant(e.data).then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break;case"revoke-access-token":n.revokeAccessToken().then(t=>{m.postMessage(F.generateSuccessMessage(t))}).catch(t=>{m.postMessage(F.generateFailureMessage(t))});break;case"get-oidc-service-endpoints":try{m.postMessage(F.generateSuccessMessage(yield n.getOIDCServiceEndpoints()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get-basic-user-info":try{m.postMessage(F.generateSuccessMessage(yield n.getBasicUserInfo()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get-decoded-id-token":try{m.postMessage(F.generateSuccessMessage(yield n.getDecodedIDToken()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get-crypto-helper":try{m.postMessage(F.generateSuccessMessage(yield n.getCryptoHelper()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get_id_token":try{m.postMessage(F.generateSuccessMessage(yield n.getIDToken()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"enable_http_handler":n.enableHttpHandler(),m.postMessage(F.generateSuccessMessage());break;case"disable_http_handler":n.disableHttpHandler(),m.postMessage(F.generateSuccessMessage());break;case"is_authenticated":try{m.postMessage(F.generateSuccessMessage(yield n.isAuthenticated()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get_sign_out_url":try{m.postMessage(F.generateSuccessMessage(yield n.getSignOutURL()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"refresh_access-token":try{m.postMessage(F.generateSuccessMessage(yield n.refreshAccessToken()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"start_auto_refresh_token":try{m.postMessage(F.generateSuccessMessage(n.startAutoRefreshToken()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"set_session_state":try{m.postMessage(F.generateSuccessMessage(yield n.setSessionState(null==e?void 0:e.data)))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"update_config":try{m.postMessage(F.generateSuccessMessage(yield n.updateConfig(null==e?void 0:e.data)))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;case"get_config_data":try{m.postMessage(F.generateSuccessMessage(yield n.getConfigData()))}catch(t){m.postMessage(F.generateFailureMessage(t))}break;default:null==m||m.postMessage(F.generateFailureMessage(new W("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.",`The message type provided, ${e.type}, is invalid.`)))}else m.postMessage(F.generateFailureMessage(new W("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 i=()=>{e.postMessage({type:"request-start"})},c=t=>{e.postMessage({data:JSON.stringify(null!=t?t:""),type:"request-success"})},o=()=>{e.postMessage({type:"request-finish"})}}}).call(this,n(163))},function(t,e,n){var l=n(130),i=n(71);t.exports=function(t){var e=l(t,"string");return i(e)?e:e+""}},function(t,e,n){var l,i,c=n(1),o=n(48),d=c.process,a=c.Deno,r=d&&d.versions||a&&a.version,u=r&&r.v8;u&&(i=(l=u.split("."))[0]>0&&l[0]<4?1:+(l[0]+l[1])),!i&&o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(i=+l[1]),t.exports=i},function(t,e,n){var l=n(169),i=n(134).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return l(t,i)}},function(t,e,n){"use strict";var l=n(55),i=n(16),c=n(43);t.exports=function(t,e,n){var o=l(e);o in t?i.f(t,o,c(0,n)):t[o]=n}},function(t,e,n){var l=n(40);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,e,n){var l=n(3);t.exports=l([].slice)},function(t,e,n){var l=n(64),i=n(27),c=n(91),o=n(7)("iterator");t.exports=function(t){if(null!=t)return i(t,o)||i(t,"@@iterator")||c[l(t)]}},function(t,e,n){"use strict";var l=n(6),i=function(t){var e,n;this.promise=new t((function(t,l){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=l})),this.resolve=l(e),this.reject=l(n)};t.exports.f=function(t){return new i(t)}},function(t,e,n){var l=n(24),i=n(101);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.1",mode:l?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){var l=n(1),i=n(135),c=n(10),o=n(40),d=n(7)("toStringTag"),a=l.Object,r="Arguments"==o(function(){return arguments}());t.exports=i?o:function(t){var e,n,l;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=a(t),d))?n:r?o(e):"Object"==(l=o(e))&&c(e.callee)?"Arguments":l}},function(t,e,n){var l=n(3),i=n(4),c=n(10),o=n(64),d=n(11),a=n(103),r=function(){},u=[],s=d("Reflect","construct"),Z=/^\s*(?:class|function)\b/,b=l(Z.exec),m=!Z.exec(r),h=function(t){if(!c(t))return!1;try{return s(r,u,t),!0}catch(t){return!1}},p=function(t){if(!c(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return m||!!b(Z,a(t))}catch(t){return!0}};p.sham=!0,t.exports=!s||i((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?p:h},function(t,e,n){"use strict";var l=n(11),i=n(16),c=n(7),o=n(9),d=c("species");t.exports=function(t){var e=l(t),n=i.f;o&&e&&!e[d]&&n(e,d,{configurable:!0,get:function(){return this}})}},function(t,e,n){var l=n(0),i=n(3),c=n(86),o=n(12),d=n(15),a=n(16).f,r=n(57),u=n(136),s=n(114),Z=n(85),b=n(93),m=!1,h=Z("meta"),p=0,I=function(t){a(t,h,{value:{objectID:"O"+p++,weakData:{}}})},G=t.exports={enable:function(){G.enable=function(){},m=!0;var t=r.f,e=i([].splice),n={};n[h]=1,t(n).length&&(r.f=function(n){for(var l=t(n),i=0,c=l.length;i<c;i++)if(l[i]===h){e(l,i,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,h)){if(!s(t))return"F";if(!e)return"E";I(t)}return t[h].objectID},getWeakData:function(t,e){if(!d(t,h)){if(!s(t))return!0;if(!e)return!1;I(t)}return t[h].weakData},onFreeze:function(t){return b&&m&&s(t)&&!d(t,h)&&I(t),t}};c[h]=!0},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),d=n(28),a=n(46),r=n(7),u=n(21),s=n(11),Z=n(27),b=n(126),m=s("Promise"),h=u.set,p=u.getterFor("AsyncIteratorProxy"),I=r("toStringTag");t.exports=function(t,e){var n=function(t){t.type="AsyncIteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,h(this,t)};return n.prototype=a(o(b),{next:function(n){var i=this,o=!!arguments.length;return new m((function(d){var a=p(i),r=o?[a.ignoreArgument?void 0:n]:e?[]:[void 0];a.ignoreArgument=!1,d(a.done?{done:!0,value:void 0}:c(l(t,a,m,r)))}))},return:function(t){var e=this;return new m((function(n,i){var o=p(e),d=o.iterator;o.done=!0;var a=Z(d,"return");if(void 0===a)return n({done:!0,value:t});m.resolve(l(a,d,t)).then((function(e){c(e),n({done:!0,value:t})}),i)}))},throw:function(t){var e=this;return new m((function(n,i){var c=p(e),o=c.iterator;c.done=!0;var d=Z(o,"throw");if(void 0===d)return i(t);n(l(d,o,t))}))}}),e||d(n.prototype,I,"Generator"),n}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),d=n(28),a=n(46),r=n(7),u=n(21),s=n(27),Z=n(92).IteratorPrototype,b=u.set,m=u.getterFor("IteratorProxy"),h=r("toStringTag");t.exports=function(t,e){var n=function(t){t.type="IteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,b(this,t)};return n.prototype=a(o(Z),{next:function(n){var i=m(this),c=arguments.length?[i.ignoreArg?void 0:n]:e?[]:[void 0];i.ignoreArg=!1;var o=i.done?void 0:l(t,i,c);return{done:i.done,value:o}},return:function(t){var e=m(this),n=e.iterator;e.done=!0;var i=s(n,"return");return{done:!0,value:i?c(l(i,n,t)).value:t}},throw:function(t){var e=m(this),n=e.iterator;e.done=!0;var i=s(n,"throw");if(i)return l(i,n,t);throw t}}),e||d(n.prototype,h,"Generator"),n}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Set.prototype.values,t)}},function(t,e,n){var l=n(1),i=n(11),c=n(10),o=n(36),d=n(164),a=l.Object;t.exports=d?function(t){return"symbol"==typeof t}:function(t){var e=i("Symbol");return c(e)&&o(e.prototype,a(t))}},function(t,e,n){var l=n(56),i=n(4);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&l&&l<41}))},function(t,e,n){var l=n(1).String;t.exports=function(t){try{return l(t)}catch(t){return"Object"}}},function(t,e,n){var l=n(9),i=n(15),c=Function.prototype,o=l&&Object.getOwnPropertyDescriptor,d=i(c,"name"),a=d&&"something"===function(){}.name,r=d&&(!l||l&&o(c,"name").configurable);t.exports={EXISTS:d,PROPER:a,CONFIGURABLE:r}},function(t,e,n){var l=n(169),i=n(134);t.exports=Object.keys||function(t){return l(t,i)}},function(t,e,n){var l=n(223);t.exports=function(t,e){return new(l(t))(0===e?0:e)}},function(t,e,n){"use strict";var l=n(92).IteratorPrototype,i=n(29),c=n(43),o=n(41),d=n(91),a=function(){return this};t.exports=function(t,e,n,r){var u=e+" Iterator";return t.prototype=i(l,{next:c(+!r,n)}),o(t,u,!1,!0),d[u]=a,t}},function(t,e,n){var l=n(40),i=n(1);t.exports="process"==l(i.process)},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=n(117),d=l("".replace),a="["+o+"]",r=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),s=function(t){return function(e){var n=c(i(e));return 1&t&&(n=d(n,r,"")),2&t&&(n=d(n,u,"")),n}};t.exports={start:s(1),end:s(2),trim:s(3)}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,n){var l=n(1);t.exports=l.Promise},function(t,e,n){var l=n(3),i=n(35),c=n(14),o=n(26),d=l("".charAt),a=l("".charCodeAt),r=l("".slice),u=function(t){return function(e,n){var l,u,s=c(o(e)),Z=i(n),b=s.length;return Z<0||Z>=b?t?"":void 0:(l=a(s,Z))<55296||l>56319||Z+1===b||(u=a(s,Z+1))<56320||u>57343?t?d(s,Z):l:t?r(s,Z,Z+2):u-56320+(l-55296<<10)+65536}};t.exports={codeAt:u(!1),charAt:u(!0)}},function(t,e,n){var l=n(4);t.exports=!l((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){var l=n(1),i=n(3),c=n(4),o=n(40),d=l.Object,a=i("".split);t.exports=c((function(){return!d("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?a(t,""):d(t)}:d},function(t,e,n){var l=n(3),i=0,c=Math.random(),o=l(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+c,36)}},function(t,e){t.exports={}},function(t,e,n){var l=n(34),i=n(49),c=n(22),o=function(t){return function(e,n,o){var d,a=l(e),r=c(a),u=i(o,r);if(t&&n!=n){for(;r>u;)if((d=a[u++])!=d)return!0}else for(;r>u;u++)if((t||u in a)&&a[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,n){var l=n(4),i=n(10),c=/#|\.prototype\./,o=function(t,e){var n=a[d(t)];return n==u||n!=r&&(i(e)?l(e):!!e)},d=o.normalize=function(t){return String(t).replace(c,".").toLowerCase()},a=o.data={},r=o.NATIVE="N",u=o.POLYFILL="P";t.exports=o},function(t,e,n){var l=n(1),i=n(49),c=n(22),o=n(58),d=l.Array,a=Math.max;t.exports=function(t,e,n){for(var l=c(t),r=i(e,l),u=i(void 0===n?l:n,l),s=d(a(u-r,0)),Z=0;r<u;r++,Z++)o(s,Z,t[r]);return s.length=Z,s}},function(t,e,n){var l=n(4),i=n(7),c=n(56),o=i("species");t.exports=function(t){return c>=51||!l((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e){t.exports={}},function(t,e,n){"use strict";var l,i,c,o=n(4),d=n(10),a=n(29),r=n(32),u=n(20),s=n(7),Z=n(24),b=s("iterator"),m=!1;[].keys&&("next"in(c=[].keys())?(i=r(r(c)))!==Object.prototype&&(l=i):m=!0),null==l||o((function(){var t={};return l[b].call(t)!==t}))?l={}:Z&&(l=a(l)),d(l[b])||u(l,b,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:m}},function(t,e,n){var l=n(4);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){var l=n(1).TypeError;t.exports=function(t,e){if(t<e)throw l("Not enough arguments");return t}},function(t,e,n){var l=n(1),i=n(81),c=n(10),o=n(88),d=n(103),a=n(7),r=n(352),u=n(24),s=n(56),Z=i&&i.prototype,b=a("species"),m=!1,h=c(l.PromiseRejectionEvent),p=o("Promise",(function(){var t=d(i),e=t!==String(i);if(!e&&66===s)return!0;if(u&&(!Z.catch||!Z.finally))return!0;if(s>=51&&/native code/.test(t))return!1;var n=new i((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[b]=l,!(m=n.then((function(){}))instanceof l)||!e&&r&&!h}));t.exports={CONSTRUCTOR:p,REJECTION_EVENT:h,SUBCLASSING:m}},function(t,e,n){var l=n(12),i=n(40),c=n(7)("match");t.exports=function(t){var e;return l(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==i(t))}},function(t,e,n){var l=n(1),i=n(5),c=n(2),o=n(10),d=n(40),a=n(122),r=l.TypeError;t.exports=function(t,e){var n=t.exec;if(o(n)){var l=i(n,t,e);return null!==l&&c(l),l}if("RegExp"===d(t))return i(a,t,e);throw r("RegExp#exec called on incompatible receiver")}},function(t,e,n){var l=n(1),i=n(35),c=l.RangeError;t.exports=function(t){var e=i(t);if(e<0)throw c("The argument can't be less than 0");return e}},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(2),d=n(11),a=n(27),r=l.TypeError,u=function(t){var e=0==t,n=1==t,l=2==t,u=3==t;return function(t,s,Z){o(t);var b=d("Promise"),m=c(t.next),h=0,p=void 0!==s;return!p&&e||c(s),new b((function(c,d){var I=function(e,n){try{var l=a(t,"return");if(l)return b.resolve(i(l,t)).then((function(){e(n)}),(function(t){d(t)}))}catch(t){return d(t)}e(n)},G=function(t){I(d,t)},g=function(){try{if(e&&h>9007199254740991&&p)throw r("The allowed number of iterations has been exceeded");b.resolve(o(i(m,t))).then((function(t){try{if(o(t).done)e?(Z.length=h,c(Z)):c(!u&&(l||void 0));else{var i=t.value;p?b.resolve(e?s(i,h):s(i)).then((function(t){n?g():l?t?g():I(c,!1):e?(Z[h++]=t,g()):t?I(c,u||i):g()}),G):(Z[h++]=i,g())}}catch(t){G(t)}}),G)}catch(t){G(t)}};g()}))}};t.exports={toArray:u(0),forEach:u(1),every:u(2),some:u(3),find:u(4)}},function(t,e,n){"use strict";var l={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,c=i&&!l.call({1:2},1);e.f=c?function(t){var e=i(this,t);return!!e&&e.enumerable}:l},function(t,e,n){var l=n(1),i=n(131),c=l["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,n){var l=n(1),i=n(12),c=l.document,o=i(c)&&i(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,e,n){var l=n(3),i=n(10),c=n(101),o=l(Function.toString);i(c.inspectSource)||(c.inspectSource=function(t){return o(t)}),t.exports=c.inspectSource},function(t,e,n){var l=n(63),i=n(85),c=l("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var l=n(9),i=n(167),c=n(16),o=n(2),d=n(34),a=n(75);e.f=l&&!i?Object.defineProperties:function(t,e){o(t);for(var n,l=d(e),i=a(e),r=i.length,u=0;r>u;)c.f(t,n=i[u++],l[n]);return t}},function(t,e,n){var l=n(5),i=n(2),c=n(27);t.exports=function(t,e,n){var o,d;i(t);try{if(!(o=c(t,"return"))){if("throw"===e)throw n;return n}o=l(o,t)}catch(t){d=!0,o=t}if("throw"===e)throw n;if(d)throw o;return i(o),n}},function(t,e,n){var l=n(7)("iterator"),i=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){i=!0}};o[l]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var c={};c[l]=function(){return{next:function(){return{done:n=!0}}}},t(c)}catch(t){}return n}},function(t,e,n){"use strict";var l=n(34),i=n(44),c=n(91),o=n(21),d=n(16).f,a=n(140),r=n(24),u=n(9),s=o.set,Z=o.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){s(this,{type:"Array Iterator",target:l(t),index:0,kind:e})}),(function(){var t=Z(this),e=t.target,n=t.kind,l=t.index++;return!e||l>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:l,done:!1}:"values"==n?{value:e[l],done:!1}:{value:[l,e[l]],done:!1}}),"values");var b=c.Arguments=c.Array;if(i("keys"),i("values"),i("entries"),!r&&u&&"values"!==b.name)try{d(b,"name",{value:"values"})}catch(t){}},function(t,e,n){var l=n(1),i=n(6),c=n(13),o=n(84),d=n(22),a=l.TypeError,r=function(t){return function(e,n,l,r){i(n);var u=c(e),s=o(u),Z=d(u),b=t?Z-1:0,m=t?-1:1;if(l<2)for(;;){if(b in s){r=s[b],b+=m;break}if(b+=m,t?b<0:Z<=b)throw a("Reduce of empty array with no initial value")}for(;t?b>=0:Z>b;b+=m)b in s&&(r=n(r,s[b],b,u));return r}};t.exports={left:r(!1),right:r(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(9),o=n(144),d=n(74),a=n(28),r=n(46),u=n(4),s=n(42),Z=n(35),b=n(37),m=n(183),h=n(270),p=n(32),I=n(51),G=n(57).f,g=n(16).f,X=n(137),y=n(89),V=n(41),W=n(21),C=d.PROPER,R=d.CONFIGURABLE,f=W.get,S=W.set,v=l.ArrayBuffer,Y=v,K=Y&&Y.prototype,N=l.DataView,J=N&&N.prototype,H=Object.prototype,L=l.Array,U=l.RangeError,k=i(X),B=i([].reverse),F=h.pack,x=h.unpack,T=function(t){return[255&t]},A=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},w=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Q=function(t){return F(t,23,4)},P=function(t){return F(t,52,8)},j=function(t,e){g(t.prototype,e,{get:function(){return f(this)[e]}})},M=function(t,e,n,l){var i=m(n),c=f(t);if(i+e>c.byteLength)throw U("Wrong index");var o=f(c.buffer).bytes,d=i+c.byteOffset,a=y(o,d,d+e);return l?a:B(a)},E=function(t,e,n,l,i,c){var o=m(n),d=f(t);if(o+e>d.byteLength)throw U("Wrong index");for(var a=f(d.buffer).bytes,r=o+d.byteOffset,u=l(+i),s=0;s<e;s++)a[r+s]=u[c?s:e-s-1]};if(o){var D=C&&"ArrayBuffer"!==v.name;if(u((function(){v(1)}))&&u((function(){new v(-1)}))&&!u((function(){return new v,new v(1.5),new v(NaN),D&&!R})))D&&R&&a(v,"name","ArrayBuffer");else{(Y=function(t){return s(this,K),new v(m(t))}).prototype=K;for(var O,_=G(v),q=0;_.length>q;)(O=_[q++])in Y||a(Y,O,v[O]);K.constructor=Y}I&&p(J)!==H&&I(J,H);var $=new N(new Y(2)),tt=i(J.setInt8);$.setInt8(0,2147483648),$.setInt8(1,2147483649),!$.getInt8(0)&&$.getInt8(1)||r(J,{setInt8:function(t,e){tt(this,t,e<<24>>24)},setUint8:function(t,e){tt(this,t,e<<24>>24)}},{unsafe:!0})}else K=(Y=function(t){s(this,K);var e=m(t);S(this,{bytes:k(L(e),0),byteLength:e}),c||(this.byteLength=e)}).prototype,J=(N=function(t,e,n){s(this,J),s(t,K);var l=f(t).byteLength,i=Z(e);if(i<0||i>l)throw U("Wrong offset");if(i+(n=void 0===n?l-i:b(n))>l)throw U("Wrong length");S(this,{buffer:t,byteLength:n,byteOffset:i}),c||(this.buffer=t,this.byteLength=n,this.byteOffset=i)}).prototype,c&&(j(Y,"byteLength"),j(N,"buffer"),j(N,"byteLength"),j(N,"byteOffset")),r(J,{getInt8:function(t){return M(this,1,t)[0]<<24>>24},getUint8:function(t){return M(this,1,t)[0]},getInt16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return x(M(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return x(M(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){E(this,1,t,T,e)},setUint8:function(t,e){E(this,1,t,T,e)},setInt16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){E(this,4,t,Q,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){E(this,8,t,P,e,arguments.length>2?arguments[2]:void 0)}});V(Y,"ArrayBuffer"),V(N,"DataView"),t.exports={ArrayBuffer:Y,DataView:N}},function(t,e,n){var l=n(1),i=n(65),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a constructor")}},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(88),d=n(20),a=n(67),r=n(8),u=n(42),s=n(10),Z=n(12),b=n(4),m=n(108),h=n(41),p=n(115);t.exports=function(t,e,n){var I=-1!==t.indexOf("Map"),G=-1!==t.indexOf("Weak"),g=I?"set":"add",X=i[t],y=X&&X.prototype,V=X,W={},C=function(t){var e=c(y[t]);d(y,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(G&&!Z(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return G&&!Z(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(G&&!Z(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(o(t,!s(X)||!(G||y.forEach&&!b((function(){(new X).entries().next()})))))V=n.getConstructor(e,t,I,g),a.enable();else if(o(t,!0)){var R=new V,f=R[g](G?{}:-0,1)!=R,S=b((function(){R.has(1)})),v=m((function(t){new X(t)})),Y=!G&&b((function(){for(var t=new X,e=5;e--;)t[g](e,e);return!t.has(-0)}));v||((V=e((function(t,e){u(t,y);var n=p(new X,t,V);return null!=e&&r(e,n[g],{that:n,AS_ENTRIES:I}),n}))).prototype=y,y.constructor=V),(S||Y)&&(C("delete"),C("has"),I&&C("get")),(Y||f)&&C(g),G&&y.clear&&delete y.clear}return W[t]=V,l({global:!0,forced:V!=X},W),h(V,t),G||n.setStrong(V,t,I),V}},function(t,e,n){var l=n(4),i=n(12),c=n(40),o=n(148),d=Object.isExtensible,a=l((function(){d(1)}));t.exports=a||o?function(t){return!!i(t)&&((!o||"ArrayBuffer"!=c(t))&&(!d||d(t)))}:d},function(t,e,n){var l=n(10),i=n(12),c=n(51);t.exports=function(t,e,n){var o,d;return c&&l(o=e.constructor)&&o!==n&&i(d=o.prototype)&&d!==n.prototype&&c(t,d),t}},function(t,e){var n=Math.expm1,l=Math.exp;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:l(t)-1}:n},function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},function(t,e,n){"use strict";var l=n(24),i=n(1),c=n(4),o=n(143);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},function(t,e,n){var l,i,c,o,d=n(1),a=n(18),r=n(23),u=n(10),s=n(15),Z=n(4),b=n(170),m=n(60),h=n(102),p=n(94),I=n(193),G=n(78),g=d.setImmediate,X=d.clearImmediate,y=d.process,V=d.Dispatch,W=d.Function,C=d.MessageChannel,R=d.String,f=0,S={};try{l=d.location}catch(t){}var v=function(t){if(s(S,t)){var e=S[t];delete S[t],e()}},Y=function(t){return function(){v(t)}},K=function(t){v(t.data)},N=function(t){d.postMessage(R(t),l.protocol+"//"+l.host)};g&&X||(g=function(t){p(arguments.length,1);var e=u(t)?t:W(t),n=m(arguments,1);return S[++f]=function(){a(e,void 0,n)},i(f),f},X=function(t){delete S[t]},G?i=function(t){y.nextTick(Y(t))}:V&&V.now?i=function(t){V.now(Y(t))}:C&&!I?(o=(c=new C).port2,c.port1.onmessage=K,i=r(o.postMessage,o)):d.addEventListener&&u(d.postMessage)&&!d.importScripts&&l&&"file:"!==l.protocol&&!Z(N)?(i=N,d.addEventListener("message",K,!1)):i="onreadystatechange"in h("script")?function(t){b.appendChild(h("script")).onreadystatechange=function(){b.removeChild(this),v(t)}}:function(t){setTimeout(Y(t),0)}),t.exports={set:g,clear:X}},function(t,e,n){var l=n(5),i=n(15),c=n(36),o=n(153),d=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in d||i(t,"flags")||!c(d,t)?e:l(o,t)}},function(t,e,n){var l=n(4),i=n(1).RegExp,c=l((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),o=c||l((function(){return!i("a","y").sticky})),d=c||l((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:d,MISSED_STICKY:o,UNSUPPORTED_Y:c}},function(t,e,n){"use strict";var l,i,c=n(5),o=n(3),d=n(14),a=n(153),r=n(121),u=n(63),s=n(29),Z=n(21).get,b=n(199),m=n(200),h=u("native-string-replace",String.prototype.replace),p=RegExp.prototype.exec,I=p,G=o("".charAt),g=o("".indexOf),X=o("".replace),y=o("".slice),V=(i=/b*/g,c(p,l=/a/,"a"),c(p,i,"a"),0!==l.lastIndex||0!==i.lastIndex),W=r.BROKEN_CARET,C=void 0!==/()??/.exec("")[1];(V||C||W||b||m)&&(I=function(t){var e,n,l,i,o,r,u,b=this,m=Z(b),R=d(t),f=m.raw;if(f)return f.lastIndex=b.lastIndex,e=c(I,f,R),b.lastIndex=f.lastIndex,e;var S=m.groups,v=W&&b.sticky,Y=c(a,b),K=b.source,N=0,J=R;if(v&&(Y=X(Y,"y",""),-1===g(Y,"g")&&(Y+="g"),J=y(R,b.lastIndex),b.lastIndex>0&&(!b.multiline||b.multiline&&"\n"!==G(R,b.lastIndex-1))&&(K="(?: "+K+")",J=" "+J,N++),n=new RegExp("^(?:"+K+")",Y)),C&&(n=new RegExp("^"+K+"$(?!\\s)",Y)),V&&(l=b.lastIndex),i=c(p,v?n:b,J),v?i?(i.input=y(i.input,N),i[0]=y(i[0],N),i.index=b.lastIndex,b.lastIndex+=i[0].length):b.lastIndex=0:V&&i&&(b.lastIndex=b.global?i.index+i[0].length:l),C&&i&&i.length>1&&c(h,i[0],n,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(i[o]=void 0)})),i&&S)for(i.groups=r=s(null),o=0;o<S.length;o++)r[(u=S[o])[0]]=i[u[1]];return i}),t.exports=I},function(t,e,n){"use strict";n(154);var l=n(3),i=n(20),c=n(122),o=n(4),d=n(7),a=n(28),r=d("species"),u=RegExp.prototype;t.exports=function(t,e,n,s){var Z=d(t),b=!o((function(){var e={};return e[Z]=function(){return 7},7!=""[t](e)})),m=b&&!o((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[r]=function(){return n},n.flags="",n[Z]=/./[Z]),n.exec=function(){return e=!0,null},n[Z](""),!e}));if(!b||!m||n){var h=l(/./[Z]),p=e(Z,""[t],(function(t,e,n,i,o){var d=l(t),a=e.exec;return a===c||a===u.exec?b&&!o?{done:!0,value:h(e,n,i)}:{done:!0,value:d(n,e,i)}:{done:!1}}));i(String.prototype,t,p[0]),i(u,Z,p[1])}s&&a(u[Z],"sham",!0)}},function(t,e,n){"use strict";var l=n(82).charAt;t.exports=function(t,e,n){return e+(n?l(t,e).length:1)}},function(t,e,n){var l=n(17),i=n(33),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,n){var l,i,c=n(1),o=n(101),d=n(10),a=n(29),r=n(32),u=n(20),s=n(7),Z=n(24),b=s("asyncIterator"),m=c.AsyncIterator,h=o.AsyncIteratorPrototype;if(h)l=h;else if(d(m))l=m.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=r(r(r(Function("return async function*(){}()")()))),r(i)===Object.prototype&&(l=i)}catch(t){}l?Z&&(l=a(l)):l={},d(l[b])||u(l,b,(function(){return this})),t.exports=l},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t,e=c(this),n=i(e.delete),o=!0,d=0,a=arguments.length;d<a;d++)t=l(n,e,arguments[d]),o=o&&t;return!!o}},function(t,e,n){"use strict";var l=n(23),i=n(5),c=n(6),o=n(112),d=n(8),a=[].push;t.exports=function(t){var e,n,r,u,s=arguments.length,Z=s>1?arguments[1]:void 0;return o(this),(e=void 0!==Z)&&c(Z),null==t?new this:(n=[],e?(r=0,u=l(Z,s>2?arguments[2]:void 0),d(t,(function(t){i(a,n,u(t,r++))}))):d(t,a,{that:n}),new this(n))}},function(t,e,n){"use strict";var l=n(60);t.exports=function(){return new this(l(arguments))}},function(t,e,n){var l=n(1),i=n(5),c=n(12),o=n(71),d=n(27),a=n(165),r=n(7),u=l.TypeError,s=r("toPrimitive");t.exports=function(t,e){if(!c(t)||o(t))return t;var n,l=d(t,s);if(l){if(void 0===e&&(e="default"),n=i(l,t,e),!c(n)||o(n))return n;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},function(t,e,n){var l=n(1),i=Object.defineProperty;t.exports=function(t,e){try{i(l,t,{value:e,configurable:!0,writable:!0})}catch(n){l[t]=e}return e}},function(t,e,n){var l=n(15),i=n(133),c=n(31),o=n(16);t.exports=function(t,e,n){for(var d=i(e),a=o.f,r=c.f,u=0;u<d.length;u++){var s=d[u];l(t,s)||n&&l(n,s)||a(t,s,r(e,s))}}},function(t,e,n){var l=n(11),i=n(3),c=n(57),o=n(105),d=n(2),a=i([].concat);t.exports=l("Reflect","ownKeys")||function(t){var e=c.f(d(t)),n=o.f;return n?a(e,n(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,e,n){var l=n(40),i=n(34),c=n(57).f,o=n(89),d="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return d&&"Window"==l(t)?function(t){try{return c(t)}catch(t){return o(d)}}(t):c(i(t))}},function(t,e,n){"use strict";var l=n(13),i=n(49),c=n(22);t.exports=function(t){for(var e=l(this),n=c(e),o=arguments.length,d=i(o>1?arguments[1]:void 0,n),a=o>2?arguments[2]:void 0,r=void 0===a?n:i(a,n);r>d;)e[d++]=t;return e}},function(t,e,n){var l=n(2),i=n(107);t.exports=function(t,e,n,c){try{return c?e(l(n)[0],n[1]):e(n)}catch(e){i(t,"throw",e)}}},function(t,e,n){var l=n(7),i=n(91),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(24),o=n(74),d=n(10),a=n(77),r=n(32),u=n(51),s=n(41),Z=n(28),b=n(20),m=n(7),h=n(91),p=n(92),I=o.PROPER,G=o.CONFIGURABLE,g=p.IteratorPrototype,X=p.BUGGY_SAFARI_ITERATORS,y=m("iterator"),V=function(){return this};t.exports=function(t,e,n,o,m,p,W){a(n,e,o);var C,R,f,S=function(t){if(t===m&&J)return J;if(!X&&t in K)return K[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},v=e+" Iterator",Y=!1,K=t.prototype,N=K[y]||K["@@iterator"]||m&&K[m],J=!X&&N||S(m),H="Array"==e&&K.entries||N;if(H&&(C=r(H.call(new t)))!==Object.prototype&&C.next&&(c||r(C)===g||(u?u(C,g):d(C[y])||b(C,y,V)),s(C,v,!0,!0),c&&(h[v]=V)),I&&"values"==m&&N&&"values"!==N.name&&(!c&&G?Z(K,"name","values"):(Y=!0,J=function(){return i(N,this)})),m)if(R={values:S("values"),keys:p?J:S("keys"),entries:S("entries")},W)for(f in R)(X||Y||!(f in K))&&b(K,f,R[f]);else l({target:e,proto:!0,forced:X||Y},R);return c&&!W||K[y]===J||b(K,y,J,{name:m}),h[e]=J,R}},function(t,e,n){var l=n(4);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var l=n(89),i=Math.floor,c=function(t,e){var n=t.length,a=i(n/2);return n<8?o(t,e):d(t,c(l(t,0,a),e),c(l(t,a),e),e)},o=function(t,e){for(var n,l,i=t.length,c=1;c<i;){for(l=c,n=t[c];l&&e(t[l-1],n)>0;)t[l]=t[--l];l!==c++&&(t[l]=n)}return t},d=function(t,e,n,l){for(var i=e.length,c=n.length,o=0,d=0;o<i||d<c;)t[o+d]=o<i&&d<c?l(e[o],n[d])<=0?e[o++]:n[d++]:o<i?e[o++]:n[d++];return t};t.exports=c},function(t,e,n){var l=n(48).match(/AppleWebKit\/(\d+)\./);t.exports=!!l&&+l[1]},function(t,e){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,e,n){var l=n(3),i=n(37),c=n(14),o=n(146),d=n(26),a=l(o),r=l("".slice),u=Math.ceil,s=function(t){return function(e,n,l){var o,s,Z=c(d(e)),b=i(n),m=Z.length,h=void 0===l?" ":c(l);return b<=m||""==h?Z:((s=a(h,u((o=b-m)/h.length))).length>o&&(s=r(s,0,o)),t?Z+s:s+Z)}};t.exports={start:s(!1),end:s(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(35),c=n(14),o=n(26),d=l.RangeError;t.exports=function(t){var e=c(o(this)),n="",l=i(t);if(l<0||l==1/0)throw d("Wrong number of repetitions");for(;l>0;(l>>>=1)&&(e+=e))1&l&&(n+=e);return n}},function(t,e,n){n(287)},function(t,e,n){var l=n(4);t.exports=l((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){var l=n(3);t.exports=l(1..valueOf)},function(t,e,n){var l=n(12),i=Math.floor;t.exports=Number.isInteger||function(t){return!l(t)&&isFinite(t)&&i(t)===t}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),d=n(79).trim,a=n(117),r=l.parseInt,u=l.Symbol,s=u&&u.iterator,Z=/^[+-]?0x/i,b=c(Z.exec),m=8!==r(a+"08")||22!==r(a+"0x16")||s&&!i((function(){r(Object(s))}));t.exports=m?function(t,e){var n=d(o(t));return r(n,e>>>0||(b(Z,n)?16:10))}:r},function(t,e,n){"use strict";var l=n(2);t.exports=function(){var t=l(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){"use strict";var l=n(0),i=n(122);l({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,n){var l=n(1),i=n(96),c=l.TypeError;t.exports=function(t){if(i(t))throw c("The method doesn't accept regular expressions");return t}},function(t,e,n){var l=n(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[l]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,n){var l=n(74).PROPER,i=n(4),c=n(117);t.exports=function(t){return i((function(){return!!c[t]()||"​…᠎"!=="​…᠎"[t]()||l&&c[t].name!==t}))}},function(t,e,n){var l=n(1),i=n(4),c=n(108),o=n(17).NATIVE_ARRAY_BUFFER_VIEWS,d=l.ArrayBuffer,a=l.Int8Array;t.exports=!o||!i((function(){a(1)}))||!i((function(){new a(-1)}))||!c((function(t){new a,new a(null),new a(1.5),new a(t)}),!0)||i((function(){return 1!==new a(new d(2),1,void 0).length}))},function(t,e,n){n(449)},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(10),d=n(2),a=l.TypeError;t.exports=function(t,e){var n,l=d(this),r=c(l.get),u=c(l.has),s=c(l.set),Z=arguments.length>2?arguments[2]:void 0;if(!o(e)&&!o(Z))throw a("At least one callback required");return i(u,l,t)?(n=i(r,l,t),o(e)&&(n=e(n),i(s,l,t,n))):o(Z)&&(n=Z(),i(s,l,t,n)),n}},function(t,e,n){"use strict";var l=n(21),i=n(77),c=n(15),o=n(75),d=n(13),a=l.set,r=l.getterFor("Object Iterator");t.exports=i((function(t,e){var n=d(t);a(this,{type:"Object Iterator",mode:e,object:n,keys:o(n),index:0})}),"Object",(function(){for(var t=r(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,{value:void 0,done:!0};var n=e[t.index++],l=t.object;if(c(l,n)){switch(t.mode){case"keys":return{value:n,done:!1};case"values":return{value:l[n],done:!1}}return{value:[n,l[n]],done:!1}}}}))},function(t,e,n){var l=n(1),i=n(10),c=n(7)("observable"),o=l.Observable,d=o&&o.prototype;t.exports=!(i(o)&&i(o.from)&&i(o.of)&&i(d.subscribe)&&i(d[c]))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var l=n(72);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var l=n(1),i=n(5),c=n(10),o=n(12),d=l.TypeError;t.exports=function(t,e){var n,l;if("string"===e&&c(n=t.toString)&&!o(l=i(n,t)))return l;if(c(n=t.valueOf)&&!o(l=i(n,t)))return l;if("string"!==e&&c(n=t.toString)&&!o(l=i(n,t)))return l;throw d("Can't convert object to primitive value")}},function(t,e,n){var l=n(9),i=n(4),c=n(102);t.exports=!l&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var l=n(9),i=n(4);t.exports=l&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,n){var l=n(1),i=n(10),c=n(103),o=l.WeakMap;t.exports=i(o)&&/native code/.test(c(o))},function(t,e,n){var l=n(3),i=n(15),c=n(34),o=n(87).indexOf,d=n(86),a=l([].push);t.exports=function(t,e){var n,l=c(t),r=0,u=[];for(n in l)!i(d,n)&&i(l,n)&&a(u,n);for(;e.length>r;)i(l,n=e[r++])&&(~o(u,n)||a(u,n));return u}},function(t,e,n){var l=n(11);t.exports=l("document","documentElement")},function(t,e,n){var l=n(7);e.f=l},function(t,e,n){var l=n(5),i=n(11),c=n(7),o=n(20);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,d=c("toPrimitive");e&&!e[d]&&o(e,d,(function(t){return l(n,this)}))}},function(t,e,n){var l=n(72);t.exports=l&&!!Symbol.for&&!!Symbol.keyFor},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(5),d=n(3),a=n(4),r=n(59),u=n(10),s=n(12),Z=n(71),b=n(60),m=n(72),h=i("JSON","stringify"),p=d(/./.exec),I=d("".charAt),G=d("".charCodeAt),g=d("".replace),X=d(1..toString),y=/[\uD800-\uDFFF]/g,V=/^[\uD800-\uDBFF]$/,W=/^[\uDC00-\uDFFF]$/,C=!m||a((function(){var t=i("Symbol")();return"[null]"!=h([t])||"{}"!=h({a:t})||"{}"!=h(Object(t))})),R=a((function(){return'"\\udf06\\ud834"'!==h("\udf06\ud834")||'"\\udead"'!==h("\udead")})),f=function(t,e){var n=b(arguments),l=e;if((s(e)||void 0!==t)&&!Z(t))return r(e)||(e=function(t,e){if(u(l)&&(e=o(l,this,t,e)),!Z(e))return e}),n[1]=e,c(h,null,n)},S=function(t,e,n){var l=I(n,e-1),i=I(n,e+1);return p(V,t)&&!p(W,i)||p(W,t)&&!p(V,l)?"\\u"+X(G(t,0),16):t};h&&l({target:"JSON",stat:!0,forced:C||R},{stringify:function(t,e,n){var l=b(arguments),i=c(C?f:h,null,l);return R&&"string"==typeof i?g(i,y,S):i}})},function(t,e,n){"use strict";var l=n(13),i=n(49),c=n(22),o=Math.min;t.exports=[].copyWithin||function(t,e){var n=l(this),d=c(n),a=i(t,d),r=i(e,d),u=arguments.length>2?arguments[2]:void 0,s=o((void 0===u?d:i(u,d))-r,d-a),Z=1;for(r<a&&a<r+s&&(Z=-1,r+=s-1,a+=s-1);s-- >0;)r in n?n[a]=n[r]:delete n[a],a+=Z,r+=Z;return n}},function(t,e,n){"use strict";var l=n(1),i=n(59),c=n(22),o=n(23),d=l.TypeError,a=function(t,e,n,l,r,u,s,Z){for(var b,m,h=r,p=0,I=!!s&&o(s,Z);p<l;){if(p in n){if(b=I?I(n[p],p,e):n[p],u>0&&i(b))m=c(b),h=a(t,e,b,m,h,u-1)-1;else{if(h>=9007199254740991)throw d("Exceed the acceptable array length");t[h]=b}h++}p++}return h};t.exports=a},function(t,e,n){"use strict";var l=n(30).forEach,i=n(50)("forEach");t.exports=i?[].forEach:function(t){return l(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){"use strict";var l=n(1),i=n(23),c=n(5),o=n(13),d=n(138),a=n(139),r=n(65),u=n(22),s=n(58),Z=n(45),b=n(61),m=l.Array;t.exports=function(t){var e=o(t),n=r(this),l=arguments.length,h=l>1?arguments[1]:void 0,p=void 0!==h;p&&(h=i(h,l>2?arguments[2]:void 0));var I,G,g,X,y,V,W=b(e),C=0;if(!W||this==m&&a(W))for(I=u(e),G=n?new this(I):m(I);I>C;C++)V=p?h(e[C],C):e[C],s(G,C,V);else for(y=(X=Z(e,W)).next,G=n?new this:[];!(g=c(y,X)).done;C++)V=p?d(X,h,[g.value,C],!0):g.value,s(G,C,V);return G.length=C,G}},function(t,e,n){var l=n(1),i=n(10),c=l.String,o=l.TypeError;t.exports=function(t){if("object"==typeof t||i(t))return t;throw o("Can't set "+c(t)+" as a prototype")}},function(t,e,n){"use strict";var l=n(18),i=n(34),c=n(35),o=n(22),d=n(50),a=Math.min,r=[].lastIndexOf,u=!!r&&1/[1].lastIndexOf(1,-0)<0,s=d("lastIndexOf"),Z=u||!s;t.exports=Z?function(t){if(u)return l(r,this,arguments)||0;var e=i(this),n=o(e),d=n-1;for(arguments.length>1&&(d=a(d,c(arguments[1]))),d<0&&(d=n+d);d>=0;d--)if(d in e&&e[d]===t)return d||0;return-1}:r},function(t,e,n){var l=n(48).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,e,n){var l=n(48);t.exports=/MSIE|Trident/.test(l)},function(t,e,n){var l=n(1),i=n(35),c=n(37),o=l.RangeError;t.exports=function(t){if(void 0===t)return 0;var e=i(t),n=c(e);if(e!==n)throw o("Wrong length or index");return n}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(6),o=n(12),d=n(15),a=n(60),r=n(83),u=l.Function,s=i([].concat),Z=i([].join),b={},m=function(t,e,n){if(!d(b,e)){for(var l=[],i=0;i<e;i++)l[i]="a["+i+"]";b[e]=u("C,a","return new C("+Z(l,",")+")")}return b[e](t,n)};t.exports=r?u.bind:function(t){var e=c(this),n=e.prototype,l=a(arguments,1),i=function(){var n=s(l,a(arguments));return this instanceof i?m(e,n.length,n):e.apply(t,n)};return o(n)&&(i.prototype=n),i}},function(t,e,n){"use strict";var l=n(16).f,i=n(29),c=n(46),o=n(23),d=n(42),a=n(8),r=n(140),u=n(66),s=n(9),Z=n(67).fastKey,b=n(21),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,e,n,r){var u=t((function(t,l){d(t,b),m(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),s||(t.size=0),null!=l&&a(l,t[r],{that:t,AS_ENTRIES:n})})),b=u.prototype,p=h(e),I=function(t,e,n){var l,i,c=p(t),o=G(t,e);return o?o.value=n:(c.last=o={index:i=Z(e,!0),key:e,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),s?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},G=function(t,e){var n,l=p(t),i=Z(e);if("F"!==i)return l.index[i];for(n=l.first;n;n=n.next)if(n.key==e)return n};return c(b,{clear:function(){for(var t=p(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,s?t.size=0:this.size=0},delete:function(t){var e=p(this),n=G(this,t);if(n){var l=n.next,i=n.previous;delete e.index[n.index],n.removed=!0,i&&(i.next=l),l&&(l.previous=i),e.first==n&&(e.first=l),e.last==n&&(e.last=i),s?e.size--:this.size--}return!!n},forEach:function(t){for(var e,n=p(this),l=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(l(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!G(this,t)}}),c(b,n?{get:function(t){var e=G(this,t);return e&&e.value},set:function(t,e){return I(this,0===t?0:t,e)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),s&&l(b,"size",{get:function(){return p(this).size}}),u},setStrong:function(t,e,n){var l=e+" Iterator",i=h(e),c=h(l);r(t,e,(function(t,e){m(this,{type:l,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(e)}}},function(t,e){var n=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:n(1+t)}},function(t,e,n){var l=n(149),i=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),a=c(2,127)*(2-d),r=c(2,-126);t.exports=Math.fround||function(t){var e,n,c=i(t),u=l(t);return c<r?u*(c/r/d+1/o-1/o)*r*d:(n=(e=(1+d/o)*c)-(e-c))>a||n!=n?u*(1/0):u*n}},function(t,e,n){var l=n(1).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),d=n(79).trim,a=n(117),r=c("".charAt),u=l.parseFloat,s=l.Symbol,Z=s&&s.iterator,b=1/u(a+"-0")!=-1/0||Z&&!i((function(){u(Object(Z))}));t.exports=b?function(t){var e=d(o(t)),n=u(e);return 0===n&&"-"==r(e,0)?-0:n}:u},function(t,e,n){"use strict";var l=n(9),i=n(3),c=n(5),o=n(4),d=n(75),a=n(105),r=n(100),u=n(13),s=n(84),Z=Object.assign,b=Object.defineProperty,m=i([].concat);t.exports=!Z||o((function(){if(l&&1!==Z({b:1},Z(b({},"a",{enumerable:!0,get:function(){b(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=Z({},t)[n]||"abcdefghijklmnopqrst"!=d(Z({},e)).join("")}))?function(t,e){for(var n=u(t),i=arguments.length,o=1,Z=a.f,b=r.f;i>o;)for(var h,p=s(arguments[o++]),I=Z?m(d(p),Z(p)):d(p),G=I.length,g=0;G>g;)h=I[g++],l&&!c(b,p,h)||(n[h]=p[h]);return n}:Z},function(t,e,n){var l=n(9),i=n(3),c=n(75),o=n(34),d=i(n(100).f),a=i([].push),r=function(t){return function(e){for(var n,i=o(e),r=c(i),u=r.length,s=0,Z=[];u>s;)n=r[s++],l&&!d(i,n)||a(Z,t?[n,i[n]]:i[n]);return Z}};t.exports={entries:r(!0),values:r(!1)}},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){var l=n(48);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,e,n){var l,i,c,o,d,a,r,u,s=n(1),Z=n(23),b=n(31).f,m=n(119).set,h=n(193),p=n(349),I=n(350),G=n(78),g=s.MutationObserver||s.WebKitMutationObserver,X=s.document,y=s.process,V=s.Promise,W=b(s,"queueMicrotask"),C=W&&W.value;C||(l=function(){var t,e;for(G&&(t=y.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?o():c=void 0,t}}c=void 0,t&&t.enter()},h||G||I||!g||!X?!p&&V&&V.resolve?((r=V.resolve(void 0)).constructor=V,u=Z(r.then,r),o=function(){u(l)}):G?o=function(){y.nextTick(l)}:(m=Z(m,s),o=function(){m(l)}):(d=!0,a=X.createTextNode(""),new g(l).observe(a,{characterData:!0}),o=function(){a.data=d=!d})),t.exports=C||function(t){var e={fn:t,next:void 0};c&&(c.next=e),i||(i=e,o()),c=e}},function(t,e,n){var l=n(1);t.exports=function(t,e){var n=l.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},function(t,e,n){var l=n(81),i=n(108),c=n(95).CONSTRUCTOR;t.exports=c||!i((function(t){l.all(t).then(void 0,(function(){}))}))},function(t,e,n){var l=n(2),i=n(12),c=n(62);t.exports=function(t,e){if(l(t),i(e)&&e.constructor===t)return e;var n=c.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var l=n(15);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,n){"use strict";var l=n(82).charAt,i=n(14),c=n(21),o=n(140),d=c.set,a=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=a(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=l(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var l=n(48);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,e,n){var l=n(3),i=n(13),c=Math.floor,o=l("".charAt),d=l("".replace),a=l("".slice),r=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,l,s,Z){var b=n+t.length,m=l.length,h=u;return void 0!==s&&(s=i(s),h=r),d(Z,h,(function(i,d){var r;switch(o(d,0)){case"$":return"$";case"&":return t;case"`":return a(e,0,n);case"'":return a(e,b);case"<":r=s[a(d,1,-1)];break;default:var u=+d;if(0===u)return i;if(u>m){var Z=c(u/10);return 0===Z?i:Z<=m?void 0===l[Z-1]?o(d,1):l[Z-1]+o(d,1):i}r=l[u-1]}return void 0===r?"":r}))}},function(t,e,n){"use strict";var l=n(79).end,i=n(157);t.exports=i("trimEnd")?function(){return l(this)}:"".trimEnd},function(t,e,n){"use strict";var l=n(79).start,i=n(157);t.exports=i("trimStart")?function(){return l(this)}:"".trimStart},function(t,e,n){var l=n(1),i=n(98),c=l.RangeError;t.exports=function(t,e){var n=i(t);if(n%e)throw c("Wrong offset");return n}},function(t,e,n){var l=n(23),i=n(5),c=n(112),o=n(13),d=n(22),a=n(45),r=n(61),u=n(139),s=n(17).aTypedArrayConstructor;t.exports=function(t){var e,n,Z,b,m,h,p=c(this),I=o(t),G=arguments.length,g=G>1?arguments[1]:void 0,X=void 0!==g,y=r(I);if(y&&!u(y))for(h=(m=a(I,y)).next,I=[];!(b=i(h,m)).done;)I.push(b.value);for(X&&G>2&&(g=l(g,arguments[2])),n=d(I),Z=new(s(p))(n),e=0;n>e;e++)Z[e]=X?g(I[e],e):I[e];return Z}},function(t,e,n){"use strict";var l=n(3),i=n(46),c=n(67).getWeakData,o=n(2),d=n(12),a=n(42),r=n(8),u=n(30),s=n(15),Z=n(21),b=Z.set,m=Z.getterFor,h=u.find,p=u.findIndex,I=l([].splice),G=0,g=function(t){return t.frozen||(t.frozen=new X)},X=function(){this.entries=[]},y=function(t,e){return h(t.entries,(function(t){return t[0]===e}))};X.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var n=y(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=p(this.entries,(function(e){return e[0]===t}));return~e&&I(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,l){var u=t((function(t,i){a(t,Z),b(t,{type:e,id:G++,frozen:void 0}),null!=i&&r(i,t[l],{that:t,AS_ENTRIES:n})})),Z=u.prototype,h=m(e),p=function(t,e,n){var l=h(t),i=c(o(e),!0);return!0===i?g(l).set(e,n):i[l.id]=n,t};return i(Z,{delete:function(t){var e=h(this);if(!d(t))return!1;var n=c(t);return!0===n?g(e).delete(t):n&&s(n,e.id)&&delete n[e.id]},has:function(t){var e=h(this);if(!d(t))return!1;var n=c(t);return!0===n?g(e).has(t):n&&s(n,e.id)}}),i(Z,n?{get:function(t){var e=h(this);if(d(t)){var n=c(t);return!0===n?g(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return p(this,t,e)}}:{add:function(t){return p(this,t,!0)}}),u}}},function(t,e,n){var l=n(5),i=n(210),c=n(2),o=n(45),d=n(27),a=n(7)("asyncIterator");t.exports=function(t,e){var n=arguments.length<2?d(t,a):e;return n?c(l(n,t)):new i(o(t))}},function(t,e,n){"use strict";var l=n(18),i=n(2),c=n(29),o=n(27),d=n(46),a=n(21),r=n(11),u=n(126),s=r("Promise"),Z=a.set,b=a.getterFor("AsyncFromSyncIterator"),m=function(t,e,n){var l=t.done;s.resolve(t.value).then((function(t){e({done:l,value:t})}),n)},h=function(t){Z(this,{type:"AsyncFromSyncIterator",iterator:i(t),next:t.next})};h.prototype=d(c(u),{next:function(t){var e=b(this),n=!!arguments.length;return new s((function(c,o){var d=i(l(e.next,e.iterator,n?[t]:[]));m(d,c,o)}))},return:function(t){var e=b(this).iterator,n=!!arguments.length;return new s((function(c,d){var a=o(e,"return");if(void 0===a)return c({done:!0,value:t});var r=i(l(a,e,n?[t]:[]));m(r,c,d)}))},throw:function(t){var e=b(this).iterator,n=!!arguments.length;return new s((function(c,d){var a=o(e,"throw");if(void 0===a)return d(t);var r=i(l(a,e,n?[t]:[]));m(r,c,d)}))}}),t.exports=h},function(t,e,n){n(147),n(159);var l=n(1),i=n(11),c=n(29),o=n(12),d=l.Object,a=l.TypeError,r=i("Map"),u=i("WeakMap"),s=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};s.prototype.get=function(t,e){return this[t]||(this[t]=e())},s.prototype.next=function(t,e,n){var l=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new u):this.primitives||(this.primitives=new r),i=l.get(e);return i||l.set(e,i=new s),i};var Z=new s;t.exports=function(){var t,e,n=Z,l=arguments.length;for(t=0;t<l;t++)o(e=arguments[t])&&(n=n.next(t,e,!0));if(this===d&&n===Z)throw a("Composite keys must contain a non-primitive component");for(t=0;t<l;t++)o(e=arguments[t])||(n=n.next(t,e,!1));return n}},function(t,e){t.exports=Math.scale||function(t,e,n,l,i){var c=+t,o=+e,d=+n,a=+l,r=+i;return c!=c||o!=o||d!=d||a!=a||r!=r?NaN:c===1/0||c===-1/0?c:(c-o)*(r-a)/(d-o)+a}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t=c(this),e=i(t.add),n=0,o=arguments.length;n<o;n++)l(e,t,arguments[n]);return t}},function(t,e){t.exports={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}},function(t,e,n){var l=n(102)("span").classList,i=l&&l.constructor&&l.constructor.prototype;t.exports=i===Object.prototype?void 0:i},function(t,e,n){var l=n(1),i=n(18),c=n(10),o=n(48),d=n(60),a=n(94),r=/MSIE .\./.test(o),u=l.Function,s=function(t){return r?function(e,n){var l=a(arguments.length,1)>2,o=c(e)?e:u(e),r=l?d(arguments,2):void 0;return t(l?function(){i(o,this,r)}:o,n)}:t};t.exports={setTimeout:s(l.setTimeout),setInterval:s(l.setInterval)}},function(t,e,n){var l=n(4),i=n(7),c=n(24),o=i("iterator");t.exports=!l((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,l){e.delete("b"),n+=l+t})),c&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},function(t,e,n){"use strict";n(109);var l=n(0),i=n(1),c=n(5),o=n(3),d=n(9),a=n(217),r=n(20),u=n(46),s=n(41),Z=n(77),b=n(21),m=n(42),h=n(10),p=n(15),I=n(23),G=n(64),g=n(2),X=n(12),y=n(14),V=n(29),W=n(43),C=n(45),R=n(61),f=n(94),S=n(7),v=n(142),Y=S("iterator"),K=b.set,N=b.getterFor("URLSearchParams"),J=b.getterFor("URLSearchParamsIterator"),H=Object.getOwnPropertyDescriptor,L=function(t){if(!d)return i(t);var e=H(i,t);return e&&e.value},U=L("fetch"),k=L("Request"),B=L("Headers"),F=k&&k.prototype,x=B&&B.prototype,T=i.RegExp,A=i.TypeError,z=i.decodeURIComponent,w=i.encodeURIComponent,Q=o("".charAt),P=o([].join),j=o([].push),M=o("".replace),E=o([].shift),D=o([].splice),O=o("".split),_=o("".slice),q=/\+/g,$=Array(4),tt=function(t){return $[t-1]||($[t-1]=T("((?:%[\\da-f]{2}){"+t+"})","gi"))},et=function(t){try{return z(t)}catch(e){return t}},nt=function(t){var e=M(t,q," "),n=4;try{return z(e)}catch(t){for(;n;)e=M(e,tt(n--),et);return e}},lt=/[!'()~]|%20/g,it={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ct=function(t){return it[t]},ot=function(t){return M(w(t),lt,ct)},dt=Z((function(t,e){K(this,{type:"URLSearchParamsIterator",iterator:C(N(t).entries),kind:e})}),"Iterator",(function(){var t=J(this),e=t.kind,n=t.iterator.next(),l=n.value;return n.done||(n.value="keys"===e?l.key:"values"===e?l.value:[l.key,l.value]),n}),!0),at=function(t){this.entries=[],this.url=null,void 0!==t&&(X(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===Q(t,0)?_(t,1):t:y(t)))};at.prototype={type:"URLSearchParams",bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,l,i,o,d,a,r=R(t);if(r)for(n=(e=C(t,r)).next;!(l=c(n,e)).done;){if(o=(i=C(g(l.value))).next,(d=c(o,i)).done||(a=c(o,i)).done||!c(o,i).done)throw A("Expected sequence with length 2");j(this.entries,{key:y(d.value),value:y(a.value)})}else for(var u in t)p(t,u)&&j(this.entries,{key:u,value:y(t[u])})},parseQuery:function(t){if(t)for(var e,n,l=O(t,"&"),i=0;i<l.length;)(e=l[i++]).length&&(n=O(e,"="),j(this.entries,{key:nt(E(n)),value:nt(P(n,"="))}))},serialize:function(){for(var t,e=this.entries,n=[],l=0;l<e.length;)t=e[l++],j(n,ot(t.key)+"="+ot(t.value));return P(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var rt=function(){m(this,ut);var t=arguments.length>0?arguments[0]:void 0;K(this,new at(t))},ut=rt.prototype;if(u(ut,{append:function(t,e){f(arguments.length,2);var n=N(this);j(n.entries,{key:y(t),value:y(e)}),n.updateURL()},delete:function(t){f(arguments.length,1);for(var e=N(this),n=e.entries,l=y(t),i=0;i<n.length;)n[i].key===l?D(n,i,1):i++;e.updateURL()},get:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=0;l<e.length;l++)if(e[l].key===n)return e[l].value;return null},getAll:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=[],i=0;i<e.length;i++)e[i].key===n&&j(l,e[i].value);return l},has:function(t){f(arguments.length,1);for(var e=N(this).entries,n=y(t),l=0;l<e.length;)if(e[l++].key===n)return!0;return!1},set:function(t,e){f(arguments.length,1);for(var n,l=N(this),i=l.entries,c=!1,o=y(t),d=y(e),a=0;a<i.length;a++)(n=i[a]).key===o&&(c?D(i,a--,1):(c=!0,n.value=d));c||j(i,{key:o,value:d}),l.updateURL()},sort:function(){var t=N(this);v(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=N(this).entries,l=I(t,arguments.length>1?arguments[1]:void 0),i=0;i<n.length;)l((e=n[i++]).value,e.key,this)},keys:function(){return new dt(this,"keys")},values:function(){return new dt(this,"values")},entries:function(){return new dt(this,"entries")}},{enumerable:!0}),r(ut,Y,ut.entries,{name:"entries"}),r(ut,"toString",(function(){return N(this).serialize()}),{enumerable:!0}),s(rt,"URLSearchParams"),l({global:!0,forced:!a},{URLSearchParams:rt}),!a&&h(B)){var st=o(x.has),Zt=o(x.set),bt=function(t){if(X(t)){var e,n=t.body;if("URLSearchParams"===G(n))return e=t.headers?new B(t.headers):new B,st(e,"content-type")||Zt(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),V(t,{body:W(0,y(n)),headers:W(0,e)})}return t};if(h(U)&&l({global:!0,enumerable:!0,noTargetGet:!0,forced:!0},{fetch:function(t){return U(t,arguments.length>1?bt(arguments[1]):{})}}),h(k)){var mt=function(t){return m(this,F),new k(t,arguments.length>1?bt(arguments[1]):{})};F.constructor=mt,mt.prototype=F,l({global:!0,forced:!0,noTargetGet:!0},{Request:mt})}}t.exports={URLSearchParams:rt,getState:N}},function(t,n){t.exports=e},function(t,e,n){n(221),n(224),n(225),n(174),n(226)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(24),a=n(9),r=n(72),u=n(4),s=n(15),Z=n(36),b=n(2),m=n(34),h=n(55),p=n(14),I=n(43),G=n(29),g=n(75),X=n(57),y=n(136),V=n(105),W=n(31),C=n(16),R=n(106),f=n(100),S=n(20),v=n(63),Y=n(104),K=n(86),N=n(85),J=n(7),H=n(171),L=n(25),U=n(172),k=n(41),B=n(21),F=n(30).forEach,x=Y("hidden"),T=B.set,A=B.getterFor("Symbol"),z=Object.prototype,w=i.Symbol,Q=w&&w.prototype,P=i.TypeError,j=i.QObject,M=W.f,E=C.f,D=y.f,O=f.f,_=o([].push),q=v("symbols"),$=v("op-symbols"),tt=v("wks"),et=!j||!j.prototype||!j.prototype.findChild,nt=a&&u((function(){return 7!=G(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,n){var l=M(z,e);l&&delete z[e],E(t,e,n),l&&t!==z&&E(z,e,l)}:E,lt=function(t,e){var n=q[t]=G(Q);return T(n,{type:"Symbol",tag:t,description:e}),a||(n.description=e),n},it=function(t,e,n){t===z&&it($,e,n),b(t);var l=h(e);return b(n),s(q,l)?(n.enumerable?(s(t,x)&&t[x][l]&&(t[x][l]=!1),n=G(n,{enumerable:I(0,!1)})):(s(t,x)||E(t,x,I(1,{})),t[x][l]=!0),nt(t,l,n)):E(t,l,n)},ct=function(t,e){b(t);var n=m(e),l=g(n).concat(rt(n));return F(l,(function(e){a&&!c(ot,n,e)||it(t,e,n[e])})),t},ot=function(t){var e=h(t),n=c(O,this,e);return!(this===z&&s(q,e)&&!s($,e))&&(!(n||!s(this,e)||!s(q,e)||s(this,x)&&this[x][e])||n)},dt=function(t,e){var n=m(t),l=h(e);if(n!==z||!s(q,l)||s($,l)){var i=M(n,l);return!i||!s(q,l)||s(n,x)&&n[x][l]||(i.enumerable=!0),i}},at=function(t){var e=D(m(t)),n=[];return F(e,(function(t){s(q,t)||s(K,t)||_(n,t)})),n},rt=function(t){var e=t===z,n=D(e?$:m(t)),l=[];return F(n,(function(t){!s(q,t)||e&&!s(z,t)||_(l,q[t])})),l};r||(S(Q=(w=function(){if(Z(Q,this))throw P("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?p(arguments[0]):void 0,e=N(t),n=function(t){this===z&&c(n,$,t),s(this,x)&&s(this[x],e)&&(this[x][e]=!1),nt(this,e,I(1,t))};return a&&et&&nt(z,e,{configurable:!0,set:n}),lt(e,t)}).prototype,"toString",(function(){return A(this).tag})),S(w,"withoutSetter",(function(t){return lt(N(t),t)})),f.f=ot,C.f=it,R.f=ct,W.f=dt,X.f=y.f=at,V.f=rt,H.f=function(t){return lt(J(t),t)},a&&(E(Q,"description",{configurable:!0,get:function(){return A(this).description}}),d||S(z,"propertyIsEnumerable",ot,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:w}),F(g(tt),(function(t){L(t)})),l({target:"Symbol",stat:!0,forced:!r},{useSetter:function(){et=!0},useSimple:function(){et=!1}}),l({target:"Object",stat:!0,forced:!r,sham:!a},{create:function(t,e){return void 0===e?G(t):ct(G(t),e)},defineProperty:it,defineProperties:ct,getOwnPropertyDescriptor:dt}),l({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:at}),U(),k(w,"Symbol"),K[x]=!0},function(t,e,n){var l=n(1);t.exports=l},function(t,e,n){var l=n(1),i=n(59),c=n(65),o=n(12),d=n(7)("species"),a=l.Array;t.exports=function(t){var e;return i(t)&&(e=t.constructor,(c(e)&&(e===a||i(e.prototype))||o(e)&&null===(e=e[d]))&&(e=void 0)),void 0===e?a:e}},function(t,e,n){var l=n(0),i=n(11),c=n(15),o=n(14),d=n(63),a=n(173),r=d("string-to-symbol-registry"),u=d("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!a},{for:function(t){var e=o(t);if(c(r,e))return r[e];var n=i("Symbol")(e);return r[e]=n,u[n]=e,n}})},function(t,e,n){var l=n(0),i=n(15),c=n(71),o=n(73),d=n(63),a=n(173),r=d("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!a},{keyFor:function(t){if(!c(t))throw TypeError(o(t)+" is not a symbol");if(i(r,t))return r[t]}})},function(t,e,n){var l=n(0),i=n(72),c=n(4),o=n(105),d=n(13);l({target:"Object",stat:!0,forced:!i||c((function(){o.f(1)}))},{getOwnPropertySymbols:function(t){var e=o.f;return e?e(d(t)):[]}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(1),o=n(3),d=n(15),a=n(10),r=n(36),u=n(14),s=n(16).f,Z=n(132),b=c.Symbol,m=b&&b.prototype;if(i&&a(b)&&(!("description"in m)||void 0!==b().description)){var h={},p=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:u(arguments[0]),e=r(m,this)?new b(t):void 0===t?b():b(t);return""===t&&(h[e]=!0),e};Z(p,b),p.prototype=m,m.constructor=p;var I="Symbol(test)"==String(b("test")),G=o(m.toString),g=o(m.valueOf),X=/^Symbol\((.*)\)[^)]+$/,y=o("".replace),V=o("".slice);s(m,"description",{configurable:!0,get:function(){var t=g(this),e=G(t);if(d(h,t))return"";var n=I?V(e,7,-1):y(e,X,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:p})}},function(t,e,n){n(25)("asyncIterator")},function(t,e,n){n(25)("hasInstance")},function(t,e,n){n(25)("isConcatSpreadable")},function(t,e,n){n(25)("iterator")},function(t,e,n){n(25)("match")},function(t,e,n){n(25)("matchAll")},function(t,e,n){n(25)("replace")},function(t,e,n){n(25)("search")},function(t,e,n){n(25)("species")},function(t,e,n){n(25)("split")},function(t,e,n){var l=n(25),i=n(172);l("toPrimitive"),i()},function(t,e,n){var l=n(11),i=n(25),c=n(41);i("toStringTag"),c(l("Symbol"),"Symbol")},function(t,e,n){n(25)("unscopables")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(59),d=n(12),a=n(13),r=n(22),u=n(58),s=n(76),Z=n(90),b=n(7),m=n(56),h=b("isConcatSpreadable"),p=i.TypeError,I=m>=51||!c((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),G=Z("concat"),g=function(t){if(!d(t))return!1;var e=t[h];return void 0!==e?!!e:o(t)};l({target:"Array",proto:!0,forced:!I||!G},{concat:function(t){var e,n,l,i,c,o=a(this),d=s(o,0),Z=0;for(e=-1,l=arguments.length;e<l;e++)if(g(c=-1===e?o:arguments[e])){if(Z+(i=r(c))>9007199254740991)throw p("Maximum allowed index exceeded");for(n=0;n<i;n++,Z++)n in c&&u(d,Z,c[n])}else{if(Z>=9007199254740991)throw p("Maximum allowed index exceeded");u(d,Z++,c)}return d.length=Z,d}})},function(t,e,n){var l=n(0),i=n(175),c=n(44);l({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,n){"use strict";var l=n(0),i=n(30).every;l({target:"Array",proto:!0,forced:!n(50)("every")},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(137),c=n(44);l({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,n){"use strict";var l=n(0),i=n(30).filter;l({target:"Array",proto:!0,forced:!n(90)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(30).find,c=n(44),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,e,n){"use strict";var l=n(0),i=n(30).findIndex,c=n(44),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(13),o=n(22),d=n(35),a=n(76);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),n=o(e),l=a(e,0);return l.length=i(l,e,e,n,0,void 0===t?1:d(t)),l}})},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(6),o=n(13),d=n(22),a=n(76);l({target:"Array",proto:!0},{flatMap:function(t){var e,n=o(this),l=d(n);return c(t),(e=a(n,0)).length=i(e,n,n,l,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},function(t,e,n){"use strict";var l=n(0),i=n(177);l({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,n){var l=n(0),i=n(178);l({target:"Array",stat:!0,forced:!n(108)((function(t){Array.from(t)}))},{from:i})},function(t,e,n){"use strict";var l=n(0),i=n(87).includes,c=n(44);l({target:"Array",proto:!0},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(87).indexOf,o=n(50),d=i([].indexOf),a=!!d&&1/d([1],1,-0)<0,r=o("indexOf");l({target:"Array",proto:!0,forced:a||!r},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return a?d(this,t,e)||0:c(this,t,e)}})},function(t,e,n){n(0)({target:"Array",stat:!0},{isArray:n(59)})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(84),o=n(34),d=n(50),a=i([].join),r=c!=Object,u=d("join",",");l({target:"Array",proto:!0,forced:r||!u},{join:function(t){return a(o(this),void 0===t?",":t)}})},function(t,e,n){var l=n(0),i=n(180);l({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,n){"use strict";var l=n(0),i=n(30).map;l({target:"Array",proto:!0,forced:!n(90)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(65),d=n(58),a=i.Array;l({target:"Array",stat:!0,forced:c((function(){function t(){}return!(a.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new(o(this)?this:a)(e);e>t;)d(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var l=n(0),i=n(110).left,c=n(50),o=n(56),d=n(78);l({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(110).right,c=n(50),o=n(56),d=n(78);l({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(59),o=i([].reverse),d=[1,2];l({target:"Array",proto:!0,forced:String(d)===String(d.reverse())},{reverse:function(){return c(this)&&(this.length=this.length),o(this)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(59),o=n(65),d=n(12),a=n(49),r=n(22),u=n(34),s=n(58),Z=n(7),b=n(90),m=n(60),h=b("slice"),p=Z("species"),I=i.Array,G=Math.max;l({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var n,l,i,Z=u(this),b=r(Z),h=a(t,b),g=a(void 0===e?b:e,b);if(c(Z)&&(n=Z.constructor,(o(n)&&(n===I||c(n.prototype))||d(n)&&null===(n=n[p]))&&(n=void 0),n===I||void 0===n))return m(Z,h,g);for(l=new(void 0===n?I:n)(G(g-h,0)),i=0;h<g;h++,i++)h in Z&&s(l,i,Z[h]);return l.length=i,l}})},function(t,e,n){"use strict";var l=n(0),i=n(30).some;l({target:"Array",proto:!0,forced:!n(50)("some")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(6),o=n(13),d=n(22),a=n(14),r=n(4),u=n(142),s=n(50),Z=n(181),b=n(182),m=n(56),h=n(143),p=[],I=i(p.sort),G=i(p.push),g=r((function(){p.sort(void 0)})),X=r((function(){p.sort(null)})),y=s("sort"),V=!r((function(){if(m)return m<70;if(!(Z&&Z>3)){if(b)return!0;if(h)return h<603;var t,e,n,l,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(l=0;l<47;l++)p.push({k:e+l,v:n})}for(p.sort((function(t,e){return e.v-t.v})),l=0;l<p.length;l++)e=p[l].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));l({target:"Array",proto:!0,forced:g||!X||!y||!V},{sort:function(t){void 0!==t&&c(t);var e=o(this);if(V)return void 0===t?I(e):I(e,t);var n,l,i=[],r=d(e);for(l=0;l<r;l++)l in e&&G(i,e[l]);for(u(i,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:a(e)>a(n)?1:-1}}(t)),n=i.length,l=0;l<n;)e[l]=i[l++];for(;l<r;)delete e[l++];return e}})},function(t,e,n){n(66)("Array")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(49),o=n(35),d=n(22),a=n(13),r=n(76),u=n(58),s=n(90)("splice"),Z=i.TypeError,b=Math.max,m=Math.min;l({target:"Array",proto:!0,forced:!s},{splice:function(t,e){var n,l,i,s,h,p,I=a(this),G=d(I),g=c(t,G),X=arguments.length;if(0===X?n=l=0:1===X?(n=0,l=G-g):(n=X-2,l=m(b(o(e),0),G-g)),G+n-l>9007199254740991)throw Z("Maximum allowed length exceeded");for(i=r(I,l),s=0;s<l;s++)(h=g+s)in I&&u(i,s,I[h]);if(i.length=l,n<l){for(s=g;s<G-l;s++)p=s+n,(h=s+l)in I?I[p]=I[h]:delete I[p];for(s=G;s>G-l+n;s--)delete I[s-1]}else if(n>l)for(s=G-l;s>g;s--)p=s+n-1,(h=s+l-1)in I?I[p]=I[h]:delete I[p];for(s=0;s<n;s++)I[s+g]=arguments[s+2];return I.length=G-l+n,i}})},function(t,e,n){n(44)("flat")},function(t,e,n){n(44)("flatMap")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(111),o=n(66),d=c.ArrayBuffer;l({global:!0,forced:i.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,e,n){var l=n(1).Array,i=Math.abs,c=Math.pow,o=Math.floor,d=Math.log,a=Math.LN2;t.exports={pack:function(t,e,n){var r,u,s,Z=l(n),b=8*n-e-1,m=(1<<b)-1,h=m>>1,p=23===e?c(2,-24)-c(2,-77):0,I=t<0||0===t&&1/t<0?1:0,G=0;for((t=i(t))!=t||t===1/0?(u=t!=t?1:0,r=m):(r=o(d(t)/a),t*(s=c(2,-r))<1&&(r--,s*=2),(t+=r+h>=1?p/s:p*c(2,1-h))*s>=2&&(r++,s/=2),r+h>=m?(u=0,r=m):r+h>=1?(u=(t*s-1)*c(2,e),r+=h):(u=t*c(2,h-1)*c(2,e),r=0));e>=8;)Z[G++]=255&u,u/=256,e-=8;for(r=r<<e|u,b+=e;b>0;)Z[G++]=255&r,r/=256,b-=8;return Z[--G]|=128*I,Z},unpack:function(t,e){var n,l=t.length,i=8*l-e-1,o=(1<<i)-1,d=o>>1,a=i-7,r=l-1,u=t[r--],s=127&u;for(u>>=7;a>0;)s=256*s+t[r--],a-=8;for(n=s&(1<<-a)-1,s>>=-a,a+=e;a>0;)n=256*n+t[r--],a-=8;if(0===s)s=1-d;else{if(s===o)return n?NaN:u?-1/0:1/0;n+=c(2,e),s-=d}return(u?-1:1)*n*c(2,s-e)}}},function(t,e,n){var l=n(0),i=n(17);l({target:"ArrayBuffer",stat:!0,forced:!i.NATIVE_ARRAY_BUFFER_VIEWS},{isView:i.isView})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(111),d=n(2),a=n(49),r=n(37),u=n(33),s=o.ArrayBuffer,Z=o.DataView,b=Z.prototype,m=i(s.prototype.slice),h=i(b.getUint8),p=i(b.setUint8);l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:c((function(){return!new s(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(m&&void 0===e)return m(d(this),t);for(var n=d(this).byteLength,l=a(t,n),i=a(void 0===e?n:e,n),c=new(u(this,s))(r(i-l)),o=new Z(this),b=new Z(c),I=0;l<i;)p(b,I++,h(o,l++));return c}})},function(t,e,n){n(274)},function(t,e,n){var l=n(0),i=n(111);l({global:!0,forced:!n(144)},{DataView:i.DataView})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=i.Date,d=c(o.prototype.getTime);l({target:"Date",stat:!0},{now:function(){return d(new o)}})},function(t,e,n){var l=n(0),i=n(277);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(145).start,d=l.RangeError,a=Math.abs,r=Date.prototype,u=r.toISOString,s=i(r.getTime),Z=i(r.getUTCDate),b=i(r.getUTCFullYear),m=i(r.getUTCHours),h=i(r.getUTCMilliseconds),p=i(r.getUTCMinutes),I=i(r.getUTCMonth),G=i(r.getUTCSeconds);t.exports=c((function(){return"0385-07-25T07:06:39.999Z"!=u.call(new Date(-50000000000001))}))||!c((function(){u.call(new Date(NaN))}))?function(){if(!isFinite(s(this)))throw d("Invalid time value");var t=b(this),e=h(this),n=t<0?"-":t>9999?"+":"";return n+o(a(t),n?6:4,0)+"-"+o(I(this)+1,2,0)+"-"+o(Z(this),2,0)+"T"+o(m(this),2,0)+":"+o(p(this),2,0)+":"+o(G(this),2,0)+"."+o(e,3,0)+"Z"}:u},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(13),o=n(130);l({target:"Date",proto:!0,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var e=c(this),n=o(e,"number");return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},function(t,e,n){var l=n(15),i=n(20),c=n(280),o=n(7)("toPrimitive"),d=Date.prototype;l(d,o)||i(d,o,c)},function(t,e,n){"use strict";var l=n(1),i=n(2),c=n(165),o=l.TypeError;t.exports=function(t){if(i(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return c(this,t)}},function(t,e,n){var l=n(3),i=n(20),c=Date.prototype,o=l(c.toString),d=l(c.getTime);"Invalid Date"!=String(new Date(NaN))&&i(c,"toString",(function(){var t=d(this);return t==t?o(this):"Invalid Date"}))},function(t,e,n){var l=n(0),i=n(184);l({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},function(t,e,n){"use strict";var l=n(10),i=n(12),c=n(16),o=n(32),d=n(7)("hasInstance"),a=Function.prototype;d in a||c.f(a,d,{value:function(t){if(!l(this)||!i(t))return!1;var e=this.prototype;if(!i(e))return t instanceof this;for(;t=o(t);)if(e===t)return!0;return!1}})},function(t,e,n){var l=n(9),i=n(74).EXISTS,c=n(3),o=n(16).f,d=Function.prototype,a=c(d.toString),r=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,u=c(r.exec);l&&!i&&o(d,"name",{configurable:!0,get:function(){try{return u(r,a(this))[1]}catch(t){return""}}})},function(t,e,n){n(0)({global:!0},{globalThis:n(1)})},function(t,e,n){var l=n(1);n(41)(l.JSON,"JSON",!0)},function(t,e,n){"use strict";n(113)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){var l=n(0),i=n(186),c=Math.acosh,o=Math.log,d=Math.sqrt,a=Math.LN2;l({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+a:i(t-1+d(t-1)*d(t+1))}})},function(t,e,n){var l=n(0),i=Math.asinh,c=Math.log,o=Math.sqrt;l({target:"Math",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):c(e+o(e*e+1)):e}})},function(t,e,n){var l=n(0),i=Math.atanh,c=Math.log;l({target:"Math",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,e,n){var l=n(0),i=n(149),c=Math.abs,o=Math.pow;l({target:"Math",stat:!0},{cbrt:function(t){return i(t=+t)*o(c(t),1/3)}})},function(t,e,n){var l=n(0),i=Math.floor,c=Math.log,o=Math.LOG2E;l({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-i(c(t+.5)*o):32}})},function(t,e,n){var l=n(0),i=n(116),c=Math.cosh,o=Math.abs,d=Math.E;l({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var e=i(o(t)-1)+1;return(e+1/(e*d*d))*(d/2)}})},function(t,e,n){var l=n(0),i=n(116);l({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,n){n(0)({target:"Math",stat:!0},{fround:n(187)})},function(t,e,n){var l=n(0),i=Math.hypot,c=Math.abs,o=Math.sqrt;l({target:"Math",stat:!0,forced:!!i&&i(1/0,NaN)!==1/0},{hypot:function(t,e){for(var n,l,i=0,d=0,a=arguments.length,r=0;d<a;)r<(n=c(arguments[d++]))?(i=i*(l=r/n)*l+1,r=n):i+=n>0?(l=n/r)*l:n;return r===1/0?1/0:r*o(i)}})},function(t,e,n){var l=n(0),i=n(4),c=Math.imul;l({target:"Math",stat:!0,forced:i((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l;return 0|i*c+((65535&n>>>16)*c+i*(65535&l>>>16)<<16>>>0)}})},function(t,e,n){n(0)({target:"Math",stat:!0},{log10:n(299)})},function(t,e){var n=Math.log,l=Math.LOG10E;t.exports=Math.log10||function(t){return n(t)*l}},function(t,e,n){n(0)({target:"Math",stat:!0},{log1p:n(186)})},function(t,e,n){var l=n(0),i=Math.log,c=Math.LN2;l({target:"Math",stat:!0},{log2:function(t){return i(t)/c}})},function(t,e,n){n(0)({target:"Math",stat:!0},{sign:n(149)})},function(t,e,n){var l=n(0),i=n(4),c=n(116),o=Math.abs,d=Math.exp,a=Math.E;l({target:"Math",stat:!0,forced:i((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(a/2)}})},function(t,e,n){var l=n(0),i=n(116),c=Math.exp;l({target:"Math",stat:!0},{tanh:function(t){var e=i(t=+t),n=i(-t);return e==1/0?1:n==1/0?-1:(e-n)/(c(t)+c(-t))}})},function(t,e,n){n(41)(Math,"Math",!0)},function(t,e,n){var l=n(0),i=Math.ceil,c=Math.floor;l({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:i)(t)}})},function(t,e,n){"use strict";var l=n(9),i=n(1),c=n(3),o=n(88),d=n(20),a=n(15),r=n(115),u=n(36),s=n(71),Z=n(130),b=n(4),m=n(57).f,h=n(31).f,p=n(16).f,I=n(150),G=n(79).trim,g=i.Number,X=g.prototype,y=i.TypeError,V=c("".slice),W=c("".charCodeAt),C=function(t){var e=Z(t,"number");return"bigint"==typeof e?e:R(e)},R=function(t){var e,n,l,i,c,o,d,a,r=Z(t,"number");if(s(r))throw y("Cannot convert a Symbol value to a number");if("string"==typeof r&&r.length>2)if(r=G(r),43===(e=W(r,0))||45===e){if(88===(n=W(r,2))||120===n)return NaN}else if(48===e){switch(W(r,1)){case 66:case 98:l=2,i=49;break;case 79:case 111:l=8,i=55;break;default:return+r}for(o=(c=V(r,2)).length,d=0;d<o;d++)if((a=W(c,d))<48||a>i)return NaN;return parseInt(c,l)}return+r};if(o("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var f,S=function(t){var e=arguments.length<1?0:g(C(t)),n=this;return u(X,n)&&b((function(){I(n)}))?r(Object(e),n,S):e},v=l?m(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),Y=0;v.length>Y;Y++)a(g,f=v[Y])&&!a(S,f)&&p(S,f,h(g,f));S.prototype=X,X.constructor=S,d(i,"Number",S)}},function(t,e,n){n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isFinite:n(188)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isInteger:n(151)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,e,n){var l=n(0),i=n(151),c=Math.abs;l({target:"Number",stat:!0},{isSafeInteger:function(t){return i(t)&&c(t)<=9007199254740991}})},function(t,e,n){n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,n){n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,n){var l=n(0),i=n(189);l({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),d=n(150),a=n(146),r=n(4),u=i.RangeError,s=i.String,Z=Math.floor,b=c(a),m=c("".slice),h=c(1..toFixed),p=function(t,e,n){return 0===e?n:e%2==1?p(t,e-1,n*t):p(t*t,e/2,n)},I=function(t,e,n){for(var l=-1,i=n;++l<6;)i+=e*t[l],t[l]=i%1e7,i=Z(i/1e7)},G=function(t,e){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=Z(l/e),l=l%e*1e7},g=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var l=s(t[e]);n=""===n?l:n+b("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:r((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!r((function(){h({})}))},{toFixed:function(t){var e,n,l,i,c=d(this),a=o(t),r=[0,0,0,0,0,0],Z="",h="0";if(a<0||a>20)throw u("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return s(c);if(c<0&&(Z="-",c=-c),c>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(c*p(2,69,1))-69)<0?c*p(2,-e,1):c/p(2,e,1),n*=4503599627370496,(e=52-e)>0){for(I(r,0,n),l=a;l>=7;)I(r,1e7,0),l-=7;for(I(r,p(10,l,1),0),l=e-1;l>=23;)G(r,1<<23),l-=23;G(r,1<<l),I(r,1,1),G(r,2),h=g(r)}else I(r,0,n),I(r,1<<-e,0),h=g(r)+b("0",a);return h=a>0?Z+((i=h.length)<=a?"0."+b("0",a-i)+h:m(h,0,i-a)+"."+m(h,i-a)):Z+h}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(150),d=i(1..toPrecision);l({target:"Number",proto:!0,forced:c((function(){return"1"!==d(1,void 0)}))||!c((function(){d({})}))},{toPrecision:function(t){return void 0===t?d(o(this)):d(o(this),t)}})},function(t,e,n){var l=n(0),i=n(190);l({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},function(t,e,n){n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(29)})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),d=n(13),a=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){a.f(d(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(9),c=n(106).f;l({target:"Object",stat:!0,forced:Object.defineProperties!==c,sham:!i},{defineProperties:c})},function(t,e,n){var l=n(0),i=n(9),c=n(16).f;l({target:"Object",stat:!0,forced:Object.defineProperty!==c,sham:!i},{defineProperty:c})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),d=n(13),a=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){a.f(d(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(191).entries;l({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(93),c=n(4),o=n(12),d=n(67).onFreeze,a=Object.freeze;l({target:"Object",stat:!0,forced:c((function(){a(1)})),sham:!i},{freeze:function(t){return a&&o(t)?a(d(t)):t}})},function(t,e,n){var l=n(0),i=n(8),c=n(58);l({target:"Object",stat:!0},{fromEntries:function(t){var e={};return i(t,(function(t,n){c(e,t,n)}),{AS_ENTRIES:!0}),e}})},function(t,e,n){var l=n(0),i=n(4),c=n(34),o=n(31).f,d=n(9),a=i((function(){o(1)}));l({target:"Object",stat:!0,forced:!d||a,sham:!d},{getOwnPropertyDescriptor:function(t,e){return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(9),c=n(133),o=n(34),d=n(31),a=n(58);l({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,l=o(t),i=d.f,r=c(l),u={},s=0;r.length>s;)void 0!==(n=i(l,e=r[s++]))&&a(u,e,n);return u}})},function(t,e,n){var l=n(0),i=n(4),c=n(136).f;l({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,e,n){var l=n(0),i=n(4),c=n(13),o=n(32),d=n(141);l({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,e,n){n(0)({target:"Object",stat:!0},{is:n(192)})},function(t,e,n){var l=n(0),i=n(114);l({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),d=n(148),a=Object.isFrozen;l({target:"Object",stat:!0,forced:i((function(){a(1)}))||d},{isFrozen:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),d=n(148),a=Object.isSealed;l({target:"Object",stat:!0,forced:i((function(){a(1)}))||d},{isSealed:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,n){var l=n(0),i=n(13),c=n(75);l({target:"Object",stat:!0,forced:n(4)((function(){c(1)}))},{keys:function(t){return c(i(t))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),d=n(55),a=n(32),r=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var e,n=o(this),l=d(t);do{if(e=r(n,l))return e.get}while(n=a(n))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),d=n(55),a=n(32),r=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var e,n=o(this),l=d(t);do{if(e=r(n,l))return e.set}while(n=a(n))}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),d=n(4),a=Object.preventExtensions;l({target:"Object",stat:!0,forced:d((function(){a(1)})),sham:!o},{preventExtensions:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),d=n(4),a=Object.seal;l({target:"Object",stat:!0,forced:d((function(){a(1)})),sham:!o},{seal:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,n){n(0)({target:"Object",stat:!0},{setPrototypeOf:n(51)})},function(t,e,n){var l=n(135),i=n(20),c=n(343);l||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,n){"use strict";var l=n(135),i=n(64);t.exports=l?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,n){var l=n(0),i=n(191).values;l({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(189);l({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,n){n(348),n(353),n(354),n(355),n(356),n(357)},function(t,e,n){"use strict";var l,i,c,o=n(0),d=n(24),a=n(78),r=n(1),u=n(5),s=n(20),Z=n(46),b=n(51),m=n(41),h=n(66),p=n(6),I=n(10),G=n(12),g=n(42),X=n(33),y=n(119).set,V=n(194),W=n(195),C=n(80),R=n(351),f=n(21),S=n(81),v=n(95),Y=n(62),K=v.CONSTRUCTOR,N=v.REJECTION_EVENT,J=v.SUBCLASSING,H=f.getterFor("Promise"),L=f.set,U=S&&S.prototype,k=S,B=U,F=r.TypeError,x=r.document,T=r.process,A=Y.f,z=A,w=!!(x&&x.createEvent&&r.dispatchEvent),Q=function(t){var e;return!(!G(t)||!I(e=t.then))&&e},P=function(t,e){var n,l,i,c=e.value,o=1==e.state,d=o?t.ok:t.fail,a=t.resolve,r=t.reject,s=t.domain;try{d?(o||(2===e.rejection&&O(e),e.rejection=1),!0===d?n=c:(s&&s.enter(),n=d(c),s&&(s.exit(),i=!0)),n===t.promise?r(F("Promise-chain cycle")):(l=Q(n))?u(l,n,a,r):a(n)):r(c)}catch(t){s&&!i&&s.exit(),r(t)}},j=function(t,e){t.notified||(t.notified=!0,V((function(){for(var n,l=t.reactions;n=l.get();)P(n,t);t.notified=!1,e&&!t.rejection&&E(t)})))},M=function(t,e,n){var l,i;w?((l=x.createEvent("Event")).promise=e,l.reason=n,l.initEvent(t,!1,!0),r.dispatchEvent(l)):l={promise:e,reason:n},!N&&(i=r["on"+t])?i(l):"unhandledrejection"===t&&W("Unhandled promise rejection",n)},E=function(t){u(y,r,(function(){var e,n=t.facade,l=t.value;if(D(t)&&(e=C((function(){a?T.emit("unhandledRejection",l,n):M("unhandledrejection",n,l)})),t.rejection=a||D(t)?2:1,e.error))throw e.value}))},D=function(t){return 1!==t.rejection&&!t.parent},O=function(t){u(y,r,(function(){var e=t.facade;a?T.emit("rejectionHandled",e):M("rejectionhandled",e,t.value)}))},_=function(t,e,n){return function(l){t(e,l,n)}},q=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,j(t,!0))},$=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw F("Promise can't be resolved itself");var l=Q(e);l?V((function(){var n={done:!1};try{u(l,e,_($,n,t),_(q,n,t))}catch(e){q(n,e,t)}})):(t.value=e,t.state=1,j(t,!1))}catch(e){q({done:!1},e,t)}}};if(K&&(B=(k=function(t){g(this,B),p(t),u(l,this);var e=H(this);try{t(_($,e),_(q,e))}catch(t){q(e,t)}}).prototype,(l=function(t){L(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new R,rejection:!1,state:0,value:void 0})}).prototype=Z(B,{then:function(t,e){var n=H(this),l=A(X(this,k));return n.parent=!0,l.ok=!I(t)||t,l.fail=I(e)&&e,l.domain=a?T.domain:void 0,0==n.state?n.reactions.add(l):V((function(){P(l,n)})),l.promise}}),i=function(){var t=new l,e=H(t);this.promise=t,this.resolve=_($,e),this.reject=_(q,e)},Y.f=A=function(t){return t===k||void 0===t?new i(t):z(t)},!d&&I(S)&&U!==Object.prototype)){c=U.then,J||s(U,"then",(function(t,e){var n=this;return new k((function(t,e){u(c,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete U.constructor}catch(t){}b&&b(U,B)}o({global:!0,wrap:!0,forced:K},{Promise:k}),m(k,"Promise",!1,!0),h("Promise")},function(t,e,n){var l=n(48),i=n(1);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==i.Pebble},function(t,e,n){var l=n(48);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,e){var n=function(){this.head=null,this.tail=null};n.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=n},function(t,e){t.exports="object"==typeof window&&"object"!=typeof Deno},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),a=n(8);l({target:"Promise",stat:!0,forced:n(196)},{all:function(t){var e=this,n=o.f(e),l=n.resolve,r=n.reject,u=d((function(){var n=c(e.resolve),o=[],d=0,u=1;a(t,(function(t){var c=d++,a=!1;u++,i(n,e,t).then((function(t){a||(a=!0,o[c]=t,--u||l(o))}),r)})),--u||l(o)}));return u.error&&r(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(95).CONSTRUCTOR,o=n(81),d=n(11),a=n(10),r=n(20),u=o&&o.prototype;if(l({target:"Promise",proto:!0,forced:c,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&a(o)){var s=d("Promise").prototype.catch;u.catch!==s&&r(u,"catch",s,{unsafe:!0})}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),a=n(8);l({target:"Promise",stat:!0,forced:n(196)},{race:function(t){var e=this,n=o.f(e),l=n.reject,r=d((function(){var o=c(e.resolve);a(t,(function(t){i(o,e,t).then(n.resolve,l)}))}));return r.error&&l(r.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(62);l({target:"Promise",stat:!0,forced:n(95).CONSTRUCTOR},{reject:function(t){var e=c.f(this);return i(e.reject,void 0,t),e.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(24),o=n(81),d=n(95).CONSTRUCTOR,a=n(197),r=i("Promise"),u=c&&!d;l({target:"Promise",stat:!0,forced:c||d},{resolve:function(t){return a(u&&this===r?o:this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),d=n(80),a=n(8);l({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=o.f(e),l=n.resolve,r=n.reject,u=d((function(){var n=c(e.resolve),o=[],d=0,r=1;a(t,(function(t){var c=d++,a=!1;r++,i(n,e,t).then((function(t){a||(a=!0,o[c]={status:"fulfilled",value:t},--r||l(o))}),(function(t){a||(a=!0,o[c]={status:"rejected",reason:t},--r||l(o))}))})),--r||l(o)}));return u.error&&r(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(81),o=n(4),d=n(11),a=n(10),r=n(33),u=n(197),s=n(20),Z=c&&c.prototype;if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){Z.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=r(this,d("Promise")),n=a(t);return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}}),!i&&a(c)){var b=d("Promise").prototype.finally;Z.finally!==b&&s(Z,"finally",b,{unsafe:!0})}},function(t,e,n){var l=n(0),i=n(18),c=n(6),o=n(2);l({target:"Reflect",stat:!0,forced:!n(4)((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,n){return i(c(t),e,o(n))}})},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(184),d=n(112),a=n(2),r=n(12),u=n(29),s=n(4),Z=i("Reflect","construct"),b=Object.prototype,m=[].push,h=s((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),p=!s((function(){Z((function(){}))})),I=h||p;l({target:"Reflect",stat:!0,forced:I,sham:I},{construct:function(t,e){d(t),a(e);var n=arguments.length<3?t:d(arguments[2]);if(p&&!h)return Z(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var l=[null];return c(m,l,e),new(c(o,t,l))}var i=n.prototype,s=u(r(i)?i:b),I=c(t,s,e);return r(I)?I:s}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(55),d=n(16);l({target:"Reflect",stat:!0,forced:n(4)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!i},{defineProperty:function(t,e,n){c(t);var l=o(e);c(n);try{return d.f(t,l,n),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(2),c=n(31).f;l({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=c(i(t),e);return!(n&&!n.configurable)&&delete t[e]}})},function(t,e,n){var l=n(0),i=n(5),c=n(12),o=n(2),d=n(198),a=n(31),r=n(32);l({target:"Reflect",stat:!0},{get:function t(e,n){var l,u,s=arguments.length<3?e:arguments[2];return o(e)===s?e[n]:(l=a.f(e,n))?d(l)?l.value:void 0===l.get?void 0:i(l.get,s):c(u=r(e))?t(u,n,s):void 0}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(31);l({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return o.f(c(t),e)}})},function(t,e,n){var l=n(0),i=n(2),c=n(32);l({target:"Reflect",stat:!0,sham:!n(141)},{getPrototypeOf:function(t){return c(i(t))}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{has:function(t,e){return e in t}})},function(t,e,n){var l=n(0),i=n(2),c=n(114);l({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),c(t)}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(133)})},function(t,e,n){var l=n(0),i=n(11),c=n(2);l({target:"Reflect",stat:!0,sham:!n(93)},{preventExtensions:function(t){c(t);try{var e=i("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(5),c=n(2),o=n(12),d=n(198),a=n(4),r=n(16),u=n(31),s=n(32),Z=n(43);l({target:"Reflect",stat:!0,forced:a((function(){var t=function(){},e=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}))},{set:function t(e,n,l){var a,b,m,h=arguments.length<4?e:arguments[3],p=u.f(c(e),n);if(!p){if(o(b=s(e)))return t(b,n,l,h);p=Z(0)}if(d(p)){if(!1===p.writable||!o(h))return!1;if(a=u.f(h,n)){if(a.get||a.set||!1===a.writable)return!1;a.value=l,r.f(h,n,a)}else r.f(h,n,Z(0,l))}else{if(void 0===(m=p.set))return!1;i(m,h,l)}return!0}})},function(t,e,n){var l=n(0),i=n(2),c=n(179),o=n(51);o&&l({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){i(t),c(e);try{return o(t,e),!0}catch(t){return!1}}})},function(t,e,n){var l=n(9),i=n(1),c=n(3),o=n(88),d=n(115),a=n(28),r=n(57).f,u=n(36),s=n(96),Z=n(14),b=n(120),m=n(121),h=n(374),p=n(20),I=n(4),G=n(15),g=n(21).enforce,X=n(66),y=n(7),V=n(199),W=n(200),C=y("match"),R=i.RegExp,f=R.prototype,S=i.SyntaxError,v=c(f.exec),Y=c("".charAt),K=c("".replace),N=c("".indexOf),J=c("".slice),H=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,L=/a/g,U=/a/g,k=new R(L)!==L,B=m.MISSED_STICKY,F=m.UNSUPPORTED_Y,x=l&&(!k||B||V||W||I((function(){return U[C]=!1,R(L)!=L||R(U)==U||"/a/i"!=R(L,"i")})));if(o("RegExp",x)){for(var T=function(t,e){var n,l,i,c,o,r,m=u(f,this),h=s(t),p=void 0===e,I=[],X=t;if(!m&&h&&p&&t.constructor===T)return t;if((h||u(f,t))&&(t=t.source,p&&(e=b(X))),t=void 0===t?"":Z(t),e=void 0===e?"":Z(e),X=t,V&&"dotAll"in L&&(l=!!e&&N(e,"s")>-1)&&(e=K(e,/s/g,"")),n=e,B&&"sticky"in L&&(i=!!e&&N(e,"y")>-1)&&F&&(e=K(e,/y/g,"")),W&&(t=(c=function(t){for(var e,n=t.length,l=0,i="",c=[],o={},d=!1,a=!1,r=0,u="";l<=n;l++){if("\\"===(e=Y(t,l)))e+=Y(t,++l);else if("]"===e)d=!1;else if(!d)switch(!0){case"["===e:d=!0;break;case"("===e:v(H,J(t,l+1))&&(l+=2,a=!0),i+=e,r++;continue;case">"===e&&a:if(""===u||G(o,u))throw new S("Invalid capture group name");o[u]=!0,c[c.length]=[u,r],a=!1,u="";continue}a?u+=e:i+=e}return[i,c]}(t))[0],I=c[1]),o=d(R(t,e),m?this:f,T),(l||i||I.length)&&(r=g(o),l&&(r.dotAll=!0,r.raw=T(function(t){for(var e,n=t.length,l=0,i="",c=!1;l<=n;l++)"\\"!==(e=Y(t,l))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+Y(t,++l);return i}(t),n)),i&&(r.sticky=!0),I.length&&(r.groups=I)),t!==X)try{a(o,"source",""===X?"(?:)":X)}catch(t){}return o},A=r(R),z=0;A.length>z;)h(T,R,A[z++]);f.constructor=T,T.prototype=f,p(i,"RegExp",T)}X("RegExp")},function(t,e,n){var l=n(16).f;t.exports=function(t,e,n){n in t||l(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},function(t,e,n){var l=n(9),i=n(16),c=n(153),o=n(4),d=RegExp.prototype;l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(d,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(d,"flags",{configurable:!0,get:c})},function(t,e,n){var l=n(1),i=n(9),c=n(121).MISSED_STICKY,o=n(40),d=n(16).f,a=n(21).get,r=RegExp.prototype,u=l.TypeError;i&&c&&d(r,"sticky",{configurable:!0,get:function(){if(this!==r){if("RegExp"===o(this))return!!a(this).sticky;throw u("Incompatible receiver, RegExp required")}}})},function(t,e,n){"use strict";n(154);var l,i,c=n(0),o=n(1),d=n(5),a=n(3),r=n(10),u=n(12),s=(l=!1,(i=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&l),Z=o.Error,b=a(/./.test);c({target:"RegExp",proto:!0,forced:!s},{test:function(t){var e=this.exec;if(!r(e))return b(this,t);var n=d(e,this,t);if(null!==n&&!u(n))throw new Z("RegExp exec method returned something other than an Object or null");return!!n}})},function(t,e,n){"use strict";var l=n(74).PROPER,i=n(20),c=n(2),o=n(14),d=n(4),a=n(120),r=RegExp.prototype.toString,u=d((function(){return"/a/b"!=r.call({source:"a",flags:"b"})})),s=l&&"toString"!=r.name;(u||s)&&i(RegExp.prototype,"toString",(function(){var t=c(this);return"/"+o(t.source)+"/"+o(a(t))}),{unsafe:!0})},function(t,e,n){n(380)},function(t,e,n){"use strict";n(113)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){"use strict";var l=n(0),i=n(82).codeAt;l({target:"String",proto:!0},{codePointAt:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,d=n(37),a=n(14),r=n(155),u=n(26),s=n(156),Z=n(24),b=c("".endsWith),m=c("".slice),h=Math.min,p=s("endsWith");i({target:"String",proto:!0,forced:!!(Z||p||(l=o(String.prototype,"endsWith"),!l||l.writable))&&!p},{endsWith:function(t){var e=a(u(this));r(t);var n=arguments.length>1?arguments[1]:void 0,l=e.length,i=void 0===n?l:h(d(n),l),c=a(t);return b?b(e,c,i):m(e,i-c.length,i)===c}})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=n(49),d=i.RangeError,a=String.fromCharCode,r=String.fromCodePoint,u=c([].join);l({target:"String",stat:!0,forced:!!r&&1!=r.length},{fromCodePoint:function(t){for(var e,n=[],l=arguments.length,i=0;l>i;){if(e=+arguments[i++],o(e,1114111)!==e)throw d(e+" is not a valid code point");n[i]=e<65536?a(e):a(55296+((e-=65536)>>10),e%1024+56320)}return u(n,"")}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(155),o=n(26),d=n(14),a=n(156),r=i("".indexOf);l({target:"String",proto:!0,forced:!a("includes")},{includes:function(t){return!!~r(d(o(this)),d(c(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(37),d=n(14),a=n(26),r=n(27),u=n(124),s=n(97);i("match",(function(t,e,n){return[function(e){var n=a(this),i=null==e?void 0:r(e,t);return i?l(i,e,n):new RegExp(e)[t](d(n))},function(t){var l=c(this),i=d(t),a=n(e,l,i);if(a.done)return a.value;if(!l.global)return s(l,i);var r=l.unicode;l.lastIndex=0;for(var Z,b=[],m=0;null!==(Z=s(l,i));){var h=d(Z[0]);b[m]=h,""===h&&(l.lastIndex=u(i,o(l.lastIndex),r)),m++}return 0===m?null:b}]}))},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(77),a=n(26),r=n(37),u=n(14),s=n(2),Z=n(40),b=n(96),m=n(120),h=n(27),p=n(20),I=n(4),G=n(7),g=n(33),X=n(124),y=n(97),V=n(21),W=n(24),C=G("matchAll"),R=V.set,f=V.getterFor("RegExp String Iterator"),S=RegExp.prototype,v=i.TypeError,Y=o("".indexOf),K=o("".matchAll),N=!!K&&!I((function(){K("a",/./)})),J=d((function(t,e,n,l){R(this,{type:"RegExp String Iterator",regexp:t,string:e,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=f(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,l=y(e,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===u(l[0])&&(e.lastIndex=X(n,r(e.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),H=function(t){var e,n,l,i=s(this),c=u(t),o=g(i,RegExp),d=u(m(i));return e=new o(o===RegExp?i.source:i,d),n=!!~Y(d,"g"),l=!!~Y(d,"u"),e.lastIndex=r(i.lastIndex),new J(e,c,n,l)};l({target:"String",proto:!0,forced:N},{matchAll:function(t){var e,n,l,i,o=a(this);if(null!=t){if(b(t)&&(e=u(a(m(t))),!~Y(e,"g")))throw v("`.matchAll` does not allow non-global regexes");if(N)return K(o,t);if(void 0===(l=h(t,C))&&W&&"RegExp"==Z(t)&&(l=H),l)return c(l,t,o)}else if(N)return K(o,t);return n=u(o),i=new RegExp(t,"g"),W?c(H,i,n):i[C](n)}}),W||C in S||p(S,C,H)},function(t,e,n){"use strict";var l=n(0),i=n(145).end;l({target:"String",proto:!0,forced:n(202)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(145).start;l({target:"String",proto:!0,forced:n(202)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(3),c=n(34),o=n(13),d=n(14),a=n(22),r=i([].push),u=i([].join);l({target:"String",stat:!0},{raw:function(t){for(var e=c(o(t).raw),n=a(e),l=arguments.length,i=[],s=0;n>s;){if(r(i,d(e[s++])),s===n)return u(i,"");s<l&&r(i,d(arguments[s]))}}})},function(t,e,n){n(0)({target:"String",proto:!0},{repeat:n(146)})},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),d=n(4),a=n(2),r=n(10),u=n(35),s=n(37),Z=n(14),b=n(26),m=n(124),h=n(27),p=n(203),I=n(97),G=n(7)("replace"),g=Math.max,X=Math.min,y=c([].concat),V=c([].push),W=c("".indexOf),C=c("".slice),R="$0"==="a".replace(/./,"$0"),f=!!/./[G]&&""===/./[G]("a","$0");o("replace",(function(t,e,n){var c=f?"$":"$0";return[function(t,n){var l=b(this),c=null==t?void 0:h(t,G);return c?i(c,t,l,n):i(e,Z(l),t,n)},function(t,i){var o=a(this),d=Z(t);if("string"==typeof i&&-1===W(i,c)&&-1===W(i,"$<")){var b=n(e,o,d,i);if(b.done)return b.value}var h=r(i);h||(i=Z(i));var G=o.global;if(G){var R=o.unicode;o.lastIndex=0}for(var f=[];;){var S=I(o,d);if(null===S)break;if(V(f,S),!G)break;""===Z(S[0])&&(o.lastIndex=m(d,s(o.lastIndex),R))}for(var v,Y="",K=0,N=0;N<f.length;N++){for(var J=Z((S=f[N])[0]),H=g(X(u(S.index),d.length),0),L=[],U=1;U<S.length;U++)V(L,void 0===(v=S[U])?v:String(v));var k=S.groups;if(h){var B=y([J],L,H,d);void 0!==k&&V(B,k);var F=Z(l(i,void 0,B))}else F=p(J,d,H,L,k,i);H>=K&&(Y+=C(d,K,H)+F,K=H+J.length)}return Y+C(d,K)}]}),!!d((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!R||f)},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(26),d=n(192),a=n(14),r=n(27),u=n(97);i("search",(function(t,e,n){return[function(e){var n=o(this),i=null==e?void 0:r(e,t);return i?l(i,e,n):new RegExp(e)[t](a(n))},function(t){var l=c(this),i=a(t),o=n(e,l,i);if(o.done)return o.value;var r=l.lastIndex;d(r,0)||(l.lastIndex=0);var s=u(l,i);return d(l.lastIndex,r)||(l.lastIndex=r),null===s?-1:s.index}]}))},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),d=n(96),a=n(2),r=n(26),u=n(33),s=n(124),Z=n(37),b=n(14),m=n(27),h=n(89),p=n(97),I=n(122),G=n(121),g=n(4),X=G.UNSUPPORTED_Y,y=Math.min,V=[].push,W=c(/./.exec),C=c(V),R=c("".slice);o("split",(function(t,e,n){var c;return c="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var c=b(r(this)),o=void 0===n?4294967295:n>>>0;if(0===o)return[];if(void 0===t)return[c];if(!d(t))return i(e,c,t,o);for(var a,u,s,Z=[],m=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),p=0,G=new RegExp(t.source,m+"g");(a=i(I,G,c))&&!((u=G.lastIndex)>p&&(C(Z,R(c,p,a.index)),a.length>1&&a.index<c.length&&l(V,Z,h(a,1)),s=a[0].length,p=u,Z.length>=o));)G.lastIndex===a.index&&G.lastIndex++;return p===c.length?!s&&W(G,"")||C(Z,""):C(Z,R(c,p)),Z.length>o?h(Z,0,o):Z}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i(e,this,t,n)}:e,[function(e,n){var l=r(this),o=null==e?void 0:m(e,t);return o?i(o,e,l,n):i(c,b(l),e,n)},function(t,l){var i=a(this),o=b(t),d=n(c,i,o,l,c!==e);if(d.done)return d.value;var r=u(i,RegExp),m=i.unicode,h=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(X?"g":"y"),I=new r(X?"^(?:"+i.source+")":i,h),G=void 0===l?4294967295:l>>>0;if(0===G)return[];if(0===o.length)return null===p(I,o)?[o]:[];for(var g=0,V=0,W=[];V<o.length;){I.lastIndex=X?0:V;var f,S=p(I,X?R(o,V):o);if(null===S||(f=y(Z(I.lastIndex+(X?V:0)),o.length))===g)V=s(o,V,m);else{if(C(W,R(o,g,V)),W.length===G)return W;for(var v=1;v<=S.length-1;v++)if(C(W,S[v]),W.length===G)return W;V=g=f}}return C(W,R(o,g)),W}]}),!!g((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),X)},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,d=n(37),a=n(14),r=n(155),u=n(26),s=n(156),Z=n(24),b=c("".startsWith),m=c("".slice),h=Math.min,p=s("startsWith");i({target:"String",proto:!0,forced:!!(Z||p||(l=o(String.prototype,"startsWith"),!l||l.writable))&&!p},{startsWith:function(t){var e=a(u(this));r(t);var n=d(h(arguments.length>1?arguments[1]:void 0,e.length)),l=a(t);return b?b(e,l,n):m(e,n,n+l.length)===l}})},function(t,e,n){"use strict";var l=n(0),i=n(79).trim;l({target:"String",proto:!0,forced:n(157)("trim")},{trim:function(){return i(this)}})},function(t,e,n){n(397);var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},function(t,e,n){var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},function(t,e,n){n(399);var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},function(t,e,n){var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,n){n(52)("Float32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Float64",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Int32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}),!0)},function(t,e,n){n(52)("Uint16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(52)("Uint32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){"use strict";var l=n(3),i=n(17),c=l(n(175)),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("copyWithin",(function(t,e){return c(o(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).every,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("every",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(5),c=n(137),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){var e=arguments.length;return i(c,o(this),t,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).filter,c=n(426),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("filter",(function(t){var e=i(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,e)}))},function(t,e,n){var l=n(427),i=n(125);t.exports=function(t,e){return l(i(t),e)}},function(t,e,n){var l=n(22);t.exports=function(t,e){for(var n=0,i=l(e),c=new t(i);i>n;)c[n]=e[n++];return c}},function(t,e,n){"use strict";var l=n(17),i=n(30).find,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("find",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).findIndex,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("findIndex",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).forEach,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("forEach",(function(t){i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(158);(0,n(17).exportTypedArrayStaticMethod)("from",n(207),l)},function(t,e,n){"use strict";var l=n(17),i=n(87).includes,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("includes",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(87).indexOf,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("indexOf",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(4),c=n(3),o=n(17),d=n(109),a=n(7)("iterator"),r=l.Uint8Array,u=c(d.values),s=c(d.keys),Z=c(d.entries),b=o.aTypedArray,m=o.exportTypedArrayMethod,h=r&&r.prototype,p=!i((function(){h[a].call([1])})),I=!!h&&h.values&&h[a]===h.values&&"values"===h.values.name,G=function(){return u(b(this))};m("entries",(function(){return Z(b(this))}),p),m("keys",(function(){return s(b(this))}),p),m("values",G,p||!I,{name:"values"}),m(a,G,p||!I,{name:"values"})},function(t,e,n){"use strict";var l=n(17),i=n(3),c=l.aTypedArray,o=l.exportTypedArrayMethod,d=i([].join);o("join",(function(t){return d(c(this),t)}))},function(t,e,n){"use strict";var l=n(17),i=n(18),c=n(180),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return i(c,o(this),e>1?[t,arguments[1]]:[t])}))},function(t,e,n){"use strict";var l=n(17),i=n(30).map,c=n(125),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("map",(function(t){return i(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(c(t))(e)}))}))},function(t,e,n){"use strict";var l=n(17),i=n(158),c=l.aTypedArrayConstructor;(0,l.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(c(this))(e);e>t;)n[t]=arguments[t++];return n}),i)},function(t,e,n){"use strict";var l=n(17),i=n(110).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(110).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=l.aTypedArray,c=l.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,e=i(this).length,n=o(e/2),l=0;l<n;)t=this[l],this[l++]=this[--e],this[e]=t;return this}))},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(17),o=n(22),d=n(206),a=n(13),r=n(4),u=l.RangeError,s=l.Int8Array,Z=s&&s.prototype,b=Z&&Z.set,m=c.aTypedArray,h=c.exportTypedArrayMethod,p=!r((function(){var t=new Uint8ClampedArray(2);return i(b,t,{length:1,0:3},1),3!==t[1]})),I=p&&c.NATIVE_ARRAY_BUFFER_VIEWS&&r((function(){var t=new s(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));h("set",(function(t){m(this);var e=d(arguments.length>1?arguments[1]:void 0,1),n=a(t);if(p)return i(b,this,n,e);var l=this.length,c=o(n),r=0;if(c+e>l)throw u("Wrong length");for(;r<c;)this[e+r]=n[r++]}),!p||I)},function(t,e,n){"use strict";var l=n(17),i=n(125),c=n(4),o=n(60),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("slice",(function(t,e){for(var n=o(d(this),t,e),l=i(this),c=0,a=n.length,r=new l(a);a>c;)r[c]=n[c++];return r}),c((function(){new Int8Array(1).slice()})))},function(t,e,n){"use strict";var l=n(17),i=n(30).some,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("some",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(6),d=n(142),a=n(17),r=n(181),u=n(182),s=n(56),Z=n(143),b=a.aTypedArray,m=a.exportTypedArrayMethod,h=l.Uint16Array,p=h&&i(h.prototype.sort),I=!(!p||c((function(){p(new h(2),null)}))&&c((function(){p(new h(2),{})}))),G=!!p&&!c((function(){if(s)return s<74;if(r)return r<67;if(u)return!0;if(Z)return Z<602;var t,e,n=new h(516),l=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,l[t]=t-2*e+3;for(p(n,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));m("sort",(function(t){return void 0!==t&&o(t),G?p(this,t):d(b(this),function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t))}),!G||I)},function(t,e,n){"use strict";var l=n(17),i=n(37),c=n(49),o=n(125),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("subarray",(function(t,e){var n=d(this),l=n.length,a=c(t,l);return new(o(n))(n.buffer,n.byteOffset+a*n.BYTES_PER_ELEMENT,i((void 0===e?l:c(e,l))-a))}))},function(t,e,n){"use strict";var l=n(1),i=n(18),c=n(17),o=n(4),d=n(60),a=l.Int8Array,r=c.aTypedArray,u=c.exportTypedArrayMethod,s=[].toLocaleString,Z=!!a&&o((function(){s.call(new a(1))}));u("toLocaleString",(function(){return i(s,Z?d(r(this)):r(this),d(arguments))}),o((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!o((function(){a.prototype.toLocaleString.call([1,2])})))},function(t,e,n){"use strict";var l=n(17).exportTypedArrayMethod,i=n(4),c=n(1),o=n(3),d=c.Uint8Array,a=d&&d.prototype||{},r=[].toString,u=o([].join);i((function(){r.call({})}))&&(r=function(){return u(this)});var s=a.toString!=r;l("toString",r,s)},function(t,e,n){"use strict";var l,i=n(1),c=n(3),o=n(46),d=n(67),a=n(113),r=n(208),u=n(12),s=n(114),Z=n(21).enforce,b=n(168),m=!i.ActiveXObject&&"ActiveXObject"in i,h=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},p=a("WeakMap",h,r);if(b&&m){l=r.getConstructor(h,"WeakMap",!0),d.enable();var I=p.prototype,G=c(I.delete),g=c(I.has),X=c(I.get),y=c(I.set);o(I,{delete:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),G(this,t)||e.frozen.delete(t)}return G(this,t)},has:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),g(this,t)||e.frozen.has(t)}return g(this,t)},get:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new l),g(this,t)?X(this,t):e.frozen.get(t)}return X(this,t)},set:function(t,e){if(u(t)&&!s(t)){var n=Z(this);n.frozen||(n.frozen=new l),g(this,t)?y(this,t,e):n.frozen.set(t,e)}else y(this,t,e);return this}})}},function(t,e,n){n(451)},function(t,e,n){"use strict";n(113)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(208))},function(t,e,n){n(453)},function(t,e,n){n(454)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(36),o=n(32),d=n(51),a=n(132),r=n(29),u=n(28),s=n(43),Z=n(455),b=n(456),m=n(8),h=n(457),p=n(7),I=n(458),G=p("toStringTag"),g=i.Error,X=[].push,y=function(t,e){var n,l=arguments.length>2?arguments[2]:void 0,i=c(V,this);d?n=d(new g,i?o(this):V):(n=i?this:r(V),u(n,G,"Error")),void 0!==e&&u(n,"message",h(e)),I&&u(n,"stack",Z(n.stack,1)),b(n,l);var a=[];return m(t,X,{that:a}),u(n,"errors",a),n};d?d(y,g):a(y,g,{name:!0});var V=y.prototype=r(g.prototype,{constructor:s(1,y),message:s(1,""),name:s(1,"AggregateError")});l({global:!0},{AggregateError:y})},function(t,e,n){var l=n(3),i=Error,c=l("".replace),o=String(i("zxcasd").stack),d=/\n\s*at [^:]*:[^\n]*/,a=d.test(o);t.exports=function(t,e){if(a&&"string"==typeof t&&!i.prepareStackTrace)for(;e--;)t=c(t,d,"");return t}},function(t,e,n){var l=n(12),i=n(28);t.exports=function(t,e){l(e)&&"cause"in e&&i(t,"cause",e.cause)}},function(t,e,n){var l=n(14);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:l(t)}},function(t,e,n){var l=n(4),i=n(43);t.exports=!l((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},function(t,e,n){var l=n(0),i=n(59),c=Object.isFrozen,o=function(t,e){if(!c||!i(t)||!c(t))return!1;for(var n,l=0,o=t.length;l<o;)if(!("string"==typeof(n=t[l++])||e&&void 0===n))return!1;return 0!==o};l({target:"Array",stat:!0,sham:!0,forced:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var e=t.raw;return e.length===t.length&&o(e,!1)}})},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(22),d=n(16).f;l&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(22),d=n(16).f;l&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),n=o(e);return e[0==n?0:n-1]=t}}),i("lastItem"))},function(t,e,n){"use strict";var l=n(0),i=n(42),c=n(28),o=n(15),d=n(7),a=n(126),r=n(24),u=d("toStringTag"),s=function(){i(this,a)};s.prototype=a,o(a,u)||c(a,u,"AsyncIterator"),!r&&o(a,"constructor")&&a.constructor!==Object||c(a,"constructor",s),l({global:!0,forced:r},{AsyncIterator:s})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(68)((function(t,e){var n=this,l=n.iterator;return t.resolve(c(i(n.next,l,e))).then((function(t){return c(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),d=n(68)((function(t,e){var n=this;return new t((function(l,o){var d=function(){try{t.resolve(c(i(n.next,n.iterator,n.remaining?[]:e))).then((function(t){try{c(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,d()):l({done:!1,value:t.value})}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new d({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).every;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{every:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(68)((function(t,e){var n=this,l=n.filterer;return new t((function(c,d){var a=function(){try{t.resolve(o(i(n.next,n.iterator,e))).then((function(e){try{if(o(e).done)n.done=!0,c({done:!0,value:void 0});else{var i=e.value;t.resolve(l(i)).then((function(t){t?c({done:!1,value:i}):a()}),d)}}catch(t){d(t)}}),d)}catch(t){d(t)}};a()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new d({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).find;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{find:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(68),a=n(209),r=d((function(t){var e,n=this,l=n.mapper;return new t((function(d,r){var u=function(){try{t.resolve(o(i(n.next,n.iterator))).then((function(i){try{o(i).done?(n.done=!0,d({done:!0,value:void 0})):t.resolve(l(i.value)).then((function(t){try{return n.innerIterator=e=a(t),n.innerNext=c(e.next),s()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},s=function(){if(e=n.innerIterator)try{t.resolve(o(i(n.innerNext,e))).then((function(t){try{o(t).done?(n.innerIterator=n.innerNext=null,u()):d({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else u()};s()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new r({iterator:o(this),mapper:c(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).forEach;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{forEach:function(t){return i(this,t)}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),d=n(36),a=n(126),r=n(68),u=n(209),s=n(45),Z=n(61),b=n(27),m=n(7),h=n(210),p=m("asyncIterator"),I=r((function(t,e){return c(i(this.next,this.iterator,e))}),!0);l({target:"AsyncIterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=b(n,p);return l&&(e=u(n,l),d(a,e))?e:void 0===e&&(l=Z(n))?new h(s(n,l)):new I({iterator:void 0!==e?e:n})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(68)((function(t,e){var n=this,l=n.mapper;return t.resolve(o(i(n.next,n.iterator,e))).then((function(e){return o(e).done?(n.done=!0,{done:!0,value:void 0}):t.resolve(l(e.value)).then((function(t){return{done:!1,value:t}}))}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{map:function(t){return new d({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),d=n(2),a=n(11)("Promise"),r=i.TypeError;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=d(this),n=o(e.next),l=arguments.length<2,i=l?void 0:arguments[1];return o(t),new a((function(o,u){var s=function(){try{a.resolve(d(c(n,e))).then((function(e){try{if(d(e).done)l?u(r("Reduce of empty iterator with no initial value")):o(i);else{var n=e.value;l?(l=!1,i=n,s()):a.resolve(t(i,n)).then((function(t){i=t,s()}),u)}}catch(t){u(t)}}),u)}catch(t){u(t)}};s()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(99).some;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{some:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),d=n(98),a=n(68)((function(t,e){var n,l,o=this.iterator;return this.remaining--?i(this.next,o,e):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=o.return)?t.resolve(c(n,o)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{take:function(t){return new a({iterator:o(this),remaining:d(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).toArray;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{toArray:function(){return i(this,void 0,[])}})},function(t,e,n){var l=n(0),i=n(1),c=n(18),o=n(211),d=n(11),a=n(29),r=i.Object,u=function(){var t=d("Object","freeze");return t?t(a(null)):a(null)};l({global:!0,forced:!0},{compositeKey:function(){return c(o,r,arguments).get("object",u)}})},function(t,e,n){var l=n(0),i=n(211),c=n(11),o=n(18);l({global:!0,forced:!0},{compositeSymbol:function(){return 1==arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):o(i,null,arguments).get("symbol",c("Symbol"))}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(42),o=n(10),d=n(28),a=n(4),r=n(15),u=n(7),s=n(92).IteratorPrototype,Z=n(24),b=u("toStringTag"),m=i.Iterator,h=Z||!o(m)||m.prototype!==s||!a((function(){m({})})),p=function(){c(this,s)};r(s,b)||d(s,b,"Iterator"),!h&&r(s,"constructor")&&s.constructor!==Object||d(s,"constructor",p),p.prototype=s,l({global:!0,forced:h},{Iterator:p})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(69)((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),d=n(98),a=n(69)((function(t){for(var e,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,e=o(c(l,n)),this.done=!!e.done)return;if(e=o(i(l,n,t)),!(this.done=!!e.done))return e.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new a({iterator:o(this),remaining:d(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{every:function(t){return o(this),c(t),!i(this,(function(e,n){if(!t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(69),a=n(138),r=d((function(t){for(var e,n,l=this.iterator,c=this.filterer,d=this.next;;){if(e=o(i(d,l,t)),this.done=!!e.done)return;if(n=e.value,a(l,c,n))return n}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new r({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{find:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),d=n(2),a=n(61),r=n(69),u=n(107),s=i.TypeError,Z=r((function(){for(var t,e,n,l,i=this.iterator,r=this.mapper;;)try{if(l=this.innerIterator){if(!(t=d(c(this.innerNext,l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=d(c(this.next,i)),this.done=!!t.done)return;if(e=r(t.value),!(n=a(e)))throw s(".flatMap callback should return an iterable object");this.innerIterator=l=d(c(n,e)),this.innerNext=o(l.next)}catch(t){u(i,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new Z({iterator:d(this),mapper:o(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),d=n(36),a=n(92).IteratorPrototype,r=n(69),u=n(45),s=n(61),Z=r((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);l({target:"Iterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=s(n);if(l){if(e=u(n,l),d(a,e))return e}else e=n;return new Z({iterator:e})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),d=n(69),a=n(138),r=d((function(t){var e=this.iterator,n=o(i(this.next,e,t));if(!(this.done=!!n.done))return a(e,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{map:function(t){return new r({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(8),o=n(6),d=n(2),a=i.TypeError;l({target:"Iterator",proto:!0,real:!0,forced:!0},{reduce:function(t){d(this),o(t);var e=arguments.length<2,n=e?void 0:arguments[1];if(c(this,(function(l){e?(e=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),e)throw a("Reduce of empty iterator with no initial value");return n}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{some:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),d=n(69),a=n(107),r=d((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,a(e,"normal",void 0);var n=c(i(this.next,e,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{take:function(t){return new r({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2),o=[].push;l({target:"Iterator",proto:!0,real:!0,forced:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!d(n,(function(t,n,i){if(!l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(23),o=n(5),d=n(6),a=n(2),r=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){l(n,t,e)&&o(b,Z,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(3),o=n(6),d=n(45),a=n(8),r=c([].push);l({target:"Map",stat:!0,forced:!0},{groupBy:function(t,e){o(e);var n=d(t),l=new this,c=o(l.has),u=o(l.get),s=o(l.set);return a(n,(function(t){var n=e(t);i(c,l,n)?r(i(u,l,n),t):i(s,l,n,[t])}),{IS_ITERATOR:!0}),l}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(500),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return d(c(i(this)),(function(e,n,l){if(o(n,t))return l()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(8),o=n(6);l({target:"Map",stat:!0,forced:!0},{keyBy:function(t,e){var n=new this;o(e);var l=o(n.set);return c(t,(function(t){i(l,n,e(t),t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){return o(c(i(this)),(function(e,n,l){if(n===t)return l(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(23),o=n(5),d=n(6),a=n(2),r=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){o(b,Z,l(n,t,e),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(23),o=n(5),d=n(6),a=n(2),r=n(33),u=n(47),s=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(n,(function(t,n){o(b,Z,t,l(n,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(2),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(t){for(var e=c(this),n=i(e.set),l=arguments.length,d=0;d<l;)o(arguments[d++],n,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(2),o=n(6),d=n(47),a=n(8),r=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=c(this),n=d(e),l=arguments.length<2,i=l?void 0:arguments[1];if(o(t),a(n,(function(n,c){l?(l=!1,i=c):i=t(i,c,n,e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),l)throw r("Reduce of empty map with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(47),d=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n,i){if(l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(2),d=n(6),a=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var n=o(this),l=d(n.get),i=d(n.has),r=d(n.set),u=arguments.length;d(e);var s=c(i,n,t);if(!s&&u<3)throw a("Updating absent value");var Z=s?c(l,n,t):d(u>2?arguments[2]:void 0)(t,n);return c(r,n,t,e(Z,t,n)),n}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){var l=n(0),i=Math.min,c=Math.max;l({target:"Math",stat:!0,forced:!0},{clamp:function(t,e,n){return i(n,c(e,t))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,n){var l=n(0),i=180/Math.PI;l({target:"Math",stat:!0,forced:!0},{degrees:function(t){return t*i}})},function(t,e,n){var l=n(0),i=n(212),c=n(187);l({target:"Math",stat:!0,forced:!0},{fscale:function(t,e,n,l,o){return c(i(t,e,n,l,o))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{iaddh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)+(l>>>0)+((i&c|(i|c)&~(i+c>>>0))>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{imulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>16,d=l>>16,a=(o*c>>>0)+(i*c>>>16);return o*d+(a>>16)+((i*d>>>0)+(65535&a)>>16)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{isubh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)-(l>>>0)-((~i&c|~(i^c)&i-c>>>0)>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{RAD_PER_DEG:180/Math.PI})},function(t,e,n){var l=n(0),i=Math.PI/180;l({target:"Math",stat:!0,forced:!0},{radians:function(t){return t*i}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{scale:n(212)})},function(t,e,n){var l=n(0),i=n(1),c=n(2),o=n(188),d=n(77),a=n(21),r=a.set,u=a.getterFor("Seeded Random Generator"),s=i.TypeError,Z=d((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=u(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));l({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var e=c(t).seed;if(!o(e))throw s('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new Z(e)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{umulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>>16,d=l>>>16,a=(o*c>>>0)+(i*c>>>16);return o*d+(a>>>16)+((i*d>>>0)+(65535&a)>>>16)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),d=n(152),a=i.RangeError,r=i.SyntaxError,u=i.TypeError,s=/^[\da-z]+$/,Z=c("".charAt),b=c(s.exec),m=c(1..toString),h=c("".slice);l({target:"Number",stat:!0,forced:!0},{fromString:function(t,e){var n,l,i=1;if("string"!=typeof t)throw u("Invalid number representation");if(!t.length)throw r("Invalid number representation");if("-"==Z(t,0)&&(i=-1,!(t=h(t,1)).length))throw r("Invalid number representation");if((n=void 0===e?10:o(e))<2||n>36)throw a("Invalid radix");if(!b(s,t)||m(l=d(t,n),n)!==t)throw r("Invalid number representation");return i*l}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,n){n(530),n(531),n(532)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(9),o=n(66),d=n(6),a=n(10),r=n(2),u=n(12),s=n(42),Z=n(27),b=n(16).f,m=n(20),h=n(46),p=n(195),I=n(7),G=n(21),g=n(162),X=I("observable"),y=G.getterFor,V=G.set,W=y("Observable"),C=y("Subscription"),R=y("SubscriptionObserver"),f=function(t){this.observer=r(t),this.cleanup=void 0,this.subscriptionObserver=void 0};f.prototype={type:"Subscription",clean:function(){var t=this.cleanup;if(t){this.cleanup=void 0;try{t()}catch(t){p(t)}}},close:function(){if(!c){var t=this.facade,e=this.subscriptionObserver;t.closed=!0,e&&(e.closed=!0)}this.observer=void 0},isClosed:function(){return void 0===this.observer}};var S=function(t,e){var n,l=V(this,new f(t));c||(this.closed=!1);try{(n=Z(t,"start"))&&i(n,t,this)}catch(t){p(t)}if(!l.isClosed()){var o=l.subscriptionObserver=new v(l);try{var r=e(o),u=r;null!=r&&(l.cleanup=a(r.unsubscribe)?function(){u.unsubscribe()}:d(r))}catch(t){return void o.error(t)}l.isClosed()&&l.clean()}};S.prototype=h({},{unsubscribe:function(){var t=C(this);t.isClosed()||(t.close(),t.clean())}}),c&&b(S.prototype,"closed",{configurable:!0,get:function(){return C(this).isClosed()}});var v=function(t){V(this,{type:"SubscriptionObserver",subscriptionState:t}),c||(this.closed=!1)};v.prototype=h({},{next:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;try{var l=Z(n,"next");l&&i(l,n,t)}catch(t){p(t)}}},error:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;e.close();try{var l=Z(n,"error");l?i(l,n,t):p(t)}catch(t){p(t)}e.clean()}},complete:function(){var t=R(this).subscriptionState;if(!t.isClosed()){var e=t.observer;t.close();try{var n=Z(e,"complete");n&&i(n,e)}catch(t){p(t)}t.clean()}}}),c&&b(v.prototype,"closed",{configurable:!0,get:function(){return R(this).subscriptionState.isClosed()}});var Y=function(t){s(this,K),V(this,{type:"Observable",subscriber:d(t)})},K=Y.prototype;h(K,{subscribe:function(t){var e=arguments.length;return new S(a(t)?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:u(t)?t:{},W(this).subscriber)}}),m(K,X,(function(){return this})),l({global:!0,forced:g},{Observable:Y}),o("Observable")},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(2),d=n(65),a=n(45),r=n(27),u=n(8),s=n(7),Z=n(162),b=s("observable");l({target:"Observable",stat:!0,forced:Z},{from:function(t){var e=d(this)?this:i("Observable"),n=r(o(t),b);if(n){var l=o(c(n,t));return l.constructor===e?l:new e((function(t){return l.subscribe(t)}))}var s=a(t);return new e((function(t){u(s,(function(e,n){if(t.next(e),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(65),o=n(162),d=i("Array");l({target:"Observable",stat:!0,forced:o},{of:function(){for(var t=c(this)?this:i("Observable"),e=arguments.length,n=d(e),l=0;l<e;)n[l]=arguments[l++];return new t((function(t){for(var l=0;l<e;l++)if(t.next(n[l]),t.closed)return;t.complete()}))}})},function(t,e,n){n(534)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(11),d=n(62),a=n(80),r=n(8);l({target:"Promise",stat:!0},{any:function(t){var e=this,n=o("AggregateError"),l=d.f(e),u=l.resolve,s=l.reject,Z=a((function(){var l=c(e.resolve),o=[],d=0,a=1,Z=!1;r(t,(function(t){var c=d++,r=!1;a++,i(l,e,t).then((function(t){r||Z||(Z=!0,u(t))}),(function(t){r||Z||(r=!0,o[c]=t,--a||s(new n(o,"No one promise resolved")))}))})),--a||s(new n(o,"No one promise resolved"))}));return Z.error&&s(Z.value),l.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(62),c=n(80);l({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=i.f(this),n=c(t);return(n.error?e.reject:e.resolve)(n.value),e.promise}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.set;l({target:"Reflect",stat:!0},{defineMetadata:function(t,e,n){var l=arguments.length<4?void 0:o(arguments[3]);d(t,e,c(n),l)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.getMap,a=i.store;l({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var n=arguments.length<3?void 0:o(arguments[2]),l=d(c(e),n,!1);if(void 0===l||!l.delete(t))return!1;if(l.size)return!0;var i=a.get(e);return i.delete(n),!!i.size||a.delete(e)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=n(32),d=i.has,a=i.get,r=i.toKey,u=function(t,e,n){if(d(t,e,n))return a(t,e,n);var l=o(e);return null!==l?u(t,l,n):void 0};l({target:"Reflect",stat:!0},{getMetadata:function(t,e){var n=arguments.length<3?void 0:r(arguments[2]);return u(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(3),c=n(53),o=n(2),d=n(32),a=i(n(540)),r=i([].concat),u=c.keys,s=c.toKey,Z=function(t,e){var n=u(t,e),l=d(t);if(null===l)return n;var i=Z(l,e);return i.length?n.length?a(r(n,i)):i:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:s(arguments[1]);return Z(o(t),e)}})},function(t,e,n){"use strict";var l=n(11),i=n(3),c=n(6),o=n(22),d=n(13),a=n(76),r=l("Map"),u=r.prototype,s=i(u.forEach),Z=i(u.has),b=i(u.set),m=i([].push);t.exports=function(t){var e,n,l,i=d(this),u=o(i),h=a(i,0),p=new r,I=null!=t?c(t):function(t){return t};for(e=0;e<u;e++)l=I(n=i[e]),Z(p,l)||b(p,l,n);return s(p,(function(t){m(h,t)})),h}},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.get,d=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.keys,d=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:d(arguments[1]);return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=n(32),d=i.has,a=i.toKey,r=function(t,e,n){if(d(t,e,n))return!0;var l=o(e);return null!==l&&r(t,l,n)};l({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var n=arguments.length<3?void 0:a(arguments[2]);return r(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.has,d=i.toKey;l({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(53),c=n(2),o=i.toKey,d=i.set;l({target:"Reflect",stat:!0},{metadata:function(t,e){return function(n,l){d(t,e,c(n),o(l))}}})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),a=n(33),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){var e=d(this),n=new(a(e,i("Set")))(e),l=o(n.delete);return r(t,(function(t){c(l,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!d(n,(function(t,n){if(!l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),a=n(23),r=n(33),u=n(70),s=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=d(this),n=u(e),l=a(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Set"))),b=o(Z.add);return s(n,(function(t){l(t,t,e)&&c(b,Z,t)}),{IS_ITERATOR:!0}),Z}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n){if(l(t,t,e))return n(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),a=n(33),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){var e=d(this),n=new(a(e,i("Set"))),l=o(e.has),u=o(n.add);return r(t,(function(t){c(l,e,t)&&c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){var e=o(this),n=c(e.has);return!d(t,(function(t,l){if(!0===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(10),a=n(2),r=n(45),u=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){var e=r(this),n=a(t),l=n.has;return d(l)||(n=new(i("Set"))(t),l=o(n.has)),!u(e,(function(t,e){if(!1===c(l,n,t))return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){var e=o(this),n=c(e.has);return!d(t,(function(t,l){if(!1===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(2),o=n(14),d=n(70),a=n(8),r=i([].join),u=[].push;l({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=c(this),n=d(e),l=void 0===t?",":o(t),i=[];return a(n,u,{that:i,IS_ITERATOR:!0}),r(i,l)}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(23),o=n(5),d=n(6),a=n(2),r=n(33),u=n(70),s=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Set"))),b=d(Z.add);return s(n,(function(t){o(b,Z,l(t,t,e))}),{IS_ITERATOR:!0}),Z}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(6),o=n(2),d=n(70),a=n(8),r=i.TypeError;l({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=o(this),n=d(e),l=arguments.length<2,i=l?void 0:arguments[1];if(c(t),a(n,(function(n){l?(l=!1,i=n):i=t(i,n,n,e)}),{IS_ITERATOR:!0}),l)throw r("Reduce of empty set with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(23),o=n(70),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return d(n,(function(t,n){if(l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),d=n(2),a=n(33),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){var e=d(this),n=new(a(e,i("Set")))(e),l=o(n.delete),u=o(n.add);return r(t,(function(t){c(l,n,t)||c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(6),o=n(2),d=n(33),a=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){var e=o(this),n=new(d(e,i("Set")))(e);return a(t,c(n.add),{that:n}),n}})},function(t,e,n){"use strict";var l=n(0),i=n(82).charAt,c=n(26),o=n(35),d=n(14);l({target:"String",proto:!0,forced:!0},{at:function(t){var e=d(c(this)),n=e.length,l=o(t),a=l>=0?l:n+l;return a<0||a>=n?void 0:i(e,a)}})},function(t,e,n){"use strict";var l=n(0),i=n(77),c=n(26),o=n(14),d=n(21),a=n(82),r=a.codeAt,u=a.charAt,s=d.set,Z=d.getterFor("String Iterator"),b=i((function(t){s(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=Z(this),n=e.string,l=e.index;return l>=n.length?{value:void 0,done:!0}:(t=u(n,l),e.index+=t.length,{value:{codePoint:r(t,0),position:l},done:!1})}));l({target:"String",proto:!0,forced:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,n){n(567)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),d=n(26),a=n(10),r=n(96),u=n(14),s=n(27),Z=n(120),b=n(203),m=n(7),h=n(24),p=m("replace"),I=i.TypeError,G=o("".indexOf),g=o("".replace),X=o("".slice),y=Math.max,V=function(t,e,n){return n>t.length?-1:""===e?n:G(t,e,n)};l({target:"String",proto:!0},{replaceAll:function(t,e){var n,l,i,o,m,W,C,R,f,S=d(this),v=0,Y=0,K="";if(null!=t){if((n=r(t))&&(l=u(d(Z(t))),!~G(l,"g")))throw I("`.replaceAll` does not allow non-global regexes");if(i=s(t,p))return c(i,t,S,e);if(h&&n)return g(u(S),t,e)}for(o=u(S),m=u(t),(W=a(e))||(e=u(e)),C=m.length,R=y(1,C),v=V(o,m,0);-1!==v;)f=W?u(e(m,v,o)):b(m,o,v,[],void 0,e),K+=X(o,Y,v)+f,Y=v+C,v=V(o,m,v+R);return Y<o.length&&(K+=X(o,Y)),K}})},function(t,e,n){n(25)("asyncDispose")},function(t,e,n){n(25)("dispose")},function(t,e,n){n(25)("observable")},function(t,e,n){n(25)("patternMatch")},function(t,e,n){n(25)("replaceAll")},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(177),d=n(28),a=function(t){if(t&&t.forEach!==o)try{d(t,"forEach",o)}catch(e){t.forEach=o}};for(var r in i)i[r]&&a(l[r]&&l[r].prototype);a(c)},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(109),d=n(28),a=n(7),r=a("iterator"),u=a("toStringTag"),s=o.values,Z=function(t,e){if(t){if(t[r]!==s)try{d(t,r,s)}catch(e){t[r]=s}if(t[u]||d(t,u,e),i[e])for(var n in o)if(t[n]!==o[n])try{d(t,n,o[n])}catch(e){t[n]=o[n]}}};for(var b in i)Z(l[b]&&l[b].prototype,b);Z(c,"DOMTokenList")},function(t,e,n){n(584),n(585)},function(t,e,n){var l=n(0),i=n(1),c=n(119).clear;l({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==c},{clearImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(119).set;l({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==c},{setImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(194),o=n(6),d=n(94),a=n(78),r=i.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){d(arguments.length,1),o(t);var e=a&&r.domain;c(e?e.bind(t):t)}})},function(t,e,n){n(588),n(589)},function(t,e,n){var l=n(0),i=n(1),c=n(216).setInterval;l({global:!0,bind:!0,forced:i.setInterval!==c},{setInterval:c})},function(t,e,n){var l=n(0),i=n(1),c=n(216).setTimeout;l({global:!0,bind:!0,forced:i.setTimeout!==c},{setTimeout:c})},function(t,e,n){n(591)},function(t,e,n){"use strict";n(201);var l,i=n(0),c=n(9),o=n(217),d=n(1),a=n(23),r=n(3),u=n(106).f,s=n(20),Z=n(42),b=n(15),m=n(190),h=n(178),p=n(89),I=n(82).codeAt,G=n(592),g=n(14),X=n(41),y=n(94),V=n(218),W=n(21),C=W.set,R=W.getterFor("URL"),f=V.URLSearchParams,S=V.getState,v=d.URL,Y=d.TypeError,K=d.parseInt,N=Math.floor,J=Math.pow,H=r("".charAt),L=r(/./.exec),U=r([].join),k=r(1..toString),B=r([].pop),F=r([].push),x=r("".replace),T=r([].shift),A=r("".split),z=r("".slice),w=r("".toLowerCase),Q=r([].unshift),P=/[a-z]/i,j=/[\d+-.a-z]/i,M=/\d/,E=/^0x/i,D=/^[0-7]+$/,O=/^\d+$/,_=/^[\da-f]+$/i,q=/[\0\t\n\r #%/:<>?@[\\\]^|]/,$=/[\0\t\n\r #/:<>?@[\\\]^|]/,tt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,et=/[\t\n\r]/g,nt=function(t){var e,n,l,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)Q(e,t%256),t=N(t/256);return U(e,".")}if("object"==typeof t){for(e="",l=function(t){for(var e=null,n=1,l=null,i=0,c=0;c<8;c++)0!==t[c]?(i>n&&(e=l,n=i),l=null,i=0):(null===l&&(l=c),++i);return i>n&&(e=l,n=i),e}(t),n=0;n<8;n++)i&&0===t[n]||(i&&(i=!1),l===n?(e+=n?":":"::",i=!0):(e+=k(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},lt={},it=m({},lt,{" ":1,'"':1,"<":1,">":1,"`":1}),ct=m({},it,{"#":1,"?":1,"{":1,"}":1}),ot=m({},ct,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),dt=function(t,e){var n=I(t,0);return n>32&&n<127&&!b(e,t)?t:encodeURIComponent(t)},at={ftp:21,file:null,http:80,https:443,ws:80,wss:443},rt=function(t,e){var n;return 2==t.length&&L(P,H(t,0))&&(":"==(n=H(t,1))||!e&&"|"==n)},ut=function(t){var e;return t.length>1&&rt(z(t,0,2))&&(2==t.length||"/"===(e=H(t,2))||"\\"===e||"?"===e||"#"===e)},st=function(t){return"."===t||"%2e"===w(t)},Zt={},bt={},mt={},ht={},pt={},It={},Gt={},gt={},Xt={},yt={},Vt={},Wt={},Ct={},Rt={},ft={},St={},vt={},Yt={},Kt={},Nt={},Jt={},Ht=function(t,e,n){var l,i,c,o=g(t);if(e){if(i=this.parse(o))throw Y(i);this.searchParams=null}else{if(void 0!==n&&(l=new Ht(n,!0)),i=this.parse(o,null,l))throw Y(i);(c=S(new f)).bindURL(this),this.searchParams=c}};Ht.prototype={type:"URL",parse:function(t,e,n){var i,c,o,d,a,r=this,u=e||Zt,s=0,Z="",m=!1,I=!1,G=!1;for(t=g(t),e||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,t=x(t,tt,"")),t=x(t,et,""),i=h(t);s<=i.length;){switch(c=i[s],u){case Zt:if(!c||!L(P,c)){if(e)return"Invalid scheme";u=mt;continue}Z+=w(c),u=bt;break;case bt:if(c&&(L(j,c)||"+"==c||"-"==c||"."==c))Z+=w(c);else{if(":"!=c){if(e)return"Invalid scheme";Z="",u=mt,s=0;continue}if(e&&(r.isSpecial()!=b(at,Z)||"file"==Z&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=Z,e)return void(r.isSpecial()&&at[r.scheme]==r.port&&(r.port=null));Z="","file"==r.scheme?u=Rt:r.isSpecial()&&n&&n.scheme==r.scheme?u=ht:r.isSpecial()?u=gt:"/"==i[s+1]?(u=pt,s++):(r.cannotBeABaseURL=!0,F(r.path,""),u=Kt)}break;case mt:if(!n||n.cannotBeABaseURL&&"#"!=c)return"Invalid scheme";if(n.cannotBeABaseURL&&"#"==c){r.scheme=n.scheme,r.path=p(n.path),r.query=n.query,r.fragment="",r.cannotBeABaseURL=!0,u=Jt;break}u="file"==n.scheme?Rt:It;continue;case ht:if("/"!=c||"/"!=i[s+1]){u=It;continue}u=Xt,s++;break;case pt:if("/"==c){u=yt;break}u=Yt;continue;case It:if(r.scheme=n.scheme,c==l)r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=p(n.path),r.query=n.query;else if("/"==c||"\\"==c&&r.isSpecial())u=Gt;else if("?"==c)r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=p(n.path),r.query="",u=Nt;else{if("#"!=c){r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=p(n.path),r.path.length--,u=Yt;continue}r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,r.path=p(n.path),r.query=n.query,r.fragment="",u=Jt}break;case Gt:if(!r.isSpecial()||"/"!=c&&"\\"!=c){if("/"!=c){r.username=n.username,r.password=n.password,r.host=n.host,r.port=n.port,u=Yt;continue}u=yt}else u=Xt;break;case gt:if(u=Xt,"/"!=c||"/"!=H(Z,s+1))continue;s++;break;case Xt:if("/"!=c&&"\\"!=c){u=yt;continue}break;case yt:if("@"==c){m&&(Z="%40"+Z),m=!0,o=h(Z);for(var X=0;X<o.length;X++){var y=o[X];if(":"!=y||G){var V=dt(y,ot);G?r.password+=V:r.username+=V}else G=!0}Z=""}else if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()){if(m&&""==Z)return"Invalid authority";s-=h(Z).length+1,Z="",u=Vt}else Z+=c;break;case Vt:case Wt:if(e&&"file"==r.scheme){u=St;continue}if(":"!=c||I){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()){if(r.isSpecial()&&""==Z)return"Invalid host";if(e&&""==Z&&(r.includesCredentials()||null!==r.port))return;if(d=r.parseHost(Z))return d;if(Z="",u=vt,e)return;continue}"["==c?I=!0:"]"==c&&(I=!1),Z+=c}else{if(""==Z)return"Invalid host";if(d=r.parseHost(Z))return d;if(Z="",u=Ct,e==Wt)return}break;case Ct:if(!L(M,c)){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()||e){if(""!=Z){var W=K(Z,10);if(W>65535)return"Invalid port";r.port=r.isSpecial()&&W===at[r.scheme]?null:W,Z=""}if(e)return;u=vt;continue}return"Invalid port"}Z+=c;break;case Rt:if(r.scheme="file","/"==c||"\\"==c)u=ft;else{if(!n||"file"!=n.scheme){u=Yt;continue}if(c==l)r.host=n.host,r.path=p(n.path),r.query=n.query;else if("?"==c)r.host=n.host,r.path=p(n.path),r.query="",u=Nt;else{if("#"!=c){ut(U(p(i,s),""))||(r.host=n.host,r.path=p(n.path),r.shortenPath()),u=Yt;continue}r.host=n.host,r.path=p(n.path),r.query=n.query,r.fragment="",u=Jt}}break;case ft:if("/"==c||"\\"==c){u=St;break}n&&"file"==n.scheme&&!ut(U(p(i,s),""))&&(rt(n.path[0],!0)?F(r.path,n.path[0]):r.host=n.host),u=Yt;continue;case St:if(c==l||"/"==c||"\\"==c||"?"==c||"#"==c){if(!e&&rt(Z))u=Yt;else if(""==Z){if(r.host="",e)return;u=vt}else{if(d=r.parseHost(Z))return d;if("localhost"==r.host&&(r.host=""),e)return;Z="",u=vt}continue}Z+=c;break;case vt:if(r.isSpecial()){if(u=Yt,"/"!=c&&"\\"!=c)continue}else if(e||"?"!=c)if(e||"#"!=c){if(c!=l&&(u=Yt,"/"!=c))continue}else r.fragment="",u=Jt;else r.query="",u=Nt;break;case Yt:if(c==l||"/"==c||"\\"==c&&r.isSpecial()||!e&&("?"==c||"#"==c)){if(".."===(a=w(a=Z))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==c||"\\"==c&&r.isSpecial()||F(r.path,"")):st(Z)?"/"==c||"\\"==c&&r.isSpecial()||F(r.path,""):("file"==r.scheme&&!r.path.length&&rt(Z)&&(r.host&&(r.host=""),Z=H(Z,0)+":"),F(r.path,Z)),Z="","file"==r.scheme&&(c==l||"?"==c||"#"==c))for(;r.path.length>1&&""===r.path[0];)T(r.path);"?"==c?(r.query="",u=Nt):"#"==c&&(r.fragment="",u=Jt)}else Z+=dt(c,ct);break;case Kt:"?"==c?(r.query="",u=Nt):"#"==c?(r.fragment="",u=Jt):c!=l&&(r.path[0]+=dt(c,lt));break;case Nt:e||"#"!=c?c!=l&&("'"==c&&r.isSpecial()?r.query+="%27":r.query+="#"==c?"%23":dt(c,lt)):(r.fragment="",u=Jt);break;case Jt:c!=l&&(r.fragment+=dt(c,it))}s++}},parseHost:function(t){var e,n,l;if("["==H(t,0)){if("]"!=H(t,t.length-1))return"Invalid host";if(!(e=function(t){var e,n,l,i,c,o,d,a=[0,0,0,0,0,0,0,0],r=0,u=null,s=0,Z=function(){return H(t,s)};if(":"==Z()){if(":"!=H(t,1))return;s+=2,u=++r}for(;Z();){if(8==r)return;if(":"!=Z()){for(e=n=0;n<4&&L(_,Z());)e=16*e+K(Z(),16),s++,n++;if("."==Z()){if(0==n)return;if(s-=n,r>6)return;for(l=0;Z();){if(i=null,l>0){if(!("."==Z()&&l<4))return;s++}if(!L(M,Z()))return;for(;L(M,Z());){if(c=K(Z(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;s++}a[r]=256*a[r]+i,2!=++l&&4!=l||r++}if(4!=l)return;break}if(":"==Z()){if(s++,!Z())return}else if(Z())return;a[r++]=e}else{if(null!==u)return;s++,u=++r}}if(null!==u)for(o=r-u,r=7;0!=r&&o>0;)d=a[r],a[r--]=a[u+o-1],a[u+--o]=d;else if(8!=r)return;return a}(z(t,1,-1))))return"Invalid host";this.host=e}else if(this.isSpecial()){if(t=G(t),L(q,t))return"Invalid host";if(null===(e=function(t){var e,n,l,i,c,o,d,a=A(t,".");if(a.length&&""==a[a.length-1]&&a.length--,(e=a.length)>4)return t;for(n=[],l=0;l<e;l++){if(""==(i=a[l]))return t;if(c=10,i.length>1&&"0"==H(i,0)&&(c=L(E,i)?16:8,i=z(i,8==c?1:2)),""===i)o=0;else{if(!L(10==c?O:8==c?D:_,i))return t;o=K(i,c)}F(n,o)}for(l=0;l<e;l++)if(o=n[l],l==e-1){if(o>=J(256,5-e))return null}else if(o>255)return null;for(d=B(n),l=0;l<n.length;l++)d+=n[l]*J(256,3-l);return d}(t)))return"Invalid host";this.host=e}else{if(L($,t))return"Invalid host";for(e="",n=h(t),l=0;l<n.length;l++)e+=dt(n[l],lt);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return b(at,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&rt(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,n=t.username,l=t.password,i=t.host,c=t.port,o=t.path,d=t.query,a=t.fragment,r=e+":";return null!==i?(r+="//",t.includesCredentials()&&(r+=n+(l?":"+l:"")+"@"),r+=nt(i),null!==c&&(r+=":"+c)):"file"==e&&(r+="//"),r+=t.cannotBeABaseURL?o[0]:o.length?"/"+U(o,"/"):"",null!==d&&(r+="?"+d),null!==a&&(r+="#"+a),r},setHref:function(t){var e=this.parse(t);if(e)throw Y(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new Lt(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+nt(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(g(t)+":",Zt)},getUsername:function(){return this.username},setUsername:function(t){var e=h(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<e.length;n++)this.username+=dt(e[n],ot)}},getPassword:function(){return this.password},setPassword:function(t){var e=h(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<e.length;n++)this.password+=dt(e[n],ot)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?nt(t):nt(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,Vt)},getHostname:function(){var t=this.host;return null===t?"":nt(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Wt)},getPort:function(){var t=this.port;return null===t?"":g(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=g(t))?this.port=null:this.parse(t,Ct))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+U(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,vt))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=g(t))?this.query=null:("?"==H(t,0)&&(t=z(t,1)),this.query="",this.parse(t,Nt)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=g(t))?("#"==H(t,0)&&(t=z(t,1)),this.fragment="",this.parse(t,Jt)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Lt=function(t){var e=Z(this,Ut),n=y(arguments.length,1)>1?arguments[1]:void 0,l=C(e,new Ht(t,!1,n));c||(e.href=l.serialize(),e.origin=l.getOrigin(),e.protocol=l.getProtocol(),e.username=l.getUsername(),e.password=l.getPassword(),e.host=l.getHost(),e.hostname=l.getHostname(),e.port=l.getPort(),e.pathname=l.getPathname(),e.search=l.getSearch(),e.searchParams=l.getSearchParams(),e.hash=l.getHash())},Ut=Lt.prototype,kt=function(t,e){return{get:function(){return R(this)[t]()},set:e&&function(t){return R(this)[e](t)},configurable:!0,enumerable:!0}};if(c&&u(Ut,{href:kt("serialize","setHref"),origin:kt("getOrigin"),protocol:kt("getProtocol","setProtocol"),username:kt("getUsername","setUsername"),password:kt("getPassword","setPassword"),host:kt("getHost","setHost"),hostname:kt("getHostname","setHostname"),port:kt("getPort","setPort"),pathname:kt("getPathname","setPathname"),search:kt("getSearch","setSearch"),searchParams:kt("getSearchParams"),hash:kt("getHash","setHash")}),s(Ut,"toJSON",(function(){return R(this).serialize()}),{enumerable:!0}),s(Ut,"toString",(function(){return R(this).serialize()}),{enumerable:!0}),v){var Bt=v.createObjectURL,Ft=v.revokeObjectURL;Bt&&s(Lt,"createObjectURL",a(Bt,v)),Ft&&s(Lt,"revokeObjectURL",a(Ft,v))}X(Lt,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Lt})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,d="Overflow: input needs wider integers to process",a=l.RangeError,r=i(o.exec),u=Math.floor,s=String.fromCharCode,Z=i("".charCodeAt),b=i([].join),m=i([].push),h=i("".replace),p=i("".split),I=i("".toLowerCase),G=function(t){return t+22+75*(t<26)},g=function(t,e,n){var l=0;for(t=n?u(t/700):t>>1,t+=u(t/e);t>455;)t=u(t/35),l+=36;return u(l+36*t/(t+38))},X=function(t){var e,n,l=[],i=(t=function(t){for(var e=[],n=0,l=t.length;n<l;){var i=Z(t,n++);if(i>=55296&&i<=56319&&n<l){var c=Z(t,n++);56320==(64512&c)?m(e,((1023&i)<<10)+(1023&c)+65536):(m(e,i),n--)}else m(e,i)}return e}(t)).length,c=128,o=0,r=72;for(e=0;e<t.length;e++)(n=t[e])<128&&m(l,s(n));var h=l.length,p=h;for(h&&m(l,"-");p<i;){var I=2147483647;for(e=0;e<t.length;e++)(n=t[e])>=c&&n<I&&(I=n);var X=p+1;if(I-c>u((2147483647-o)/X))throw a(d);for(o+=(I-c)*X,c=I,e=0;e<t.length;e++){if((n=t[e])<c&&++o>2147483647)throw a(d);if(n==c){for(var y=o,V=36;;){var W=V<=r?1:V>=r+26?26:V-r;if(y<W)break;var C=y-W,R=36-W;m(l,s(G(W+C%R))),y=u(C/R),V+=36}m(l,s(G(y))),r=g(o,X,p==h),o=0,p++}}o++,c++}return b(l,"")};t.exports=function(t){var e,n,l=[],i=p(h(I(t),o,"."),".");for(e=0;e<i.length;e++)n=i[e],m(l,r(c,n)?"xn--"+X(n):n);return b(l,".")}},function(t,e,n){"use strict";var l=n(0),i=n(5);l({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},function(t,e,n){n(218)},function(t,e,n){var l=function(t){"use strict";var e=Object.prototype,n=e.hasOwnProperty,l="function"==typeof Symbol?Symbol:{},i=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",o=l.toStringTag||"@@toStringTag";function d(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,n){return t[e]=n}}function a(t,e,n,l){var i=e&&e.prototype instanceof s?e:s,c=Object.create(i.prototype),o=new W(l||[]);return c._invoke=function(t,e,n){var l="suspendedStart";return function(i,c){if("executing"===l)throw new Error("Generator is already running");if("completed"===l){if("throw"===i)throw c;return R()}for(n.method=i,n.arg=c;;){var o=n.delegate;if(o){var d=X(o,n);if(d){if(d===u)continue;return d}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===l)throw l="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);l="executing";var a=r(t,e,n);if("normal"===a.type){if(l=n.done?"completed":"suspendedYield",a.arg===u)continue;return{value:a.arg,done:n.done}}"throw"===a.type&&(l="completed",n.method="throw",n.arg=a.arg)}}}(t,n,o),c}function r(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=a;var u={};function s(){}function Z(){}function b(){}var m={};d(m,i,(function(){return this}));var h=Object.getPrototypeOf,p=h&&h(h(C([])));p&&p!==e&&n.call(p,i)&&(m=p);var I=b.prototype=s.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function g(t,e){var l;this._invoke=function(i,c){function o(){return new e((function(l,o){!function l(i,c,o,d){var a=r(t[i],t,c);if("throw"!==a.type){var u=a.arg,s=u.value;return s&&"object"==typeof s&&n.call(s,"__await")?e.resolve(s.__await).then((function(t){l("next",t,o,d)}),(function(t){l("throw",t,o,d)})):e.resolve(s).then((function(t){u.value=t,o(u)}),(function(t){return l("throw",t,o,d)}))}d(a.arg)}(i,c,l,o)}))}return l=l?l.then(o,o):o()}}function X(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,X(t,e),"throw"===e.method))return u;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var l=r(n,t.iterator,e.arg);if("throw"===l.type)return e.method="throw",e.arg=l.arg,e.delegate=null,u;var i=l.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,u):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,u)}function y(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function V(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(y,this),this.reset(!0)}function C(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var l=-1,c=function e(){for(;++l<t.length;)if(n.call(t,l))return e.value=t[l],e.done=!1,e;return e.value=void 0,e.done=!0,e};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return Z.prototype=b,d(I,"constructor",b),d(b,"constructor",Z),Z.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===Z||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(I),t},t.awrap=function(t){return{__await:t}},G(g.prototype),d(g.prototype,c,(function(){return this})),t.AsyncIterator=g,t.async=function(e,n,l,i,c){void 0===c&&(c=Promise);var o=new g(a(e,n,l,i),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(I),d(I,o,"Generator"),d(I,i,(function(){return this})),d(I,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var l=e.pop();if(l in t)return n.value=l,n.done=!1,n}return n.done=!0,n}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function l(n,l){return o.type="throw",o.arg=t,e.next=n,l&&(e.method="next",e.arg=void 0),!!l}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],o=c.completion;if("root"===c.tryLoc)return l("end");if(c.tryLoc<=this.prev){var d=n.call(c,"catchLoc"),a=n.call(c,"finallyLoc");if(d&&a){if(this.prev<c.catchLoc)return l(c.catchLoc,!0);if(this.prev<c.finallyLoc)return l(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return l(c.catchLoc,!0)}else{if(!a)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return l(c.finallyLoc)}}}},abrupt:function(t,e){for(var l=this.tryEntries.length-1;l>=0;--l){var i=this.tryEntries[l];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var c=i;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=e,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),u},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),u}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var l=n.completion;if("throw"===l.type){var i=l.arg;V(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:C(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=l}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=l:Function("r","regeneratorRuntime = r")(l)}},function(t,e,n){"use strict";n.r(e),n.d(e,"AUTHORIZATION_CODE",(function(){return l.a})),n.d(e,"AsgardeoAuthClient",(function(){return l.b})),n.d(e,"AsgardeoAuthException",(function(){return l.c})),n.d(e,"AsgardeoSPAClient",(function(){return l.d})),n.d(e,"AuthenticationHelper",(function(){return l.e})),n.d(e,"AuthenticationUtils",(function(){return l.f})),n.d(e,"CLIENT_ID_TAG",(function(){return l.g})),n.d(e,"CLIENT_SECRET_TAG",(function(){return l.h})),n.d(e,"CryptoHelper",(function(){return l.i})),n.d(e,"DataLayer",(function(){return l.j})),n.d(e,"Hooks",(function(){return l.k})),n.d(e,"MainThreadClient",(function(){return l.l})),n.d(e,"OIDC_SCOPE",(function(){return l.m})),n.d(e,"PKCE_CODE_VERIFIER",(function(){return l.n})),n.d(e,"PKCE_SEPARATOR",(function(){return l.o})),n.d(e,"REFRESH_TOKEN_TIMER",(function(){return l.p})),n.d(e,"ResponseMode",(function(){return l.q})),n.d(e,"SCOPE_TAG",(function(){return l.r})),n.d(e,"SESSION_STATE",(function(){return l.s})),n.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.t})),n.d(e,"SIGN_OUT_URL",(function(){return l.u})),n.d(e,"SPAHelper",(function(){return l.v})),n.d(e,"SPAUtils",(function(){return l.w})),n.d(e,"STATE",(function(){return l.x})),n.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return l.y})),n.d(e,"Storage",(function(){return l.z})),n.d(e,"Stores",(function(){return l.A})),n.d(e,"TOKEN_TAG",(function(){return l.B})),n.d(e,"USERNAME_TAG",(function(){return l.C})),n.d(e,"WebWorkerClass",(function(){return l.D})),n.d(e,"WebWorkerClient",(function(){return l.E})),n.d(e,"workerReceiver",(function(){return l.F})),n.d(e,"AuthProvider",(function(){return W})),n.d(e,"useAuthContext",(function(){return C})),n.d(e,"SecureRoute",(function(){return Y})),n.d(e,"AuthenticatedComponent",(function(){return K})),n.d(e,"SecureApp",(function(){return J}));n(220),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(109),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(271),n(272),n(273),n(275),n(276),n(278),n(279),n(281),n(282),n(283),n(284),n(285),n(174),n(286),n(147),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(344),n(345),n(346),n(347),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(154),n(375),n(376),n(377),n(378),n(379),n(381),n(382),n(383),n(384),n(201),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(398),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),n(159),n(450),n(452),n(459),n(460),n(461),n(462),n(463),n(464),n(465),n(466),n(467),n(468),n(469),n(470),n(471),n(472),n(473),n(474),n(475),n(476),n(477),n(478),n(479),n(480),n(481),n(482),n(483),n(484),n(485),n(486),n(487),n(488),n(489),n(490),n(491),n(492),n(493),n(494),n(495),n(496),n(497),n(498),n(499),n(501),n(502),n(503),n(504),n(505),n(506),n(507),n(508),n(509),n(510),n(511),n(512),n(513),n(514),n(515),n(516),n(517),n(518),n(519),n(520),n(521),n(522),n(523),n(524),n(525),n(526),n(527),n(528),n(529),n(533),n(535),n(536),n(537),n(538),n(539),n(541),n(542),n(543),n(544),n(545),n(546),n(547),n(548),n(549),n(550),n(551),n(552),n(553),n(554),n(555),n(556),n(557),n(558),n(559),n(560),n(561),n(562),n(563),n(564),n(565),n(566),n(568),n(569),n(570),n(571),n(572),n(573),n(574),n(575),n(576),n(577),n(578),n(579),n(580),n(581),n(582),n(583),n(586),n(587),n(590),n(593),n(594),n(595);var l=n(54),i=n(19),c=n.n(i);function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function d(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function a(t,e,n,l,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void n(t)}d.done?e(a):Promise.resolve(a).then(l,i)}function r(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){a(c,l,i,o,d,"next",t)}function d(t){a(c,l,i,o,d,"throw",t)}o(void 0)}))}}function u(t,e){for(var n=0;n<e.length;n++){var l=e[n];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(t,l.key,l)}}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Z=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"_authState",t.DEFAULT_STATE),s(this,"_client",void 0),this._client=null!=e?e:l.d.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var e,n,i,c,o,a,Z,b,m,h,p,I,G,g,X,y,V,W,C,R,f;return e=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(f=r(regeneratorRuntime.mark((function t(e,n,l,i,c,o,a){var u=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(l,i,c,o).then(function(){var t=r(regeneratorRuntime.mark((function t(l){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(l){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,u._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}i={allowedScopes:l.allowedScopes,displayName:l.displayName,email:l.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:l.sub,username:l.username},u.updateState(i),e(d(d({},n),i)),a&&a(l);case 9:return t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e,n,l,i,c,o){return f.apply(this,arguments)})},{key:"signOut",value:function(t,e,n){return this._client.signOut().then((function(t){return n&&n(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(R=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return R.apply(this,arguments)})},{key:"httpRequest",value:(C=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return C.apply(this,arguments)})},{key:"httpRequestAll",value:(W=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return W.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,e,n){var l=this;return this._client.requestCustomGrant(t).then((function(i){if(i)return t.returnsSession&&(l.updateState(d(d(d({},l.getState()),i),{},{isAuthenticated:!0,isLoading:!1})),n(d(d({},i),{},{isAuthenticated:!0,isLoading:!1}))),e&&e(i),i})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(V=r(regeneratorRuntime.mark((function e(n){var l=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._client.revokeAccessToken().then((function(){return l.updateState(d(d({},t.DEFAULT_STATE),{},{isLoading:!1})),n(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e,this)}))),function(t){return V.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(X=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return X.apply(this,arguments)})},{key:"getDecodedIDToken",value:(g=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return g.apply(this,arguments)})},{key:"getDecodedIDPIDToken",value:(G=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getIDToken",value:(I=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(p=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDPAccessToken",value:(h=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDPAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(Z=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return Z.apply(this,arguments)})},{key:"disableHttpHandler",value:(a=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"updateConfig",value:(o=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,e,n){return t===l.k.CustomGrant?this._client.on(t,e,n):this._client.on(t,e)}},{key:"trySignInSilently",value:(c=r(regeneratorRuntime.mark((function t(e,n){var l=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=r(regeneratorRuntime.mark((function t(i){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i){t.next=4;break}return l.updateState(d(d({},l.getState()),{},{isLoading:!1})),n(d(d({},e),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,l._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=i).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:c.sub,username:c.username},l.updateState(o),n(d(d({},e),o));case 11:return t.abrupt("return",i);case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e){return c.apply(this,arguments)})}])&&u(e.prototype,n),i&&u(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();s(Z,"DEFAULT_STATE",void 0),Z.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var b=Z;function m(t,e,n,l,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void n(t)}d.done?e(a):Promise.resolve(a).then(l,i)}function h(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){m(c,l,i,o,d,"next",t)}function d(t){m(c,l,i,o,d,"throw",t)}o(void 0)}))}}function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function I(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?p(Object(n),!0).forEach((function(e){G(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function G(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var l,i,c=[],o=!0,d=!1;try{for(n=n.call(t);!(o=(l=n.next()).done)&&(c.push(l.value),!e||c.length!==e);o=!0);}catch(t){d=!0,i=t}finally{try{o||null==n.return||n.return()}finally{if(d)throw i}}return c}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return X(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return X(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,l=new Array(e);n<e;n++)l[n]=t[n];return l}var y={disableTrySignInSilently:!0},V=Object(i.createContext)(null),W=function(t){var e=t.children,n=t.config,o=t.fallback,d=t.getAuthParams,a=t.onSignOut,r=t.plugin,u=Object(i.useMemo)((function(){return new b(r)}),[r]),s=g(Object(i.useState)(u.getState()),2),Z=s[0],m=s[1],p=g(Object(i.useState)(!1),2),G=p[0],X=p[1],W=Object(i.useMemo)((function(){return I(I({},y),n)}),[n]),C=function(){var t=h(regeneratorRuntime.mark((function t(e,n,l,i,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,Y(null),t.next=4,u.signIn(m,Z,e,n,l,i,c);case 4:return t.abrupt("return",t.sent);case 7:return t.prev=7,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(e,n,l,i,c){return t.apply(this,arguments)}}(),R=function(t,e,n){return t===l.k.CustomGrant?u.on(t,e,n):u.on(t,e)},f=function(){return u.trySignInSilently(Z,m)},S=g(Object(i.useState)(),2),v=S[0],Y=S[1],K=Object(i.useRef)(!1);return Object(i.useEffect)((function(){Z.isAuthenticated||h(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=X,t.next=3,u.init(W);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[W]),Object(i.useEffect)((function(){K.current||(K.current=!0,h(regeneratorRuntime.mark((function t(){var e,n,i,c,o,r,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,R(l.k.SignOut,(function(){e=!0,a&&a()}));case 3:if(!Z.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(W.skipRedirectCallback){t.next=22;break}if(i=null,!d||"function"!=typeof d){t.next=11;break}return t.next=10,d();case 10:i=t.sent;case 11:if(c=new URL(location.href),!(l.w.hasAuthSearchParamsInURL()&&new URL(c.origin+c.pathname).toString()===new URL(null==W?void 0:W.signInRedirectURL).toString()||null!==(n=i)&&void 0!==n&&n.authorizationCode||c.searchParams.get("error"))){t.next=22;break}return t.prev=13,t.next=16,C({callOnlyOnRedirect:!0},null===(o=i)||void 0===o?void 0:o.authorizationCode,null===(r=i)||void 0===r?void 0:r.sessionState,null===(s=i)||void 0===s?void 0:s.state);case 16:Y(null),t.next=22;break;case 19:t.prev=19,t.t0=t.catch(13),t.t0&&Object.prototype.hasOwnProperty.call(t.t0,"code")&&Y(t.t0);case 22:if(!u.getState().isAuthenticated){t.next=24;break}return t.abrupt("return");case 24:if(!W.disableTrySignInSilently&&!e){t.next=27;break}return m(I(I({},Z),{},{isLoading:!1})),t.abrupt("return");case 27:return t.next=29,f().then((function(){Y(null)})).catch((function(t){t&&Object.prototype.hasOwnProperty.call(t,"code")&&Y(t)}));case 29:case"end":return t.stop()}}),t,null,[[13,19]])})))())}),[W]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return u.disableHttpHandler()},enableHttpHandler:function(){return u.enableHttpHandler()},getAccessToken:function(){return u.getAccessToken()},getBasicUserInfo:function(){return u.getBasicUserInfo()},getDecodedIDPIDToken:function(){return u.getDecodedIDPIDToken()},getDecodedIDToken:function(){return u.getDecodedIDToken()},getHttpClient:function(){return u.getHttpClient()},getIDToken:function(){return u.getIDToken()},getOIDCServiceEndpoints:function(){return u.getOIDCServiceEndpoints()},httpRequest:function(t){return u.httpRequest(t)},httpRequestAll:function(t){return u.httpRequestAll(t)},isAuthenticated:function(){return u.isAuthenticated()},on:R,refreshAccessToken:function(){return u.refreshAccessToken()},requestCustomGrant:function(t,e){return u.requestCustomGrant(t,e,m)},revokeAccessToken:function(){return u.revokeAccessToken(m)},signIn:C,signOut:function(t){return u.signOut(m,Z,t)},state:Z,trySignInSilently:f,updateConfig:function(t){return u.updateConfig(t)},error:v}},G?e:null!=o?o:null)},C=function(){return Object(i.useContext)(V)},R=n(219),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(t[l]=n[l])}return t}).apply(this,arguments)}function v(t,e){if(null==t)return{};var n,l,i=function(t,e){if(null==t)return{};var n,l,i={},c=Object.keys(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var Y=function(t){var e=C().state,n=Object(i.useRef)(!1),l=t.component,o=t.callback,d=v(t,f);return Object(i.useEffect)((function(){e.isAuthenticated||e.isLoading||n.current||(n.current=!0,o&&o())}),[e.isAuthenticated,e.isLoading]),e.isAuthenticated?c.a.createElement(R.Route,S({},d,{render:function(t){return c.a.createElement(l,t)}})):null},K=function(t){var e=t.fallback,n=t.children,l=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",l?n:null!=e?e:null," ")};function N(t,e,n,l,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void n(t)}d.done?e(a):Promise.resolve(a).then(l,i)}var J=function(t){var e=t.children,n=t.fallback,l=t.onSignIn,o=t.overrideSignIn,d=C(),a=d.state,r=a.isAuthenticated,u=a.isLoading,s=d.signIn;return Object(i.useEffect)((function(){var t;r||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,s();case 7:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){N(c,l,i,o,d,"next",t)}function d(t){N(c,l,i,o,d,"throw",t)}o(void 0)}))})(),r&&l&&"function"==typeof l&&l()}),[r,u]),c.a.createElement(K,{fallback:n},c.a.createElement(i.Suspense,{fallback:n},e))}}])}));