@asgardeo/auth-react 1.1.0 → 1.1.1
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 +31 -31
- package/dist/tsconfig.tsbuildinfo +6 -6
- package/package.json +2 -2
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=537)}([function(t,e,n){var l=n(4),i=n(24).f,c=n(18),o=n(25),d=n(108),r=n(145),a=n(72);t.exports=function(t,e){var n,u,Z,s,b,m=t.target,I=t.global,h=t.stat;if(n=I?l:h?l[m]||d(m,{}):(l[m]||{}).prototype)for(u in e){if(s=e[u],Z=t.noTargetGet?(b=i(n,u))&&b.value:n[u],!a(I?u:m+(h?".":"#")+u,t.forced)&&void 0!==Z){if(typeof s==typeof Z)continue;r(s,Z)}(t.sham||Z&&Z.sham)&&c(s,"sham",!0),o(n,u,s,t)}}},function(t,e,n){var l=n(8);t.exports=function(t){if(!l(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return 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(140))},function(t,e){t.exports=!1},function(t,e,n){var l=n(1),i=n(118),c=n(10),o=n(19),d=n(41),r=n(52),a=n(85),u=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var Z,s,b,m,I,h,p,g=n&&n.that,G=!(!n||!n.AS_ENTRIES),y=!(!n||!n.IS_ITERATOR),X=!(!n||!n.INTERRUPTED),V=o(e,g,1+G+X),W=function(t){return Z&&a(Z,"normal",t),new u(!0,t)},C=function(t){return G?(l(t),X?V(t[0],t[1],W):V(t[0],t[1])):X?V(t,W):V(t)};if(y)Z=t;else{if("function"!=typeof(s=r(t)))throw TypeError("Target is not iterable");if(i(s)){for(b=0,m=c(t.length);m>b;b++)if((I=C(t[b]))&&I instanceof u)return I;return new u(!1)}Z=d(t,s)}for(h=Z.next;!(p=h.call(Z)).done;){try{I=C(p.value)}catch(t){a(Z,"throw",t)}if("object"==typeof I&&I&&I instanceof u)return I}return new u(!1)}},function(t,e,n){var l=n(4),i=n(68),c=n(16),o=n(69),d=n(107),r=n(141),a=i("wks"),u=l.Symbol,Z=r?u:u&&u.withoutSetter||o;t.exports=function(t){return c(a,t)&&(d||"string"==typeof a[t])||(d&&c(u,t)?a[t]=u[t]:a[t]=Z("Symbol."+t)),a[t]}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var l=n(2);t.exports=!l((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,n){var l=n(30),i=Math.min;t.exports=function(t){return t>0?i(l(t),9007199254740991):0}},function(t,e,n){var l=n(4),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(l[t]):l[t]&&l[t][e]}},function(t,e,n){"use strict";var l,i,c,o=n(124),d=n(9),r=n(4),a=n(8),u=n(16),Z=n(76),s=n(18),b=n(25),m=n(14).f,I=n(27),h=n(42),p=n(7),g=n(69),G=r.Int8Array,y=G&&G.prototype,X=r.Uint8ClampedArray,V=X&&X.prototype,W=G&&I(G),C=y&&I(y),R=Object.prototype,f=R.isPrototypeOf,S=p("toStringTag"),v=g("TYPED_ARRAY_TAG"),Y=g("TYPED_ARRAY_CONSTRUCTOR"),K=o&&!!h&&"Opera"!==Z(r.opera),N=!1,J={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},H={BigInt64Array:8,BigUint64Array:8},U=function(t){if(!a(t))return!1;var e=Z(t);return u(J,e)||u(H,e)};for(l in J)(c=(i=r[l])&&i.prototype)?s(c,Y,i):K=!1;for(l in H)(c=(i=r[l])&&i.prototype)&&s(c,Y,i);if((!K||"function"!=typeof W||W===Function.prototype)&&(W=function(){throw TypeError("Incorrect invocation")},K))for(l in J)r[l]&&h(r[l],W);if((!K||!C||C===R)&&(C=W.prototype,K))for(l in J)r[l]&&h(r[l].prototype,C);if(K&&I(V)!==C&&h(V,C),d&&!u(C,S))for(l in N=!0,m(C,S,{get:function(){return a(this)?this[v]:void 0}}),J)r[l]&&s(r[l],v,l);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:K,TYPED_ARRAY_CONSTRUCTOR:Y,TYPED_ARRAY_TAG:N&&v,aTypedArray:function(t){if(U(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(h&&!f.call(W,t))throw TypeError("Target is not a typed array constructor");return t},exportTypedArrayMethod:function(t,e,n){if(d){if(n)for(var l in J){var i=r[l];if(i&&u(i.prototype,t))try{delete i.prototype[t]}catch(t){}}C[t]&&!n||b(C,t,n?e:K&&y[t]||e)}},exportTypedArrayStaticMethod:function(t,e,n){var l,i;if(d){if(h){if(n)for(l in J)if((i=r[l])&&u(i,t))try{delete i[t]}catch(t){}if(W[t]&&!n)return;try{return b(W,t,n?e:K&&W[t]||e)}catch(t){}}for(l in J)!(i=r[l])||i[t]&&!n||b(i,t,e)}},isView:function(t){if(!a(t))return!1;var e=Z(t);return"DataView"===e||u(J,e)||u(H,e)},isTypedArray:U,TypedArray:W,TypedArrayPrototype:C}},function(t,e,n){var l=n(22);t.exports=function(t){return Object(l(t))}},function(t,e,n){var l=n(9),i=n(143),c=n(1),o=n(47),d=Object.defineProperty;e.f=l?d:function(t,e,n){if(c(t),e=o(e),c(n),i)try{return d(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var l=n(59);t.exports=function(t){if(l(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},function(t,e,n){var l=n(13),i={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return i.call(l(t),e)}},function(t,e,n){var l,i,c,o=n(144),d=n(4),r=n(8),a=n(18),u=n(16),Z=n(83),s=n(84),b=n(70),m=d.WeakMap;if(o||Z.state){var I=Z.state||(Z.state=new m),h=I.get,p=I.has,g=I.set;l=function(t,e){if(p.call(I,t))throw new TypeError("Object already initialized");return e.facade=t,g.call(I,t,e),e},i=function(t){return h.call(I,t)||{}},c=function(t){return p.call(I,t)}}else{var G=s("state");b[G]=!0,l=function(t,e){if(u(t,G))throw new TypeError("Object already initialized");return e.facade=t,a(t,G,e),e},i=function(t){return u(t,G)?t[G]:{}},c=function(t){return u(t,G)}}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 TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var l=n(9),i=n(14),c=n(38);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=n(3);t.exports=function(t,e,n){if(l(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,l){return t.call(e,n,l)};case 3:return function(n,l,i){return t.call(e,n,l,i)}}return function(){return t.apply(e,arguments)}}},function(e,n){e.exports=t},function(t,e,n){var l=n(61),i=n(16),c=n(148),o=n(14).f;t.exports=function(t){var e=l.Symbol||(l.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var l=n(19),i=n(67),c=n(13),o=n(10),d=n(73),r=[].push,a=function(t){var e=1==t,n=2==t,a=3==t,u=4==t,Z=6==t,s=7==t,b=5==t||Z;return function(m,I,h,p){for(var g,G,y=c(m),X=i(y),V=l(I,h,3),W=o(X.length),C=0,R=p||d,f=e?R(m,W):n||s?R(m,0):void 0;W>C;C++)if((b||C in X)&&(G=V(g=X[C],C,y),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.call(f,g)}else switch(t){case 4:return!1;case 7:r.call(f,g)}return Z?-1:a||u?u:f}};t.exports={forEach:a(0),map:a(1),filter:a(2),some:a(3),every:a(4),find:a(5),findIndex:a(6),filterReject:a(7)}},function(t,e,n){var l=n(9),i=n(82),c=n(38),o=n(29),d=n(47),r=n(16),a=n(143),u=Object.getOwnPropertyDescriptor;e.f=l?u:function(t,e){if(t=o(t),e=d(e),a)try{return u(t,e)}catch(t){}if(r(t,e))return c(!i.f.call(t,e),t[e])}},function(t,e,n){var l=n(4),i=n(18),c=n(16),o=n(108),d=n(110),r=n(17),a=r.get,u=r.enforce,Z=String(String).split("String");(t.exports=function(t,e,n,d){var r,a=!!d&&!!d.unsafe,s=!!d&&!!d.enumerable,b=!!d&&!!d.noTargetGet;"function"==typeof n&&("string"!=typeof e||c(n,"name")||i(n,"name",e),(r=u(n)).source||(r.source=Z.join("string"==typeof e?e:""))),t!==l?(a?!b&&t[e]&&(s=!0):delete t[e],s?t[e]=n:i(t,e,n)):s?t[e]=n:o(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&a(this).source||d(this)}))},function(t,e,n){var l,i=n(1),c=n(114),o=n(112),d=n(70),r=n(147),a=n(109),u=n(84),Z=u("IE_PROTO"),s=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},I=function(){try{l=new ActiveXObject("htmlfile")}catch(t){}var t,e;I="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 I.prototype[o[n]];return I()};d[Z]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(s.prototype=i(t),n=new s,s.prototype=null,n[Z]=t):n=I(),void 0===e?n:c(n,e)}},function(t,e,n){var l=n(16),i=n(13),c=n(84),o=n(122),d=c("IE_PROTO"),r=Object.prototype;t.exports=o?Object.getPrototypeOf:function(t){return t=i(t),l(t,d)?t[d]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,n){var l=n(1),i=n(3),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(67),i=n(22);t.exports=function(t){return l(i(t))}},function(t,e){var n=Math.ceil,l=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?l:n)(t)}},function(t,e,n){var l=n(22),i=n(15),c=/"/g;t.exports=function(t,e,n,o){var d=i(l(t)),r="<"+e;return""!==n&&(r+=" "+n+'="'+i(o).replace(c,""")+'"'),r+">"+d+"</"+e+">"}},function(t,e,n){var l=n(2);t.exports=function(t){return l((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},function(t,e,n){var l=n(14).f,i=n(16),c=n(7)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,c)&&l(t,c,{configurable:!0,value:e})}},function(t,e,n){var l=n(7),i=n(26),c=n(14),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(25);t.exports=function(t,e,n){for(var i in e)l(t,i,e[i],n);return t}},function(t,e){t.exports=function(t){return Map.prototype.entries.call(t)}},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(11);t.exports=l("navigator","userAgent")||""},function(t,e,n){"use strict";var l=n(2);t.exports=function(t,e){var n=[][t];return!!n&&l((function(){n.call(null,e||function(){throw 1},1)}))}},function(t,e,n){var l=n(1),i=n(52);t.exports=function(t,e){var n=arguments.length<2?i(t):e;if("function"!=typeof n)throw TypeError(String(t)+" is not iterable");return l(n.call(t))}},function(t,e,n){var l=n(1),i=n(153);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,c){return l(n),i(c),e?t.call(n,c):n.__proto__=c,n}}():void 0)},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(9),o=n(136),d=n(12),r=n(89),a=n(33),u=n(38),Z=n(18),s=n(129),b=n(10),m=n(158),I=n(184),h=n(47),p=n(16),g=n(76),G=n(8),y=n(59),X=n(26),V=n(42),W=n(49).f,C=n(185),R=n(23).forEach,f=n(54),S=n(14),v=n(24),Y=n(17),K=n(91),N=Y.get,J=Y.set,H=S.f,U=v.f,k=Math.round,L=i.RangeError,B=r.ArrayBuffer,x=r.DataView,A=d.NATIVE_ARRAY_BUFFER_VIEWS,T=d.TYPED_ARRAY_CONSTRUCTOR,F=d.TYPED_ARRAY_TAG,z=d.TypedArray,w=d.TypedArrayPrototype,Q=d.aTypedArrayConstructor,j=d.isTypedArray,P=function(t,e){for(var n=0,l=e.length,i=new(Q(t))(l);l>n;)i[n]=e[n++];return i},M=function(t,e){H(t,e,{get:function(){return N(this)[e]}})},E=function(t){var e;return t instanceof B||"ArrayBuffer"==(e=g(t))||"SharedArrayBuffer"==e},D=function(t,e){return j(t)&&!y(e)&&e in t&&s(+e)&&e>=0},O=function(t,e){return e=h(e),D(t,e)?u(2,t[e]):U(t,e)},q=function(t,e,n){return e=h(e),!(D(t,e)&&G(n)&&p(n,"value"))||p(n,"get")||p(n,"set")||n.configurable||p(n,"writable")&&!n.writable||p(n,"enumerable")&&!n.enumerable?H(t,e,n):(t[e]=n.value,t)};c?(A||(v.f=O,S.f=q,M(w,"buffer"),M(w,"byteOffset"),M(w,"byteLength"),M(w,"length")),l({target:"Object",stat:!0,forced:!A},{getOwnPropertyDescriptor:O,defineProperty:q}),t.exports=function(t,e,n){var c=t.match(/\d+$/)[0]/8,d=t+(n?"Clamped":"")+"Array",r="get"+t,u="set"+t,s=i[d],h=s,p=h&&h.prototype,g={},y=function(t,e){H(t,e,{get:function(){return function(t,e){var n=N(t);return n.view[r](e*c+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,l){var i=N(t);n&&(l=(l=k(l))<0?0:l>255?255:255&l),i.view[u](e*c+i.byteOffset,l,!0)}(this,e,t)},enumerable:!0})};A?o&&(h=e((function(t,e,n,l){return a(t,h,d),K(G(e)?E(e)?void 0!==l?new s(e,I(n,c),l):void 0!==n?new s(e,I(n,c)):new s(e):j(e)?P(h,e):C.call(h,e):new s(m(e)),t,h)})),V&&V(h,z),R(W(s),(function(t){t in h||Z(h,t,s[t])})),h.prototype=p):(h=e((function(t,e,n,l){a(t,h,d);var i,o,r,u=0,Z=0;if(G(e)){if(!E(e))return j(e)?P(h,e):C.call(h,e);i=e,Z=I(n,c);var s=e.byteLength;if(void 0===l){if(s%c)throw L("Wrong length");if((o=s-Z)<0)throw L("Wrong length")}else if((o=b(l)*c)+Z>s)throw L("Wrong length");r=o/c}else r=m(e),i=new B(o=r*c);for(J(t,{buffer:i,byteOffset:Z,byteLength:o,length:r,view:new x(i)});u<r;)y(t,u++)})),V&&V(h,z),p=h.prototype=X(w)),p.constructor!==h&&Z(p,"constructor",h),Z(p,T,h),F&&Z(p,F,d),g[d]=h,l({global:!0,forced:h!=s,sham:!A},g),"BYTES_PER_ELEMENT"in h||Z(h,"BYTES_PER_ELEMENT",c),"BYTES_PER_ELEMENT"in p||Z(p,"BYTES_PER_ELEMENT",c),f(d)}):t.exports=function(){}},function(t,e,n){var l=n(127),i=n(137),c=n(68)("metadata"),o=c.store||(c.store=new i),d=function(t,e,n){var i=o.get(t);if(!i){if(!n)return;o.set(t,i=new l)}var c=i.get(e);if(!c){if(!n)return;i.set(e,c=new l)}return c};t.exports={store:o,getMap:d,has:function(t,e,n){var l=d(e,n,!1);return void 0!==l&&l.has(t)},get:function(t,e,n){var l=d(e,n,!1);return void 0===l?void 0:l.get(t)},set:function(t,e,n,l){d(n,l,!0).set(t,e)},keys:function(t,e){var n=d(t,e,!1),l=[];return n&&n.forEach((function(t,e){l.push(e)})),l},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,n){"use strict";(function(t){
|
|
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 l(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,l),i.l=!0,i.exports}return l.m=t,l.c=e,l.d=function(t,e,n){l.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},l.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},l.t=function(t,e){if(1&e&&(t=l(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(l.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)l.d(n,i,function(e){return t[e]}.bind(null,i));return n},l.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return l.d(e,"a",e),e},l.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},l.p="",l(l.s=537)}([function(t,e,l){var n=l(4),i=l(24).f,c=l(18),o=l(25),a=l(108),r=l(145),d=l(72);t.exports=function(t,e){var l,u,Z,s,b,I=t.target,h=t.global,m=t.stat;if(l=h?n:m?n[I]||a(I,{}):(n[I]||{}).prototype)for(u in e){if(s=e[u],Z=t.noTargetGet?(b=i(l,u))&&b.value:l[u],!d(h?u:I+(m?".":"#")+u,t.forced)&&void 0!==Z){if(typeof s==typeof Z)continue;r(s,Z)}(t.sham||Z&&Z.sham)&&c(s,"sham",!0),o(l,u,s,t)}}},function(t,e,l){var n=l(8);t.exports=function(t){if(!n(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,l){(function(e){var l=function(t){return t&&t.Math==Math&&t};t.exports=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,l(140))},function(t,e){t.exports=!1},function(t,e,l){var n=l(1),i=l(118),c=l(10),o=l(19),a=l(41),r=l(52),d=l(85),u=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,l){var Z,s,b,I,h,m,p,g=l&&l.that,G=!(!l||!l.AS_ENTRIES),y=!(!l||!l.IS_ITERATOR),X=!(!l||!l.INTERRUPTED),V=o(e,g,1+G+X),W=function(t){return Z&&d(Z,"normal",t),new u(!0,t)},C=function(t){return G?(n(t),X?V(t[0],t[1],W):V(t[0],t[1])):X?V(t,W):V(t)};if(y)Z=t;else{if("function"!=typeof(s=r(t)))throw TypeError("Target is not iterable");if(i(s)){for(b=0,I=c(t.length);I>b;b++)if((h=C(t[b]))&&h instanceof u)return h;return new u(!1)}Z=a(t,s)}for(m=Z.next;!(p=m.call(Z)).done;){try{h=C(p.value)}catch(t){d(Z,"throw",t)}if("object"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},function(t,e,l){var n=l(4),i=l(68),c=l(16),o=l(69),a=l(107),r=l(141),d=i("wks"),u=n.Symbol,Z=r?u:u&&u.withoutSetter||o;t.exports=function(t){return c(d,t)&&(a||"string"==typeof d[t])||(a&&c(u,t)?d[t]=u[t]:d[t]=Z("Symbol."+t)),d[t]}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,l){var n=l(2);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,l){var n=l(30),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},function(t,e,l){var n=l(4),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(n[t]):n[t]&&n[t][e]}},function(t,e,l){"use strict";var n,i,c,o=l(124),a=l(9),r=l(4),d=l(8),u=l(16),Z=l(76),s=l(18),b=l(25),I=l(14).f,h=l(27),m=l(42),p=l(7),g=l(69),G=r.Int8Array,y=G&&G.prototype,X=r.Uint8ClampedArray,V=X&&X.prototype,W=G&&h(G),C=y&&h(y),R=Object.prototype,f=R.isPrototypeOf,S=p("toStringTag"),v=g("TYPED_ARRAY_TAG"),Y=g("TYPED_ARRAY_CONSTRUCTOR"),K=o&&!!m&&"Opera"!==Z(r.opera),N=!1,J={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},H={BigInt64Array:8,BigUint64Array:8},U=function(t){if(!d(t))return!1;var e=Z(t);return u(J,e)||u(H,e)};for(n in J)(c=(i=r[n])&&i.prototype)?s(c,Y,i):K=!1;for(n in H)(c=(i=r[n])&&i.prototype)&&s(c,Y,i);if((!K||"function"!=typeof W||W===Function.prototype)&&(W=function(){throw TypeError("Incorrect invocation")},K))for(n in J)r[n]&&m(r[n],W);if((!K||!C||C===R)&&(C=W.prototype,K))for(n in J)r[n]&&m(r[n].prototype,C);if(K&&h(V)!==C&&m(V,C),a&&!u(C,S))for(n in N=!0,I(C,S,{get:function(){return d(this)?this[v]:void 0}}),J)r[n]&&s(r[n],v,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:K,TYPED_ARRAY_CONSTRUCTOR:Y,TYPED_ARRAY_TAG:N&&v,aTypedArray:function(t){if(U(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(m&&!f.call(W,t))throw TypeError("Target is not a typed array constructor");return t},exportTypedArrayMethod:function(t,e,l){if(a){if(l)for(var n in J){var i=r[n];if(i&&u(i.prototype,t))try{delete i.prototype[t]}catch(t){}}C[t]&&!l||b(C,t,l?e:K&&y[t]||e)}},exportTypedArrayStaticMethod:function(t,e,l){var n,i;if(a){if(m){if(l)for(n in J)if((i=r[n])&&u(i,t))try{delete i[t]}catch(t){}if(W[t]&&!l)return;try{return b(W,t,l?e:K&&W[t]||e)}catch(t){}}for(n in J)!(i=r[n])||i[t]&&!l||b(i,t,e)}},isView:function(t){if(!d(t))return!1;var e=Z(t);return"DataView"===e||u(J,e)||u(H,e)},isTypedArray:U,TypedArray:W,TypedArrayPrototype:C}},function(t,e,l){var n=l(22);t.exports=function(t){return Object(n(t))}},function(t,e,l){var n=l(9),i=l(143),c=l(1),o=l(47),a=Object.defineProperty;e.f=n?a:function(t,e,l){if(c(t),e=o(e),c(l),i)try{return a(t,e,l)}catch(t){}if("get"in l||"set"in l)throw TypeError("Accessors not supported");return"value"in l&&(t[e]=l.value),t}},function(t,e,l){var n=l(59);t.exports=function(t){if(n(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},function(t,e,l){var n=l(13),i={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return i.call(n(t),e)}},function(t,e,l){var n,i,c,o=l(144),a=l(4),r=l(8),d=l(18),u=l(16),Z=l(83),s=l(84),b=l(70),I=a.WeakMap;if(o||Z.state){var h=Z.state||(Z.state=new I),m=h.get,p=h.has,g=h.set;n=function(t,e){if(p.call(h,t))throw new TypeError("Object already initialized");return e.facade=t,g.call(h,t,e),e},i=function(t){return m.call(h,t)||{}},c=function(t){return p.call(h,t)}}else{var G=s("state");b[G]=!0,n=function(t,e){if(u(t,G))throw new TypeError("Object already initialized");return e.facade=t,d(t,G,e),e},i=function(t){return u(t,G)?t[G]:{}},c=function(t){return u(t,G)}}t.exports={set:n,get:i,has:c,enforce:function(t){return c(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var l;if(!r(e)||(l=i(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return l}}}},function(t,e,l){var n=l(9),i=l(14),c=l(38);t.exports=n?function(t,e,l){return i.f(t,e,c(1,l))}:function(t,e,l){return t[e]=l,t}},function(t,e,l){var n=l(3);t.exports=function(t,e,l){if(n(t),void 0===e)return t;switch(l){case 0:return function(){return t.call(e)};case 1:return function(l){return t.call(e,l)};case 2:return function(l,n){return t.call(e,l,n)};case 3:return function(l,n,i){return t.call(e,l,n,i)}}return function(){return t.apply(e,arguments)}}},function(e,l){e.exports=t},function(t,e,l){var n=l(61),i=l(16),c=l(148),o=l(14).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,l){var n=l(19),i=l(67),c=l(13),o=l(10),a=l(73),r=[].push,d=function(t){var e=1==t,l=2==t,d=3==t,u=4==t,Z=6==t,s=7==t,b=5==t||Z;return function(I,h,m,p){for(var g,G,y=c(I),X=i(y),V=n(h,m,3),W=o(X.length),C=0,R=p||a,f=e?R(I,W):l||s?R(I,0):void 0;W>C;C++)if((b||C in X)&&(G=V(g=X[C],C,y),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.call(f,g)}else switch(t){case 4:return!1;case 7:r.call(f,g)}return Z?-1:d||u?u:f}};t.exports={forEach:d(0),map:d(1),filter:d(2),some:d(3),every:d(4),find:d(5),findIndex:d(6),filterReject:d(7)}},function(t,e,l){var n=l(9),i=l(82),c=l(38),o=l(29),a=l(47),r=l(16),d=l(143),u=Object.getOwnPropertyDescriptor;e.f=n?u:function(t,e){if(t=o(t),e=a(e),d)try{return u(t,e)}catch(t){}if(r(t,e))return c(!i.f.call(t,e),t[e])}},function(t,e,l){var n=l(4),i=l(18),c=l(16),o=l(108),a=l(110),r=l(17),d=r.get,u=r.enforce,Z=String(String).split("String");(t.exports=function(t,e,l,a){var r,d=!!a&&!!a.unsafe,s=!!a&&!!a.enumerable,b=!!a&&!!a.noTargetGet;"function"==typeof l&&("string"!=typeof e||c(l,"name")||i(l,"name",e),(r=u(l)).source||(r.source=Z.join("string"==typeof e?e:""))),t!==n?(d?!b&&t[e]&&(s=!0):delete t[e],s?t[e]=l:i(t,e,l)):s?t[e]=l:o(e,l)})(Function.prototype,"toString",(function(){return"function"==typeof this&&d(this).source||a(this)}))},function(t,e,l){var n,i=l(1),c=l(114),o=l(112),a=l(70),r=l(147),d=l(109),u=l(84),Z=u("IE_PROTO"),s=function(){},b=function(t){return"<script>"+t+"<\/script>"},I=function(t){t.write(b("")),t.close();var e=t.parentWindow.Object;return t=null,e},h=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e;h="undefined"!=typeof document?document.domain&&n?I(n):((e=d("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):I(n);for(var l=o.length;l--;)delete h.prototype[o[l]];return h()};a[Z]=!0,t.exports=Object.create||function(t,e){var l;return null!==t?(s.prototype=i(t),l=new s,s.prototype=null,l[Z]=t):l=h(),void 0===e?l:c(l,e)}},function(t,e,l){var n=l(16),i=l(13),c=l(84),o=l(122),a=c("IE_PROTO"),r=Object.prototype;t.exports=o?Object.getPrototypeOf:function(t){return t=i(t),n(t,a)?t[a]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,l){var n=l(1),i=l(3),c=l(7)("species");t.exports=function(t,e){var l,o=n(t).constructor;return void 0===o||null==(l=n(o)[c])?e:i(l)}},function(t,e,l){var n=l(67),i=l(22);t.exports=function(t){return n(i(t))}},function(t,e){var l=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:l)(t)}},function(t,e,l){var n=l(22),i=l(15),c=/"/g;t.exports=function(t,e,l,o){var a=i(n(t)),r="<"+e;return""!==l&&(r+=" "+l+'="'+i(o).replace(c,""")+'"'),r+">"+a+"</"+e+">"}},function(t,e,l){var n=l(2);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e){t.exports=function(t,e,l){if(!(t instanceof e))throw TypeError("Incorrect "+(l?l+" ":"")+"invocation");return t}},function(t,e,l){var n=l(14).f,i=l(16),c=l(7)("toStringTag");t.exports=function(t,e,l){t&&!i(t=l?t:t.prototype,c)&&n(t,c,{configurable:!0,value:e})}},function(t,e,l){var n=l(7),i=l(26),c=l(14),o=n("unscopables"),a=Array.prototype;null==a[o]&&c.f(a,o,{configurable:!0,value:i(null)}),t.exports=function(t){a[o][t]=!0}},function(t,e,l){var n=l(25);t.exports=function(t,e,l){for(var i in e)n(t,i,e[i],l);return t}},function(t,e){t.exports=function(t){return Map.prototype.entries.call(t)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,l){var n=l(11);t.exports=n("navigator","userAgent")||""},function(t,e,l){"use strict";var n=l(2);t.exports=function(t,e){var l=[][t];return!!l&&n((function(){l.call(null,e||function(){throw 1},1)}))}},function(t,e,l){var n=l(1),i=l(52);t.exports=function(t,e){var l=arguments.length<2?i(t):e;if("function"!=typeof l)throw TypeError(String(t)+" is not iterable");return n(l.call(t))}},function(t,e,l){var n=l(1),i=l(153);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,l={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(l,[]),e=l instanceof Array}catch(t){}return function(l,c){return n(l),i(c),e?t.call(l,c):l.__proto__=c,l}}():void 0)},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(9),o=l(136),a=l(12),r=l(89),d=l(33),u=l(38),Z=l(18),s=l(129),b=l(10),I=l(158),h=l(184),m=l(47),p=l(16),g=l(76),G=l(8),y=l(59),X=l(26),V=l(42),W=l(49).f,C=l(185),R=l(23).forEach,f=l(54),S=l(14),v=l(24),Y=l(17),K=l(91),N=Y.get,J=Y.set,H=S.f,U=v.f,L=Math.round,B=i.RangeError,k=r.ArrayBuffer,F=r.DataView,T=a.NATIVE_ARRAY_BUFFER_VIEWS,x=a.TYPED_ARRAY_CONSTRUCTOR,A=a.TYPED_ARRAY_TAG,z=a.TypedArray,w=a.TypedArrayPrototype,Q=a.aTypedArrayConstructor,P=a.isTypedArray,j=function(t,e){for(var l=0,n=e.length,i=new(Q(t))(n);n>l;)i[l]=e[l++];return i},M=function(t,e){H(t,e,{get:function(){return N(this)[e]}})},E=function(t){var e;return t instanceof k||"ArrayBuffer"==(e=g(t))||"SharedArrayBuffer"==e},D=function(t,e){return P(t)&&!y(e)&&e in t&&s(+e)&&e>=0},O=function(t,e){return e=m(e),D(t,e)?u(2,t[e]):U(t,e)},q=function(t,e,l){return e=m(e),!(D(t,e)&&G(l)&&p(l,"value"))||p(l,"get")||p(l,"set")||l.configurable||p(l,"writable")&&!l.writable||p(l,"enumerable")&&!l.enumerable?H(t,e,l):(t[e]=l.value,t)};c?(T||(v.f=O,S.f=q,M(w,"buffer"),M(w,"byteOffset"),M(w,"byteLength"),M(w,"length")),n({target:"Object",stat:!0,forced:!T},{getOwnPropertyDescriptor:O,defineProperty:q}),t.exports=function(t,e,l){var c=t.match(/\d+$/)[0]/8,a=t+(l?"Clamped":"")+"Array",r="get"+t,u="set"+t,s=i[a],m=s,p=m&&m.prototype,g={},y=function(t,e){H(t,e,{get:function(){return function(t,e){var l=N(t);return l.view[r](e*c+l.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,n){var i=N(t);l&&(n=(n=L(n))<0?0:n>255?255:255&n),i.view[u](e*c+i.byteOffset,n,!0)}(this,e,t)},enumerable:!0})};T?o&&(m=e((function(t,e,l,n){return d(t,m,a),K(G(e)?E(e)?void 0!==n?new s(e,h(l,c),n):void 0!==l?new s(e,h(l,c)):new s(e):P(e)?j(m,e):C.call(m,e):new s(I(e)),t,m)})),V&&V(m,z),R(W(s),(function(t){t in m||Z(m,t,s[t])})),m.prototype=p):(m=e((function(t,e,l,n){d(t,m,a);var i,o,r,u=0,Z=0;if(G(e)){if(!E(e))return P(e)?j(m,e):C.call(m,e);i=e,Z=h(l,c);var s=e.byteLength;if(void 0===n){if(s%c)throw B("Wrong length");if((o=s-Z)<0)throw B("Wrong length")}else if((o=b(n)*c)+Z>s)throw B("Wrong length");r=o/c}else r=I(e),i=new k(o=r*c);for(J(t,{buffer:i,byteOffset:Z,byteLength:o,length:r,view:new F(i)});u<r;)y(t,u++)})),V&&V(m,z),p=m.prototype=X(w)),p.constructor!==m&&Z(p,"constructor",m),Z(p,x,m),A&&Z(p,A,a),g[a]=m,n({global:!0,forced:m!=s,sham:!T},g),"BYTES_PER_ELEMENT"in m||Z(m,"BYTES_PER_ELEMENT",c),"BYTES_PER_ELEMENT"in p||Z(p,"BYTES_PER_ELEMENT",c),f(a)}):t.exports=function(){}},function(t,e,l){var n=l(127),i=l(137),c=l(68)("metadata"),o=c.store||(c.store=new i),a=function(t,e,l){var i=o.get(t);if(!i){if(!l)return;o.set(t,i=new n)}var c=i.get(e);if(!c){if(!l)return;i.set(e,c=new n)}return c};t.exports={store:o,getMap:a,has:function(t,e,l){var n=a(e,l,!1);return void 0!==n&&n.has(t)},get:function(t,e,l){var n=a(e,l,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,l,n){a(l,n,!0).set(t,e)},keys:function(t,e){var l=a(t,e,!1),n=[];return l&&l.forEach((function(t,e){n.push(e)})),n},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,l){"use strict";(function(t){
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
|
-
function
|
|
16
|
+
function n(t,e,l,n){return new(l||(l=Promise))((function(i,c){function o(t){try{r(n.next(t))}catch(t){c(t)}}function a(t){try{r(n.throw(t))}catch(t){c(t)}}function r(t){var e;t.done?i(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(o,a)}r((n=n.apply(t,e||[])).next())}))}
|
|
17
17
|
/*! *****************************************************************************
|
|
18
18
|
Copyright (c) Microsoft Corporation.
|
|
19
19
|
|
|
@@ -27,7 +27,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
27
27
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
28
28
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
29
29
|
PERFORMANCE OF THIS SOFTWARE.
|
|
30
|
-
***************************************************************************** */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 h})),n.d(e,"b",(function(){return K})),n.d(e,"c",(function(){return W})),n.d(e,"d",(function(){return zl})),n.d(e,"e",(function(){return C})),n.d(e,"f",(function(){return a})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return J})),n.d(e,"i",(function(){return X})),n.d(e,"j",(function(){return b})),n.d(e,"k",(function(){return m})),n.d(e,"l",(function(){return s})),n.d(e,"m",(function(){return c})),n.d(e,"n",(function(){return r})),n.d(e,"o",(function(){return p})),n.d(e,"p",(function(){return G})),n.d(e,"q",(function(){return g})),n.d(e,"r",(function(){return k})),n.d(e,"s",(function(){return y})),n.d(e,"t",(function(){return I})),n.d(e,"u",(function(){return N})),n.d(e,"v",(function(){return Z})),n.d(e,"w",(function(){return o})),n.d(e,"x",(function(){return d})),n.d(e,"y",(function(){return wl})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",d="{{username}}",r="{{scope}}",a="{{clientID}}",u="{{clientSecret}}";var Z;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(Z||(Z={}));const s="refresh_token_timer",b="pkce_code_verifier",m="#",I=["RS256","RS512","RS384","PS256"],h="code",p="session_state",g="sign_out_url",G="sign_out_success",y="state",X="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}resolveWellKnownEndpoint(){var t;return i(this,void 0,void 0,(function*(){const e=yield this._config(),n=e.wellKnownEndpoint||(null===(t=null==e?void 0:e.endpoints)||void 0===t?void 0:t.wellKnownEndpoint),l=e.baseUrl||e.serverOrigin;return n||l+"/oauth2/token/.well-known/openid-configuration"}))}resolveEndpoints(t){return i(this,void 0,void 0,(function*(){const e={},n=yield this._config();return n.overrideWellEndpointConfig&&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||e.serverOrigin;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||"",Z=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:Z,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,I,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);d.searchParams.append("response_type","code"),d.searchParams.append("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(" ")),d.searchParams.append("scope",r),d.searchParams.append("redirect_uri",o.signInRedirectURL),o.responseMode&&d.searchParams.append("response_mode",o.responseMode);const a=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(a,t,e),d.searchParams.append("code_challenge_method","S256"),d.searchParams.append("code_challenge",i)}o.prompt&&d.searchParams.append("prompt",o.prompt);const u=t;if(u)for(const[t,e]of Object.entries(u))""!=t&&""!=e&&"state"!==t&&d.searchParams.append(t,e.toString());return d.searchParams.append("state",C.generateStateParamForRequestCorrelation(a,u?null===(c=u.state)||void 0===c?void 0:c.toString():"")),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)}))}getIDToken(t){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(t)).id_token}))}getOIDCProviderMetaData(t){var e;return i(this,void 0,void 0,(function*(){const n=yield this._config();if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const l=n.wellKnownEndpoint||(null===(e=null==n?void 0:n.endpoints)||void 0===e?void 0:e.wellKnownEndpoint);if(l){let t;try{if(t=yield fetch(l),200!==t.status||!t.ok)throw new Error}catch(n){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(n.baseUrl||n.serverOrigin){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(n){throw new W("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=n?n:"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(n){throw new W("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=n?n:"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:"",wellKnownEndpoint:yield this._authenticationHelper.resolveWellKnownEndpoint()}}))}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`}))}signOut(t){return i(this,void 0,void 0,(function*(){const e=yield this.getSignOutURL(t);return this._authenticationHelper.clearUserSessionData(t),e}))}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),t.overrideWellEndpointConfig?(null==t?void 0:t.endpoints)&&(yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints({}))):(null==t?void 0:t.endpoints)&&(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(Z.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.SessionData,e),t)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Z.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(Z.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(Z.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(Z.SessionData,t)))&&void 0!==e?e:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(Z.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(Z.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(Z.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(Z.SessionData,e));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.TemporaryData,n),t,e)}))}setSessionDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.SessionData,n),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.SessionData,e),t)}))}}const Y={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class K{
|
|
30
|
+
***************************************************************************** */function i(t,e,l,n){return new(l||(l=Promise))((function(i,c){function o(t){try{r(n.next(t))}catch(t){c(t)}}function a(t){try{r(n.throw(t))}catch(t){c(t)}}function r(t){var e;t.done?i(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(o,a)}r((n=n.apply(t,e||[])).next())}))}var c;l.d(e,"a",(function(){return m})),l.d(e,"b",(function(){return K})),l.d(e,"c",(function(){return W})),l.d(e,"d",(function(){return zn})),l.d(e,"e",(function(){return C})),l.d(e,"f",(function(){return d})),l.d(e,"g",(function(){return u})),l.d(e,"h",(function(){return J})),l.d(e,"i",(function(){return X})),l.d(e,"j",(function(){return b})),l.d(e,"k",(function(){return I})),l.d(e,"l",(function(){return s})),l.d(e,"m",(function(){return c})),l.d(e,"n",(function(){return r})),l.d(e,"o",(function(){return p})),l.d(e,"p",(function(){return G})),l.d(e,"q",(function(){return g})),l.d(e,"r",(function(){return L})),l.d(e,"s",(function(){return y})),l.d(e,"t",(function(){return h})),l.d(e,"u",(function(){return N})),l.d(e,"v",(function(){return Z})),l.d(e,"w",(function(){return o})),l.d(e,"x",(function(){return a})),l.d(e,"y",(function(){return wn})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",a="{{username}}",r="{{scope}}",d="{{clientID}}",u="{{clientSecret}}";var Z;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(Z||(Z={}));const s="refresh_token_timer",b="pkce_code_verifier",I="#",h=["RS256","RS512","RS384","PS256"],m="code",p="session_state",g="sign_out_url",G="sign_out_success",y="state",X="openid";var V;!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(V||(V={}));class W{constructor(t,e,l){this.message=l,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 l={};return Object.entries(e).forEach(([t,e])=>{const n=t.split("_").map((t,e)=>0===e?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");l[n]=e}),l}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(t,e){const l=parseInt(t.split("#")[1]);return e?`${e}_request_${l}`:"request_"+l}static extractPKCEKeyFromStateParam(t){return"pkce_code_verifier#"+parseInt(t.split("request_")[1])}}C.getTenantDomainFromIdTokenPayload=(t,e="@")=>{const l=t.sub.split(e);return l.length>2?l[l.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={},l=yield this._config();return l.endpoints&&Object.keys(l.endpoints).forEach(t=>{const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());e[n]=(null==l?void 0:l.endpoints)?l.endpoints[t]:""}),Object.assign(Object.assign({},t),e)}))}resolveEndpointsExplicitly(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),l=["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 l.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(l=>{const n=l.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[n]=(null==e?void 0:e.endpoints)?e.endpoints[l]:""}),Object.assign({},t)}))}resolveEndpointsByBaseURL(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),l=e.baseUrl;if(!l)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(l=>{const n=l.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[n]=(null==e?void 0:e.endpoints)?e.endpoints[l]:""});const n={authorization_endpoint:l+"/oauth2/authorize",end_session_endpoint:l+"/oidc/logout",issuer:l+"/oauth2/token",jwks_uri:l+"/oauth2/jwks",check_session_iframe:l+"/oidc/checksession",revocation_endpoint:l+"/oauth2/revoke",token_endpoint:l+"/oauth2/token",userinfo_endpoint:l+"/oauth2/userinfo"};return Object.assign(Object.assign({},n),t)}))}validateIdToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,l=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 n;try{n=yield fetch(e,{credentials:l.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!==n.status||!n.ok)throw new W("JS-AUTH_HELPER-VIT-HE03",`Invalid response status received for jwks request (${n.statusText}).`,yield n.json());const i=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield n.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,l,n,i;const c=this._cryptoHelper.decodeIDToken(t),o=C.getTenantDomainFromIdTokenPayload(c),a=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",r=null!==(l=c.given_name)&&void 0!==l?l:"",d=null!==(n=c.family_name)&&void 0!==n?n:"",u=r&&d?`${r} ${d}`:r||d||"",Z=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:Z,tenantDomain:o,username:a},C.filterClaimsFromIDTokenPayload(c))}replaceCustomGrantTemplateTags(t,e){var l;return i(this,void 0,void 0,(function*(){let n="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"),n=i.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(l=i.clientSecret)&&void 0!==l?l:"")}))}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 l=yield t.json();if(l.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(l.id_token).then(()=>i(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(l,e);const t={accessToken:l.access_token,createdAt:l.created_at,expiresIn:l.expires_in,idToken:l.id_token,refreshToken:l.refresh_token,scope:l.scope,tokenType:l.token_type};return Promise.resolve(t)})));{const t={accessToken:l.access_token,createdAt:l.created_at,expiresIn:l.expires_in,idToken:l.id_token,refreshToken:l.refresh_token,scope:l.scope,tokenType:l.token_type};return yield this._dataLayer.setSessionData(l,e),Promise.resolve(t)}}))}generatePKCEKey(t){var e;return i(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getTemporaryData(t),n=[];Object.keys(l).forEach(t=>{t.startsWith("pkce_code_verifier")&&n.push(t)});const i=n.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 l=JSON.parse(this._cryptoUtils.base64URLDecode(t));for(const t of e)if(l.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 : "+l.kid+", Expected values: "+e.map(t=>t.kid).join(", "))}isValidIdToken(t,e,l,n,i,c){return this._cryptoUtils.verifyJwt(t,e,h,l,n,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 l,n,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 a=new URL(i);a.searchParams.append("response_type","code"),a.searchParams.append("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.searchParams.append("scope",r),a.searchParams.append("redirect_uri",o.signInRedirectURL),o.responseMode&&a.searchParams.append("response_mode",o.responseMode);const d=yield this._authenticationHelper.generatePKCEKey(e);if(o.enablePKCE){const t=null===(l=this._cryptoHelper)||void 0===l?void 0:l.getCodeVerifier(),i=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter(d,t,e),a.searchParams.append("code_challenge_method","S256"),a.searchParams.append("code_challenge",i)}o.prompt&&a.searchParams.append("prompt",o.prompt);const u=t;if(u)for(const[t,e]of Object.entries(u))""!=t&&""!=e&&"state"!==t&&a.searchParams.append(t,e.toString());return a.searchParams.append("state",C.generateStateParamForRequestCorrelation(d,u?null===(c=u.state)||void 0===c?void 0:c.toString():"")),a.toString()}))}requestAccessToken(t,e,l,n){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,n));const o=[];o.push("client_id="+c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&o.push("client_secret="+c.clientSecret);const a=t;let r;o.push("code="+a),o.push("grant_type=authorization_code"),o.push("redirect_uri="+c.signInRedirectURL),c.enablePKCE&&(o.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter(C.extractPKCEKeyFromStateParam(l),n))),yield this._dataLayer.removeTemporaryDataParameter(C.extractPKCEKeyFromStateParam(l),n));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,n)}))}refreshAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).token_endpoint,l=yield this._config(),n=yield this._dataLayer.getSessionData(t);if(!n.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="+l.clientID),i.push("refresh_token="+n.refresh_token),i.push("grant_type=refresh_token"),l.clientSecret&&l.clientSecret.trim().length>0&&i.push("client_secret="+l.clientSecret);try{c=yield fetch(e,{body:i.join("&"),credentials:l.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,l=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 n=[];let i;n.push("client_id="+l.clientID),n.push("token="+(yield this._dataLayer.getSessionData(t)).access_token),n.push("token_type_hint=access_token");try{i=yield fetch(e,{body:n.join("&"),credentials:l.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 l=yield this._oidcProviderMetaData(),n=yield this._config();let c;if(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:l.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,l])=>i(this,void 0,void 0,(function*(){const n=yield this._authenticationHelper.replaceCustomGrantTemplateTags(l,e);return`${t}=${n}`}))));let a=Object.assign({},C.getTokenRequestHeaders());t.attachToken&&(a=Object.assign(Object.assign({},a),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData(e)).access_token}));const r={body:o.join("&"),credentials:n.sendCookiesInRequests?V.Include:V.SameOrigin,headers:new Headers(a),method:"POST"};let d;try{d=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!==d.status||!d.ok)throw new W("JS-AUTH_CORE-RCG-HE03",`Invalid response status received for the custom grant request. (${d.statusText})`,yield d.json());return t.returnsSession?this._authenticationHelper.handleTokenResponse(d,e):Promise.resolve(yield d.json())}))}getBasicUserInfo(t){return i(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData(t),l=this._authenticationHelper.getAuthenticatedUserInfo(null==e?void 0:e.id_token);let n={allowedScopes:e.scope,sessionState:e.session_state};return Object.keys(l).forEach(t=>{void 0!==l[t]&&""!==l[t]&&null!==l[t]||delete l[t]}),n=Object.assign(Object.assign({},n),l),n}))}getDecodedIDToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getSessionData(t)).id_token;return this._cryptoHelper.decodeIDToken(e)}))}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 l=e.wellKnownEndpoint;if(l){let t;try{if(t=yield fetch(l),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,l,n,c,o,a,r,d,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!==(l=i.end_session_endpoint)&&void 0!==l?l:"",introspectionEndpoint:null!==(n=i.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(c=i.issuer)&&void 0!==c?c:"",jwksUri:null!==(o=i.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(a=i.registration_endpoint)&&void 0!==a?a:"",revocationEndpoint:null!==(r=i.revocation_endpoint)&&void 0!==r?r:"",tokenEndpoint:null!==(d=i.token_endpoint)&&void 0!==d?d:"",userinfoEndpoint:null!==(u=i.userinfo_endpoint)&&void 0!==u?u:""}}))}getSignOutURL(t){var e,l,n;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===(l=yield this._dataLayer.getSessionData(t))||void 0===l?void 0:l.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 a=null!==(n=null==c?void 0:c.signOutRedirectURL)&&void 0!==n?n:null==c?void 0:c.signInRedirectURL;if(!a||0===a.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=${a}&state=sign_out_success`}))}signOut(t){return i(this,void 0,void 0,(function*(){const e=yield this.getSignOutURL(t);return this._authenticationHelper.clearUserSessionData(t),e}))}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,l){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(C.extractPKCEKeyFromStateParam(e),t,l)}))}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 l;return i(this,void 0,void 0,(function*(){const n=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,i=n&&JSON.parse(n),c=Object.assign(Object.assign({},i),e),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,e,l){var n;return i(this,void 0,void 0,(function*(){const i=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),{[e]:l}),a=JSON.stringify(o);yield this._store.setData(t,a)}))}removeValue(t,e){var l;return i(this,void 0,void 0,(function*(){const n=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,i=n&&JSON.parse(n),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(Z.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.SessionData,e),t)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Z.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(Z.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(Z.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(Z.SessionData,t)))&&void 0!==e?e:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(Z.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(Z.OIDCProviderMetaData));return e&&JSON.parse(e)[t]}))}getTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(Z.TemporaryData,e));return l&&JSON.parse(l)[t]}))}getSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(Z.SessionData,e));return l&&JSON.parse(l)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,l){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.TemporaryData,l),t,e)}))}setSessionDataParameter(t,e,l){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.SessionData,l),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.SessionData,e),t)}))}}const Y={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class K{
|
|
31
31
|
/**
|
|
32
32
|
* This is the constructor method that returns an instance of the .
|
|
33
33
|
*
|
|
@@ -53,7 +53,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
53
53
|
* const config = {
|
|
54
54
|
* signInRedirectURL: "http://localhost:3000/sign-in",
|
|
55
55
|
* clientID: "client ID",
|
|
56
|
-
*
|
|
56
|
+
* baseUrl: "https://localhost:9443"
|
|
57
57
|
* }
|
|
58
58
|
*
|
|
59
59
|
* await auth.initialize(config);
|
|
@@ -61,7 +61,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
61
61
|
* @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
|
|
62
62
|
*
|
|
63
63
|
* @preserve
|
|
64
|
-
*/}initialize(t){var e,n
|
|
64
|
+
*/}initialize(t){var e,l,n;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!==(n=null===(l=t.scope)||void 0===l?void 0:l.filter(t=>{var e;return!(null===(e=null==Y?void 0:Y.scope)||void 0===e?void 0:e.includes(t))}))&&void 0!==n?n:[]]}))}))}
|
|
65
65
|
/**
|
|
66
66
|
* This method returns the `DataLayer` object that allows you to access authentication data.
|
|
67
67
|
*
|
|
@@ -102,7 +102,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
102
102
|
* @memberof AsgardeoAuthClient
|
|
103
103
|
*
|
|
104
104
|
* @preserve
|
|
105
|
-
*/getAuthorizationURL(t,e){return i(this,void 0,void 0,(function*(){const
|
|
105
|
+
*/getAuthorizationURL(t,e){return i(this,void 0,void 0,(function*(){const l=Object.assign({},t);return null==l||delete l.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(l,e):this._authenticationCore.getOIDCProviderMetaData(null==t?void 0:t.forceInit).then(()=>this._authenticationCore.getAuthorizationURL(l,e))}))}
|
|
106
106
|
/**
|
|
107
107
|
* This is an async method that sends a request to obtain the access token and returns a Promise
|
|
108
108
|
* that resolves with the token and other relevant data.
|
|
@@ -128,7 +128,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
128
128
|
* @memberof AsgardeoAuthClient
|
|
129
129
|
*
|
|
130
130
|
* @preserve
|
|
131
|
-
*/requestAccessToken(t,e,n
|
|
131
|
+
*/requestAccessToken(t,e,l,n){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(t,e,l,n):this._authenticationCore.getOIDCProviderMetaData(!1).then(()=>this._authenticationCore.requestAccessToken(t,e,l,n))}))}
|
|
132
132
|
/**
|
|
133
133
|
* This method clears all authentication data and returns the sign-out URL.
|
|
134
134
|
*
|
|
@@ -407,7 +407,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
407
407
|
* @memberof AsgardeoAuthClient
|
|
408
408
|
*
|
|
409
409
|
* @preserve
|
|
410
|
-
*/setPKCECode(t,e,
|
|
410
|
+
*/setPKCECode(t,e,l){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(t,e,l)}))}
|
|
411
411
|
/**
|
|
412
412
|
* This method returns if the sign-out is successful or not.
|
|
413
413
|
*
|
|
@@ -423,7 +423,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
423
423
|
* @memberof AsgardeoAuthClient
|
|
424
424
|
*
|
|
425
425
|
* @preserve
|
|
426
|
-
*/static isSignOutSuccessful(t){const e=new URL(t),
|
|
426
|
+
*/static isSignOutSuccessful(t){const e=new URL(t),l=e.searchParams.get("state"),n=Boolean(e.searchParams.get("error"));return!!l&&"sign_out_success"===l&&!n}
|
|
427
427
|
/**
|
|
428
428
|
* This method returns if the sign-out has failed or not.
|
|
429
429
|
*
|
|
@@ -439,7 +439,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
439
439
|
* @memberof AsgardeoAuthClient
|
|
440
440
|
*
|
|
441
441
|
* @preserve
|
|
442
|
-
*/static didSignOutFail(t){const e=new URL(t),
|
|
442
|
+
*/static didSignOutFail(t){const e=new URL(t),l=e.searchParams.get("state"),n=Boolean(e.searchParams.get("error"));return!!l&&"sign_out_success"===l&&n}
|
|
443
443
|
/**
|
|
444
444
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
445
445
|
*
|
|
@@ -450,7 +450,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
450
450
|
* const config = {
|
|
451
451
|
* signInRedirectURL: "http://localhost:3000/sign-in",
|
|
452
452
|
* clientID: "client ID",
|
|
453
|
-
*
|
|
453
|
+
* baseUrl: "https://localhost:9443"
|
|
454
454
|
* }
|
|
455
455
|
*
|
|
456
456
|
* await auth.updateConfig(config);
|
|
@@ -460,8 +460,8 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
460
460
|
* @memberof AsgardeoAuthClient
|
|
461
461
|
*
|
|
462
462
|
* @preserve
|
|
463
|
-
*/updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var N,J;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(N||(N={})),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"}(J||(J={}));const H="Y2hlY2tTZXNzaW9u";class U{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const e=parseInt(t.expires_in),n=setTimeout(()=>l(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(e<=10?e:e-10));yield this._dataLayer.setTemporaryDataParameter(s,JSON.stringify(n))}}))}clearRefreshTokenTimeout(){return l(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(s)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(s));clearTimeout(t)}}))}}class k{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&&!k.hasErrorInURL()&&!k.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return k.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!k.hasErrorInURL()&&!k.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){if(K.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!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 L=(()=>{let t,e,n,i,c,o,d,r,a,u,Z;const s=(l,d,r,a,u,s,m)=>{t=l,e=d,n=r,i=a,c=s,o=u,Z=m,i>-1&&b(),o>-1&&(u=setInterval(()=>{h()},1e3*o))},b=()=>l(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const d="opIFrame";function a(){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)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=e+"?client_id="+t+"&redirect_uri="+c,yield a(),r=setInterval(a,1e3*i),I()})),m=()=>{clearInterval(r),clearInterval(void 0)},I=()=>{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&&h())}))}),!1)},h=()=>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(k.canSendPromptNoneRequest()){k.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!==N.BrowserMemory&&a!==N.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield Z({prompt:"none",state:H});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(p),c=window.parent.parent;if(null!==l&&(l.includes(H)||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),k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(a===N.LocalStorage||a===N.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 k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}if(l.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}return k.setPromptNoneRequestSent(!1),c.location.href=yield d(),window.location.href="about:blank",yield k.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:s,receivePromptNoneResponse:g,reset:m}}))})();var B="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var x={exports:{}},A=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)}},T=A,F=Object.prototype.toString;function z(t){return Array.isArray(t)}function w(t){return void 0===t}function Q(t){return"[object ArrayBuffer]"===F.call(t)}function j(t){return null!==t&&"object"==typeof t}function P(t){if("[object Object]"!==F.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function M(t){return"[object Function]"===F.call(t)}function E(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),z(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 D={isArray:z,isArrayBuffer:Q,isBuffer:function(t){return null!==t&&!w(t)&&null!==t.constructor&&!w(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===F.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Q(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:j,isPlainObject:P,isUndefined:w,isDate:function(t){return"[object Date]"===F.call(t)},isFile:function(t){return"[object File]"===F.call(t)},isBlob:function(t){return"[object Blob]"===F.call(t)},isFunction:M,isStream:function(t){return j(t)&&M(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===F.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:E,merge:function t(){var e={};function n(n,l){P(e[l])&&P(n)?e[l]=t(e[l],n):P(n)?e[l]=t({},n):z(n)?e[l]=n.slice():e[l]=n}for(var l=0,i=arguments.length;l<i;l++)E(arguments[l],n);return e},extend:function(t,e,n){return E(e,(function(e,l){t[l]=n&&"function"==typeof e?T(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}},O=D;function q(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var _=function(t,e,n){if(!e)return t;var l;if(n)l=n(e);else if(O.isURLSearchParams(e))l=e.toString();else{var i=[];O.forEach(e,(function(t,e){null!=t&&(O.isArray(t)?e+="[]":t=[t],O.forEach(t,(function(t){O.isDate(t)?t=t.toISOString():O.isObject(t)&&(t=JSON.stringify(t)),i.push(q(e)+"="+q(t))})))})),l=i.join("&")}if(l){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+l}return t},$=D;function tt(){this.handlers=[]}tt.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},tt.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},tt.prototype.forEach=function(t){$.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var et=tt,nt=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function lt(){throw new Error("setTimeout has not been defined")}function it(){throw new Error("clearTimeout has not been defined")}var ct=lt,ot=it;function dt(t){if(ct===setTimeout)return setTimeout(t,0);if((ct===lt||!ct)&&setTimeout)return ct=setTimeout,setTimeout(t,0);try{return ct(t,0)}catch(e){try{return ct.call(null,t,0)}catch(e){return ct.call(this,t,0)}}}"function"==typeof nt.setTimeout&&(ct=setTimeout),"function"==typeof nt.clearTimeout&&(ot=clearTimeout);var rt,at=[],ut=!1,Zt=-1;function st(){ut&&rt&&(ut=!1,rt.length?at=rt.concat(at):Zt=-1,at.length&&bt())}function bt(){if(!ut){var t=dt(st);ut=!0;for(var e=at.length;e;){for(rt=at,at=[];++Zt<e;)rt&&rt[Zt].run();Zt=-1,e=at.length}rt=null,ut=!1,function(t){if(ot===clearTimeout)return clearTimeout(t);if((ot===it||!ot)&&clearTimeout)return ot=clearTimeout,clearTimeout(t);try{ot(t)}catch(e){try{return ot.call(null,t)}catch(e){return ot.call(this,t)}}}(t)}}function mt(t,e){this.fun=t,this.array=e}function It(){}mt.prototype.run=function(){this.fun.apply(null,this.array)};var ht=It,pt=It,gt=It,Gt=It,yt=It,Xt=It,Vt=It,Wt=nt.performance||{},Ct=Wt.now||Wt.mozNow||Wt.msNow||Wt.oNow||Wt.webkitNow||function(){return(new Date).getTime()},Rt=new Date,ft={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];at.push(new mt(t,e)),1!==at.length||ut||dt(bt)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:ht,addListener:pt,once:gt,off:Gt,removeListener:yt,removeAllListeners:Xt,emit:Vt,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*Ct.call(Wt),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-Rt)/1e3}},St=D,vt=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},Yt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Kt=vt,Nt=function(t,e,n,l,i){var c=new Error(t);return Kt(c,e,n,l,i)},Jt=Nt,Ht=D,Ut=Ht.isStandardBrowserEnv()?{write:function(t,e,n,l,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Ht.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),Ht.isString(l)&&o.push("path="+l),Ht.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(){}},kt=D,Lt=["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"],Bt=D,xt=Bt.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=Bt.isString(e)?l(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function At(t){this.message=t}At.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},At.prototype.__CANCEL__=!0;var Tt=At,Ft=D,zt=Ut,wt=_,Qt=xt,jt=Nt,Pt=Yt,Mt=Tt,Et=D,Dt=function(t,e){St.forEach(t,(function(n,l){l!==e&&l.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[l])}))},Ot=vt,qt={"Content-Type":"application/x-www-form-urlencoded"};function _t(t,e){!Et.isUndefined(t)&&Et.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var $t,te={transitional:Yt,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==ft&&"[object process]"===Object.prototype.toString.call(ft))&&($t=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)}Ft.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 Z=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 s(){if(r){var l="getAllResponseHeaders"in r?function(t){var e,n,l,i={};return t?(kt.forEach(t.split("\n"),(function(t){if(l=t.indexOf(":"),e=kt.trim(t.substr(0,l)).toLowerCase(),n=kt.trim(t.substr(l+1)),e){if(i[e]&&Lt.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(Jt("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(),wt(Z,t.params,t.paramsSerializer),!0),r.timeout=t.timeout,"onloadend"in r?r.onloadend=s:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(s)},r.onabort=function(){r&&(n(jt("Request aborted",t,"ECONNABORTED",r)),r=null)},r.onerror=function(){n(jt("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||Pt;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(jt(e,t,l.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},Ft.isStandardBrowserEnv()){var b=(t.withCredentials||Qt(Z))&&t.xsrfCookieName?zt.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in r&&Ft.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:r.setRequestHeader(e,t)})),Ft.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 Mt("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)}))}),$t),transformRequest:[function(t,e){return Dt(e,"Accept"),Dt(e,"Content-Type"),Et.isFormData(t)||Et.isArrayBuffer(t)||Et.isBuffer(t)||Et.isStream(t)||Et.isFile(t)||Et.isBlob(t)?t:Et.isArrayBufferView(t)?t.buffer:Et.isURLSearchParams(t)?(_t(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Et.isObject(t)||e&&"application/json"===e["Content-Type"]?(_t(e,"application/json"),function(t,e,n){if(Et.isString(t))try{return(0,JSON.parse)(t),Et.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||te.transitional,n=e&&e.silentJSONParsing,l=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||l&&Et.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw Ot(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, */*"}}};Et.forEach(["delete","get","head"],(function(t){te.headers[t]={}})),Et.forEach(["post","put","patch"],(function(t){te.headers[t]=Et.merge(qt)}));var ee=te,ne=D,le=ee,ie=function(t){return!(!t||!t.__CANCEL__)},ce=D,oe=function(t,e,n){var l=this||le;return ne.forEach(n,(function(n){t=n.call(l,t,e)})),t},de=ie,re=ee,ae=Tt;function ue(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new ae("canceled")}var Ze=D,se=function(t,e){e=e||{};var n={};function l(t,e){return Ze.isPlainObject(t)&&Ze.isPlainObject(e)?Ze.merge(t,e):Ze.isPlainObject(e)?Ze.merge({},e):Ze.isArray(e)?e.slice():e}function i(n){return Ze.isUndefined(e[n])?Ze.isUndefined(t[n])?void 0:l(void 0,t[n]):l(t[n],e[n])}function c(t){if(!Ze.isUndefined(e[t]))return l(void 0,e[t])}function o(n){return Ze.isUndefined(e[n])?Ze.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 Ze.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=r[t]||i,l=e(t);Ze.isUndefined(l)&&e!==d||(n[t]=l)})),n},be={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){be[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var me={};be.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&&!me[i]&&(me[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 Ie=D,he=_,pe=et,ge=function(t){return ue(t),t.headers=t.headers||{},t.data=oe.call(t,t.data,t.headers,t.transformRequest),t.headers=ce.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),ce.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||re.adapter)(t).then((function(e){return ue(t),e.data=oe.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return de(e)||(ue(t),e&&e.response&&(e.response.data=oe.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Ge=se,ye={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:be},Xe=ye.validators;function Ve(t){this.defaults=t,this.interceptors={request:new pe,response:new pe}}Ve.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=Ge(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&&ye.assertOptions(n,{silentJSONParsing:Xe.transitional(Xe.boolean),forcedJSONParsing:Xe.transitional(Xe.boolean),clarifyTimeoutError:Xe.transitional(Xe.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=[ge,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=ge(r)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},Ve.prototype.getUri=function(t){return t=Ge(this.defaults,t),he(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},Ie.forEach(["delete","get","head","options"],(function(t){Ve.prototype[t]=function(e,n){return this.request(Ge(n||{},{method:t,url:e,data:(n||{}).data}))}})),Ie.forEach(["post","put","patch"],(function(t){Ve.prototype[t]=function(e,n,l){return this.request(Ge(l||{},{method:t,url:e,data:n}))}}));var We=Ve,Ce=Tt;function Re(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 Ce(t),e(n.reason))}))}Re.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Re.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Re.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Re.source=function(){var t;return{token:new Re((function(e){t=e})),cancel:t}};var fe=Re,Se=D,ve=D,Ye=A,Ke=We,Ne=se,Je=function t(e){var n=new Ke(e),l=Ye(Ke.prototype.request,n);return ve.extend(l,Ke.prototype,n),ve.extend(l,n),l.create=function(n){return t(Ne(e,n))},l}(ee);Je.Axios=Ke,Je.Cancel=Tt,Je.CancelToken=fe,Je.isCancel=ie,Je.VERSION="0.26.1",Je.all=function(t){return Promise.all(t)},Je.spread=function(t){return function(e){return t.apply(null,e)}},Je.isAxiosError=function(t){return Se.isObject(t)&&!0===t.isAxiosError},x.exports=Je,x.exports.default=Je;var He,Ue=x.exports;let ke=He=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=Ue.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new He),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=Ue.all,this.axiosInstance.spread=Ue.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 He.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw He.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return He.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*(){He.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){He.isHandlerEnabled=!0}disableHandler(){He.isHandlerEnabled=!1}disableHandlerWithTimeout(t=He.DEFAULT_HANDLER_DISABLE_TIMEOUT){He.isHandlerEnabled=!1,setTimeout(()=>{He.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};ke.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,ke=He=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=>{}],ke);class Le{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 Be{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 xe{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 Ae=[],Te=[],Fe="undefined"!=typeof Uint8Array?Uint8Array:Array,ze=!1;function we(){ze=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)Ae[e]=t[e],Te[t.charCodeAt(e)]=e;Te["-".charCodeAt(0)]=62,Te["_".charCodeAt(0)]=63}function Qe(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(Ae[(i=l)>>18&63]+Ae[i>>12&63]+Ae[i>>6&63]+Ae[63&i]);return c.join("")}function je(t){var e;ze||we();for(var n=t.length,l=n%3,i="",c=[],o=16383,d=0,r=n-l;d<r;d+=o)c.push(Qe(t,d,d+o>r?r:d+o));return 1===l?(e=t[n-1],i+=Ae[e>>2],i+=Ae[e<<4&63],i+="=="):2===l&&(e=(t[n-2]<<8)+t[n-1],i+=Ae[e>>10],i+=Ae[e>>4&63],i+=Ae[e<<2&63],i+="="),c.push(i),c.join("")}function Pe(t,e,n,l,i){var c,o,d=8*i-l-1,r=(1<<d)-1,a=r>>1,u=-7,Z=n?i-1:0,s=n?-1:1,b=t[e+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[e+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=l;u>0;o=256*o+t[e+Z],Z+=s,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 Me(t,e,n,l,i,c){var o,d,r,a=8*c-i-1,u=(1<<a)-1,Z=u>>1,s=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=l?0:c-1,m=l?1:-1,I=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+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(d=0,o=u):o+Z>=1?(d=(e*r-1)*Math.pow(2,i),o+=Z):(d=e*Math.pow(2,Z-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*I}var Ee={}.toString,De=Array.isArray||function(t){return"[object Array]"==Ee.call(t)};$e.TYPED_ARRAY_SUPPORT=void 0===nt.TYPED_ARRAY_SUPPORT||nt.TYPED_ARRAY_SUPPORT;var Oe=qe();function qe(){return $e.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function _e(t,e){if(qe()<e)throw new RangeError("Invalid typed array length");return $e.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=$e.prototype:(null===t&&(t=new $e(e)),t.length=e),t}function $e(t,e,n){if(!($e.TYPED_ARRAY_SUPPORT||this instanceof $e))return new $e(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 nn(this,t)}return tn(this,t,e,n)}function tn(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),$e.TYPED_ARRAY_SUPPORT?(t=e).__proto__=$e.prototype:t=ln(t,e),t}(t,e,n,l):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!$e.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var l=0|dn(e,n),i=(t=_e(t,l)).write(e,n);return i!==l&&(t=t.slice(0,i)),t}(t,e,n):function(t,e){if(on(e)){var n=0|cn(e.length);return 0===(t=_e(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?_e(t,0):ln(t,e);if("Buffer"===e.type&&De(e.data))return ln(t,e.data)}var l;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function en(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 nn(t,e){if(en(e),t=_e(t,e<0?0:0|cn(e)),!$e.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function ln(t,e){var n=e.length<0?0:0|cn(e.length);t=_e(t,n);for(var l=0;l<n;l+=1)t[l]=255&e[l];return t}function cn(t){if(t>=qe())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+qe().toString(16)+" bytes");return 0|t}function on(t){return!(null==t||!t._isBuffer)}function dn(t,e){if(on(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 Hn(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Un(t).length;default:if(l)return Hn(t).length;e=(""+e).toLowerCase(),l=!0}}function rn(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 Vn(this,e,n);case"utf8":case"utf-8":return Gn(this,e,n);case"ascii":return yn(this,e,n);case"latin1":case"binary":return Xn(this,e,n);case"base64":return gn(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Wn(this,e,n);default:if(l)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),l=!0}}function an(t,e,n){var l=t[e];t[e]=t[n],t[n]=l}function un(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=$e.from(e,l)),on(e))return 0===e.length?-1:Zn(t,e,n,l,i);if("number"==typeof e)return e&=255,$e.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):Zn(t,[e],n,l,i);throw new TypeError("val must be string, number or Buffer")}function Zn(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 Z=!0,s=0;s<r;s++)if(a(t,c+s)!==a(e,s)){Z=!1;break}if(Z)return c}return-1}function sn(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 bn(t,e,n,l){return kn(Hn(e,t.length-n),t,n,l)}function mn(t,e,n,l){return kn(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,l)}function In(t,e,n,l){return mn(t,e,n,l)}function hn(t,e,n,l){return kn(Un(e),t,n,l)}function pn(t,e,n,l){return kn(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 gn(t,e,n){return 0===e&&n===t.length?je(t):je(t.slice(e,n))}function Gn(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,Z=a>239?4:a>223?3:a>191?2:1;if(i+Z<=n)switch(Z){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,Z=1):u>65535&&(u-=65536,l.push(u>>>10&1023|55296),u=56320|1023&u),l.push(u),i+=Z}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 yn(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 Xn(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 Vn(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+=Jn(t[c]);return i}function Wn(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 Cn(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 Rn(t,e,n,l,i,c){if(!on(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 fn(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 Sn(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 vn(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 Yn(t,e,n,l,i){return i||vn(t,0,n,4),Me(t,e,n,l,23,4),n+4}function Kn(t,e,n,l,i){return i||vn(t,0,n,8),Me(t,e,n,l,52,8),n+8}$e.poolSize=8192,$e._augment=function(t){return t.__proto__=$e.prototype,t},$e.from=function(t,e,n){return tn(null,t,e,n)},$e.TYPED_ARRAY_SUPPORT&&($e.prototype.__proto__=Uint8Array.prototype,$e.__proto__=Uint8Array),$e.alloc=function(t,e,n){return function(t,e,n,l){return en(e),e<=0?_e(t,e):void 0!==n?"string"==typeof l?_e(t,e).fill(n,l):_e(t,e).fill(n):_e(t,e)}(null,t,e,n)},$e.allocUnsafe=function(t){return nn(null,t)},$e.allocUnsafeSlow=function(t){return nn(null,t)},$e.isBuffer=Ln,$e.compare=function(t,e){if(!on(t)||!on(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},$e.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}},$e.concat=function(t,e){if(!De(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return $e.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var l=$e.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var c=t[n];if(!on(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(l,i),i+=c.length}return l},$e.byteLength=dn,$e.prototype._isBuffer=!0,$e.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)an(this,e,e+1);return this},$e.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)an(this,e,e+3),an(this,e+1,e+2);return this},$e.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)an(this,e,e+7),an(this,e+1,e+6),an(this,e+2,e+5),an(this,e+3,e+4);return this},$e.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Gn(this,0,t):rn.apply(this,arguments)},$e.prototype.equals=function(t){if(!on(t))throw new TypeError("Argument must be a Buffer");return this===t||0===$e.compare(this,t)},$e.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+">"},$e.prototype.compare=function(t,e,n,l,i){if(!on(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},$e.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},$e.prototype.indexOf=function(t,e,n){return un(this,t,e,n,!0)},$e.prototype.lastIndexOf=function(t,e,n){return un(this,t,e,n,!1)},$e.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 sn(this,t,e,n);case"utf8":case"utf-8":return bn(this,t,e,n);case"ascii":return mn(this,t,e,n);case"latin1":case"binary":return In(this,t,e,n);case"base64":return hn(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return pn(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+l);l=(""+l).toLowerCase(),c=!0}},$e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},$e.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),$e.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=$e.prototype;else{var i=e-t;n=new $e(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+t]}return n},$e.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||Cn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l},$e.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||Cn(t,e,this.length);for(var l=this[t+--e],i=1;e>0&&(i*=256);)l+=this[t+--e]*i;return l},$e.prototype.readUInt8=function(t,e){return e||Cn(t,1,this.length),this[t]},$e.prototype.readUInt16LE=function(t,e){return e||Cn(t,2,this.length),this[t]|this[t+1]<<8},$e.prototype.readUInt16BE=function(t,e){return e||Cn(t,2,this.length),this[t]<<8|this[t+1]},$e.prototype.readUInt32LE=function(t,e){return e||Cn(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},$e.prototype.readUInt32BE=function(t,e){return e||Cn(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},$e.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||Cn(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},$e.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||Cn(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},$e.prototype.readInt8=function(t,e){return e||Cn(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},$e.prototype.readInt16LE=function(t,e){e||Cn(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},$e.prototype.readInt16BE=function(t,e){e||Cn(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},$e.prototype.readInt32LE=function(t,e){return e||Cn(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},$e.prototype.readInt32BE=function(t,e){return e||Cn(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},$e.prototype.readFloatLE=function(t,e){return e||Cn(t,4,this.length),Pe(this,t,!0,23,4)},$e.prototype.readFloatBE=function(t,e){return e||Cn(t,4,this.length),Pe(this,t,!1,23,4)},$e.prototype.readDoubleLE=function(t,e){return e||Cn(t,8,this.length),Pe(this,t,!0,52,8)},$e.prototype.readDoubleBE=function(t,e){return e||Cn(t,8,this.length),Pe(this,t,!1,52,8)},$e.prototype.writeUIntLE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Rn(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},$e.prototype.writeUIntBE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Rn(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},$e.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,1,255,0),$e.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},$e.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,2,65535,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):fn(this,t,e,!0),e+2},$e.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,2,65535,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):fn(this,t,e,!1),e+2},$e.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,4,4294967295,0),$e.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):Sn(this,t,e,!0),e+4},$e.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,4,4294967295,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Sn(this,t,e,!1),e+4},$e.prototype.writeIntLE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Rn(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},$e.prototype.writeIntBE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Rn(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},$e.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,1,127,-128),$e.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},$e.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,2,32767,-32768),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):fn(this,t,e,!0),e+2},$e.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,2,32767,-32768),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):fn(this,t,e,!1),e+2},$e.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,4,2147483647,-2147483648),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):Sn(this,t,e,!0),e+4},$e.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||Rn(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Sn(this,t,e,!1),e+4},$e.prototype.writeFloatLE=function(t,e,n){return Yn(this,t,e,!0,n)},$e.prototype.writeFloatBE=function(t,e,n){return Yn(this,t,e,!1,n)},$e.prototype.writeDoubleLE=function(t,e,n){return Kn(this,t,e,!0,n)},$e.prototype.writeDoubleBE=function(t,e,n){return Kn(this,t,e,!1,n)},$e.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||!$e.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},$e.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&&!$e.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=on(t)?t:Hn(new $e(t,l).toString()),d=o.length;for(c=0;c<n-e;++c)this[c+e]=o[c%d]}return this};var Nn=/[^+\/0-9A-Za-z-_]/g;function Jn(t){return t<16?"0"+t.toString(16):t.toString(16)}function Hn(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 Un(t){return function(t){var e,n,l,i,c,o;ze||we();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 Fe(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=Te[t.charCodeAt(e)]<<18|Te[t.charCodeAt(e+1)]<<12|Te[t.charCodeAt(e+2)]<<6|Te[t.charCodeAt(e+3)],o[r++]=i>>16&255,o[r++]=i>>8&255,o[r++]=255&i;return 2===c?(i=Te[t.charCodeAt(e)]<<2|Te[t.charCodeAt(e+1)]>>4,o[r++]=255&i):1===c&&(i=Te[t.charCodeAt(e)]<<10|Te[t.charCodeAt(e+1)]<<4|Te[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(Nn,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function kn(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 Ln(t){return null!=t&&(!!t._isBuffer||Bn(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&Bn(t.slice(0,0))}(t))}function Bn(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var xn=Object.freeze({__proto__:null,Buffer:$e,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),$e.alloc(+t)},isBuffer:Ln,kMaxLength:Oe}),An={exports:{}},Tn={},Fn={};Object.defineProperty(Fn,"__esModule",{value:!0}),Fn.default=function(t){var e=t.length,n=e%4;if(!n)return t;var l=e,i=4-n,c=e+i,o=$e.alloc(c);for(o.write(t);i--;)o.write("=",l++);return o.toString()},Object.defineProperty(Tn,"__esModule",{value:!0});var zn=Fn;function wn(t,e){return void 0===e&&(e="utf8"),$e.isBuffer(t)?jn(t.toString("base64")):jn($e.from(t,e).toString("base64"))}function Qn(t){return t=t.toString(),zn.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function jn(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var Pn,Mn=wn;Mn.encode=wn,Mn.decode=function(t,e){return void 0===e&&(e="utf8"),$e.from(Qn(t),"base64").toString(e)},Mn.toBase64=Qn,Mn.fromBase64=jn,Mn.toBuffer=function(t){return $e.from(Qn(t),"base64")},Tn.default=Mn,(Pn=An).exports=Tn.default,Pn.exports.default=Pn.exports;var En=An.exports,Dn={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,Z,s,b,m,I,h,p,g;c>=64;){for(o=n[0],d=n[1],r=n[2],a=n[3],u=n[4],Z=n[5],s=n[6],b=n[7],I=0;I<16;I++)h=i+4*I,t[I]=(255&l[h])<<24|(255&l[h+1])<<16|(255&l[h+2])<<8|255&l[h+3];for(I=16;I<64;I++)p=((m=t[I-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,g=((m=t[I-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[I]=(p+t[I-7]|0)+(g+t[I-16]|0);for(I=0;I<64;I++)p=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&Z^~u&s)|0)+(b+(e[I]+t[I]|0)|0)|0,g=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&r^d&r)|0,b=s,s=Z,Z=u,u=a+p|0,a=r,r=d,d=o,o=p+g|0;n[0]+=o,n[1]+=d,n[2]+=r,n[3]+=a,n[4]+=u,n[5]+=Z,n[6]+=s,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),Z=new Uint8Array(u.digestLength),s=Z.length,b=new Uint8Array(l),m=0;m<l;m++)s===Z.length&&(d(Z,u,n,c),s=0),b[m]=Z[s++];return u.clean(),Z.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),Z=0;Z*o<l;Z++){var s=Z+1;d[0]=s>>>24&255,d[1]=s>>>16&255,d[2]=s>>>8&255,d[3]=s>>>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&&Z*o+b<l;b++)u[Z*o+b]=r[b]}for(Z=0;Z<o;Z++)r[Z]=a[Z]=0;for(Z=0;Z<4;Z++)d[Z]=0;return c.clean(),u}}(l);var i=l.default;for(var c in l)i[c]=l[c];t.exports=i}()}(Dn);var On=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(Dn.exports),qn=crypto;function _n(t){try{return null!=t&&"boolean"==typeof t.extractable&&"string"==typeof t.algorithm.name&&"string"==typeof t.type}catch(t){return!1}}const $n=new TextEncoder,tl=new TextDecoder,el=t=>{let e=t;e instanceof Uint8Array&&(e=tl.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>new Uint8Array(atob(t).split("").map(t=>t.charCodeAt(0))))(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class nl 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 ll extends nl{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 il extends nl{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 cl extends nl{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class ol extends nl{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class dl extends nl{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class rl extends nl{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class al extends nl{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class ul extends nl{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 Zl extends nl{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 sl extends nl{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 bl(){return"function"==typeof WebSocketPair}function ml(){try{return void 0!==ft.versions.node}catch(t){return!1}}function Il(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function hl(t,e){return t.name===e}function pl(t){return parseInt(t.name.slice(4),10)}var gl=(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},Gl=t=>_n(t);const yl=["CryptoKey"];function Xl(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 Vl=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 ol(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 ol('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 ol('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 ol('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(bl()||ml())&&"OKP":if("EdDSA"!==t.alg)throw new ol('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(t.crv){case"Ed25519":e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=t.d?["sign"]:["verify"];break;case ml()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},n=t.d?["sign"]:["verify"];break;default:throw new ol('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new ol('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 qn.subtle.importKey("raw",el(t.k),...c);const o={...t};return delete o.alg,qn.subtle.importKey("jwk",o,...c)},Wl=async(t,e,n,l)=>{const i=await function(t,e,n){if(_n(e))return function(t,e,...n){switch(e){case"HS256":case"HS384":case"HS512":{if(!hl(t.algorithm,"HMAC"))throw Il("HMAC");const n=parseInt(e.slice(2),10);if(pl(t.algorithm.hash)!==n)throw Il("SHA-"+n,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!hl(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Il("RSASSA-PKCS1-v1_5");const n=parseInt(e.slice(2),10);if(pl(t.algorithm.hash)!==n)throw Il("SHA-"+n,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!hl(t.algorithm,"RSA-PSS"))throw Il("RSA-PSS");const n=parseInt(e.slice(2),10);if(pl(t.algorithm.hash)!==n)throw Il("SHA-"+n,"algorithm.hash");break}case ml()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw Il("NODE-ED25519 or NODE-ED448");break;case bl()&&"EdDSA":if(!hl(t.algorithm,"NODE-ED25519"))throw Il("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!hl(t.algorithm,"ECDSA"))throw Il("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 Il(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(gl(e,...yl));return qn.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[n])}throw new TypeError(gl(e,...yl,"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(bl()||ml())&&"EdDSA":const{namedCurve:l}=e;return{name:l,namedCurve:l};default:throw new ol(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await qn.subtle.verify(c,i,n,l)}catch(t){return!1}};async function Cl(t,e,n){var l;if(!Xl(t))throw new dl("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new dl('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new dl("JWS Protected Header incorrect type");if(void 0===t.payload)throw new dl("JWS Payload missing");if("string"!=typeof t.signature)throw new dl("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Xl(t.header))throw new dl("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=el(t.protected);try{i=JSON.parse(tl.decode(e))}catch(t){throw new dl("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 dl("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 ol(`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)}(dl,new Map([["b64",!0]]),null==n?void 0:n.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new dl('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:d}=c;if("string"!=typeof d||!d)throw new dl('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 cl('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new dl("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new dl("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(!Gl(t))throw new TypeError(gl(t,...yl,"Uint8Array"));if("secret"!==t.type)throw new TypeError(yl.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Gl(t))throw new TypeError(gl(t,...yl));if("secret"===t.type)throw new TypeError(yl.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(yl.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(yl.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(yl.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(yl.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}($n.encode(null!==(l=t.protected)&&void 0!==l?l:""),$n.encode("."),"string"==typeof t.payload?$n.encode(t.payload):t.payload),Z=el(t.signature);if(!await Wl(d,e,Z,u))throw new sl;let s;s=o?el(t.payload):"string"==typeof t.payload?$n.encode(t.payload):t.payload;const b={payload:s};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),a?{...b,key:e}:b}const Rl=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var fl=t=>{const e=Rl.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 Sl=t=>t.toLowerCase().replace(/^application\//,"");var vl=(t,e,n={})=>{const{typ:l}=n;if(l&&("string"!=typeof t.typ||Sl(t.typ)!==Sl(l)))throw new ll('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse(tl.decode(e))}catch(t){}if(!Xl(i))throw new rl("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 ll('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=n;if(o&&i.sub!==o)throw new ll('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 ll('unexpected "aud" claim value',"aud","check_failed");var r,a;let u;switch(typeof n.clockTolerance){case"string":u=fl(n.clockTolerance);break;case"number":u=n.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:Z}=n,s=(b=Z||new Date,Math.floor(b.getTime()/1e3));var b;if(void 0!==i.iat||n.maxTokenAge){if("number"!=typeof i.iat)throw new ll('"iat" claim must be a number',"iat","invalid");if(void 0===i.exp&&i.iat>s+u)throw new ll('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new ll('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>s+u)throw new ll('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new ll('"exp" claim must be a number',"exp","invalid");if(i.exp<=s-u)throw new il('"exp" claim timestamp check failed',"exp","check_failed")}if(n.maxTokenAge){const t=s-i.iat;if(t-u>("number"==typeof n.maxTokenAge?n.maxTokenAge:fl(n.maxTokenAge)))throw new il('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new ll('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Yl(t){return Xl(t)}class Kl{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Yl)}(t))throw new al("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=this._jwks.keys.filter(t=>{let e=t.kty===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 ol('Unsupported "alg" value for a JSON Web Key Set')}}(n);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:c,length:o}=i;if(0===o)throw new ul;if(1!==o)throw new Zl;const d=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===d[n]){const t=await async function(t,e,n){if(!Xl(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?Vl({...t,alg:e,ext:!1}):el(t.k);case"RSA":if(void 0!==t.oth)throw new ol('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Vl({...t,alg:e});default:throw new ol('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},n);if(t instanceof Uint8Array||"public"!==t.type)throw new al("JSON Web Key Set members must be public keys");d[n]=t}return d[n]}}var Nl={exports:{}},Jl={exports:{}},Hl=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}(xn);
|
|
464
|
-
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var n=Hl,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)}}(Jl,Jl.exports);var Ul=Jl.exports.Buffer,kl=B.crypto||B.msCrypto;kl&&kl.getRandomValues?Nl.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var n=Ul.allocUnsafe(t);if(t>0)if(t>65536)for(var l=0;l<t;l+=65536)kl.getRandomValues(n.slice(l,l+65536));else kl.getRandomValues(n);return"function"==typeof e?ft.nextTick((function(){e(null,n)})):n}:Nl.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var Ll=Nl.exports;class Bl{base64URLEncode(t){return En.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return En.decode(t).toString()}hashSha256(t){return $e.from(On((new TextEncoder).encode(t)))}generateRandomBytes(t){return Ll(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=tl.decode(t)),"string"!=typeof t)throw new dl("Compact JWS must be a string or Uint8Array");const{0:l,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new dl("Invalid Compact JWS");const d=await Cl({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 rl("JWTs MUST NOT use unencoded payload");const c={payload:vl(i.protectedHeader,i.payload,n),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(d={keys:[e]},Kl.prototype.getKey.bind(new Kl(d))),{algorithms:n,audience:l,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0));var d}}const xl=t=>l(void 0,void 0,void 0,(function*(){var e;const n=(t=>{switch(t){case N.LocalStorage:return new Le;case N.SessionStorage:return new xe;case N.BrowserMemory:return new Be;default:return new xe}})(t.storage),i=new Bl,o=new K(n,i);yield o.initialize(t);const d=new U(o),r=o.getDataLayer(),a=yield L(()=>l(void 0,void 0,void 0,(function*(){return o.signOut()})),null!==(e=t.storage)&&void 0!==e?e:N.SessionStorage,t=>r.setSessionDataParameter(p,null!=t?t:""));let u=!1;const Z=ke.getInstance();let s,b,m=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,t=>l(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield o.getAccessToken())}))}))));const I=()=>l(void 0,void 0,void 0,(function*(){var t,e,n;const i=yield o.getOIDCServiceEndpoints(),c=yield r.getConfigData();a.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",()=>l(void 0,void 0,void 0,(function*(){return(yield o.getBasicUserInfo()).sessionState})),null!==(e=c.checkSessionInterval)&&void 0!==e?e:3,null!==(n=c.sessionRefreshInterval)&&void 0!==n?n:300,c.signInRedirectURL,t=>l(void 0,void 0,void 0,(function*(){return o.getAuthorizationURL(t)})))})),g=t=>l(void 0,void 0,void 0,(function*(){var e,n,i;let c=!0,a=!1;const Z=t.baseUrl||t.serverOrigin;if(null==t?void 0:t.tokenEndpoint){c=!1;for(const l of[...null!==(n=null===(e=yield r.getConfigData())||void 0===e?void 0:e.resourceServerURLs)&&void 0!==n?n:[],Z])if(l&&(null===(i=t.tokenEndpoint)||void 0===i?void 0:i.startsWith(l))){a=!0;break}}return t.shouldReplayAfterRefresh&&r.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),c||a?o.requestCustomGrant(t).then(e=>l(void 0,void 0,void 0,(function*(){return t.preventSignOutURLUpdate&&(u=!0),t.returnsSession?(d.refreshAccessTokenAutomatically(),o.getBasicUserInfo()):e}))).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`"))})),G=()=>l(void 0,void 0,void 0,(function*(){try{yield o.refreshAccessToken();const t=yield V();return t&&(yield g(t)),d.refreshAccessTokenAutomatically(),o.getBasicUserInfo()}catch(t){return Promise.reject(t)}})),X=(t,e,n)=>l(void 0,void 0,void 0,(function*(){const i=yield r.getConfigData();if(i.storage===N.BrowserMemory&&i.enablePKCE){const t=k.getPKCE(C.extractPKCEKeyFromStateParam(n));yield o.setPKCECode(C.extractPKCEKeyFromStateParam(n),t)}return o.requestAccessToken(t,e,n).then(()=>l(void 0,void 0,void 0,(function*(){return k.setSignOutURL(yield o.getSignOutURL()),d.clearRefreshTokenTimeout(),d.refreshAccessTokenAutomatically(),i.enableOIDCSessionManagement&&I(),o.getBasicUserInfo()}))).catch(t=>Promise.reject(t))})),V=()=>l(void 0,void 0,void 0,(function*(){const t=yield r.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}));return{disableHttpHandler:()=>((null==Z?void 0:Z.disableHandler)&&Z.disableHandler(),m=!1,!0),enableHttpHandler:()=>((null==Z?void 0:Z.enableHandler)&&Z.enableHandler(),m=!0,!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return o.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return o.getBasicUserInfo()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return o.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return o.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return o.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){var e,n;let i=!1;const c=yield r.getConfigData(),o=c.baseUrl||c.serverOrigin;for(const l of[...null!==(e=yield null==c?void 0:c.resourceServerURLs)&&void 0!==e?e:[],o])if(l&&(null===(n=null==t?void 0:t.url)||void 0===n?void 0:n.startsWith(l))){i=!0;break}if(i)return Z.request(t).then(t=>Promise.resolve(t)).catch(e=>l(void 0,void 0,void 0,(function*(){var n,l,i;if(401===(null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.status)||!(null==e?void 0:e.response)){let c;try{c=yield G()}catch(n){throw m&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},e),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new W("SPA-MAIN_THREAD_CLIENT-HR-SE01",null!==(l=null==n?void 0:n.name)&&void 0!==l?l:"Refresh token request failed.",null!==(i=null==n?void 0:n.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(c)try{const e=yield Z.request(t);return Promise.resolve(e)}catch(n){return m&&("function"==typeof s&&(yield s(n)),"function"==typeof b&&b()),Promise.reject(n)}}return m&&("function"==typeof s&&(yield s(e)),"function"==typeof b&&b()),Promise.reject(e)})));throw new W("SPA-MAIN_THREAD_CLIENT-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=>l(void 0,void 0,void 0,(function*(){var e,n,i;let c=!0;const d=yield r.getConfigData(),a=d.baseUrl||d.serverOrigin;for(const l of t){let t=!1;for(const c of[...null!==(n=null===(e=yield d)||void 0===e?void 0:e.resourceServerURLs)&&void 0!==n?n:[],a])if(c&&(null===(i=l.url)||void 0===i?void 0:i.startsWith(c))){t=!0;break}if(!t){c=!1;break}}const u=[];if(c)return t.forEach(t=>{u.push(Z.request(t))}),(null==Z?void 0:Z.all)&&Z.all(u).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){var e,n,i;if(401===(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status)||!(null==t?void 0:t.response)){let e;try{e=yield o.refreshAccessToken()}catch(e){throw m&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new W("SPA-MAIN_THREAD_CLIENT-HRA-SE01",null!==(n=null==e?void 0:e.name)&&void 0!==n?n:"Refresh token request failed.",null!==(i=null==e?void 0:e.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(e)return Z.all&&Z.all(u).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return m&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})))}return m&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})));throw new W("SPA-MAIN_THREAD_CLIENT-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`")})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return o.isAuthenticated()})),refreshAccessToken:G,requestCustomGrant:g,revokeAccessToken:()=>o.revokeAccessToken().then(()=>(a.reset(),d.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{s=t},setHttpRequestFinishCallback:t=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(t),b=t},setHttpRequestStartCallback:t=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(t)},signIn:(t,e,n,i)=>l(void 0,void 0,void 0,(function*(){var u,Z,s;const b=yield r.getConfigData();if(yield a.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(p,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(yield o.isAuthenticated())return d.clearRefreshTokenTimeout(),d.refreshAccessTokenAutomatically(),b.enableOIDCSessionManagement&&I(),Promise.resolve(yield o.getBasicUserInfo());let m,g,G;if((null==b?void 0:b.responseMode)===c.formPost&&e?(m=e,g=null!=n?n:"",G=null!=i?i:""):(m=null!==(u=new URL(window.location.href).searchParams.get(h))&&void 0!==u?u:"",g=null!==(Z=new URL(window.location.href).searchParams.get(p))&&void 0!==Z?Z:"",G=null!==(s=new URL(window.location.href).searchParams.get(y))&&void 0!==s?s:"",k.removeAuthorizationCode()),m&&G)return X(m,g,G);const V=new URL(window.location.href).searchParams.get("error"),R=new URL(window.location.href).searchParams.get("error_description");if(V){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-MAIN_THREAD_CLIENT-SI-SE01",V,null!=R?R:"")}return o.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){if(b.storage===N.BrowserMemory&&b.enablePKCE){const t=C.extractPKCEKeyFromStateParam(G);k.setPKCE(t,yield o.getPKCECode(G))}return location.href=t,yield k.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield o.isAuthenticated())&&!u?location.href=yield o.signOut():(location.href=k.getSignOutURL(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData()),d.clearRefreshTokenTimeout(),yield k.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){var t;const e=yield r.getConfigData();if(k.isInitializedSilentSignIn())return yield a.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const n=document.getElementById("rpIFrame"),i=null===(t=null==n?void 0:n.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield o.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(t);n.searchParams.set("response_mode","query");const l=n.toString();if(e.storage===N.BrowserMemory&&e.enablePKCE){const t=n.searchParams.get(y);k.setPKCE(C.extractPKCEKeyFromStateParam(null!=t?t:""),yield o.getPKCECode(null!=t?t:""))}i.src=l}catch(t){return Promise.reject(t)}return new Promise((t,e)=>{const n=setTimeout(()=>{t(!1)},1e4),i=c=>l(void 0,void 0,void 0,(function*(){var l,o,d;const r=c.data;"check_session_signed_out"==(null==r?void 0:r.type)&&(window.removeEventListener("message",i),clearTimeout(n),t(!1)),"check_session_signed_in"==(null==r?void 0:r.type)&&(null===(l=null==r?void 0:r.data)||void 0===l?void 0:l.code)&&X(r.data.code,null===(o=null==r?void 0:r.data)||void 0===o?void 0:o.sessionState,null===(d=null==r?void 0:r.data)||void 0===d?void 0:d.state).then(e=>{window.removeEventListener("message",i),t(e)}).catch(t=>{window.removeEventListener("message",i),e(t)}).finally(()=>{clearTimeout(n)})}));window.addEventListener("message",i)})})),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 o.updateConfig(l),l.enableOIDCSessionManagement&&n&&(a.reset(),I())}))}}));var Al,Tl=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCkscj10LndlbGxLbm93bkVuZHBvaW50fHwobnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS53ZWxsS25vd25FbmRwb2ludCksbj10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO3JldHVybiByfHxuKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0pKX1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnJiZyLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsfHx0LnNlcnZlck9yaWdpbjtpZighcil0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChyPT57Y29uc3Qgbj1yLnJlcGxhY2UoL1tBLVpdL2csKGU9PmBfJHtlLnRvTG93ZXJDYXNlKCl9YCkpO2Vbbl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tyXToiIn0pKTtjb25zdCBuPXthdXRob3JpemF0aW9uX2VuZHBvaW50OmAke3J9L29hdXRoMi9hdXRob3JpemVgLGVuZF9zZXNzaW9uX2VuZHBvaW50OmAke3J9L29pZGMvbG9nb3V0YCxpc3N1ZXI6YCR7cn0vb2F1dGgyL3Rva2VuYCxqd2tzX3VyaTpgJHtyfS9vYXV0aDIvandrc2AsY2hlY2tfc2Vzc2lvbl9pZnJhbWU6YCR7cn0vb2lkYy9jaGVja3Nlc3Npb25gLHJldm9jYXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL3Jldm9rZWAsdG9rZW5fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL3Rva2VuYCx1c2VyaW5mb19lbmRwb2ludDpgJHtyfS9vYXV0aDIvdXNlcmluZm9gfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLGUpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtsZXQgbjt0cnl7bj15aWVsZCBmZXRjaCh0LHtjcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2lufSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZigyMDAhPT1uLnN0YXR1c3x8IW4ub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoJHtuLnN0YXR1c1RleHR9KS5gLHlpZWxkIG4uanNvbigpKTtjb25zdCBpPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIse2tleXM6b309eWllbGQgbi5qc29uKCksYz15aWVsZCB0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sbyk7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5pc1ZhbGlkSWRUb2tlbihlLGMsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbGllbnRJRCxudWxsIT1pP2k6IiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkuc3ViLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xvY2tUb2xlcmFuY2UpfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxyLG4saTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9Yy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIix1PW51bGwhPT0ocj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsbD1udWxsIT09KG49by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PW4/bjoiIixkPXUmJmw/YCR7dX0gJHtsfWA6dXx8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSxjLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUscil7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKHIpO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShuPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09bj9uOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCR7ZS5zdGF0dXNUZXh0fSkuYCx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgbj15aWVsZCBlLmpzb24oKTtpZihuLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKG4uaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKG4scik7Y29uc3QgZT17YWNjZXNzVG9rZW46bi5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0Om4uY3JlYXRlZF9hdCxleHBpcmVzSW46bi5leHBpcmVzX2luLGlkVG9rZW46bi5pZF90b2tlbixyZWZyZXNoVG9rZW46bi5yZWZyZXNoX3Rva2VuLHNjb3BlOm4uc2NvcGUsdG9rZW5UeXBlOm4udG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKG4sciksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLG49W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJm4ucHVzaChlKX0pKTtjb25zdCBpPW4uc29ydCgpLnBvcCgpO3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChudWxsIT09KHI9bnVsbD09aT92b2lkIDA6aS5zcGxpdCgiIyIpWzFdKSYmdm9pZCAwIT09cj9yOiItMSIpKzF9YH0pKX19Y2xhc3MgbHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgcj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQscixuLGkscyl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsbyxyLG4saSxzKS50aGVuKChlPT5lP1Byb21pc2UucmVzb2x2ZSghMCk6UHJvbWlzZS5yZWplY3QobmV3IGEoIkpTLUNSWVBUT19IRUxQRVItSVZJVC1JVjAxIiwiSW52YWxpZCBJRCB0b2tlbi4iLCJJRCB0b2tlbiB2YWxpZGF0aW9uIHJldHVybmVkIGZhbHNlIikpKSl9ZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD10aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZS5zcGxpdCgiLiIpWzFdKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGR7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jcnlwdG9VdGlscz1yLHRoaXMuX2NyeXB0b0hlbHBlcj1uZXcgbChyKSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgdShlLHRoaXMuX2NyeXB0b0hlbHBlciksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLHIpe3ZhciBuLGksbztyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCB1PW5ldyBVUkwodCk7dS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgbD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksbD1zLnNjb3BlLmpvaW4oIiAiKSksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsbCksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHMuc2lnbkluUmVkaXJlY3RVUkwpLHMucmVzcG9uc2VNb2RlJiZ1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBkPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShyKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShuPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGQsZSxyKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlIix0KX1zLnByb21wdCYmdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBoPWU7aWYoaClmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGgpKSIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUmJnUuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgic3RhdGUiLGMuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGQsaD9udWxsPT09KG89aC5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpLHUudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO3ImJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHIsaSkpO2NvbnN0IHU9W107dS5wdXNoKGBjbGllbnRfaWQ9JHtvLmNsaWVudElEfWApLG8uY2xpZW50U2VjcmV0JiZvLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnUucHVzaChgY2xpZW50X3NlY3JldD0ke28uY2xpZW50U2VjcmV0fWApO2NvbnN0IGw9ZTtsZXQgZDt1LnB1c2goYGNvZGU9JHtsfWApLHUucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSx1LnB1c2goYHJlZGlyZWN0X3VyaT0ke28uc2lnbkluUmVkaXJlY3RVUkx9YCksby5lbmFibGVQS0NFJiYodS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczpvLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMoYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIixgUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtkLnN0YXR1c1RleHR9YCx5aWVsZCBkLmpzb24oKSk7cmV0dXJuIHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxpKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxyPXlpZWxkIHRoaXMuX2NvbmZpZygpLG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2lmKCFuLnJlZnJlc2hfdG9rZW4pdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBpPVtdO2xldCBvO2kucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxpLnB1c2goYHJlZnJlc2hfdG9rZW49JHtuLnJlZnJlc2hfdG9rZW59YCksaS5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxyLmNsaWVudFNlY3JldCYmci5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZpLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtyLmNsaWVudFNlY3JldH1gKTt0cnl7bz15aWVsZCBmZXRjaCh0LHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoIW8ub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLUhFMDQiLGBSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke28uc3RhdHVzVGV4dH1gLHlpZWxkIG8uanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShvLGUpfSkpfXJldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkucmV2b2NhdGlvbl9lbmRwb2ludCxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbj1bXTtsZXQgaTtuLnB1c2goYGNsaWVudF9pZD0ke3IuY2xpZW50SUR9YCksbi5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbn1gKSxuLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKTt0cnl7aT15aWVsZCBmZXRjaCh0LHtib2R5Om4uam9pbigiJiIpLGNyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1ORTAyIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKDIwMCE9PWkuc3RhdHVzfHwhaS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDMtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciByZXZva2UgYWNjZXNzIHRva2VuIHJlcXVlc3QgKCR7aS5zdGF0dXNUZXh0fSkuYCx5aWVsZCBpLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShpKX0pKX1yZXF1ZXN0Q3VzdG9tR3JhbnQoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBvO2lmKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50Om4udG9rZW5fZW5kcG9pbnQsIW98fDA9PT1vLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCB1PXlpZWxkIFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKCgoW2Usbl0pPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MobixyKTtyZXR1cm5gJHtlfT0ke3R9YH0pKSkpKTtsZXQgbD1PYmplY3QuYXNzaWduKHt9LGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKTtlLmF0dGFjaFRva2VuJiYobD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbCkse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocikpLmFjY2Vzc190b2tlbn1gfSkpO2NvbnN0IGQ9e2JvZHk6dS5qb2luKCImIiksY3JlZGVudGlhbHM6aS5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGwpLG1ldGhvZDoiUE9TVCJ9O2xldCBoO3RyeXtoPXlpZWxkIGZldGNoKG8sZCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQ0ctTkUwMiIsIlRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdCBmYWlsZWQuIixudWxsIT1lP2U6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBjdXN0b20gZ3JhbnQgZmFpbGVkLiIpfWlmKDIwMCE9PWguc3RhdHVzfHwhaC5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4gKCR7aC5zdGF0dXNUZXh0fSlgLHlpZWxkIGguanNvbigpKTtyZXR1cm4gZS5yZXR1cm5zU2Vzc2lvbj90aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGgscik6UHJvbWlzZS5yZXNvbHZlKHlpZWxkIGguanNvbigpKX0pKX1nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkscj10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09dD92b2lkIDA6dC5pZF90b2tlbik7bGV0IG49e2FsbG93ZWRTY29wZXM6dC5zY29wZSxzZXNzaW9uU3RhdGU6dC5zZXNzaW9uX3N0YXRlfTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZT0+e3ZvaWQgMCE9PXJbZV0mJiIiIT09cltlXSYmbnVsbCE9PXJbZV18fGRlbGV0ZSByW2VdfSkpLG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHIpLG59KSl9Z2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmlkX3Rva2VuO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbih0KX0pKX1nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW59KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IG49dC53ZWxsS25vd25FbmRwb2ludHx8KG51bGw9PT0ocj1udWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyl8fHZvaWQgMD09PXI/dm9pZCAwOnIud2VsbEtub3duRW5kcG9pbnQpO2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luKXt0cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAyIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgYmFzZSB1cmwgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfXRyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAzIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXt2YXIgZSxyLG4saSxvLHMsYSxjLHUsbDtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT10LmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0ocj10LmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09cj9yOiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KG49dC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PW4/bjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPXQuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWk/aToiIixpc3N1ZXI6bnVsbCE9PShvPXQuaXNzdWVyKSYmdm9pZCAwIT09bz9vOiIiLGp3a3NVcmk6bnVsbCE9PShzPXQuandrc191cmkpJiZ2b2lkIDAhPT1zP3M6IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShhPXQucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KGM9dC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09Yz9jOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PXQudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGw9dC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWw/bDoiIix3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTChlKXt2YXIgcixuLGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGw9PT0ocj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmRfc2Vzc2lvbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAxIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9bnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uaWRfdG9rZW47aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y29uc3QgYz1udWxsIT09KGk9bnVsbD09bz92b2lkIDA6by5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1pP2k6bnVsbD09bz92b2lkIDA6by5zaWduSW5SZWRpcmVjdFVSTDtpZighY3x8MD09PWMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO3JldHVybmAke3R9P2lkX3Rva2VuX2hpbnQ9JHtzfSZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9JHtjfSZzdGF0ZT1zaWduX291dF9zdWNjZXNzYH0pKX1zaWduT3V0KGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLmdldFNpZ25PdXRVUkwoZSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLHR9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLHIpfSkpfXNldFBLQ0VDb2RlKGUscixuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksZSxuKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBoKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGQodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovfWluaXRpYWxpemUoZSl7dmFyIHIsbixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZiksZSkse3Njb3BlOlsuLi5udWxsIT09KHI9Zi5zY29wZSkmJnZvaWQgMCE9PXI/cjpbXSwuLi5udWxsIT09KGk9bnVsbD09PShuPWUuc2NvcGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PWY/dm9pZCAwOmYuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWk/aTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxyKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgZG9lc24ndCBjbGVhciB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFNpZ25PdXRVUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSUQgdG9rZW4gYW5kIHJldHVybnMgaXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RGVjb2RlZElEVG9rZW5QYXlsb2FkPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkZWNvZGVkIElEIHRva2VuIHBheWxvYWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERlY29kZWRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBhdXRoLmdldElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm8+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxyKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUscixuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLHIsbil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSkscj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIiksbj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFyJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1yJiYhbn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmbn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjdXBkYXRlQ29uZmlnCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi91cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUudXBkYXRlQ29uZmlnKGUpfSkpfX1jb25zdCBnPSJpbml0Ijt2YXIgeSx2OyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KHZ8fCh2PXt9KSk7Y29uc3QgbT0iY3VzdG9tX2dyYW50X2NvbmZpZyI7Y2xhc3Mgd3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKHQucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludCh0LmV4cGlyZXNfaW4pLG49c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KG4pKX19KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTtjbGVhclRpbWVvdXQoZSl9fSkpfX1jbGFzcyBfe2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fXZhciBiPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEUoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLG4uZ2V0P246e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19fSl9KSksdH12YXIgaz17ZXhwb3J0czp7fX0sUj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbj0wO248ci5sZW5ndGg7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiBlLmFwcGx5KHQscil9fSxUPVIsQT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBQKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1BLmNhbGwoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBJKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09QS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUEuY2FsbChlKX1mdW5jdGlvbiBIKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksQyhlKSlmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspdC5jYWxsKG51bGwsZVtyXSxyLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgTD17aXNBcnJheTpDLGlzQXJyYXlCdWZmZXI6UCxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFEKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIUQoZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1BLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlAoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6Tyxpc1BsYWluT2JqZWN0OkksaXNVbmRlZmluZWQ6RCxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09QS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09QS5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09QS5jYWxsKGUpfSxpc0Z1bmN0aW9uOlUsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSkmJlUoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1BLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6SCxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe0kodFtuXSkmJkkocik/dFtuXT1lKHRbbl0scik6SShyKT90W25dPWUoe30scik6QyhyKT90W25dPXIuc2xpY2UoKTp0W25dPXJ9Zm9yKHZhciBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspSChhcmd1bWVudHNbbl0scik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIEgodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1QodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0sTT1MO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGo9ZnVuY3Rpb24oZSx0LHIpe2lmKCF0KXJldHVybiBlO3ZhciBuO2lmKHIpbj1yKHQpO2Vsc2UgaWYoTS5pc1VSTFNlYXJjaFBhcmFtcyh0KSluPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO00uZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihNLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxNLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7TS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6TS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaChOKHQpKyI9IitOKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX0seD1MO2Z1bmN0aW9uIHEoKXt0aGlzLmhhbmRsZXJzPVtdfXEucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIXImJnIuc3luY2hyb25vdXMscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0scS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LHEucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7eC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgSz1xLEo9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiBCKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gRigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFc9QiwkPUY7ZnVuY3Rpb24geihlKXtpZihXPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChXPT09Qnx8IVcpJiZzZXRUaW1lb3V0KXJldHVybiBXPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVyhlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gVy5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gVy5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBKLnNldFRpbWVvdXQmJihXPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBKLmNsZWFyVGltZW91dCYmKCQ9Y2xlYXJUaW1lb3V0KTt2YXIgWSxWPVtdLEc9ITEsWD0tMTtmdW5jdGlvbiBaKCl7RyYmWSYmKEc9ITEsWS5sZW5ndGg/Vj1ZLmNvbmNhdChWKTpYPS0xLFYubGVuZ3RoJiZRKCkpfWZ1bmN0aW9uIFEoKXtpZighRyl7dmFyIGU9eihaKTtHPSEwO2Zvcih2YXIgdD1WLmxlbmd0aDt0Oyl7Zm9yKFk9VixWPVtdOysrWDx0OylZJiZZW1hdLnJ1bigpO1g9LTEsdD1WLmxlbmd0aH1ZPW51bGwsRz0hMSxmdW5jdGlvbihlKXtpZigkPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKCQ9PT1GfHwhJCkmJmNsZWFyVGltZW91dClyZXR1cm4gJD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXskKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gJC5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuICQuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBlZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWVlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiB0ZSgpe312YXIgcmU9dGUsbmU9dGUsaWU9dGUsb2U9dGUsc2U9dGUsYWU9dGUsY2U9dGU7dmFyIHVlPUoucGVyZm9ybWFuY2V8fHt9LGxlPXVlLm5vd3x8dWUubW96Tm93fHx1ZS5tc05vd3x8dWUub05vd3x8dWUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgZGU9bmV3IERhdGU7dmFyIGhlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO1YucHVzaChuZXcgZWUoZSx0KSksMSE9PVYubGVuZ3RofHxHfHx6KFEpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOnJlLGFkZExpc3RlbmVyOm5lLG9uY2U6aWUsb2ZmOm9lLHJlbW92ZUxpc3RlbmVyOnNlLHJlbW92ZUFsbExpc3RlbmVyczphZSxlbWl0OmNlLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKmxlLmNhbGwodWUpLHI9TWF0aC5mbG9vcih0KSxuPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihyLT1lWzBdLChuLT1lWzFdKTwwJiYoci0tLG4rPTFlOSkpLFtyLG5dfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLWRlKS8xZTN9fSxmZT1oZSxwZT1MLGdlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSx5ZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sdmU9Z2UsbWU9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1uZXcgRXJyb3IoZSk7cmV0dXJuIHZlKG8sdCxyLG4saSl9LHdlPW1lLF9lPUwsYmU9X2UuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLF9lLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxfZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksX2UuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxTZT1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxFZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxrZT1MLFJlPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sVGU9TCxBZT1UZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIGUsdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIG4oZSl7dmFyIG49ZTtyZXR1cm4gdCYmKHIuc2V0QXR0cmlidXRlKCJocmVmIixuKSxuPXIuaHJlZiksci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnIuaG9zdCxzZWFyY2g6ci5zZWFyY2g/ci5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ci5ob3N0bmFtZSxwb3J0OnIucG9ydCxwYXRobmFtZToiLyI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKT9yLnBhdGhuYW1lOiIvIityLnBhdGhuYW1lfX1yZXR1cm4gZT1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbih0KXt2YXIgcj1UZS5pc1N0cmluZyh0KT9uKHQpOnQ7cmV0dXJuIHIucHJvdG9jb2w9PT1lLnByb3RvY29sJiZyLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9O2Z1bmN0aW9uIENlKGUpe3RoaXMubWVzc2FnZT1lfUNlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxDZS5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgRGU9Q2UsUGU9TCxPZT1mdW5jdGlvbihlLHQscil7dmFyIG49ci5jb25maWcudmFsaWRhdGVTdGF0dXM7ci5zdGF0dXMmJm4mJiFuKHIuc3RhdHVzKT90KHdlKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrci5zdGF0dXMsci5jb25maWcsbnVsbCxyLnJlcXVlc3QscikpOmUocil9LEllPWJlLFVlPWosSGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmIVNlKHQpP0VlKGUsdCk6dH0sTGU9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGtlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWtlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWtlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmUmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0sTWU9QWUsTmU9bWUsamU9eWUseGU9RGUscWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuLGk9ZS5kYXRhLG89ZS5oZWFkZXJzLHM9ZS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gYSgpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1QZS5pc0Zvcm1EYXRhKGkpJiZkZWxldGUgb1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIHU9ZS5hdXRoLnVzZXJuYW1lfHwiIixsPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7by5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EodSsiOiIrbCl9dmFyIGQ9SGUoZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYoYyl7dmFyIG49ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP0xlKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsaT17ZGF0YTpzJiYidGV4dCIhPT1zJiYianNvbiIhPT1zP2MucmVzcG9uc2U6Yy5yZXNwb25zZVRleHQsc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6bixjb25maWc6ZSxyZXF1ZXN0OmN9O09lKChmdW5jdGlvbihlKXt0KGUpLGEoKX0pLChmdW5jdGlvbihlKXtyKGUpLGEoKX0pLGkpLGM9bnVsbH19aWYoYy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksVWUoZCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxjLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YyYmND09PWMucmVhZHlTdGF0ZSYmKDAhPT1jLnN0YXR1c3x8Yy5yZXNwb25zZVVSTCYmMD09PWMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoaCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihyKE5lKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe3IoTmUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixuPWUudHJhbnNpdGlvbmFsfHxqZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih0PWUudGltZW91dEVycm9yTWVzc2FnZSkscihOZSh0LGUsbi5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LFBlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBmPShlLndpdGhDcmVkZW50aWFsc3x8TWUoZCkpJiZlLnhzcmZDb29raWVOYW1lP0llLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2YmJihvW2UueHNyZkhlYWRlck5hbWVdPWYpfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJlBlLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1pJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTpjLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxQZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxzJiYianNvbiIhPT1zJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYobj1mdW5jdGlvbihlKXtjJiYocighZXx8ZSYmZS50eXBlP25ldyB4ZSgiY2FuY2VsZWQiKTplKSxjLmFib3J0KCksYz1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP24oKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKSxpfHwoaT1udWxsKSxjLnNlbmQoaSl9KSl9LEtlPUwsSmU9ZnVuY3Rpb24oZSx0KXtwZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LEJlPWdlLEZlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gV2UoZSx0KXshS2UuaXNVbmRlZmluZWQoZSkmJktlLmlzVW5kZWZpbmVkKGVbIkNvbnRlbnQtVHlwZSJdKSYmKGVbIkNvbnRlbnQtVHlwZSJdPXQpfXZhciAkZSx6ZT17dHJhbnNpdGlvbmFsOnllLGFkYXB0ZXI6KCgidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0fHx2b2lkIDAhPT1mZSYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZlKSkmJigkZT1xZSksJGUpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEplKHQsIkFjY2VwdCIpLEplKHQsIkNvbnRlbnQtVHlwZSIpLEtlLmlzRm9ybURhdGEoZSl8fEtlLmlzQXJyYXlCdWZmZXIoZSl8fEtlLmlzQnVmZmVyKGUpfHxLZS5pc1N0cmVhbShlKXx8S2UuaXNGaWxlKGUpfHxLZS5pc0Jsb2IoZSk/ZTpLZS5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpLZS5pc1VSTFNlYXJjaFBhcmFtcyhlKT8oV2UodCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxlLnRvU3RyaW5nKCkpOktlLmlzT2JqZWN0KGUpfHx0JiYiYXBwbGljYXRpb24vanNvbiI9PT10WyJDb250ZW50LVR5cGUiXT8oV2UodCwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGUsdCxyKXtpZihLZS5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKGUpLEtlLnRyaW0oZSl9Y2F0Y2goZSl7aWYoIlN5bnRheEVycm9yIiE9PWUubmFtZSl0aHJvdyBlfXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoZSl9KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHx6ZS50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZLZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgQmUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtLZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLEtlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1LZS5tZXJnZShGZSl9KSk7dmFyIFllPXplLFZlPUwsR2U9WWUsWGU9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9LFplPUwsUWU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXN8fEdlO3JldHVybiBWZS5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9ci5jYWxsKG4sZSx0KX0pKSxlfSxldD1YZSx0dD1ZZSxydD1EZTtmdW5jdGlvbiBudChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcnQoImNhbmNlbGVkIil9dmFyIGl0PUwsb3Q9ZnVuY3Rpb24oZSx0KXt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gaXQuaXNQbGFpbk9iamVjdChlKSYmaXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZShlLHQpOml0LmlzUGxhaW5PYmplY3QodCk/aXQubWVyZ2Uoe30sdCk6aXQuaXNBcnJheSh0KT90LnNsaWNlKCk6dH1mdW5jdGlvbiBpKHIpe3JldHVybiBpdC5pc1VuZGVmaW5lZCh0W3JdKT9pdC5pc1VuZGVmaW5lZChlW3JdKT92b2lkIDA6bih2b2lkIDAsZVtyXSk6bihlW3JdLHRbcl0pfWZ1bmN0aW9uIG8oZSl7aWYoIWl0LmlzVW5kZWZpbmVkKHRbZV0pKXJldHVybiBuKHZvaWQgMCx0W2VdKX1mdW5jdGlvbiBzKHIpe3JldHVybiBpdC5pc1VuZGVmaW5lZCh0W3JdKT9pdC5pc1VuZGVmaW5lZChlW3JdKT92b2lkIDA6bih2b2lkIDAsZVtyXSk6bih2b2lkIDAsdFtyXSl9ZnVuY3Rpb24gYShyKXtyZXR1cm4gciBpbiB0P24oZVtyXSx0W3JdKTpyIGluIGU/bih2b2lkIDAsZVtyXSk6dm9pZCAwfXZhciBjPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyxhZGFwdGVyOnMscmVzcG9uc2VUeXBlOnMseHNyZkNvb2tpZU5hbWU6cyx4c3JmSGVhZGVyTmFtZTpzLG9uVXBsb2FkUHJvZ3Jlc3M6cyxvbkRvd25sb2FkUHJvZ3Jlc3M6cyxkZWNvbXByZXNzOnMsbWF4Q29udGVudExlbmd0aDpzLG1heEJvZHlMZW5ndGg6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOmF9O3JldHVybiBpdC5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksKGZ1bmN0aW9uKGUpe3ZhciB0PWNbZV18fGksbj10KGUpO2l0LmlzVW5kZWZpbmVkKG4pJiZ0IT09YXx8KHJbZV09bil9KSkscn0sc3Q9IjAuMjYuMSIsYXQ9c3QsY3Q9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2N0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgdXQ9e307Y3QudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIltBeGlvcyB2IithdCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixpLG8pe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSk7cmV0dXJuIHQmJiF1dFtpXSYmKHV0W2ldPSEwLGNvbnNvbGUud2FybihuKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixpLG8pfX07dmFyIGx0PXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxyKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPW4ubGVuZ3RoO2ktLSA+MDspe3ZhciBvPW5baV0scz10W29dO2lmKHMpe3ZhciBhPWVbb10sYz12b2lkIDA9PT1hfHxzKGEsbyxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6Y3R9LGR0PUwsaHQ9aixmdD1LLHB0PWZ1bmN0aW9uKGUpe3JldHVybiBudChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9UWUuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9WmUubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxaZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fHR0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBudChlKSx0LmRhdGE9UWUuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gZXQodCl8fChudChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPVFlLmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LGd0PW90LHl0PWx0LHZ0PXl0LnZhbGlkYXRvcnM7ZnVuY3Rpb24gbXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBmdCxyZXNwb25zZTpuZXcgZnR9fW10LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PWd0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIHI9dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09ciYmeXQuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6dnQudHJhbnNpdGlvbmFsKHZ0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6dnQudHJhbnNpdGlvbmFsKHZ0LmJvb2xlYW4pfSwhMSk7dmFyIG49W10saT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoaT1pJiZlLnN5bmNocm9ub3VzLG4udW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIG8scz1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtzLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWkpe3ZhciBhPVtwdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhLG4pLGE9YS5jb25jYXQocyksbz1Qcm9taXNlLnJlc29sdmUodCk7YS5sZW5ndGg7KW89by50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgYz10O24ubGVuZ3RoOyl7dmFyIHU9bi5zaGlmdCgpLGw9bi5zaGlmdCgpO3RyeXtjPXUoYyl9Y2F0Y2goZSl7bChlKTticmVha319dHJ5e289cHQoYyl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7cy5sZW5ndGg7KW89by50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBvfSxtdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPWd0KHRoaXMuZGVmYXVsdHMsZSksaHQoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sZHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe210LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoZ3Qocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxkdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe210LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChndChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgd3Q9bXQsX3Q9RGU7ZnVuY3Rpb24gYnQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHIuX2xpc3RlbmVycyl7dmFyIHQsbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxuO3QrKylyLl9saXN0ZW5lcnNbdF0oZSk7ci5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Iuc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUodCl9LG59LGUoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IF90KGUpLHQoci5yZWFzb24pKX0pKX1idC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxidC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxidC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LGJ0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGJ0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgU3Q9YnQsRXQ9TCxrdD1MLFJ0PVIsVHQ9d3QsQXQ9b3Q7dmFyIEN0PWZ1bmN0aW9uIGUodCl7dmFyIHI9bmV3IFR0KHQpLG49UnQoVHQucHJvdG90eXBlLnJlcXVlc3Qscik7cmV0dXJuIGt0LmV4dGVuZChuLFR0LnByb3RvdHlwZSxyKSxrdC5leHRlbmQobixyKSxuLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gZShBdCh0LHIpKX0sbn0oWWUpO0N0LkF4aW9zPVR0LEN0LkNhbmNlbD1EZSxDdC5DYW5jZWxUb2tlbj1TdCxDdC5pc0NhbmNlbD1YZSxDdC5WRVJTSU9OPXN0LEN0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEN0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LEN0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gRXQuaXNPYmplY3QoZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9LGsuZXhwb3J0cz1DdCxrLmV4cG9ydHMuZGVmYXVsdD1DdDt2YXIgRHQsUHQ9ay5leHBvcnRzO2xldCBPdD1EdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1QdC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBEdCksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9UHQuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9UHQuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxyPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57ci5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9cn1yZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIER0LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQodD0hMCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPXJ9KSl9ZW5hYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtEdC5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoZT1EdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUKXtEdC5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtPdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxPdD1EdD1mdW5jdGlvbihlLHQscixuKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09bj9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpuO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZT0+e31dLE90KTtjbGFzcyBJdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LHIpfSkpfWdldERhdGEodCl7dmFyIHIsbjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KG49bnVsbD09PShyPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KSkmJnZvaWQgMCE9PW4/bjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19dmFyIFV0PVtdLEh0PVtdLEx0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE10PSExO2Z1bmN0aW9uIE50KCl7TXQ9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KVV0W3RdPWVbdF0sSHRbZS5jaGFyQ29kZUF0KHQpXT10O0h0WyItIi5jaGFyQ29kZUF0KDApXT02MixIdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24ganQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKFV0WyhpPW4pPj4xOCY2M10rVXRbaT4+MTImNjNdK1V0W2k+PjYmNjNdK1V0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiB4dChlKXt2YXIgdDtNdHx8TnQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLGM9ci1uO2E8YzthKz1zKW8ucHVzaChqdChlLGEsYStzPmM/YzphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPVV0W3Q+PjJdLGkrPVV0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9VXRbdD4+MTBdLGkrPVV0W3Q+PjQmNjNdLGkrPVV0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gcXQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSxjPSgxPDxhKS0xLHU9Yz4+MSxsPS03LGQ9cj9pLTE6MCxoPXI/LTE6MSxmPWVbdCtkXTtmb3IoZCs9aCxvPWYmKDE8PC1sKS0xLGY+Pj0tbCxsKz1hO2w+MDtvPTI1NipvK2VbdCtkXSxkKz1oLGwtPTgpO2ZvcihzPW8mKDE8PC1sKS0xLG8+Pj0tbCxsKz1uO2w+MDtzPTI1NipzK2VbdCtkXSxkKz1oLGwtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PWMpcmV0dXJuIHM/TmFOOjEvMCooZj8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPXV9cmV0dXJuKGY/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gS3QoZSx0LHIsbixpLG8pe3ZhciBzLGEsYyx1PTgqby1pLTEsbD0oMTw8dSktMSxkPWw+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGY9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1sKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihjPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLGMqPTIpLCh0Kz1zK2Q+PTE/aC9jOmgqTWF0aC5wb3coMiwxLWQpKSpjPj0yJiYocysrLGMvPTIpLHMrZD49bD8oYT0wLHM9bCk6cytkPj0xPyhhPSh0KmMtMSkqTWF0aC5wb3coMixpKSxzKz1kKTooYT10Kk1hdGgucG93KDIsZC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2ZdPTI1NSZhLGYrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSx1Kz1pO3U+MDtlW3IrZl09MjU1JnMsZis9cCxzLz0yNTYsdS09OCk7ZVtyK2YtcF18PTEyOCpnfXZhciBKdD17fS50b1N0cmluZyxCdD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1KdC5jYWxsKGUpfTt6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PUouVFlQRURfQVJSQVlfU1VQUE9SVHx8Si5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciBGdD1XdCgpO2Z1bmN0aW9uIFd0KCl7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uICR0KGUsdCl7aWYoV3QoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IHp0KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHp0KGUsdCxyKXtpZighKHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiB6dCkpcmV0dXJuIG5ldyB6dChlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBHdCh0aGlzLGUpfXJldHVybiBZdCh0aGlzLGUsdCxyKX1mdW5jdGlvbiBZdChlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXp0LnByb3RvdHlwZTplPVh0KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIG49MHxlcih0LHIpLGk9KGU9JHQoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoUXQodCkpe3ZhciByPTB8WnQodC5sZW5ndGgpO3JldHVybiAwPT09KGU9JHQoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uPyR0KGUsMCk6WHQoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmQnQodC5kYXRhKSlyZXR1cm4gWHQoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBWdChlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIEd0KGUsdCl7aWYoVnQodCksZT0kdChlLHQ8MD8wOjB8WnQodCkpLCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIFh0KGUsdCl7dmFyIHI9dC5sZW5ndGg8MD8wOjB8WnQodC5sZW5ndGgpO2U9JHQoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIFp0KGUpe2lmKGU+PVd0KCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1d0KCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIFF0KGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBlcihlLHQpe2lmKFF0KGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBBcihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIENyKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIEFyKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHRyKGUsdCxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIHlyKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBocih0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHByKHRoaXMsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBncih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBkcih0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB2cih0aGlzLHQscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBycihlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIG5yKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9aT8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD16dC5mcm9tKHQsbikpLFF0KHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6aXIoZSx0LHIsbixpKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6aXIoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGlyKGUsdCxyLG4saSl7dmFyIG8scz0xLGE9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3M9MixhLz0yLGMvPTIsci89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1zP2VbdF06ZS5yZWFkVUludDE2QkUodCpzKX1pZihpKXt2YXIgbD0tMTtmb3Iobz1yO288YTtvKyspaWYodShlLG8pPT09dSh0LC0xPT09bD8wOm8tbCkpe2lmKC0xPT09bCYmKGw9byksby1sKzE9PT1jKXJldHVybiBsKnN9ZWxzZS0xIT09bCYmKG8tPW8tbCksbD0tMX1lbHNlIGZvcihyK2M+YSYmKHI9YS1jKSxvPXI7bz49MDtvLS0pe2Zvcih2YXIgZD0hMCxoPTA7aDxjO2grKylpZih1KGUsbytoKSE9PXUodCxoKSl7ZD0hMTticmVha31pZihkKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIG9yKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7bj5vLzImJihuPW8vMik7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW3Irc109YX1yZXR1cm4gc31mdW5jdGlvbiBzcihlLHQscixuKXtyZXR1cm4gRHIoQXIodCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24gYXIoZSx0LHIsbil7cmV0dXJuIERyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fSh0KSxlLHIsbil9ZnVuY3Rpb24gY3IoZSx0LHIsbil7cmV0dXJuIGFyKGUsdCxyLG4pfWZ1bmN0aW9uIHVyKGUsdCxyLG4pe3JldHVybiBEcihDcih0KSxlLHIsbil9ZnVuY3Rpb24gbHIoZSx0LHIsbil7cmV0dXJuIERyKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4saSxvPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpbj0ocj1lLmNoYXJDb2RlQXQocykpPj44LGk9ciUyNTYsby5wdXNoKGkpLG8ucHVzaChuKTtyZXR1cm4gb30odCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24gZHIoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3h0KGUpOnh0KGUuc2xpY2UodCxyKSl9ZnVuY3Rpb24gaHIoZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsYyx1PWVbaV0sbD1udWxsLGQ9dT4yMzk/NDp1PjIyMz8zOnU+MTkxPzI6MTtpZihpK2Q8PXIpc3dpdGNoKGQpe2Nhc2UgMTp1PDEyOCYmKGw9dSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKGM9KDMxJnUpPDw2fDYzJm8pPjEyNyYmKGw9Yyk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoYz0oMTUmdSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihsPWMpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYoYz0oMTUmdSk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZjPDExMTQxMTImJihsPWMpfW51bGw9PT1sPyhsPTY1NTMzLGQ9MSk6bD42NTUzNSYmKGwtPTY1NTM2LG4ucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLG4ucHVzaChsKSxpKz1kfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1mcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9ZnIpKTtyZXR1cm4gcn0obil9enQucG9vbFNpemU9ODE5Mix6dC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189enQucHJvdG90eXBlLGV9LHp0LmZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBZdChudWxsLGUsdCxyKX0senQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHp0LnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsenQuX19wcm90b19fPVVpbnQ4QXJyYXkpLHp0LmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFZ0KHQpLHQ8PTA/JHQoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj8kdChlLHQpLmZpbGwocixuKTokdChlLHQpLmZpbGwocik6JHQoZSx0KX0obnVsbCxlLHQscil9LHp0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBHdChudWxsLGUpfSx6dC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmlzQnVmZmVyPVByLHp0LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighUXQoZSl8fCFRdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0senQuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0senQuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIUJ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHp0LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49enQuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoIVF0KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0senQuYnl0ZUxlbmd0aD1lcix6dC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHp0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpcnIodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHp0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpcnIodGhpcyx0LHQrMykscnIodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClycih0aGlzLHQsdCs3KSxycih0aGlzLHQrMSx0KzYpLHJyKHRoaXMsdCsyLHQrNSkscnIodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/aHIodGhpcywwLGUpOnRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0senQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PXp0LmNvbXBhcmUodGhpcyxlKX0senQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0senQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKG4+Pj49MCkscz0ocj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKG4saSksdT1lLnNsaWNlKHQsciksbD0wO2w8YTsrK2wpaWYoY1tsXSE9PXVbbF0pe289Y1tsXSxzPXVbbF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSx6dC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0senQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCEwKX0senQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbnIodGhpcyxlLHQsciwhMSl9LHp0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gb3IodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gc3IodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGFyKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdXIodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBscih0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSx6dC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgZnI9NDA5NjtmdW5jdGlvbiBwcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGdyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB5cihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVRyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIHZyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gbXIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHdyKGUsdCxyLG4saSxvKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIF9yKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBicihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiBTcihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEVyKGUsdCxyLG4saSl7cmV0dXJuIGl8fFNyKGUsMCxyLDQpLEt0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIGtyKGUsdCxyLG4saSl7cmV0dXJuIGl8fFNyKGUsMCxyLDgpLEt0KGUsdCxyLG4sNTIsOCkscis4fXp0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKShyPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPXp0LnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtyPW5ldyB6dChpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0senQucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOyluKz10aGlzW2Urb10qaTtyZXR1cm4gbn0senQucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspbis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gbn0senQucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LHp0LnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0senQucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LHp0LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOyluKz10aGlzW2Urb10qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqdCkpLG59LHp0LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSx6dC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8bXIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0senQucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8bXIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0senQucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSx6dC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHp0LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHF0KHRoaXMsZSwhMCwyMyw0KX0senQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCExLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsOCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDUyLDgpfSx6dC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsOCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCExLDUyLDgpfSx6dC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8d3IodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMSwyNTUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsNjU1MzUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOl9yKHRoaXMsZSx0LCEwKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsNjU1MzUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOl9yKHRoaXMsZSx0LCExKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOmJyKHRoaXMsZSx0LCEwKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOmJyKHRoaXMsZSx0LCExKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7d3IodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LHp0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7d3IodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPXItMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDEyNywtMTI4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOl9yKHRoaXMsZSx0LCExKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOmJyKHRoaXMsZSx0LCEwKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOmJyKHRoaXMsZSx0LCExKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBFcih0aGlzLGUsdCwhMCxyKX0senQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKHRoaXMsZSx0LCExLHIpfSx6dC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCExLHIpfSx6dC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBpLG89bi1yO2lmKHRoaXM9PT1lJiZyPHQmJnQ8bilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStyXTtlbHNlIGlmKG88MWUzfHwhenQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LHp0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiF6dC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxyOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz1RdChlKT9lOkFyKG5ldyB6dChlLG4pLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPHItdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIFJyPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFRyKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBBcihlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxuOysrcyl7aWYoKHI9ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1uKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8scztNdHx8TnQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgTHQoMyphLzQtbyksbj1vPjA/YS00OmE7dmFyIGM9MDtmb3IodD0wLHI9MDt0PG47dCs9NCxyKz0zKWk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MTh8SHRbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxIdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8SHRbZS5jaGFyQ29kZUF0KHQrMyldLHNbYysrXT1pPj4xNiYyNTUsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MnxIdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1tjKytdPTI1NSZpKToxPT09byYmKGk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MTB8SHRbZS5jaGFyQ29kZUF0KHQrMSldPDw0fEh0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKFJyLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBEcihlLHQscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krcl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBQcihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fE9yKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJk9yKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBPcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBJcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6enQsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksenQuYWxsb2MoK2UpfSxpc0J1ZmZlcjpQcixrTWF4TGVuZ3RoOkZ0fSksVXI9e2V4cG9ydHM6e319LEhyPXt9LExyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShMciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTHIuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXQlNDtpZighcilyZXR1cm4gZTt2YXIgbj10LGk9NC1yLG89dCtpLHM9enQuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixuKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1yPUxyO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksenQuaXNCdWZmZXIoZSk/eHIoZS50b1N0cmluZygiYmFzZTY0IikpOnhyKHp0LmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxNci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIHFyLEtyPU5yO0tyLmVuY29kZT1OcixLci5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sS3IudG9CYXNlNjQ9anIsS3IuZnJvbUJhc2U2ND14cixLci50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4genQuZnJvbShqcihlKSwiYmFzZTY0Iil9LEhyLmRlZmF1bHQ9S3IsKHFyPVVyKS5leHBvcnRzPUhyLmRlZmF1bHQscXIuZXhwb3J0cy5kZWZhdWx0PXFyLmV4cG9ydHM7dmFyIEpyPVVyLmV4cG9ydHMsQnI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxyKXt2YXIgbj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gcihlLHIsbixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx5LHYsbTtvPj02NDspe2ZvcihzPXJbMF0sYT1yWzFdLGM9clsyXSx1PXJbM10sbD1yWzRdLGQ9cls1XSxoPXJbNl0sZj1yWzddLGc9MDtnPDE2O2crKyl5PWkrNCpnLGVbZ109KDI1NSZuW3ldKTw8MjR8KDI1NSZuW3krMV0pPDwxNnwoMjU1Jm5beSsyXSk8PDh8MjU1Jm5beSszXTtmb3IoZz0xNjtnPDY0O2crKyl2PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHYrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl2PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3Z8MCx1PWMsYz1hLGE9cyxzPXYrbXwwO3JbMF0rPXMsclsxXSs9YSxyWzJdKz1jLHJbM10rPXUscls0XSs9bCxyWzVdKz1kLHJbNl0rPWgscls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIG49MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYocih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihuPXIodGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxuLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbbisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxuPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltuXT0xMjg7Zm9yKHZhciBhPW4rMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUscih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0aGlzLnN0YXRlLmxlbmd0aDtyKyspdGhpcy5zdGF0ZVtyXT1lW3JdO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPW47dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IG4sdGhpcy5vdXRlcj1uZXcgbix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyBuKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0W3JdPWVbcl07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyBuKS51cGRhdGUoZSkscj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCkscn1mdW5jdGlvbiBzKGUsdCl7dmFyIHI9bmV3IGkoZSkudXBkYXRlKHQpLG49ci5kaWdlc3QoKTtyZXR1cm4gci5jbGVhbigpLG59ZnVuY3Rpb24gYShlLHQscixuKXt2YXIgaT1uWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksciYmdC51cGRhdGUociksdC51cGRhdGUobiksdC5maW5pc2goZSksblswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxyLG4pe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PW4mJihuPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShuKSxwPTA7cDxuO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxyLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KG4pLGQ9MDtkKnM8bjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PXI7ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8bjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0obik7dmFyIGk9bi5kZWZhdWx0O2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtlLmV4cG9ydHM9aX0oKX0oQnIpO3ZhciBGcj1TKEJyLmV4cG9ydHMpLFdyPWNyeXB0bztmdW5jdGlvbiAkcihlKXt0cnl7cmV0dXJuIG51bGwhPWUmJiJib29sZWFuIj09dHlwZW9mIGUuZXh0cmFjdGFibGUmJiJzdHJpbmciPT10eXBlb2YgZS5hbGdvcml0aG0ubmFtZSYmInN0cmluZyI9PXR5cGVvZiBlLnR5cGV9Y2F0Y2goZSl7cmV0dXJuITF9fWNvbnN0IHpyPW5ldyBUZXh0RW5jb2RlcixZcj1uZXcgVGV4dERlY29kZXI7Y29uc3QgVnI9ZT0+e2xldCB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PVlyLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4oZT0+bmV3IFVpbnQ4QXJyYXkoYXRvYihlKS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSkpKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19O2NsYXNzIEdyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7dmFyIHQ7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0odD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PXR8fHQuY2FsbChFcnJvcix0aGlzLHRoaXMuY29uc3RydWN0b3IpfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19Y2xhc3MgWHIgZXh0ZW5kcyBHcntjb25zdHJ1Y3RvcihlLHQ9InVuc3BlY2lmaWVkIixyPSJ1bnNwZWNpZmllZCIpe3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1jbGFzcyBaciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1yfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1jbGFzcyBRciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fWNsYXNzIGVuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyB0biBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIHJuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgbm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fWNsYXNzIG9uIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIix0aGlzLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19Y2xhc3Mgc24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIix0aGlzLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19Y2xhc3MgYW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fWZ1bmN0aW9uIGNuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gdW4oKXt0cnl7cmV0dXJuIHZvaWQgMCE9PWZlLnZlcnNpb25zLm5vZGV9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGxuKGUsdD0iYWxnb3JpdGhtLm5hbWUiKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyAke3R9IG11c3QgYmUgJHtlfWApfWZ1bmN0aW9uIGRuKGUsdCl7cmV0dXJuIGUubmFtZT09PXR9ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIHBhcnNlSW50KGUubmFtZS5zbGljZSg0KSwxMCl9ZnVuY3Rpb24gZm4oZSx0LC4uLnIpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp7aWYoIWRuKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgbG4oIkhNQUMiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGhuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOntpZighZG4oZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgbG4oIlJTQVNTQS1QS0NTMS12MV81Iik7Y29uc3Qgcj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihobihlLmFsZ29yaXRobS5oYXNoKSE9PXIpdGhyb3cgbG4oYFNIQS0ke3J9YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp7aWYoIWRuKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgbG4oIlJTQS1QU1MiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGhuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UgdW4oKSYmIkVkRFNBIjppZigiTk9ERS1FRDI1NTE5IiE9PWUuYWxnb3JpdGhtLm5hbWUmJiJOT0RFLUVENDQ4IiE9PWUuYWxnb3JpdGhtLm5hbWUpdGhyb3cgbG4oIk5PREUtRUQyNTUxOSBvciBOT0RFLUVENDQ4Iik7YnJlYWs7Y2FzZSBjbigpJiYiRWREU0EiOmlmKCFkbihlLmFsZ29yaXRobSwiTk9ERS1FRDI1NTE5IikpdGhyb3cgbG4oIk5PREUtRUQyNTUxOSIpO2JyZWFrO2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOntpZighZG4oZS5hbGdvcml0aG0sIkVDRFNBIikpdGhyb3cgbG4oIkVDRFNBIik7Y29uc3Qgcj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fSh0KTtpZihlLmFsZ29yaXRobS5uYW1lZEN1cnZlIT09cil0aHJvdyBsbihyLCJhbGdvcml0aG0ubmFtZWRDdXJ2ZSIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24iKX0hZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgodD0+ZS51c2FnZXMuaW5jbHVkZXModCkpKSl7bGV0IGU9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IHI9dC5wb3AoKTtlKz1gb25lIG9mICR7dC5qb2luKCIsICIpfSwgb3IgJHtyfS5gfWVsc2UgMj09PXQubGVuZ3RoP2UrPWBvbmUgb2YgJHt0WzBdfSBvciAke3RbMV19LmA6ZSs9YCR7dFswXX0uYDt0aHJvdyBuZXcgVHlwZUVycm9yKGUpfX0oZSxyKX12YXIgcG49KGUsLi4udCk9PntsZXQgcj0iS2V5IG11c3QgYmUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBlPXQucG9wKCk7cis9YG9uZSBvZiB0eXBlICR7dC5qb2luKCIsICIpfSwgb3IgJHtlfS5gfWVsc2UgMj09PXQubGVuZ3RoP3IrPWBvbmUgb2YgdHlwZSAke3RbMF19IG9yICR7dFsxXX0uYDpyKz1gb2YgdHlwZSAke3RbMF19LmA7cmV0dXJuIG51bGw9PWU/cis9YCBSZWNlaXZlZCAke2V9YDoiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3IrPWAgUmVjZWl2ZWQgZnVuY3Rpb24gJHtlLm5hbWV9YDoib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHIrPWAgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgJHtlLmNvbnN0cnVjdG9yLm5hbWV9YCkscn0sZ249ZT0+JHIoZSk7Y29uc3QgeW49WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiB2bihlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCByPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpOylyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cn1jb25zdCBtbj1hc3luYyBlPT57dmFyIHQscjtjb25zdHthbGdvcml0aG06bixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQscjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBlbihgJHtlLmFsZ30ga2V5cyBjYW5ub3QgYmUgaW1wb3J0ZWQgYXMgQ3J5cHRvS2V5IGluc3RhbmNlc2ApO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxyPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxyPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LHI9WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDpgU0hBLSR7cGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MX1gfSxyPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxyPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZShjbigpfHx1bigpKSYmIk9LUCI6aWYoIkVkRFNBIiE9PWUuYWxnKXRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyk7c3dpdGNoKGUuY3J2KXtjYXNlIkVkMjU1MTkiOnQ9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIHVuKCkmJiJFZDQ0OCI6dD17bmFtZToiTk9ERS1FRDQ0OCIsbmFtZWRDdXJ2ZToiTk9ERS1FRDQ0OCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKSxvPVtuLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShyPWUua2V5X29wcykmJnZvaWQgMCE9PXI/cjppXTtpZigiUEJLREYyIj09PW4ubmFtZSlyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3IixWcihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsV3Iuc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCB3bj0oZSx0LHIpPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighZ24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihwbihlLC4uLnluLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4pKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxyKX07Y29uc3QgX249YXN5bmMoZSx0LHIsbik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxyKXtpZigkcih0KSlyZXR1cm4gZm4odCxlLHIpLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihwbih0LC4uLnluKSk7cmV0dXJuIFdyLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW3JdKX10aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4sIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UoY24oKXx8dW4oKSkmJiJFZERTQSI6Y29uc3R7bmFtZWRDdXJ2ZTpufT10O3JldHVybntuYW1lOm4sbmFtZWRDdXJ2ZTpufTtkZWZhdWx0OnRocm93IG5ldyBlbihgYWxnICR7ZX0gaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZWApfX0oZSxpLmFsZ29yaXRobSk7dHJ5e3JldHVybiBhd2FpdCBXci5zdWJ0bGUudmVyaWZ5KG8saSxyLG4pfWNhdGNoKGUpe3JldHVybiExfX07YXN5bmMgZnVuY3Rpb24gYm4oZSx0LHIpe3ZhciBuO2lmKCF2bihlKSl0aHJvdyBuZXcgdG4oIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih2b2lkIDA9PT1lLnByb3RlY3RlZCYmdm9pZCAwPT09ZS5oZWFkZXIpdGhyb3cgbmV3IHRuKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtpZih2b2lkIDAhPT1lLnByb3RlY3RlZCYmInN0cmluZyIhPXR5cGVvZiBlLnByb3RlY3RlZCl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwPT09ZS5wYXlsb2FkKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbWlzc2luZyIpO2lmKCJzdHJpbmciIT10eXBlb2YgZS5zaWduYXR1cmUpdGhyb3cgbmV3IHRuKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDAhPT1lLmhlYWRlciYmIXZuKGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtsZXQgaT17fTtpZihlLnByb3RlY3RlZCl7Y29uc3QgdD1WcihlLnByb3RlY3RlZCk7dHJ5e2k9SlNPTi5wYXJzZShZci5kZWNvZGUodCkpfWNhdGNoKGUpe3Rocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpfX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkoaSxlLmhlYWRlcikpdGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3Qgbz17Li4uaSwuLi5lLmhlYWRlcn0scz1mdW5jdGlvbihlLHQscixuLGkpe2lmKHZvaWQgMCE9PWkuY3JpdCYmdm9pZCAwPT09bi5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFufHx2b2lkIDA9PT1uLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkobi5jcml0KXx8MD09PW4uY3JpdC5sZW5ndGh8fG4uY3JpdC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7bGV0IG87bz12b2lkIDAhPT1yP25ldyBNYXAoWy4uLk9iamVjdC5lbnRyaWVzKHIpLC4uLnQuZW50cmllcygpXSk6dDtmb3IoY29uc3QgdCBvZiBuLmNyaXQpe2lmKCFvLmhhcyh0KSl0aHJvdyBuZXcgZW4oYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBpcyBub3QgcmVjb2duaXplZGApO2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBpcyBtaXNzaW5nYCk7aWYoby5nZXQodCkmJnZvaWQgMD09PW5bdF0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChuLmNyaXQpfSh0bixuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09cj92b2lkIDA6ci5jcml0LGksbyk7bGV0IGE9ITA7aWYocy5oYXMoImI2NCIpJiYoYT1pLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBhKSl0aHJvdyBuZXcgdG4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOmN9PW87aWYoInN0cmluZyIhPXR5cGVvZiBjfHwhYyl0aHJvdyBuZXcgdG4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IHU9ciYmKChlLHQpPT57aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAiJHtlfSIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2ApO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9KSgiYWxnb3JpdGhtcyIsci5hbGdvcml0aG1zKTtpZih1JiYhdS5oYXMoYykpdGhyb3cgbmV3IFFyKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYoYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2xldCBsPSExOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KGksZSksbD0hMCksd24oYyx0LCJ2ZXJpZnkiKTtjb25zdCBkPWZ1bmN0aW9uKC4uLmUpe2NvbnN0IHQ9ZS5yZWR1Y2UoKChlLHtsZW5ndGg6dH0pPT5lK3QpLDApLHI9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IG49MDtyZXR1cm4gZS5mb3JFYWNoKChlPT57ci5zZXQoZSxuKSxuKz1lLmxlbmd0aH0pKSxyfSh6ci5lbmNvZGUobnVsbCE9PShuPWUucHJvdGVjdGVkKSYmdm9pZCAwIT09bj9uOiIiKSx6ci5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQpLGg9VnIoZS5zaWduYXR1cmUpO2lmKCFhd2FpdCBfbihjLHQsaCxkKSl0aHJvdyBuZXcgYW47bGV0IGY7Zj1hP1ZyKGUucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/enIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkO2NvbnN0IHA9e3BheWxvYWQ6Zn07cmV0dXJuIHZvaWQgMCE9PWUucHJvdGVjdGVkJiYocC5wcm90ZWN0ZWRIZWFkZXI9aSksdm9pZCAwIT09ZS5oZWFkZXImJihwLnVucHJvdGVjdGVkSGVhZGVyPWUuaGVhZGVyKSxsP3suLi5wLGtleTp0fTpwfWNvbnN0IFNuPTg2NDAwLEVuPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciBrbj1lPT57Y29uc3QgdD1Fbi5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgcj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQocik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpyKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqcik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChyKlNuKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKnIpO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqcil9fTtjb25zdCBSbj1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKTt2YXIgVG49KGUsdCxyPXt9KT0+e2NvbnN0e3R5cDpufT1yO2lmKG4mJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxSbihlLnR5cCkhPT1SbihuKSkpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTtsZXQgaTt0cnl7aT1KU09OLnBhcnNlKFlyLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCF2bihpKSl0aHJvdyBuZXcgcm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKEFycmF5LmlzQXJyYXkobyk/bzpbb10pLmluY2x1ZGVzKGkuaXNzKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTtjb25zdHtzdWJqZWN0OnN9PXI7aWYocyYmaS5zdWIhPT1zKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e2F1ZGllbmNlOmF9PXI7aWYoYSYmKGM9aS5hdWQsdT0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mIGM/dS5pbmNsdWRlcyhjKTpBcnJheS5pc0FycmF5KGMpJiZ1LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGMpKSkpKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTt2YXIgYyx1O2xldCBsO3N3aXRjaCh0eXBlb2Ygci5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmw9a24oci5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmw9ci5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOmR9PXIsaD0oZj1kfHxuZXcgRGF0ZSxNYXRoLmZsb29yKGYuZ2V0VGltZSgpLzFlMykpO3ZhciBmO2lmKHZvaWQgMCE9PWkuaWF0fHxyLm1heFRva2VuQWdlKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDA9PT1pLmV4cCYmaS5pYXQ+aCtsKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkubmJmKXtpZigibnVtYmVyIiE9dHlwZW9mIGkubmJmKXRocm93IG5ldyBYcignIm5iZiIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsIm5iZiIsImludmFsaWQiKTtpZihpLm5iZj5oK2wpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywibmJmIiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5leHApe2lmKCJudW1iZXIiIT10eXBlb2YgaS5leHApdGhyb3cgbmV3IFhyKCciZXhwIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiZXhwIiwiaW52YWxpZCIpO2lmKGkuZXhwPD1oLWwpdGhyb3cgbmV3IFpyKCciZXhwIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywiZXhwIiwiY2hlY2tfZmFpbGVkIil9aWYoci5tYXhUb2tlbkFnZSl7Y29uc3QgZT1oLWkuaWF0O2lmKGUtbD4oIm51bWJlciI9PXR5cGVvZiByLm1heFRva2VuQWdlP3IubWF4VG9rZW5BZ2U6a24oci5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyBacignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZihlPDAtbCl0aHJvdyBuZXcgWHIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gaX07YXN5bmMgZnVuY3Rpb24gQW4oZSx0LHIpe3ZhciBuO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT1Zci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgdG4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHRuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBibih7cGF5bG9hZDppLHByb3RlY3RlZDpuLHNpZ25hdHVyZTpvfSx0LHIpLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQscik7aWYoKG51bGw9PT0obj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09bj92b2lkIDA6bi5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgcm4oIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz17cGF5bG9hZDpUbihpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQscikscHJvdGVjdGVkSGVhZGVyOmkucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4ubyxrZXk6aS5rZXl9Om99ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIHZuKGUpfWNsYXNzIERue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoQ24pfShlKSl0aHJvdyBuZXcgbm4oIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHQ7dGhpcy5fandrcz0odD1lLCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHQpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpKX1hc3luYyBnZXRLZXkoZSx0KXtjb25zdHthbGc6cixraWQ6bn09ey4uLmUsLi4udC5oZWFkZXJ9LGk9dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWUua3R5PT09ZnVuY3Rpb24oZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fShyKTtpZih0JiYic3RyaW5nIj09dHlwZW9mIG4mJih0PW49PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9cj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1yJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChyKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOm8sbGVuZ3RoOnN9PWk7aWYoMD09PXMpdGhyb3cgbmV3IG9uO2lmKDEhPT1zKXRocm93IG5ldyBzbjtjb25zdCBhPXRoaXMuX2NhY2hlZC5nZXQobyl8fHRoaXMuX2NhY2hlZC5zZXQobyx7fSkuZ2V0KG8pO2lmKHZvaWQgMD09PWFbcl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKCF2bihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1yfHwocj0hMCE9PWUuZXh0KSxyP21uKHsuLi5lLGFsZzp0LGV4dDohMX0pOlZyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBlbignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBtbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLm8sZXh0OiEwfSxyKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IG5uKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Fbcl09ZX1yZXR1cm4gYVtyXX19dmFyIFBuPXtleHBvcnRzOnt9fSxPbj17ZXhwb3J0czp7fX0sSW49RShJcik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgcj1JbixuPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIG4oZSx0LHIpfW4uZnJvbSYmbi5hbGxvYyYmbi5hbGxvY1Vuc2FmZSYmbi5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxpKG4sbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlLHQscil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9bihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/aS5maWxsKHQscik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19KE9uLE9uLmV4cG9ydHMpO3ZhciBVbj02NTUzNixIbj00Mjk0OTY3Mjk1O3ZhciBMbj1Pbi5leHBvcnRzLkJ1ZmZlcixNbj1iLmNyeXB0b3x8Yi5tc0NyeXB0bztNbiYmTW4uZ2V0UmFuZG9tVmFsdWVzP1BuLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPkhuKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHI9TG4uYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+VW4pZm9yKHZhciBuPTA7bjxlO24rPVVuKU1uLmdldFJhbmRvbVZhbHVlcyhyLnNsaWNlKG4sbitVbikpO2Vsc2UgTW4uZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBmZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwscil9KSk7cmV0dXJuIHJ9OlBuLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBObj1Qbi5leHBvcnRzO2NsYXNzIGpue2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gSnIuZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIEpyLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIHp0LmZyb20oRnIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gTm4oZSl9dmVyaWZ5Snd0KGUsdCxyLG4saSxvLHMpe3JldHVybiBBbihlLChhPXtrZXlzOlt0XX0sRG4ucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBEbihhKSkpLHthbGdvcml0aG1zOnIsYXVkaWVuY2U6bixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSk7dmFyIGF9fWNvbnN0IHhuPXNlbGY7bGV0IHFuO3huLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbyxzO2NvbnN0IGM9clswXTtpZih0LnR5cGU9PT1nfHxxbilzd2l0Y2godC50eXBlKXtjYXNlIGc6dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO3FuPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEl0LG49bmV3IGpuLGk9bmV3IHAocixuKTt5aWVsZCBpLmluaXRpYWxpemUodCk7Y29uc3Qgbz1uZXcgdyhpKSxzPWkuZ2V0RGF0YUxheWVyKCksYz1PdC5nZXRJbnN0YW5jZSgpOyhudWxsPT1jP3ZvaWQgMDpjLmluaXQpJiYoeWllbGQgYy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGkuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpO2NvbnN0IHU9dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIsbixjO2xldCB1PSEwLGw9ITE7Y29uc3QgZD10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7dT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KG49bnVsbD09PShyPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1uP246W10sZF0paWYoZSYmKG51bGw9PT0oYz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnMuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihtLEpTT04uc3RyaW5naWZ5KHQpKSx1fHxsP2kucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxsPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgaS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIGQoKTtyZXR1cm4gZSYmKHlpZWxkIHUoZSkpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSksZD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntjLmRpc2FibGVIYW5kbGVyJiZjLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5lbmFibGVIYW5kbGVyJiZjLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9PmkuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgcj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLG49eWllbGQgaS5nZXRQS0NFQ29kZShyKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6bn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgaS5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSExO2NvbnN0IGQ9dC5iYXNlVXJsfHx0LnNlcnZlck9yaWdpbjtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sZF0paWYoZSYmKG51bGw9PT0obz1udWxsPT1yP3ZvaWQgMDpyLnVybCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RhcnRzV2l0aChlKSkpe3U9ITA7YnJlYWt9cmV0dXJuIHU/Yy5yZXF1ZXN0KHIpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxuLGk7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgZTt0cnl7ZT15aWVsZCBsKCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUi1TRTAxIixudWxsIT09KG49bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09bj9uOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShpPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWk/aToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMucmVxdWVzdChyKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxodHRwUmVxdWVzdEFsbDpyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixpLG87bGV0IHU9ITA7Y29uc3QgZD10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO2Zvcihjb25zdCBlIG9mIHIpe2xldCB0PSExO2Zvcihjb25zdCByIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSxkXSlpZihyJiYobnVsbD09PShvPWUudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKHIpKSl7dD0hMDticmVha31pZighdCl7dT0hMTticmVha319Y29uc3QgaD1bXTtyZXR1cm4gdT8oci5mb3JFYWNoKChlPT57aC5wdXNoKGMucmVxdWVzdChlKSl9KSksKG51bGw9PWM/dm9pZCAwOmMuYWxsKSYmYy5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsbjtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cykpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1TRTAxIixudWxsIT09KHI9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09cj9yOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMuYWxsJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+aS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46bCxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixuLGMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBuJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBpLnNldFBLQ0VDb2RlKG4sbnVsbCE9Yz9jOiIiKSksdD9pLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIixudWxsIT1jP2M6IiciKS50aGVuKCgoKT0+KG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp1LHJldm9rZUFjY2Vzc1Rva2VuOigpPT5pLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIGkuc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7by5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgaS51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxxbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKEJuKSxxbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soS24pLHFuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKEpuKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnFuLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09dD92b2lkIDA6dC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOnFuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlLG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXRlKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijpxbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpxbi5odHRwUmVxdWVzdEFsbCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNpZ25PdXQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50Ijpxbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6cW4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnFuLmVuYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6cW4uZGlzYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHFuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWN8fGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBhKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2UgYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IEtuPSgpPT57eG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LEpuPWU9Pnt4bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0sQm49KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9O3JldHVybnt9fSgpOwoK",null,!1,function(t){return Al=Al||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)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCkscj10LndlbGxLbm93bkVuZHBvaW50fHwobnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS53ZWxsS25vd25FbmRwb2ludCksbj10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO3JldHVybiByfHxuKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0pKX1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnJiZyLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsfHx0LnNlcnZlck9yaWdpbjtpZighcil0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7dC5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHQuZW5kcG9pbnRzKS5mb3JFYWNoKChyPT57Y29uc3Qgbj1yLnJlcGxhY2UoL1tBLVpdL2csKGU9PmBfJHtlLnRvTG93ZXJDYXNlKCl9YCkpO2Vbbl09KG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKT90LmVuZHBvaW50c1tyXToiIn0pKTtjb25zdCBuPXthdXRob3JpemF0aW9uX2VuZHBvaW50OmAke3J9L29hdXRoMi9hdXRob3JpemVgLGVuZF9zZXNzaW9uX2VuZHBvaW50OmAke3J9L29pZGMvbG9nb3V0YCxpc3N1ZXI6YCR7cn0vb2F1dGgyL3Rva2VuYCxqd2tzX3VyaTpgJHtyfS9vYXV0aDIvandrc2AsY2hlY2tfc2Vzc2lvbl9pZnJhbWU6YCR7cn0vb2lkYy9jaGVja3Nlc3Npb25gLHJldm9jYXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL3Jldm9rZWAsdG9rZW5fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL3Rva2VuYCx1c2VyaW5mb19lbmRwb2ludDpgJHtyfS9vYXV0aDIvdXNlcmluZm9gfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLGUpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtsZXQgbjt0cnl7bj15aWVsZCBmZXRjaCh0LHtjcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2lufSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZigyMDAhPT1uLnN0YXR1c3x8IW4ub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoJHtuLnN0YXR1c1RleHR9KS5gLHlpZWxkIG4uanNvbigpKTtjb25zdCBpPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIse2tleXM6b309eWllbGQgbi5qc29uKCksYz15aWVsZCB0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sbyk7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5pc1ZhbGlkSWRUb2tlbihlLGMsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbGllbnRJRCxudWxsIT1pP2k6IiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkuc3ViLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xvY2tUb2xlcmFuY2UpfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxyLG4saTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9Yy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIix1PW51bGwhPT0ocj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsbD1udWxsIT09KG49by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PW4/bjoiIixkPXUmJmw/YCR7dX0gJHtsfWA6dXx8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSxjLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUscil7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKHIpO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShuPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09bj9uOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCR7ZS5zdGF0dXNUZXh0fSkuYCx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgbj15aWVsZCBlLmpzb24oKTtpZihuLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKG4uaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKG4scik7Y29uc3QgZT17YWNjZXNzVG9rZW46bi5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0Om4uY3JlYXRlZF9hdCxleHBpcmVzSW46bi5leHBpcmVzX2luLGlkVG9rZW46bi5pZF90b2tlbixyZWZyZXNoVG9rZW46bi5yZWZyZXNoX3Rva2VuLHNjb3BlOm4uc2NvcGUsdG9rZW5UeXBlOm4udG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKG4sciksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLG49W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJm4ucHVzaChlKX0pKTtjb25zdCBpPW4uc29ydCgpLnBvcCgpO3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChudWxsIT09KHI9bnVsbD09aT92b2lkIDA6aS5zcGxpdCgiIyIpWzFdKSYmdm9pZCAwIT09cj9yOiItMSIpKzF9YH0pKX19Y2xhc3MgbHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgcj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQscixuLGkscyl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsbyxyLG4saSxzKS50aGVuKChlPT5lP1Byb21pc2UucmVzb2x2ZSghMCk6UHJvbWlzZS5yZWplY3QobmV3IGEoIkpTLUNSWVBUT19IRUxQRVItSVZJVC1JVjAxIiwiSW52YWxpZCBJRCB0b2tlbi4iLCJJRCB0b2tlbiB2YWxpZGF0aW9uIHJldHVybmVkIGZhbHNlIikpKSl9ZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD10aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZS5zcGxpdCgiLiIpWzFdKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGR7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jcnlwdG9VdGlscz1yLHRoaXMuX2NyeXB0b0hlbHBlcj1uZXcgbChyKSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgdShlLHRoaXMuX2NyeXB0b0hlbHBlciksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLHIpe3ZhciBuLGksbztyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCB1PW5ldyBVUkwodCk7dS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgbD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksbD1zLnNjb3BlLmpvaW4oIiAiKSksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsbCksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHMuc2lnbkluUmVkaXJlY3RVUkwpLHMucmVzcG9uc2VNb2RlJiZ1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBkPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShyKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShuPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGQsZSxyKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlIix0KX1zLnByb21wdCYmdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBoPWU7aWYoaClmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGgpKSIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUmJnUuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgic3RhdGUiLGMuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGQsaD9udWxsPT09KG89aC5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpLHUudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO3ImJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHIsaSkpO2NvbnN0IHU9W107dS5wdXNoKGBjbGllbnRfaWQ9JHtvLmNsaWVudElEfWApLG8uY2xpZW50U2VjcmV0JiZvLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnUucHVzaChgY2xpZW50X3NlY3JldD0ke28uY2xpZW50U2VjcmV0fWApO2NvbnN0IGw9ZTtsZXQgZDt1LnB1c2goYGNvZGU9JHtsfWApLHUucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSx1LnB1c2goYHJlZGlyZWN0X3VyaT0ke28uc2lnbkluUmVkaXJlY3RVUkx9YCksby5lbmFibGVQS0NFJiYodS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczpvLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMoYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIixgUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtkLnN0YXR1c1RleHR9YCx5aWVsZCBkLmpzb24oKSk7cmV0dXJuIHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxpKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxyPXlpZWxkIHRoaXMuX2NvbmZpZygpLG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2lmKCFuLnJlZnJlc2hfdG9rZW4pdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBpPVtdO2xldCBvO2kucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxpLnB1c2goYHJlZnJlc2hfdG9rZW49JHtuLnJlZnJlc2hfdG9rZW59YCksaS5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxyLmNsaWVudFNlY3JldCYmci5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZpLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtyLmNsaWVudFNlY3JldH1gKTt0cnl7bz15aWVsZCBmZXRjaCh0LHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoIW8ub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLUhFMDQiLGBSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke28uc3RhdHVzVGV4dH1gLHlpZWxkIG8uanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShvLGUpfSkpfXJldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkucmV2b2NhdGlvbl9lbmRwb2ludCxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbj1bXTtsZXQgaTtuLnB1c2goYGNsaWVudF9pZD0ke3IuY2xpZW50SUR9YCksbi5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmFjY2Vzc190b2tlbn1gKSxuLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKTt0cnl7aT15aWVsZCBmZXRjaCh0LHtib2R5Om4uam9pbigiJiIpLGNyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1ORTAyIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKDIwMCE9PWkuc3RhdHVzfHwhaS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDMtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciByZXZva2UgYWNjZXNzIHRva2VuIHJlcXVlc3QgKCR7aS5zdGF0dXNUZXh0fSkuYCx5aWVsZCBpLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShpKX0pKX1yZXF1ZXN0Q3VzdG9tR3JhbnQoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBvO2lmKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50Om4udG9rZW5fZW5kcG9pbnQsIW98fDA9PT1vLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCB1PXlpZWxkIFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKCgoW2Usbl0pPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MobixyKTtyZXR1cm5gJHtlfT0ke3R9YH0pKSkpKTtsZXQgbD1PYmplY3QuYXNzaWduKHt9LGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKTtlLmF0dGFjaFRva2VuJiYobD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbCkse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocikpLmFjY2Vzc190b2tlbn1gfSkpO2NvbnN0IGQ9e2JvZHk6dS5qb2luKCImIiksY3JlZGVudGlhbHM6aS5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGwpLG1ldGhvZDoiUE9TVCJ9O2xldCBoO3RyeXtoPXlpZWxkIGZldGNoKG8sZCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQ0ctTkUwMiIsIlRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdCBmYWlsZWQuIixudWxsIT1lP2U6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBjdXN0b20gZ3JhbnQgZmFpbGVkLiIpfWlmKDIwMCE9PWguc3RhdHVzfHwhaC5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4gKCR7aC5zdGF0dXNUZXh0fSlgLHlpZWxkIGguanNvbigpKTtyZXR1cm4gZS5yZXR1cm5zU2Vzc2lvbj90aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGgscik6UHJvbWlzZS5yZXNvbHZlKHlpZWxkIGguanNvbigpKX0pKX1nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkscj10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09dD92b2lkIDA6dC5pZF90b2tlbik7bGV0IG49e2FsbG93ZWRTY29wZXM6dC5zY29wZSxzZXNzaW9uU3RhdGU6dC5zZXNzaW9uX3N0YXRlfTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZT0+e3ZvaWQgMCE9PXJbZV0mJiIiIT09cltlXSYmbnVsbCE9PXJbZV18fGRlbGV0ZSByW2VdfSkpLG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHIpLG59KSl9Z2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmlkX3Rva2VuO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbih0KX0pKX1nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW59KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IG49dC53ZWxsS25vd25FbmRwb2ludHx8KG51bGw9PT0ocj1udWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyl8fHZvaWQgMD09PXI/dm9pZCAwOnIud2VsbEtub3duRW5kcG9pbnQpO2lmKG4pe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKG4pLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luKXt0cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAyIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgYmFzZSB1cmwgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfXRyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAzIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXt2YXIgZSxyLG4saSxvLHMsYSxjLHUsbDtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT10LmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0ocj10LmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09cj9yOiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KG49dC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PW4/bjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPXQuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWk/aToiIixpc3N1ZXI6bnVsbCE9PShvPXQuaXNzdWVyKSYmdm9pZCAwIT09bz9vOiIiLGp3a3NVcmk6bnVsbCE9PShzPXQuandrc191cmkpJiZ2b2lkIDAhPT1zP3M6IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShhPXQucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KGM9dC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09Yz9jOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PXQudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGw9dC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWw/bDoiIix3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTChlKXt2YXIgcixuLGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGw9PT0ocj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmRfc2Vzc2lvbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAxIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9bnVsbD09PShuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uaWRfdG9rZW47aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y29uc3QgYz1udWxsIT09KGk9bnVsbD09bz92b2lkIDA6by5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1pP2k6bnVsbD09bz92b2lkIDA6by5zaWduSW5SZWRpcmVjdFVSTDtpZighY3x8MD09PWMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO3JldHVybmAke3R9P2lkX3Rva2VuX2hpbnQ9JHtzfSZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9JHtjfSZzdGF0ZT1zaWduX291dF9zdWNjZXNzYH0pKX1zaWduT3V0KGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLmdldFNpZ25PdXRVUkwoZSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLHR9KSl9Z2V0QWNjZXNzVG9rZW4oZSl7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuYWNjZXNzX3Rva2VufSkpfWlzQXV0aGVudGljYXRlZChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBCb29sZWFuKHlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW4oZSkpfSkpfWdldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLHIpfSkpfXNldFBLQ0VDb2RlKGUscixuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksZSxuKX0pKX11cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBoKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGQodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovfWluaXRpYWxpemUoZSl7dmFyIHIsbixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZiksZSkse3Njb3BlOlsuLi5udWxsIT09KHI9Zi5zY29wZSkmJnZvaWQgMCE9PXI/cjpbXSwuLi5udWxsIT09KGk9bnVsbD09PShuPWUuc2NvcGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PWY/dm9pZCAwOmYuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWk/aTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxyKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgZG9lc24ndCBjbGVhciB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFNpZ25PdXRVUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSUQgdG9rZW4gYW5kIHJldHVybnMgaXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RGVjb2RlZElEVG9rZW5QYXlsb2FkPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkZWNvZGVkIElEIHRva2VuIHBheWxvYWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERlY29kZWRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBhdXRoLmdldElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm8+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxyKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUscixuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLHIsbil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSkscj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIiksbj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFyJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1yJiYhbn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmbn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIHNlcnZlck9yaWdpbjogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjdXBkYXRlQ29uZmlnCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi91cGRhdGVDb25maWcoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUudXBkYXRlQ29uZmlnKGUpfSkpfX1jb25zdCBnPSJpbml0Ijt2YXIgeSx2OyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KHZ8fCh2PXt9KSk7Y29uc3QgbT0iY3VzdG9tX2dyYW50X2NvbmZpZyI7Y2xhc3Mgd3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKHQucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludCh0LmV4cGlyZXNfaW4pLG49c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpLEpTT04uc3RyaW5naWZ5KG4pKX19KSl9Y2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKTtjbGVhclRpbWVvdXQoZSl9fSkpfX1jbGFzcyBfe2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fXZhciBiPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEUoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLG4uZ2V0P246e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19fSl9KSksdH12YXIgaz17ZXhwb3J0czp7fX0sUj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbj0wO248ci5sZW5ndGg7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiBlLmFwcGx5KHQscil9fSxUPVIsQT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBQKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1BLmNhbGwoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBJKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09QS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUEuY2FsbChlKX1mdW5jdGlvbiBIKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksQyhlKSlmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspdC5jYWxsKG51bGwsZVtyXSxyLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgTD17aXNBcnJheTpDLGlzQXJyYXlCdWZmZXI6UCxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFEKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIUQoZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1BLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlAoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6Tyxpc1BsYWluT2JqZWN0OkksaXNVbmRlZmluZWQ6RCxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09QS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09QS5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09QS5jYWxsKGUpfSxpc0Z1bmN0aW9uOlUsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSkmJlUoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1BLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6SCxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe0kodFtuXSkmJkkocik/dFtuXT1lKHRbbl0scik6SShyKT90W25dPWUoe30scik6QyhyKT90W25dPXIuc2xpY2UoKTp0W25dPXJ9Zm9yKHZhciBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspSChhcmd1bWVudHNbbl0scik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIEgodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1QodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0sTT1MO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGo9ZnVuY3Rpb24oZSx0LHIpe2lmKCF0KXJldHVybiBlO3ZhciBuO2lmKHIpbj1yKHQpO2Vsc2UgaWYoTS5pc1VSTFNlYXJjaFBhcmFtcyh0KSluPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO00uZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihNLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxNLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7TS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6TS5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaChOKHQpKyI9IitOKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX0seD1MO2Z1bmN0aW9uIHEoKXt0aGlzLmhhbmRsZXJzPVtdfXEucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIXImJnIuc3luY2hyb25vdXMscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0scS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LHEucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7eC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgSz1xLEo9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiBCKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gRigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFc9QiwkPUY7ZnVuY3Rpb24geihlKXtpZihXPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChXPT09Qnx8IVcpJiZzZXRUaW1lb3V0KXJldHVybiBXPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVyhlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gVy5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gVy5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBKLnNldFRpbWVvdXQmJihXPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBKLmNsZWFyVGltZW91dCYmKCQ9Y2xlYXJUaW1lb3V0KTt2YXIgWSxWPVtdLEc9ITEsWD0tMTtmdW5jdGlvbiBaKCl7RyYmWSYmKEc9ITEsWS5sZW5ndGg/Vj1ZLmNvbmNhdChWKTpYPS0xLFYubGVuZ3RoJiZRKCkpfWZ1bmN0aW9uIFEoKXtpZighRyl7dmFyIGU9eihaKTtHPSEwO2Zvcih2YXIgdD1WLmxlbmd0aDt0Oyl7Zm9yKFk9VixWPVtdOysrWDx0OylZJiZZW1hdLnJ1bigpO1g9LTEsdD1WLmxlbmd0aH1ZPW51bGwsRz0hMSxmdW5jdGlvbihlKXtpZigkPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKCQ9PT1GfHwhJCkmJmNsZWFyVGltZW91dClyZXR1cm4gJD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXskKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gJC5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuICQuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBlZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWVlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiB0ZSgpe312YXIgcmU9dGUsbmU9dGUsaWU9dGUsb2U9dGUsc2U9dGUsYWU9dGUsY2U9dGU7dmFyIHVlPUoucGVyZm9ybWFuY2V8fHt9LGxlPXVlLm5vd3x8dWUubW96Tm93fHx1ZS5tc05vd3x8dWUub05vd3x8dWUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgZGU9bmV3IERhdGU7dmFyIGhlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO1YucHVzaChuZXcgZWUoZSx0KSksMSE9PVYubGVuZ3RofHxHfHx6KFEpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOnJlLGFkZExpc3RlbmVyOm5lLG9uY2U6aWUsb2ZmOm9lLHJlbW92ZUxpc3RlbmVyOnNlLHJlbW92ZUFsbExpc3RlbmVyczphZSxlbWl0OmNlLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKmxlLmNhbGwodWUpLHI9TWF0aC5mbG9vcih0KSxuPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihyLT1lWzBdLChuLT1lWzFdKTwwJiYoci0tLG4rPTFlOSkpLFtyLG5dfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLWRlKS8xZTN9fSxmZT1oZSxwZT1MLGdlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSx5ZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sdmU9Z2UsbWU9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1uZXcgRXJyb3IoZSk7cmV0dXJuIHZlKG8sdCxyLG4saSl9LHdlPW1lLF9lPUwsYmU9X2UuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLF9lLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxfZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksX2UuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxTZT1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxFZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxrZT1MLFJlPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sVGU9TCxBZT1UZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIGUsdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIG4oZSl7dmFyIG49ZTtyZXR1cm4gdCYmKHIuc2V0QXR0cmlidXRlKCJocmVmIixuKSxuPXIuaHJlZiksci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnIuaG9zdCxzZWFyY2g6ci5zZWFyY2g/ci5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ci5ob3N0bmFtZSxwb3J0OnIucG9ydCxwYXRobmFtZToiLyI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKT9yLnBhdGhuYW1lOiIvIityLnBhdGhuYW1lfX1yZXR1cm4gZT1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbih0KXt2YXIgcj1UZS5pc1N0cmluZyh0KT9uKHQpOnQ7cmV0dXJuIHIucHJvdG9jb2w9PT1lLnByb3RvY29sJiZyLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9O2Z1bmN0aW9uIENlKGUpe3RoaXMubWVzc2FnZT1lfUNlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxDZS5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgRGU9Q2UsUGU9TCxPZT1mdW5jdGlvbihlLHQscil7dmFyIG49ci5jb25maWcudmFsaWRhdGVTdGF0dXM7ci5zdGF0dXMmJm4mJiFuKHIuc3RhdHVzKT90KHdlKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrci5zdGF0dXMsci5jb25maWcsbnVsbCxyLnJlcXVlc3QscikpOmUocil9LEllPWJlLFVlPWosSGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmIVNlKHQpP0VlKGUsdCk6dH0sTGU9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGtlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWtlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWtlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmUmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0sTWU9QWUsTmU9bWUsamU9eWUseGU9RGUscWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuLGk9ZS5kYXRhLG89ZS5oZWFkZXJzLHM9ZS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gYSgpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1QZS5pc0Zvcm1EYXRhKGkpJiZkZWxldGUgb1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIHU9ZS5hdXRoLnVzZXJuYW1lfHwiIixsPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7by5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EodSsiOiIrbCl9dmFyIGQ9SGUoZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYoYyl7dmFyIG49ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP0xlKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsaT17ZGF0YTpzJiYidGV4dCIhPT1zJiYianNvbiIhPT1zP2MucmVzcG9uc2U6Yy5yZXNwb25zZVRleHQsc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6bixjb25maWc6ZSxyZXF1ZXN0OmN9O09lKChmdW5jdGlvbihlKXt0KGUpLGEoKX0pLChmdW5jdGlvbihlKXtyKGUpLGEoKX0pLGkpLGM9bnVsbH19aWYoYy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksVWUoZCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxjLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YyYmND09PWMucmVhZHlTdGF0ZSYmKDAhPT1jLnN0YXR1c3x8Yy5yZXNwb25zZVVSTCYmMD09PWMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoaCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihyKE5lKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe3IoTmUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixuPWUudHJhbnNpdGlvbmFsfHxqZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih0PWUudGltZW91dEVycm9yTWVzc2FnZSkscihOZSh0LGUsbi5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LFBlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBmPShlLndpdGhDcmVkZW50aWFsc3x8TWUoZCkpJiZlLnhzcmZDb29raWVOYW1lP0llLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2YmJihvW2UueHNyZkhlYWRlck5hbWVdPWYpfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJlBlLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1pJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTpjLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxQZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxzJiYianNvbiIhPT1zJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYobj1mdW5jdGlvbihlKXtjJiYocighZXx8ZSYmZS50eXBlP25ldyB4ZSgiY2FuY2VsZWQiKTplKSxjLmFib3J0KCksYz1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP24oKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKSxpfHwoaT1udWxsKSxjLnNlbmQoaSl9KSl9LEtlPUwsSmU9ZnVuY3Rpb24oZSx0KXtwZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LEJlPWdlLEZlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gV2UoZSx0KXshS2UuaXNVbmRlZmluZWQoZSkmJktlLmlzVW5kZWZpbmVkKGVbIkNvbnRlbnQtVHlwZSJdKSYmKGVbIkNvbnRlbnQtVHlwZSJdPXQpfXZhciAkZSx6ZT17dHJhbnNpdGlvbmFsOnllLGFkYXB0ZXI6KCgidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0fHx2b2lkIDAhPT1mZSYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZlKSkmJigkZT1xZSksJGUpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEplKHQsIkFjY2VwdCIpLEplKHQsIkNvbnRlbnQtVHlwZSIpLEtlLmlzRm9ybURhdGEoZSl8fEtlLmlzQXJyYXlCdWZmZXIoZSl8fEtlLmlzQnVmZmVyKGUpfHxLZS5pc1N0cmVhbShlKXx8S2UuaXNGaWxlKGUpfHxLZS5pc0Jsb2IoZSk/ZTpLZS5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpLZS5pc1VSTFNlYXJjaFBhcmFtcyhlKT8oV2UodCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKSxlLnRvU3RyaW5nKCkpOktlLmlzT2JqZWN0KGUpfHx0JiYiYXBwbGljYXRpb24vanNvbiI9PT10WyJDb250ZW50LVR5cGUiXT8oV2UodCwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGUsdCxyKXtpZihLZS5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKGUpLEtlLnRyaW0oZSl9Y2F0Y2goZSl7aWYoIlN5bnRheEVycm9yIiE9PWUubmFtZSl0aHJvdyBlfXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoZSl9KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHx6ZS50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZLZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgQmUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtLZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLEtlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1LZS5tZXJnZShGZSl9KSk7dmFyIFllPXplLFZlPUwsR2U9WWUsWGU9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9LFplPUwsUWU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXN8fEdlO3JldHVybiBWZS5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9ci5jYWxsKG4sZSx0KX0pKSxlfSxldD1YZSx0dD1ZZSxydD1EZTtmdW5jdGlvbiBudChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcnQoImNhbmNlbGVkIil9dmFyIGl0PUwsb3Q9ZnVuY3Rpb24oZSx0KXt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gaXQuaXNQbGFpbk9iamVjdChlKSYmaXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZShlLHQpOml0LmlzUGxhaW5PYmplY3QodCk/aXQubWVyZ2Uoe30sdCk6aXQuaXNBcnJheSh0KT90LnNsaWNlKCk6dH1mdW5jdGlvbiBpKHIpe3JldHVybiBpdC5pc1VuZGVmaW5lZCh0W3JdKT9pdC5pc1VuZGVmaW5lZChlW3JdKT92b2lkIDA6bih2b2lkIDAsZVtyXSk6bihlW3JdLHRbcl0pfWZ1bmN0aW9uIG8oZSl7aWYoIWl0LmlzVW5kZWZpbmVkKHRbZV0pKXJldHVybiBuKHZvaWQgMCx0W2VdKX1mdW5jdGlvbiBzKHIpe3JldHVybiBpdC5pc1VuZGVmaW5lZCh0W3JdKT9pdC5pc1VuZGVmaW5lZChlW3JdKT92b2lkIDA6bih2b2lkIDAsZVtyXSk6bih2b2lkIDAsdFtyXSl9ZnVuY3Rpb24gYShyKXtyZXR1cm4gciBpbiB0P24oZVtyXSx0W3JdKTpyIGluIGU/bih2b2lkIDAsZVtyXSk6dm9pZCAwfXZhciBjPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyxhZGFwdGVyOnMscmVzcG9uc2VUeXBlOnMseHNyZkNvb2tpZU5hbWU6cyx4c3JmSGVhZGVyTmFtZTpzLG9uVXBsb2FkUHJvZ3Jlc3M6cyxvbkRvd25sb2FkUHJvZ3Jlc3M6cyxkZWNvbXByZXNzOnMsbWF4Q29udGVudExlbmd0aDpzLG1heEJvZHlMZW5ndGg6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOmF9O3JldHVybiBpdC5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksKGZ1bmN0aW9uKGUpe3ZhciB0PWNbZV18fGksbj10KGUpO2l0LmlzVW5kZWZpbmVkKG4pJiZ0IT09YXx8KHJbZV09bil9KSkscn0sc3Q9IjAuMjYuMSIsYXQ9c3QsY3Q9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2N0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgdXQ9e307Y3QudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIltBeGlvcyB2IithdCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixpLG8pe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSk7cmV0dXJuIHQmJiF1dFtpXSYmKHV0W2ldPSEwLGNvbnNvbGUud2FybihuKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixpLG8pfX07dmFyIGx0PXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxyKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPW4ubGVuZ3RoO2ktLSA+MDspe3ZhciBvPW5baV0scz10W29dO2lmKHMpe3ZhciBhPWVbb10sYz12b2lkIDA9PT1hfHxzKGEsbyxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6Y3R9LGR0PUwsaHQ9aixmdD1LLHB0PWZ1bmN0aW9uKGUpe3JldHVybiBudChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9UWUuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9WmUubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxaZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fHR0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBudChlKSx0LmRhdGE9UWUuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gZXQodCl8fChudChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPVFlLmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LGd0PW90LHl0PWx0LHZ0PXl0LnZhbGlkYXRvcnM7ZnVuY3Rpb24gbXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBmdCxyZXNwb25zZTpuZXcgZnR9fW10LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PWd0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIHI9dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09ciYmeXQuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6dnQudHJhbnNpdGlvbmFsKHZ0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6dnQudHJhbnNpdGlvbmFsKHZ0LmJvb2xlYW4pfSwhMSk7dmFyIG49W10saT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoaT1pJiZlLnN5bmNocm9ub3VzLG4udW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIG8scz1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtzLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWkpe3ZhciBhPVtwdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhLG4pLGE9YS5jb25jYXQocyksbz1Qcm9taXNlLnJlc29sdmUodCk7YS5sZW5ndGg7KW89by50aGVuKGEuc2hpZnQoKSxhLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgYz10O24ubGVuZ3RoOyl7dmFyIHU9bi5zaGlmdCgpLGw9bi5zaGlmdCgpO3RyeXtjPXUoYyl9Y2F0Y2goZSl7bChlKTticmVha319dHJ5e289cHQoYyl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7cy5sZW5ndGg7KW89by50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBvfSxtdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPWd0KHRoaXMuZGVmYXVsdHMsZSksaHQoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sZHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe210LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoZ3Qocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxkdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe210LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChndChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgd3Q9bXQsX3Q9RGU7ZnVuY3Rpb24gYnQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHIuX2xpc3RlbmVycyl7dmFyIHQsbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxuO3QrKylyLl9saXN0ZW5lcnNbdF0oZSk7ci5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Iuc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUodCl9LG59LGUoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IF90KGUpLHQoci5yZWFzb24pKX0pKX1idC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxidC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxidC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LGJ0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGJ0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgU3Q9YnQsRXQ9TCxrdD1MLFJ0PVIsVHQ9d3QsQXQ9b3Q7dmFyIEN0PWZ1bmN0aW9uIGUodCl7dmFyIHI9bmV3IFR0KHQpLG49UnQoVHQucHJvdG90eXBlLnJlcXVlc3Qscik7cmV0dXJuIGt0LmV4dGVuZChuLFR0LnByb3RvdHlwZSxyKSxrdC5leHRlbmQobixyKSxuLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gZShBdCh0LHIpKX0sbn0oWWUpO0N0LkF4aW9zPVR0LEN0LkNhbmNlbD1EZSxDdC5DYW5jZWxUb2tlbj1TdCxDdC5pc0NhbmNlbD1YZSxDdC5WRVJTSU9OPXN0LEN0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEN0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LEN0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gRXQuaXNPYmplY3QoZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9LGsuZXhwb3J0cz1DdCxrLmV4cG9ydHMuZGVmYXVsdD1DdDt2YXIgRHQsUHQ9ay5leHBvcnRzO2xldCBPdD1EdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1QdC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBEdCksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9UHQuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9UHQuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxyPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57ci5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9cn1yZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIER0LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQodD0hMCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPXJ9KSl9ZW5hYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtEdC5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoZT1EdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUKXtEdC5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtPdC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxPdD1EdD1mdW5jdGlvbihlLHQscixuKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09bj9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpuO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZT0+e31dLE90KTtjbGFzcyBJdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LHIpfSkpfWdldERhdGEodCl7dmFyIHIsbjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KG49bnVsbD09PShyPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KSkmJnZvaWQgMCE9PW4/bjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19dmFyIFV0PVtdLEh0PVtdLEx0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE10PSExO2Z1bmN0aW9uIE50KCl7TXQ9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KVV0W3RdPWVbdF0sSHRbZS5jaGFyQ29kZUF0KHQpXT10O0h0WyItIi5jaGFyQ29kZUF0KDApXT02MixIdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24ganQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKFV0WyhpPW4pPj4xOCY2M10rVXRbaT4+MTImNjNdK1V0W2k+PjYmNjNdK1V0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiB4dChlKXt2YXIgdDtNdHx8TnQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLGM9ci1uO2E8YzthKz1zKW8ucHVzaChqdChlLGEsYStzPmM/YzphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPVV0W3Q+PjJdLGkrPVV0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9VXRbdD4+MTBdLGkrPVV0W3Q+PjQmNjNdLGkrPVV0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gcXQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSxjPSgxPDxhKS0xLHU9Yz4+MSxsPS03LGQ9cj9pLTE6MCxoPXI/LTE6MSxmPWVbdCtkXTtmb3IoZCs9aCxvPWYmKDE8PC1sKS0xLGY+Pj0tbCxsKz1hO2w+MDtvPTI1NipvK2VbdCtkXSxkKz1oLGwtPTgpO2ZvcihzPW8mKDE8PC1sKS0xLG8+Pj0tbCxsKz1uO2w+MDtzPTI1NipzK2VbdCtkXSxkKz1oLGwtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PWMpcmV0dXJuIHM/TmFOOjEvMCooZj8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPXV9cmV0dXJuKGY/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gS3QoZSx0LHIsbixpLG8pe3ZhciBzLGEsYyx1PTgqby1pLTEsbD0oMTw8dSktMSxkPWw+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGY9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1sKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihjPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLGMqPTIpLCh0Kz1zK2Q+PTE/aC9jOmgqTWF0aC5wb3coMiwxLWQpKSpjPj0yJiYocysrLGMvPTIpLHMrZD49bD8oYT0wLHM9bCk6cytkPj0xPyhhPSh0KmMtMSkqTWF0aC5wb3coMixpKSxzKz1kKTooYT10Kk1hdGgucG93KDIsZC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2ZdPTI1NSZhLGYrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSx1Kz1pO3U+MDtlW3IrZl09MjU1JnMsZis9cCxzLz0yNTYsdS09OCk7ZVtyK2YtcF18PTEyOCpnfXZhciBKdD17fS50b1N0cmluZyxCdD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1KdC5jYWxsKGUpfTt6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PUouVFlQRURfQVJSQVlfU1VQUE9SVHx8Si5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciBGdD1XdCgpO2Z1bmN0aW9uIFd0KCl7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uICR0KGUsdCl7aWYoV3QoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IHp0KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHp0KGUsdCxyKXtpZighKHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiB6dCkpcmV0dXJuIG5ldyB6dChlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBHdCh0aGlzLGUpfXJldHVybiBZdCh0aGlzLGUsdCxyKX1mdW5jdGlvbiBZdChlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXp0LnByb3RvdHlwZTplPVh0KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXp0LmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIG49MHxlcih0LHIpLGk9KGU9JHQoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoUXQodCkpe3ZhciByPTB8WnQodC5sZW5ndGgpO3JldHVybiAwPT09KGU9JHQoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uPyR0KGUsMCk6WHQoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmQnQodC5kYXRhKSlyZXR1cm4gWHQoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBWdChlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIEd0KGUsdCl7aWYoVnQodCksZT0kdChlLHQ8MD8wOjB8WnQodCkpLCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIFh0KGUsdCl7dmFyIHI9dC5sZW5ndGg8MD8wOjB8WnQodC5sZW5ndGgpO2U9JHQoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIFp0KGUpe2lmKGU+PVd0KCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1d0KCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIFF0KGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBlcihlLHQpe2lmKFF0KGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBBcihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIENyKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIEFyKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHRyKGUsdCxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIHlyKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBocih0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHByKHRoaXMsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBncih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBkcih0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB2cih0aGlzLHQscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBycihlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIG5yKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9aT8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD16dC5mcm9tKHQsbikpLFF0KHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6aXIoZSx0LHIsbixpKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6aXIoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGlyKGUsdCxyLG4saSl7dmFyIG8scz0xLGE9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3M9MixhLz0yLGMvPTIsci89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1zP2VbdF06ZS5yZWFkVUludDE2QkUodCpzKX1pZihpKXt2YXIgbD0tMTtmb3Iobz1yO288YTtvKyspaWYodShlLG8pPT09dSh0LC0xPT09bD8wOm8tbCkpe2lmKC0xPT09bCYmKGw9byksby1sKzE9PT1jKXJldHVybiBsKnN9ZWxzZS0xIT09bCYmKG8tPW8tbCksbD0tMX1lbHNlIGZvcihyK2M+YSYmKHI9YS1jKSxvPXI7bz49MDtvLS0pe2Zvcih2YXIgZD0hMCxoPTA7aDxjO2grKylpZih1KGUsbytoKSE9PXUodCxoKSl7ZD0hMTticmVha31pZihkKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIG9yKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7bj5vLzImJihuPW8vMik7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGE9cGFyc2VJbnQodC5zdWJzdHIoMipzLDIpLDE2KTtpZihpc05hTihhKSlyZXR1cm4gcztlW3Irc109YX1yZXR1cm4gc31mdW5jdGlvbiBzcihlLHQscixuKXtyZXR1cm4gRHIoQXIodCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24gYXIoZSx0LHIsbil7cmV0dXJuIERyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fSh0KSxlLHIsbil9ZnVuY3Rpb24gY3IoZSx0LHIsbil7cmV0dXJuIGFyKGUsdCxyLG4pfWZ1bmN0aW9uIHVyKGUsdCxyLG4pe3JldHVybiBEcihDcih0KSxlLHIsbil9ZnVuY3Rpb24gbHIoZSx0LHIsbil7cmV0dXJuIERyKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4saSxvPVtdLHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpbj0ocj1lLmNoYXJDb2RlQXQocykpPj44LGk9ciUyNTYsby5wdXNoKGkpLG8ucHVzaChuKTtyZXR1cm4gb30odCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24gZHIoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3h0KGUpOnh0KGUuc2xpY2UodCxyKSl9ZnVuY3Rpb24gaHIoZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsYyx1PWVbaV0sbD1udWxsLGQ9dT4yMzk/NDp1PjIyMz8zOnU+MTkxPzI6MTtpZihpK2Q8PXIpc3dpdGNoKGQpe2Nhc2UgMTp1PDEyOCYmKGw9dSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKGM9KDMxJnUpPDw2fDYzJm8pPjEyNyYmKGw9Yyk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoYz0oMTUmdSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihsPWMpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYoYz0oMTUmdSk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZjPDExMTQxMTImJihsPWMpfW51bGw9PT1sPyhsPTY1NTMzLGQ9MSk6bD42NTUzNSYmKGwtPTY1NTM2LG4ucHVzaChsPj4+MTAmMTAyM3w1NTI5NiksbD01NjMyMHwxMDIzJmwpLG4ucHVzaChsKSxpKz1kfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1mcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9ZnIpKTtyZXR1cm4gcn0obil9enQucG9vbFNpemU9ODE5Mix6dC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189enQucHJvdG90eXBlLGV9LHp0LmZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBZdChudWxsLGUsdCxyKX0senQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHp0LnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsenQuX19wcm90b19fPVVpbnQ4QXJyYXkpLHp0LmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFZ0KHQpLHQ8PTA/JHQoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj8kdChlLHQpLmZpbGwocixuKTokdChlLHQpLmZpbGwocik6JHQoZSx0KX0obnVsbCxlLHQscil9LHp0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBHdChudWxsLGUpfSx6dC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmlzQnVmZmVyPVByLHp0LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighUXQoZSl8fCFRdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0senQuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0senQuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIUJ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHp0LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49enQuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoIVF0KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0senQuYnl0ZUxlbmd0aD1lcix6dC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHp0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpcnIodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHp0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpcnIodGhpcyx0LHQrMykscnIodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClycih0aGlzLHQsdCs3KSxycih0aGlzLHQrMSx0KzYpLHJyKHRoaXMsdCsyLHQrNSkscnIodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/aHIodGhpcywwLGUpOnRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0senQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PXp0LmNvbXBhcmUodGhpcyxlKX0senQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0senQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKG4+Pj49MCkscz0ocj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKG4saSksdT1lLnNsaWNlKHQsciksbD0wO2w8YTsrK2wpaWYoY1tsXSE9PXVbbF0pe289Y1tsXSxzPXVbbF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSx6dC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0senQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCEwKX0senQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbnIodGhpcyxlLHQsciwhMSl9LHp0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gb3IodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gc3IodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGFyKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdXIodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBscih0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSx6dC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgZnI9NDA5NjtmdW5jdGlvbiBwcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGdyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB5cihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVRyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIHZyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gbXIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHdyKGUsdCxyLG4saSxvKXtpZighUXQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIF9yKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBicihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiBTcihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEVyKGUsdCxyLG4saSl7cmV0dXJuIGl8fFNyKGUsMCxyLDQpLEt0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIGtyKGUsdCxyLG4saSl7cmV0dXJuIGl8fFNyKGUsMCxyLDgpLEt0KGUsdCxyLG4sNTIsOCkscis4fXp0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKShyPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPXp0LnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtyPW5ldyB6dChpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0senQucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOyluKz10aGlzW2Urb10qaTtyZXR1cm4gbn0senQucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspbis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gbn0senQucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LHp0LnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0senQucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LHp0LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOyluKz10aGlzW2Urb10qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqdCkpLG59LHp0LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxtcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSx6dC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8bXIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0senQucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8bXIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0senQucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSx6dC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHp0LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHF0KHRoaXMsZSwhMCwyMyw0KX0senQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCExLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsOCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDUyLDgpfSx6dC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsOCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCExLDUyLDgpfSx6dC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8d3IodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMSwyNTUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsNjU1MzUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOl9yKHRoaXMsZSx0LCEwKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsNjU1MzUsMCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOl9yKHRoaXMsZSx0LCExKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOmJyKHRoaXMsZSx0LCEwKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOmJyKHRoaXMsZSx0LCExKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7d3IodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LHp0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7d3IodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPXItMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDEyNywtMTI4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksenQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOl9yKHRoaXMsZSx0LCExKSx0KzJ9LHp0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOmJyKHRoaXMsZSx0LCEwKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOmJyKHRoaXMsZSx0LCExKSx0KzR9LHp0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBFcih0aGlzLGUsdCwhMCxyKX0senQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKHRoaXMsZSx0LCExLHIpfSx6dC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCExLHIpfSx6dC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBpLG89bi1yO2lmKHRoaXM9PT1lJiZyPHQmJnQ8bilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStyXTtlbHNlIGlmKG88MWUzfHwhenQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LHp0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiF6dC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxyOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz1RdChlKT9lOkFyKG5ldyB6dChlLG4pLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPHItdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIFJyPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFRyKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBBcihlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxuOysrcyl7aWYoKHI9ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1uKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8scztNdHx8TnQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgTHQoMyphLzQtbyksbj1vPjA/YS00OmE7dmFyIGM9MDtmb3IodD0wLHI9MDt0PG47dCs9NCxyKz0zKWk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MTh8SHRbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxIdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8SHRbZS5jaGFyQ29kZUF0KHQrMyldLHNbYysrXT1pPj4xNiYyNTUsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MnxIdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1tjKytdPTI1NSZpKToxPT09byYmKGk9SHRbZS5jaGFyQ29kZUF0KHQpXTw8MTB8SHRbZS5jaGFyQ29kZUF0KHQrMSldPDw0fEh0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKFJyLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBEcihlLHQscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krcl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBQcihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fE9yKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJk9yKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBPcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBJcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6enQsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksenQuYWxsb2MoK2UpfSxpc0J1ZmZlcjpQcixrTWF4TGVuZ3RoOkZ0fSksVXI9e2V4cG9ydHM6e319LEhyPXt9LExyPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShMciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTHIuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXQlNDtpZighcilyZXR1cm4gZTt2YXIgbj10LGk9NC1yLG89dCtpLHM9enQuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixuKyspO3JldHVybiBzLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1yPUxyO2Z1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksenQuaXNCdWZmZXIoZSk/eHIoZS50b1N0cmluZygiYmFzZTY0IikpOnhyKHp0LmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxNci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIHFyLEtyPU5yO0tyLmVuY29kZT1OcixLci5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sS3IudG9CYXNlNjQ9anIsS3IuZnJvbUJhc2U2ND14cixLci50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4genQuZnJvbShqcihlKSwiYmFzZTY0Iil9LEhyLmRlZmF1bHQ9S3IsKHFyPVVyKS5leHBvcnRzPUhyLmRlZmF1bHQscXIuZXhwb3J0cy5kZWZhdWx0PXFyLmV4cG9ydHM7dmFyIEpyPVVyLmV4cG9ydHMsQnI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxyKXt2YXIgbj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gcihlLHIsbixpLG8pe2Zvcih2YXIgcyxhLGMsdSxsLGQsaCxmLHAsZyx5LHYsbTtvPj02NDspe2ZvcihzPXJbMF0sYT1yWzFdLGM9clsyXSx1PXJbM10sbD1yWzRdLGQ9cls1XSxoPXJbNl0sZj1yWzddLGc9MDtnPDE2O2crKyl5PWkrNCpnLGVbZ109KDI1NSZuW3ldKTw8MjR8KDI1NSZuW3krMV0pPDwxNnwoMjU1Jm5beSsyXSk8PDh8MjU1Jm5beSszXTtmb3IoZz0xNjtnPDY0O2crKyl2PSgocD1lW2ctMl0pPj4+MTd8cDw8MTUpXihwPj4+MTl8cDw8MTMpXnA+Pj4xMCxtPSgocD1lW2ctMTVdKT4+Pjd8cDw8MjUpXihwPj4+MTh8cDw8MTQpXnA+Pj4zLGVbZ109KHYrZVtnLTddfDApKyhtK2VbZy0xNl18MCk7Zm9yKGc9MDtnPDY0O2crKyl2PSgoKGw+Pj42fGw8PDI2KV4obD4+PjExfGw8PDIxKV4obD4+PjI1fGw8PDcpKSsobCZkXn5sJmgpfDApKyhmKyh0W2ddK2VbZ118MCl8MCl8MCxtPSgocz4+PjJ8czw8MzApXihzPj4+MTN8czw8MTkpXihzPj4+MjJ8czw8MTApKSsocyZhXnMmY15hJmMpfDAsZj1oLGg9ZCxkPWwsbD11K3Z8MCx1PWMsYz1hLGE9cyxzPXYrbXwwO3JbMF0rPXMsclsxXSs9YSxyWzJdKz1jLHJbM10rPXUscls0XSs9bCxyWzVdKz1kLHJbNl0rPWgscls3XSs9ZixpKz02NCxvLT02NH1yZXR1cm4gaX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIG49MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYocih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihuPXIodGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxuLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbbisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxuPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dC81MzY4NzA5MTJ8MCxvPXQ8PDMscz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltuXT0xMjg7Zm9yKHZhciBhPW4rMTthPHMtODthKyspdGhpcy5idWZmZXJbYV09MDt0aGlzLmJ1ZmZlcltzLThdPWk+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy03XT1pPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtNl09aT4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtNV09aT4+PjAmMjU1LHRoaXMuYnVmZmVyW3MtNF09bz4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTNdPW8+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy0yXT1vPj4+OCYyNTUsdGhpcy5idWZmZXJbcy0xXT1vPj4+MCYyNTUscih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLHMpLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKGE9MDthPDg7YSsrKWVbNCphKzBdPXRoaXMuc3RhdGVbYV0+Pj4yNCYyNTUsZVs0KmErMV09dGhpcy5zdGF0ZVthXT4+PjE2JjI1NSxlWzQqYSsyXT10aGlzLnN0YXRlW2FdPj4+OCYyNTUsZVs0KmErM109dGhpcy5zdGF0ZVthXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0aGlzLnN0YXRlLmxlbmd0aDtyKyspdGhpcy5zdGF0ZVtyXT1lW3JdO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPW47dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IG4sdGhpcy5vdXRlcj1uZXcgbix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyBuKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0W3JdPWVbcl07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9KG5ldyBuKS51cGRhdGUoZSkscj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCkscn1mdW5jdGlvbiBzKGUsdCl7dmFyIHI9bmV3IGkoZSkudXBkYXRlKHQpLG49ci5kaWdlc3QoKTtyZXR1cm4gci5jbGVhbigpLG59ZnVuY3Rpb24gYShlLHQscixuKXt2YXIgaT1uWzBdO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGk+MSYmdC51cGRhdGUoZSksciYmdC51cGRhdGUociksdC51cGRhdGUobiksdC5maW5pc2goZSksblswXSsrfWUuSE1BQz1pLGUuaGFzaD1vLGUuZGVmYXVsdD1vLGUuaG1hYz1zO3ZhciBjPW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiB1KGUsdCxyLG4pe3ZvaWQgMD09PXQmJih0PWMpLHZvaWQgMD09PW4mJihuPTMyKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoWzFdKSx1PXModCxlKSxsPW5ldyBpKHUpLGQ9bmV3IFVpbnQ4QXJyYXkobC5kaWdlc3RMZW5ndGgpLGg9ZC5sZW5ndGgsZj1uZXcgVWludDhBcnJheShuKSxwPTA7cDxuO3ArKyloPT09ZC5sZW5ndGgmJihhKGQsbCxyLG8pLGg9MCksZltwXT1kW2grK107cmV0dXJuIGwuY2xlYW4oKSxkLmZpbGwoMCksby5maWxsKDApLGZ9ZnVuY3Rpb24gbChlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkocyksdT1uZXcgVWludDhBcnJheShzKSxsPW5ldyBVaW50OEFycmF5KG4pLGQ9MDtkKnM8bjtkKyspe3ZhciBoPWQrMTthWzBdPWg+Pj4yNCYyNTUsYVsxXT1oPj4+MTYmMjU1LGFbMl09aD4+PjgmMjU1LGFbM109aD4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaCh1KTtmb3IodmFyIGY9MDtmPHM7ZisrKWNbZl09dVtmXTtmb3IoZj0yO2Y8PXI7ZisrKXtvLnJlc2V0KCksby51cGRhdGUodSkuZmluaXNoKHUpO2Zvcih2YXIgcD0wO3A8cztwKyspY1twXV49dVtwXX1mb3IoZj0wO2Y8cyYmZCpzK2Y8bjtmKyspbFtkKnMrZl09Y1tmXX1mb3IoZD0wO2Q8cztkKyspY1tkXT11W2RdPTA7Zm9yKGQ9MDtkPDQ7ZCsrKWFbZF09MDtyZXR1cm4gby5jbGVhbigpLGx9ZS5oa2RmPXUsZS5wYmtkZjI9bH0obik7dmFyIGk9bi5kZWZhdWx0O2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtlLmV4cG9ydHM9aX0oKX0oQnIpO3ZhciBGcj1TKEJyLmV4cG9ydHMpLFdyPWNyeXB0bztmdW5jdGlvbiAkcihlKXt0cnl7cmV0dXJuIG51bGwhPWUmJiJib29sZWFuIj09dHlwZW9mIGUuZXh0cmFjdGFibGUmJiJzdHJpbmciPT10eXBlb2YgZS5hbGdvcml0aG0ubmFtZSYmInN0cmluZyI9PXR5cGVvZiBlLnR5cGV9Y2F0Y2goZSl7cmV0dXJuITF9fWNvbnN0IHpyPW5ldyBUZXh0RW5jb2RlcixZcj1uZXcgVGV4dERlY29kZXI7Y29uc3QgVnI9ZT0+e2xldCB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PVlyLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4oZT0+bmV3IFVpbnQ4QXJyYXkoYXRvYihlKS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSkpKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19O2NsYXNzIEdyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7dmFyIHQ7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0odD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PXR8fHQuY2FsbChFcnJvcix0aGlzLHRoaXMuY29uc3RydWN0b3IpfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19Y2xhc3MgWHIgZXh0ZW5kcyBHcntjb25zdHJ1Y3RvcihlLHQ9InVuc3BlY2lmaWVkIixyPSJ1bnNwZWNpZmllZCIpe3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1jbGFzcyBaciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1yfXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1jbGFzcyBRciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fWNsYXNzIGVuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyB0biBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIHJuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgbm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fWNsYXNzIG9uIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIix0aGlzLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19Y2xhc3Mgc24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIix0aGlzLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19Y2xhc3MgYW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fWZ1bmN0aW9uIGNuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gdW4oKXt0cnl7cmV0dXJuIHZvaWQgMCE9PWZlLnZlcnNpb25zLm5vZGV9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGxuKGUsdD0iYWxnb3JpdGhtLm5hbWUiKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyAke3R9IG11c3QgYmUgJHtlfWApfWZ1bmN0aW9uIGRuKGUsdCl7cmV0dXJuIGUubmFtZT09PXR9ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIHBhcnNlSW50KGUubmFtZS5zbGljZSg0KSwxMCl9ZnVuY3Rpb24gZm4oZSx0LC4uLnIpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp7aWYoIWRuKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgbG4oIkhNQUMiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGhuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOntpZighZG4oZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgbG4oIlJTQVNTQS1QS0NTMS12MV81Iik7Y29uc3Qgcj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihobihlLmFsZ29yaXRobS5oYXNoKSE9PXIpdGhyb3cgbG4oYFNIQS0ke3J9YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp7aWYoIWRuKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgbG4oIlJTQS1QU1MiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGhuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UgdW4oKSYmIkVkRFNBIjppZigiTk9ERS1FRDI1NTE5IiE9PWUuYWxnb3JpdGhtLm5hbWUmJiJOT0RFLUVENDQ4IiE9PWUuYWxnb3JpdGhtLm5hbWUpdGhyb3cgbG4oIk5PREUtRUQyNTUxOSBvciBOT0RFLUVENDQ4Iik7YnJlYWs7Y2FzZSBjbigpJiYiRWREU0EiOmlmKCFkbihlLmFsZ29yaXRobSwiTk9ERS1FRDI1NTE5IikpdGhyb3cgbG4oIk5PREUtRUQyNTUxOSIpO2JyZWFrO2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOntpZighZG4oZS5hbGdvcml0aG0sIkVDRFNBIikpdGhyb3cgbG4oIkVDRFNBIik7Y29uc3Qgcj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fSh0KTtpZihlLmFsZ29yaXRobS5uYW1lZEN1cnZlIT09cil0aHJvdyBsbihyLCJhbGdvcml0aG0ubmFtZWRDdXJ2ZSIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24iKX0hZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgodD0+ZS51c2FnZXMuaW5jbHVkZXModCkpKSl7bGV0IGU9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IHI9dC5wb3AoKTtlKz1gb25lIG9mICR7dC5qb2luKCIsICIpfSwgb3IgJHtyfS5gfWVsc2UgMj09PXQubGVuZ3RoP2UrPWBvbmUgb2YgJHt0WzBdfSBvciAke3RbMV19LmA6ZSs9YCR7dFswXX0uYDt0aHJvdyBuZXcgVHlwZUVycm9yKGUpfX0oZSxyKX12YXIgcG49KGUsLi4udCk9PntsZXQgcj0iS2V5IG11c3QgYmUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBlPXQucG9wKCk7cis9YG9uZSBvZiB0eXBlICR7dC5qb2luKCIsICIpfSwgb3IgJHtlfS5gfWVsc2UgMj09PXQubGVuZ3RoP3IrPWBvbmUgb2YgdHlwZSAke3RbMF19IG9yICR7dFsxXX0uYDpyKz1gb2YgdHlwZSAke3RbMF19LmA7cmV0dXJuIG51bGw9PWU/cis9YCBSZWNlaXZlZCAke2V9YDoiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3IrPWAgUmVjZWl2ZWQgZnVuY3Rpb24gJHtlLm5hbWV9YDoib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHIrPWAgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgJHtlLmNvbnN0cnVjdG9yLm5hbWV9YCkscn0sZ249ZT0+JHIoZSk7Y29uc3QgeW49WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiB2bihlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCByPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpOylyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cn1jb25zdCBtbj1hc3luYyBlPT57dmFyIHQscjtjb25zdHthbGdvcml0aG06bixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQscjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBlbihgJHtlLmFsZ30ga2V5cyBjYW5ub3QgYmUgaW1wb3J0ZWQgYXMgQ3J5cHRvS2V5IGluc3RhbmNlc2ApO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxyPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxyPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LHI9WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDpgU0hBLSR7cGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MX1gfSxyPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxyPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZShjbigpfHx1bigpKSYmIk9LUCI6aWYoIkVkRFNBIiE9PWUuYWxnKXRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyk7c3dpdGNoKGUuY3J2KXtjYXNlIkVkMjU1MTkiOnQ9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIHVuKCkmJiJFZDQ0OCI6dD17bmFtZToiTk9ERS1FRDQ0OCIsbmFtZWRDdXJ2ZToiTk9ERS1FRDQ0OCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKSxvPVtuLG51bGwhPT0odD1lLmV4dCkmJnZvaWQgMCE9PXQmJnQsbnVsbCE9PShyPWUua2V5X29wcykmJnZvaWQgMCE9PXI/cjppXTtpZigiUEJLREYyIj09PW4ubmFtZSlyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3IixWcihlLmspLC4uLm8pO2NvbnN0IHM9ey4uLmV9O3JldHVybiBkZWxldGUgcy5hbGcsV3Iuc3VidGxlLmltcG9ydEtleSgiandrIixzLC4uLm8pfTtjb25zdCB3bj0oZSx0LHIpPT57ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT8oZT0+e2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighZ24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihwbihlLC4uLnluLCJVaW50OEFycmF5IikpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0ImApfX0pKHQpOigoZSx0KT0+e2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4pKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0ImApO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlImApO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3luLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApfSkodCxyKX07Y29uc3QgX249YXN5bmMoZSx0LHIsbik9Pntjb25zdCBpPWF3YWl0IGZ1bmN0aW9uKGUsdCxyKXtpZigkcih0KSlyZXR1cm4gZm4odCxlLHIpLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihwbih0LC4uLnluKSk7cmV0dXJuIFdyLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zbGljZSgtMyl9YCxuYW1lOiJITUFDIn0sITEsW3JdKX10aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4sIlVpbnQ4QXJyYXkiKSl9KGUsdCwidmVyaWZ5Iik7KChlLHQpPT57aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKTtjb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1gU0hBLSR7ZS5zbGljZSgtMyl9YDtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UoY24oKXx8dW4oKSkmJiJFZERTQSI6Y29uc3R7bmFtZWRDdXJ2ZTpufT10O3JldHVybntuYW1lOm4sbmFtZWRDdXJ2ZTpufTtkZWZhdWx0OnRocm93IG5ldyBlbihgYWxnICR7ZX0gaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZWApfX0oZSxpLmFsZ29yaXRobSk7dHJ5e3JldHVybiBhd2FpdCBXci5zdWJ0bGUudmVyaWZ5KG8saSxyLG4pfWNhdGNoKGUpe3JldHVybiExfX07YXN5bmMgZnVuY3Rpb24gYm4oZSx0LHIpe3ZhciBuO2lmKCF2bihlKSl0aHJvdyBuZXcgdG4oIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih2b2lkIDA9PT1lLnByb3RlY3RlZCYmdm9pZCAwPT09ZS5oZWFkZXIpdGhyb3cgbmV3IHRuKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtpZih2b2lkIDAhPT1lLnByb3RlY3RlZCYmInN0cmluZyIhPXR5cGVvZiBlLnByb3RlY3RlZCl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwPT09ZS5wYXlsb2FkKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbWlzc2luZyIpO2lmKCJzdHJpbmciIT10eXBlb2YgZS5zaWduYXR1cmUpdGhyb3cgbmV3IHRuKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDAhPT1lLmhlYWRlciYmIXZuKGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtsZXQgaT17fTtpZihlLnByb3RlY3RlZCl7Y29uc3QgdD1WcihlLnByb3RlY3RlZCk7dHJ5e2k9SlNPTi5wYXJzZShZci5kZWNvZGUodCkpfWNhdGNoKGUpe3Rocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpfX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkoaSxlLmhlYWRlcikpdGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3Qgbz17Li4uaSwuLi5lLmhlYWRlcn0scz1mdW5jdGlvbihlLHQscixuLGkpe2lmKHZvaWQgMCE9PWkuY3JpdCYmdm9pZCAwPT09bi5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFufHx2b2lkIDA9PT1uLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkobi5jcml0KXx8MD09PW4uY3JpdC5sZW5ndGh8fG4uY3JpdC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7bGV0IG87bz12b2lkIDAhPT1yP25ldyBNYXAoWy4uLk9iamVjdC5lbnRyaWVzKHIpLC4uLnQuZW50cmllcygpXSk6dDtmb3IoY29uc3QgdCBvZiBuLmNyaXQpe2lmKCFvLmhhcyh0KSl0aHJvdyBuZXcgZW4oYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBpcyBub3QgcmVjb2duaXplZGApO2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBpcyBtaXNzaW5nYCk7aWYoby5nZXQodCkmJnZvaWQgMD09PW5bdF0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke3R9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChuLmNyaXQpfSh0bixuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09cj92b2lkIDA6ci5jcml0LGksbyk7bGV0IGE9ITA7aWYocy5oYXMoImI2NCIpJiYoYT1pLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBhKSl0aHJvdyBuZXcgdG4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOmN9PW87aWYoInN0cmluZyIhPXR5cGVvZiBjfHwhYyl0aHJvdyBuZXcgdG4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IHU9ciYmKChlLHQpPT57aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAiJHtlfSIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2ApO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9KSgiYWxnb3JpdGhtcyIsci5hbGdvcml0aG1zKTtpZih1JiYhdS5oYXMoYykpdGhyb3cgbmV3IFFyKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYoYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2xldCBsPSExOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KGksZSksbD0hMCksd24oYyx0LCJ2ZXJpZnkiKTtjb25zdCBkPWZ1bmN0aW9uKC4uLmUpe2NvbnN0IHQ9ZS5yZWR1Y2UoKChlLHtsZW5ndGg6dH0pPT5lK3QpLDApLHI9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IG49MDtyZXR1cm4gZS5mb3JFYWNoKChlPT57ci5zZXQoZSxuKSxuKz1lLmxlbmd0aH0pKSxyfSh6ci5lbmNvZGUobnVsbCE9PShuPWUucHJvdGVjdGVkKSYmdm9pZCAwIT09bj9uOiIiKSx6ci5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQpLGg9VnIoZS5zaWduYXR1cmUpO2lmKCFhd2FpdCBfbihjLHQsaCxkKSl0aHJvdyBuZXcgYW47bGV0IGY7Zj1hP1ZyKGUucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/enIuZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkO2NvbnN0IHA9e3BheWxvYWQ6Zn07cmV0dXJuIHZvaWQgMCE9PWUucHJvdGVjdGVkJiYocC5wcm90ZWN0ZWRIZWFkZXI9aSksdm9pZCAwIT09ZS5oZWFkZXImJihwLnVucHJvdGVjdGVkSGVhZGVyPWUuaGVhZGVyKSxsP3suLi5wLGtleTp0fTpwfWNvbnN0IFNuPTg2NDAwLEVuPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciBrbj1lPT57Y29uc3QgdD1Fbi5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgcj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQocik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpyKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqcik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChyKlNuKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKnIpO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqcil9fTtjb25zdCBSbj1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKTt2YXIgVG49KGUsdCxyPXt9KT0+e2NvbnN0e3R5cDpufT1yO2lmKG4mJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxSbihlLnR5cCkhPT1SbihuKSkpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTtsZXQgaTt0cnl7aT1KU09OLnBhcnNlKFlyLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCF2bihpKSl0aHJvdyBuZXcgcm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKEFycmF5LmlzQXJyYXkobyk/bzpbb10pLmluY2x1ZGVzKGkuaXNzKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTtjb25zdHtzdWJqZWN0OnN9PXI7aWYocyYmaS5zdWIhPT1zKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e2F1ZGllbmNlOmF9PXI7aWYoYSYmKGM9aS5hdWQsdT0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mIGM/dS5pbmNsdWRlcyhjKTpBcnJheS5pc0FycmF5KGMpJiZ1LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGMpKSkpKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTt2YXIgYyx1O2xldCBsO3N3aXRjaCh0eXBlb2Ygci5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmw9a24oci5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmw9ci5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOmR9PXIsaD0oZj1kfHxuZXcgRGF0ZSxNYXRoLmZsb29yKGYuZ2V0VGltZSgpLzFlMykpO3ZhciBmO2lmKHZvaWQgMCE9PWkuaWF0fHxyLm1heFRva2VuQWdlKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDA9PT1pLmV4cCYmaS5pYXQ+aCtsKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkubmJmKXtpZigibnVtYmVyIiE9dHlwZW9mIGkubmJmKXRocm93IG5ldyBYcignIm5iZiIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsIm5iZiIsImludmFsaWQiKTtpZihpLm5iZj5oK2wpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywibmJmIiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5leHApe2lmKCJudW1iZXIiIT10eXBlb2YgaS5leHApdGhyb3cgbmV3IFhyKCciZXhwIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiZXhwIiwiaW52YWxpZCIpO2lmKGkuZXhwPD1oLWwpdGhyb3cgbmV3IFpyKCciZXhwIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywiZXhwIiwiY2hlY2tfZmFpbGVkIil9aWYoci5tYXhUb2tlbkFnZSl7Y29uc3QgZT1oLWkuaWF0O2lmKGUtbD4oIm51bWJlciI9PXR5cGVvZiByLm1heFRva2VuQWdlP3IubWF4VG9rZW5BZ2U6a24oci5tYXhUb2tlbkFnZSkpKXRocm93IG5ldyBacignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZihlPDAtbCl0aHJvdyBuZXcgWHIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gaX07YXN5bmMgZnVuY3Rpb24gQW4oZSx0LHIpe3ZhciBuO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT1Zci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgdG4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHRuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBibih7cGF5bG9hZDppLHByb3RlY3RlZDpuLHNpZ25hdHVyZTpvfSx0LHIpLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQscik7aWYoKG51bGw9PT0obj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09bj92b2lkIDA6bi5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgcm4oIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz17cGF5bG9hZDpUbihpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQscikscHJvdGVjdGVkSGVhZGVyOmkucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4ubyxrZXk6aS5rZXl9Om99ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIHZuKGUpfWNsYXNzIERue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoQ24pfShlKSl0aHJvdyBuZXcgbm4oIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHQ7dGhpcy5fandrcz0odD1lLCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHQpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpKX1hc3luYyBnZXRLZXkoZSx0KXtjb25zdHthbGc6cixraWQ6bn09ey4uLmUsLi4udC5oZWFkZXJ9LGk9dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWUua3R5PT09ZnVuY3Rpb24oZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fShyKTtpZih0JiYic3RyaW5nIj09dHlwZW9mIG4mJih0PW49PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9cj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1yJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChyKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOm8sbGVuZ3RoOnN9PWk7aWYoMD09PXMpdGhyb3cgbmV3IG9uO2lmKDEhPT1zKXRocm93IG5ldyBzbjtjb25zdCBhPXRoaXMuX2NhY2hlZC5nZXQobyl8fHRoaXMuX2NhY2hlZC5zZXQobyx7fSkuZ2V0KG8pO2lmKHZvaWQgMD09PWFbcl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKCF2bihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1yfHwocj0hMCE9PWUuZXh0KSxyP21uKHsuLi5lLGFsZzp0LGV4dDohMX0pOlZyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBlbignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBtbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLm8sZXh0OiEwfSxyKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IG5uKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Fbcl09ZX1yZXR1cm4gYVtyXX19dmFyIFBuPXtleHBvcnRzOnt9fSxPbj17ZXhwb3J0czp7fX0sSW49RShJcik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgcj1JbixuPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIG4oZSx0LHIpfW4uZnJvbSYmbi5hbGxvYyYmbi5hbGxvY1Vuc2FmZSYmbi5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxpKG4sbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlLHQscil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9bihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/aS5maWxsKHQscik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19KE9uLE9uLmV4cG9ydHMpO3ZhciBVbj02NTUzNixIbj00Mjk0OTY3Mjk1O3ZhciBMbj1Pbi5leHBvcnRzLkJ1ZmZlcixNbj1iLmNyeXB0b3x8Yi5tc0NyeXB0bztNbiYmTW4uZ2V0UmFuZG9tVmFsdWVzP1BuLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPkhuKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHI9TG4uYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+VW4pZm9yKHZhciBuPTA7bjxlO24rPVVuKU1uLmdldFJhbmRvbVZhbHVlcyhyLnNsaWNlKG4sbitVbikpO2Vsc2UgTW4uZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBmZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwscil9KSk7cmV0dXJuIHJ9OlBuLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBObj1Qbi5leHBvcnRzO2NsYXNzIGpue2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gSnIuZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIEpyLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIHp0LmZyb20oRnIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gTm4oZSl9dmVyaWZ5Snd0KGUsdCxyLG4saSxvLHMpe3JldHVybiBBbihlLChhPXtrZXlzOlt0XX0sRG4ucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBEbihhKSkpLHthbGdvcml0aG1zOnIsYXVkaWVuY2U6bixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSk7dmFyIGF9fWNvbnN0IHhuPXNlbGY7bGV0IHFuO3huLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbyxzO2NvbnN0IGM9clswXTtpZih0LnR5cGU9PT1nfHxxbilzd2l0Y2godC50eXBlKXtjYXNlIGc6dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO3FuPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEl0LG49bmV3IGpuLGk9bmV3IHAocixuKTt5aWVsZCBpLmluaXRpYWxpemUodCk7Y29uc3Qgbz1uZXcgdyhpKSxzPWkuZ2V0RGF0YUxheWVyKCksYz1PdC5nZXRJbnN0YW5jZSgpOyhudWxsPT1jP3ZvaWQgMDpjLmluaXQpJiYoeWllbGQgYy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGkuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpO2NvbnN0IHU9dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIsbixjO2xldCB1PSEwLGw9ITE7Y29uc3QgZD10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7dT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KG49bnVsbD09PShyPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1uP246W10sZF0paWYoZSYmKG51bGw9PT0oYz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnMuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihtLEpTT04uc3RyaW5naWZ5KHQpKSx1fHxsP2kucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxsPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgaS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIGQoKTtyZXR1cm4gZSYmKHlpZWxkIHUoZSkpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSksZD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntjLmRpc2FibGVIYW5kbGVyJiZjLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5lbmFibGVIYW5kbGVyJiZjLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9PmkuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgcj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLG49eWllbGQgaS5nZXRQS0NFQ29kZShyKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6bn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgaS5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSExO2NvbnN0IGQ9dC5iYXNlVXJsfHx0LnNlcnZlck9yaWdpbjtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sZF0paWYoZSYmKG51bGw9PT0obz1udWxsPT1yP3ZvaWQgMDpyLnVybCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RhcnRzV2l0aChlKSkpe3U9ITA7YnJlYWt9cmV0dXJuIHU/Yy5yZXF1ZXN0KHIpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxuLGk7aWYoNDAxPT09KG51bGw9PT0oZT1udWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdGF0dXMpfHwhKG51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpKXtsZXQgZTt0cnl7ZT15aWVsZCBsKCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUi1TRTAxIixudWxsIT09KG49bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09bj9uOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShpPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWk/aToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMucmVxdWVzdChyKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxodHRwUmVxdWVzdEFsbDpyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixpLG87bGV0IHU9ITA7Y29uc3QgZD10LmJhc2VVcmx8fHQuc2VydmVyT3JpZ2luO2Zvcihjb25zdCBlIG9mIHIpe2xldCB0PSExO2Zvcihjb25zdCByIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSxkXSlpZihyJiYobnVsbD09PShvPWUudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKHIpKSl7dD0hMDticmVha31pZighdCl7dT0hMTticmVha319Y29uc3QgaD1bXTtyZXR1cm4gdT8oci5mb3JFYWNoKChlPT57aC5wdXNoKGMucmVxdWVzdChlKSl9KSksKG51bGw9PWM/dm9pZCAwOmMuYWxsKSYmYy5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsbjtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cykpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1TRTAxIixudWxsIT09KHI9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09cj9yOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMuYWxsJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+aS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46bCxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixuLGMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBuJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBpLnNldFBLQ0VDb2RlKG4sbnVsbCE9Yz9jOiIiKSksdD9pLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIixudWxsIT1jP2M6IiciKS50aGVuKCgoKT0+KG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp1LHJldm9rZUFjY2Vzc1Rva2VuOigpPT5pLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIGkuc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7by5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgaS51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxxbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKEJuKSxxbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soS24pLHFuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKEpuKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnFuLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09dD92b2lkIDA6dC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOnFuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlLG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXRlKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijpxbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpxbi5odHRwUmVxdWVzdEFsbCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNpZ25PdXQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50Ijpxbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6cW4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnFuLmVuYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6cW4uZGlzYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHFuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWN8fGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBhKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2UgYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IEtuPSgpPT57eG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LEpuPWU9Pnt4bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0sQm49KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9O3JldHVybnt9fSgpOwoK",null,!1),new Worker(Al,t)});const Fl={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:N.SessionStorage};class zl{constructor(t){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}_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()}))}
|
|
463
|
+
*/updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var N,J;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(N||(N={})),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"}(J||(J={}));const H="Y2hlY2tTZXNzaW9u";class U{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return n(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const e=parseInt(t.expires_in),l=setTimeout(()=>n(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(e<=10?e:e-10));yield this._dataLayer.setTemporaryDataParameter(s,JSON.stringify(l))}}))}clearRefreshTokenTimeout(){return n(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(s)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(s));clearTimeout(t)}}))}}class L{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&&!L.hasErrorInURL()&&!L.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return L.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!L.hasErrorInURL()&&!L.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){if(K.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static didSignOutFail(){if(K.didSignOutFail(window.location.href)){const t=new URL(window.location.href),e=t.searchParams.get("error"),l=t.searchParams.get("error_description"),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=l?l:"",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 n(this,void 0,void 0,(function*(){const e=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*e))}))}}const B=(()=>{let t,e,l,i,c,o,a,r,d,u,Z;const s=(n,a,r,d,u,s,I)=>{t=n,e=a,l=r,i=d,c=s,o=u,Z=I,i>-1&&b(),o>-1&&(u=setInterval(()=>{m()},1e3*o))},b=()=>n(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const a="opIFrame";function d(){var i;return n(this,void 0,void 0,(function*(){const n=yield l();if(Boolean(t)&&Boolean(n)){const l=`${t} ${n}`,c=document.getElementById("rpIFrame"),o=(null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(a)).contentWindow;null==o||o.postMessage(l,e)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(a)).src=e+"?client_id="+t+"&redirect_uri="+c,yield d(),r=setInterval(d,1e3*i),h()})),I=()=>{clearInterval(r),clearInterval(void 0)},h=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var l;return n(this,void 0,void 0,(function*(){!e||(null==e?void 0:e.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield a():"changed"===t.data&&m())}))}),!1)},m=()=>n(void 0,void 0,void 0,(function*(){var t;const e=document.getElementById("rpIFrame"),l=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");if(L.canSendPromptNoneRequest()){L.setPromptNoneRequestSent(!0);const t=e=>{var l,n,i;"set_session_state_from_iframe"===(null===(l=null==e?void 0:e.data)||void 0===l?void 0:l.type)&&(u(null!==(i=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))};d!==N.BrowserMemory&&d!==N.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield Z({prompt:"none",state:H});l.src=e}})),g=t=>n(void 0,void 0,void 0,(function*(){var e,l;const n=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(p),c=window.parent.parent;if(null!==n&&(n.includes(H)||n.includes("sign-in-silently"))){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if(n.includes("sign-in-silently")){const t={data:{code:o,sessionState:null!=i?i:"",state:n},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),L.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield L.waitTillPageRedirect(),!0}const a=new URL(window.location.href).searchParams.get("session_state");if(d===N.LocalStorage||d===N.SessionStorage)t&&(yield t(a));else{const t={data:null!=a?a:"",type:"set_session_state_from_iframe"};null===(l=null===(e=null===window||void 0===window?void 0:window.parent)||void 0===e?void 0:e.parent)||void 0===l||l.postMessage(t)}return L.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield L.waitTillPageRedirect(),!0}if(n.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),L.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield L.waitTillPageRedirect(),!0}return L.setPromptNoneRequestSent(!1),c.location.href=yield a(),window.location.href="about:blank",yield L.waitTillPageRedirect(),!0}return!1}));return(t,e,l)=>n(void 0,void 0,void 0,(function*(){var n;let i=document.createElement("iframe");i.setAttribute("id","rpIFrame"),i.style.display="none";let c=!1;for(i.onload=()=>{var t,e,l,n;i=document.getElementById("rpIFrame");const o=null==i?void 0:i.contentDocument,a=null==o?void 0:o.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==o?void 0:o.createElement("iframe");r&&(r.setAttribute("id","promptNoneIFrame"),r.style.display="none"),a&&(null===(e=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(a)),r&&(null===(n=null===(l=null==i?void 0:i.contentDocument)||void 0===l?void 0:l.body)||void 0===n||n.appendChild(r)),c=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(i),a=t,d=e,u=l;!1===c;)yield new Promise(t=>setTimeout(t,1));return{initialize:s,receivePromptNoneResponse:g,reset:I}}))})();var k="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var F={exports:{}},T=function(t,e){return function(){for(var l=new Array(arguments.length),n=0;n<l.length;n++)l[n]=arguments[n];return t.apply(e,l)}},x=T,A=Object.prototype.toString;function z(t){return Array.isArray(t)}function w(t){return void 0===t}function Q(t){return"[object ArrayBuffer]"===A.call(t)}function P(t){return null!==t&&"object"==typeof t}function j(t){if("[object Object]"!==A.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function M(t){return"[object Function]"===A.call(t)}function E(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),z(t))for(var l=0,n=t.length;l<n;l++)e.call(null,t[l],l,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var D={isArray:z,isArrayBuffer:Q,isBuffer:function(t){return null!==t&&!w(t)&&null!==t.constructor&&!w(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===A.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Q(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:P,isPlainObject:j,isUndefined:w,isDate:function(t){return"[object Date]"===A.call(t)},isFile:function(t){return"[object File]"===A.call(t)},isBlob:function(t){return"[object Blob]"===A.call(t)},isFunction:M,isStream:function(t){return P(t)&&M(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===A.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:E,merge:function t(){var e={};function l(l,n){j(e[n])&&j(l)?e[n]=t(e[n],l):j(l)?e[n]=t({},l):z(l)?e[n]=l.slice():e[n]=l}for(var n=0,i=arguments.length;n<i;n++)E(arguments[n],l);return e},extend:function(t,e,l){return E(e,(function(e,n){t[n]=l&&"function"==typeof e?x(e,l):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}},O=D;function q(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var _=function(t,e,l){if(!e)return t;var n;if(l)n=l(e);else if(O.isURLSearchParams(e))n=e.toString();else{var i=[];O.forEach(e,(function(t,e){null!=t&&(O.isArray(t)?e+="[]":t=[t],O.forEach(t,(function(t){O.isDate(t)?t=t.toISOString():O.isObject(t)&&(t=JSON.stringify(t)),i.push(q(e)+"="+q(t))})))})),n=i.join("&")}if(n){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+n}return t},$=D;function tt(){this.handlers=[]}tt.prototype.use=function(t,e,l){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!l&&l.synchronous,runWhen:l?l.runWhen:null}),this.handlers.length-1},tt.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},tt.prototype.forEach=function(t){$.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var et=tt,lt=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function nt(){throw new Error("setTimeout has not been defined")}function it(){throw new Error("clearTimeout has not been defined")}var ct=nt,ot=it;function at(t){if(ct===setTimeout)return setTimeout(t,0);if((ct===nt||!ct)&&setTimeout)return ct=setTimeout,setTimeout(t,0);try{return ct(t,0)}catch(e){try{return ct.call(null,t,0)}catch(e){return ct.call(this,t,0)}}}"function"==typeof lt.setTimeout&&(ct=setTimeout),"function"==typeof lt.clearTimeout&&(ot=clearTimeout);var rt,dt=[],ut=!1,Zt=-1;function st(){ut&&rt&&(ut=!1,rt.length?dt=rt.concat(dt):Zt=-1,dt.length&&bt())}function bt(){if(!ut){var t=at(st);ut=!0;for(var e=dt.length;e;){for(rt=dt,dt=[];++Zt<e;)rt&&rt[Zt].run();Zt=-1,e=dt.length}rt=null,ut=!1,function(t){if(ot===clearTimeout)return clearTimeout(t);if((ot===it||!ot)&&clearTimeout)return ot=clearTimeout,clearTimeout(t);try{ot(t)}catch(e){try{return ot.call(null,t)}catch(e){return ot.call(this,t)}}}(t)}}function It(t,e){this.fun=t,this.array=e}function ht(){}It.prototype.run=function(){this.fun.apply(null,this.array)};var mt=ht,pt=ht,gt=ht,Gt=ht,yt=ht,Xt=ht,Vt=ht,Wt=lt.performance||{},Ct=Wt.now||Wt.mozNow||Wt.msNow||Wt.oNow||Wt.webkitNow||function(){return(new Date).getTime()},Rt=new Date,ft={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var l=1;l<arguments.length;l++)e[l-1]=arguments[l];dt.push(new It(t,e)),1!==dt.length||ut||at(bt)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:mt,addListener:pt,once:gt,off:Gt,removeListener:yt,removeAllListeners:Xt,emit:Vt,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*Ct.call(Wt),l=Math.floor(e),n=Math.floor(e%1*1e9);return t&&(l-=t[0],(n-=t[1])<0&&(l--,n+=1e9)),[l,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-Rt)/1e3}},St=D,vt=function(t,e,l,n,i){return t.config=e,l&&(t.code=l),t.request=n,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},Yt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Kt=vt,Nt=function(t,e,l,n,i){var c=new Error(t);return Kt(c,e,l,n,i)},Jt=Nt,Ht=D,Ut=Ht.isStandardBrowserEnv()?{write:function(t,e,l,n,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Ht.isNumber(l)&&o.push("expires="+new Date(l).toGMTString()),Ht.isString(n)&&o.push("path="+n),Ht.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(){}},Lt=D,Bt=["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"],kt=D,Ft=kt.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),l=document.createElement("a");function n(t){var n=t;return e&&(l.setAttribute("href",n),n=l.href),l.setAttribute("href",n),{href:l.href,protocol:l.protocol?l.protocol.replace(/:$/,""):"",host:l.host,search:l.search?l.search.replace(/^\?/,""):"",hash:l.hash?l.hash.replace(/^#/,""):"",hostname:l.hostname,port:l.port,pathname:"/"===l.pathname.charAt(0)?l.pathname:"/"+l.pathname}}return t=n(window.location.href),function(e){var l=kt.isString(e)?n(e):e;return l.protocol===t.protocol&&l.host===t.host}}():function(){return!0};function Tt(t){this.message=t}Tt.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Tt.prototype.__CANCEL__=!0;var xt=Tt,At=D,zt=Ut,wt=_,Qt=Ft,Pt=Nt,jt=Yt,Mt=xt,Et=D,Dt=function(t,e){St.forEach(t,(function(l,n){n!==e&&n.toUpperCase()===e.toUpperCase()&&(t[e]=l,delete t[n])}))},Ot=vt,qt={"Content-Type":"application/x-www-form-urlencoded"};function _t(t,e){!Et.isUndefined(t)&&Et.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var $t,te={transitional:Yt,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==ft&&"[object process]"===Object.prototype.toString.call(ft))&&($t=function(t){return new Promise((function(e,l){var n,i=t.data,c=t.headers,o=t.responseType;function a(){t.cancelToken&&t.cancelToken.unsubscribe(n),t.signal&&t.signal.removeEventListener("abort",n)}At.isFormData(i)&&delete c["Content-Type"];var r=new XMLHttpRequest;if(t.auth){var d=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(d+":"+u)}var Z=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 s(){if(r){var n="getAllResponseHeaders"in r?function(t){var e,l,n,i={};return t?(Lt.forEach(t.split("\n"),(function(t){if(n=t.indexOf(":"),e=Lt.trim(t.substr(0,n)).toLowerCase(),l=Lt.trim(t.substr(n+1)),e){if(i[e]&&Bt.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([l]):i[e]?i[e]+", "+l:l}})),i):i}(r.getAllResponseHeaders()):null;(function(t,e,l){var n=l.config.validateStatus;l.status&&n&&!n(l.status)?e(Jt("Request failed with status code "+l.status,l.config,null,l.request,l)):t(l)})((function(t){e(t),a()}),(function(t){l(t),a()}),{data:o&&"text"!==o&&"json"!==o?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:n,config:t,request:r}),r=null}}if(r.open(t.method.toUpperCase(),wt(Z,t.params,t.paramsSerializer),!0),r.timeout=t.timeout,"onloadend"in r?r.onloadend=s:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(s)},r.onabort=function(){r&&(l(Pt("Request aborted",t,"ECONNABORTED",r)),r=null)},r.onerror=function(){l(Pt("Network Error",t,null,r)),r=null},r.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",n=t.transitional||jt;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),l(Pt(e,t,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},At.isStandardBrowserEnv()){var b=(t.withCredentials||Qt(Z))&&t.xsrfCookieName?zt.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in r&&At.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:r.setRequestHeader(e,t)})),At.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)&&(n=function(t){r&&(l(!t||t&&t.type?new Mt("canceled"):t),r.abort(),r=null)},t.cancelToken&&t.cancelToken.subscribe(n),t.signal&&(t.signal.aborted?n():t.signal.addEventListener("abort",n))),i||(i=null),r.send(i)}))}),$t),transformRequest:[function(t,e){return Dt(e,"Accept"),Dt(e,"Content-Type"),Et.isFormData(t)||Et.isArrayBuffer(t)||Et.isBuffer(t)||Et.isStream(t)||Et.isFile(t)||Et.isBlob(t)?t:Et.isArrayBufferView(t)?t.buffer:Et.isURLSearchParams(t)?(_t(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Et.isObject(t)||e&&"application/json"===e["Content-Type"]?(_t(e,"application/json"),function(t,e,l){if(Et.isString(t))try{return(0,JSON.parse)(t),Et.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||te.transitional,l=e&&e.silentJSONParsing,n=e&&e.forcedJSONParsing,i=!l&&"json"===this.responseType;if(i||n&&Et.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw Ot(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, */*"}}};Et.forEach(["delete","get","head"],(function(t){te.headers[t]={}})),Et.forEach(["post","put","patch"],(function(t){te.headers[t]=Et.merge(qt)}));var ee=te,le=D,ne=ee,ie=function(t){return!(!t||!t.__CANCEL__)},ce=D,oe=function(t,e,l){var n=this||ne;return le.forEach(l,(function(l){t=l.call(n,t,e)})),t},ae=ie,re=ee,de=xt;function ue(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new de("canceled")}var Ze=D,se=function(t,e){e=e||{};var l={};function n(t,e){return Ze.isPlainObject(t)&&Ze.isPlainObject(e)?Ze.merge(t,e):Ze.isPlainObject(e)?Ze.merge({},e):Ze.isArray(e)?e.slice():e}function i(l){return Ze.isUndefined(e[l])?Ze.isUndefined(t[l])?void 0:n(void 0,t[l]):n(t[l],e[l])}function c(t){if(!Ze.isUndefined(e[t]))return n(void 0,e[t])}function o(l){return Ze.isUndefined(e[l])?Ze.isUndefined(t[l])?void 0:n(void 0,t[l]):n(void 0,e[l])}function a(l){return l in e?n(t[l],e[l]):l in t?n(void 0,t[l]):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:a};return Ze.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=r[t]||i,n=e(t);Ze.isUndefined(n)&&e!==a||(l[t]=n)})),l},be={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){be[t]=function(l){return typeof l===t||"a"+(e<1?"n ":" ")+t}}));var Ie={};be.transitional=function(t,e,l){function n(t,e){return"[Axios v0.26.1] Transitional option '"+t+"'"+e+(l?". "+l:"")}return function(l,i,c){if(!1===t)throw new Error(n(i," has been removed"+(e?" in "+e:"")));return e&&!Ie[i]&&(Ie[i]=!0,console.warn(n(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(l,i,c)}};var he=D,me=_,pe=et,ge=function(t){return ue(t),t.headers=t.headers||{},t.data=oe.call(t,t.data,t.headers,t.transformRequest),t.headers=ce.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),ce.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||re.adapter)(t).then((function(e){return ue(t),e.data=oe.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return ae(e)||(ue(t),e&&e.response&&(e.response.data=oe.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Ge=se,ye={assertOptions:function(t,e,l){if("object"!=typeof t)throw new TypeError("options must be an object");for(var n=Object.keys(t),i=n.length;i-- >0;){var c=n[i],o=e[c];if(o){var a=t[c],r=void 0===a||o(a,c,t);if(!0!==r)throw new TypeError("option "+c+" must be "+r)}else if(!0!==l)throw Error("Unknown option "+c)}},validators:be},Xe=ye.validators;function Ve(t){this.defaults=t,this.interceptors={request:new pe,response:new pe}}Ve.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=Ge(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var l=e.transitional;void 0!==l&&ye.assertOptions(l,{silentJSONParsing:Xe.transitional(Xe.boolean),forcedJSONParsing:Xe.transitional(Xe.boolean),clarifyTimeoutError:Xe.transitional(Xe.boolean)},!1);var n=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var a=[ge,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(o),c=Promise.resolve(e);a.length;)c=c.then(a.shift(),a.shift());return c}for(var r=e;n.length;){var d=n.shift(),u=n.shift();try{r=d(r)}catch(t){u(t);break}}try{c=ge(r)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},Ve.prototype.getUri=function(t){return t=Ge(this.defaults,t),me(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},he.forEach(["delete","get","head","options"],(function(t){Ve.prototype[t]=function(e,l){return this.request(Ge(l||{},{method:t,url:e,data:(l||{}).data}))}})),he.forEach(["post","put","patch"],(function(t){Ve.prototype[t]=function(e,l,n){return this.request(Ge(n||{},{method:t,url:e,data:l}))}}));var We=Ve,Ce=xt;function Re(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var l=this;this.promise.then((function(t){if(l._listeners){var e,n=l._listeners.length;for(e=0;e<n;e++)l._listeners[e](t);l._listeners=null}})),this.promise.then=function(t){var e,n=new Promise((function(t){l.subscribe(t),e=t})).then(t);return n.cancel=function(){l.unsubscribe(e)},n},t((function(t){l.reason||(l.reason=new Ce(t),e(l.reason))}))}Re.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Re.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Re.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Re.source=function(){var t;return{token:new Re((function(e){t=e})),cancel:t}};var fe=Re,Se=D,ve=D,Ye=T,Ke=We,Ne=se,Je=function t(e){var l=new Ke(e),n=Ye(Ke.prototype.request,l);return ve.extend(n,Ke.prototype,l),ve.extend(n,l),n.create=function(l){return t(Ne(e,l))},n}(ee);Je.Axios=Ke,Je.Cancel=xt,Je.CancelToken=fe,Je.isCancel=ie,Je.VERSION="0.26.1",Je.all=function(t){return Promise.all(t)},Je.spread=function(t){return function(e){return t.apply(null,e)}},Je.isAxiosError=function(t){return Se.isObject(t)&&!0===t.isAxiosError},F.exports=Je,F.exports.default=Je;var He,Ue=F.exports;let Le=He=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=Ue.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new He),this.axiosInstance.interceptors.request.use(t=>n(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=Ue.all,this.axiosInstance.spread=Ue.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 n(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,l=new FormData;Object.keys(e).forEach(t=>{l.append(t,e[t])}),t.data=l}return He.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw He.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return He.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,e){return n(this,void 0,void 0,(function*(){He.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){He.isHandlerEnabled=!0}disableHandler(){He.isHandlerEnabled=!1}disableHandlerWithTimeout(t=He.DEFAULT_HANDLER_DISABLE_TIMEOUT){He.isHandlerEnabled=!1,setTimeout(()=>{He.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Le.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Le=He=function(t,e,l,n){var i,c=arguments.length,o=c<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,l):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,l,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(o=(c<3?i(o):c>3?i(e,l,o):i(e,l))||o);return c>3&&o&&Object.defineProperty(e,l,o),o}([t=>{}],Le);class Be{setData(t,e){return n(this,void 0,void 0,(function*(){localStorage.setItem(t,e)}))}getData(t){var e;return n(this,void 0,void 0,(function*(){return null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class ke{constructor(){this._data=new Map}setData(t,e){return n(this,void 0,void 0,(function*(){this._data.set(t,e)}))}getData(t){var e,l;return n(this,void 0,void 0,(function*(){return null!==(l=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==l?l:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class Fe{setData(t,e){return n(this,void 0,void 0,(function*(){sessionStorage.setItem(t,e)}))}getData(t){var e;return n(this,void 0,void 0,(function*(){return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}var Te=[],xe=[],Ae="undefined"!=typeof Uint8Array?Uint8Array:Array,ze=!1;function we(){ze=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,l=t.length;e<l;++e)Te[e]=t[e],xe[t.charCodeAt(e)]=e;xe["-".charCodeAt(0)]=62,xe["_".charCodeAt(0)]=63}function Qe(t,e,l){for(var n,i,c=[],o=e;o<l;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(Te[(i=n)>>18&63]+Te[i>>12&63]+Te[i>>6&63]+Te[63&i]);return c.join("")}function Pe(t){var e;ze||we();for(var l=t.length,n=l%3,i="",c=[],o=16383,a=0,r=l-n;a<r;a+=o)c.push(Qe(t,a,a+o>r?r:a+o));return 1===n?(e=t[l-1],i+=Te[e>>2],i+=Te[e<<4&63],i+="=="):2===n&&(e=(t[l-2]<<8)+t[l-1],i+=Te[e>>10],i+=Te[e>>4&63],i+=Te[e<<2&63],i+="="),c.push(i),c.join("")}function je(t,e,l,n,i){var c,o,a=8*i-n-1,r=(1<<a)-1,d=r>>1,u=-7,Z=l?i-1:0,s=l?-1:1,b=t[e+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=a;u>0;c=256*c+t[e+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=n;u>0;o=256*o+t[e+Z],Z+=s,u-=8);if(0===c)c=1-d;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,n),c-=d}return(b?-1:1)*o*Math.pow(2,c-n)}function Me(t,e,l,n,i,c){var o,a,r,d=8*c-i-1,u=(1<<d)-1,Z=u>>1,s=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=n?0:c-1,I=n?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=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+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(a=0,o=u):o+Z>=1?(a=(e*r-1)*Math.pow(2,i),o+=Z):(a=e*Math.pow(2,Z-1)*Math.pow(2,i),o=0));i>=8;t[l+b]=255&a,b+=I,a/=256,i-=8);for(o=o<<i|a,d+=i;d>0;t[l+b]=255&o,b+=I,o/=256,d-=8);t[l+b-I]|=128*h}var Ee={}.toString,De=Array.isArray||function(t){return"[object Array]"==Ee.call(t)};$e.TYPED_ARRAY_SUPPORT=void 0===lt.TYPED_ARRAY_SUPPORT||lt.TYPED_ARRAY_SUPPORT;var Oe=qe();function qe(){return $e.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function _e(t,e){if(qe()<e)throw new RangeError("Invalid typed array length");return $e.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=$e.prototype:(null===t&&(t=new $e(e)),t.length=e),t}function $e(t,e,l){if(!($e.TYPED_ARRAY_SUPPORT||this instanceof $e))return new $e(t,e,l);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return ll(this,t)}return tl(this,t,e,l)}function tl(t,e,l,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,l,n){if(e.byteLength,l<0||e.byteLength<l)throw new RangeError("'offset' is out of bounds");if(e.byteLength<l+(n||0))throw new RangeError("'length' is out of bounds");return e=void 0===l&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,l):new Uint8Array(e,l,n),$e.TYPED_ARRAY_SUPPORT?(t=e).__proto__=$e.prototype:t=nl(t,e),t}(t,e,l,n):"string"==typeof e?function(t,e,l){if("string"==typeof l&&""!==l||(l="utf8"),!$e.isEncoding(l))throw new TypeError('"encoding" must be a valid string encoding');var n=0|ol(e,l),i=(t=_e(t,n)).write(e,l);return i!==n&&(t=t.slice(0,i)),t}(t,e,l):function(t,e){if(cl(e)){var l=0|il(e.length);return 0===(t=_e(t,l)).length||e.copy(t,0,0,l),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(n=e.length)!=n?_e(t,0):nl(t,e);if("Buffer"===e.type&&De(e.data))return nl(t,e.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function el(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 ll(t,e){if(el(e),t=_e(t,e<0?0:0|il(e)),!$e.TYPED_ARRAY_SUPPORT)for(var l=0;l<e;++l)t[l]=0;return t}function nl(t,e){var l=e.length<0?0:0|il(e.length);t=_e(t,l);for(var n=0;n<l;n+=1)t[n]=255&e[n];return t}function il(t){if(t>=qe())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+qe().toString(16)+" bytes");return 0|t}function cl(t){return!(null==t||!t._isBuffer)}function ol(t,e){if(cl(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 l=t.length;if(0===l)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return l;case"utf8":case"utf-8":case void 0:return Jl(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*l;case"hex":return l>>>1;case"base64":return Hl(t).length;default:if(n)return Jl(t).length;e=(""+e).toLowerCase(),n=!0}}function al(t,e,l){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===l||l>this.length)&&(l=this.length),l<=0)return"";if((l>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Xl(this,e,l);case"utf8":case"utf-8":return gl(this,e,l);case"ascii":return Gl(this,e,l);case"latin1":case"binary":return yl(this,e,l);case"base64":return pl(this,e,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Vl(this,e,l);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function rl(t,e,l){var n=t[e];t[e]=t[l],t[l]=n}function dl(t,e,l,n,i){if(0===t.length)return-1;if("string"==typeof l?(n=l,l=0):l>2147483647?l=2147483647:l<-2147483648&&(l=-2147483648),l=+l,isNaN(l)&&(l=i?0:t.length-1),l<0&&(l=t.length+l),l>=t.length){if(i)return-1;l=t.length-1}else if(l<0){if(!i)return-1;l=0}if("string"==typeof e&&(e=$e.from(e,n)),cl(e))return 0===e.length?-1:ul(t,e,l,n,i);if("number"==typeof e)return e&=255,$e.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,l):Uint8Array.prototype.lastIndexOf.call(t,e,l):ul(t,[e],l,n,i);throw new TypeError("val must be string, number or Buffer")}function ul(t,e,l,n,i){var c,o=1,a=t.length,r=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,a/=2,r/=2,l/=2}function d(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(c=l;c<a;c++)if(d(t,c)===d(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(l+r>a&&(l=a-r),c=l;c>=0;c--){for(var Z=!0,s=0;s<r;s++)if(d(t,c+s)!==d(e,s)){Z=!1;break}if(Z)return c}return-1}function Zl(t,e,l,n){l=Number(l)||0;var i=t.length-l;n?(n=Number(n))>i&&(n=i):n=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");n>c/2&&(n=c/2);for(var o=0;o<n;++o){var a=parseInt(e.substr(2*o,2),16);if(isNaN(a))return o;t[l+o]=a}return o}function sl(t,e,l,n){return Ul(Jl(e,t.length-l),t,l,n)}function bl(t,e,l,n){return Ul(function(t){for(var e=[],l=0;l<t.length;++l)e.push(255&t.charCodeAt(l));return e}(e),t,l,n)}function Il(t,e,l,n){return bl(t,e,l,n)}function hl(t,e,l,n){return Ul(Hl(e),t,l,n)}function ml(t,e,l,n){return Ul(function(t,e){for(var l,n,i,c=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(l=t.charCodeAt(o))>>8,i=l%256,c.push(i),c.push(n);return c}(e,t.length-l),t,l,n)}function pl(t,e,l){return 0===e&&l===t.length?Pe(t):Pe(t.slice(e,l))}function gl(t,e,l){l=Math.min(t.length,l);for(var n=[],i=e;i<l;){var c,o,a,r,d=t[i],u=null,Z=d>239?4:d>223?3:d>191?2:1;if(i+Z<=l)switch(Z){case 1:d<128&&(u=d);break;case 2:128==(192&(c=t[i+1]))&&(r=(31&d)<<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&d)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[i+1],o=t[i+2],a=t[i+3],128==(192&c)&&128==(192&o)&&128==(192&a)&&(r=(15&d)<<18|(63&c)<<12|(63&o)<<6|63&a)>65535&&r<1114112&&(u=r)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=Z}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var l="",n=0;n<e;)l+=String.fromCharCode.apply(String,t.slice(n,n+=4096));return l}(n)}function Gl(t,e,l){var n="";l=Math.min(t.length,l);for(var i=e;i<l;++i)n+=String.fromCharCode(127&t[i]);return n}function yl(t,e,l){var n="";l=Math.min(t.length,l);for(var i=e;i<l;++i)n+=String.fromCharCode(t[i]);return n}function Xl(t,e,l){var n=t.length;(!e||e<0)&&(e=0),(!l||l<0||l>n)&&(l=n);for(var i="",c=e;c<l;++c)i+=Nl(t[c]);return i}function Vl(t,e,l){for(var n=t.slice(e,l),i="",c=0;c<n.length;c+=2)i+=String.fromCharCode(n[c]+256*n[c+1]);return i}function Wl(t,e,l){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>l)throw new RangeError("Trying to access beyond buffer length")}function Cl(t,e,l,n,i,c){if(!cl(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(l+n>t.length)throw new RangeError("Index out of range")}function Rl(t,e,l,n){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-l,2);i<c;++i)t[l+i]=(e&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function fl(t,e,l,n){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-l,4);i<c;++i)t[l+i]=e>>>8*(n?i:3-i)&255}function Sl(t,e,l,n,i,c){if(l+n>t.length)throw new RangeError("Index out of range");if(l<0)throw new RangeError("Index out of range")}function vl(t,e,l,n,i){return i||Sl(t,0,l,4),Me(t,e,l,n,23,4),l+4}function Yl(t,e,l,n,i){return i||Sl(t,0,l,8),Me(t,e,l,n,52,8),l+8}$e.poolSize=8192,$e._augment=function(t){return t.__proto__=$e.prototype,t},$e.from=function(t,e,l){return tl(null,t,e,l)},$e.TYPED_ARRAY_SUPPORT&&($e.prototype.__proto__=Uint8Array.prototype,$e.__proto__=Uint8Array),$e.alloc=function(t,e,l){return function(t,e,l,n){return el(e),e<=0?_e(t,e):void 0!==l?"string"==typeof n?_e(t,e).fill(l,n):_e(t,e).fill(l):_e(t,e)}(null,t,e,l)},$e.allocUnsafe=function(t){return ll(null,t)},$e.allocUnsafeSlow=function(t){return ll(null,t)},$e.isBuffer=Ll,$e.compare=function(t,e){if(!cl(t)||!cl(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var l=t.length,n=e.length,i=0,c=Math.min(l,n);i<c;++i)if(t[i]!==e[i]){l=t[i],n=e[i];break}return l<n?-1:n<l?1:0},$e.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}},$e.concat=function(t,e){if(!De(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return $e.alloc(0);var l;if(void 0===e)for(e=0,l=0;l<t.length;++l)e+=t[l].length;var n=$e.allocUnsafe(e),i=0;for(l=0;l<t.length;++l){var c=t[l];if(!cl(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(n,i),i+=c.length}return n},$e.byteLength=ol,$e.prototype._isBuffer=!0,$e.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)rl(this,e,e+1);return this},$e.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)rl(this,e,e+3),rl(this,e+1,e+2);return this},$e.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)rl(this,e,e+7),rl(this,e+1,e+6),rl(this,e+2,e+5),rl(this,e+3,e+4);return this},$e.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?gl(this,0,t):al.apply(this,arguments)},$e.prototype.equals=function(t){if(!cl(t))throw new TypeError("Argument must be a Buffer");return this===t||0===$e.compare(this,t)},$e.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+">"},$e.prototype.compare=function(t,e,l,n,i){if(!cl(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===l&&(l=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||l>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=l)return 0;if(n>=i)return-1;if(e>=l)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(n>>>=0),o=(l>>>=0)-(e>>>=0),a=Math.min(c,o),r=this.slice(n,i),d=t.slice(e,l),u=0;u<a;++u)if(r[u]!==d[u]){c=r[u],o=d[u];break}return c<o?-1:o<c?1:0},$e.prototype.includes=function(t,e,l){return-1!==this.indexOf(t,e,l)},$e.prototype.indexOf=function(t,e,l){return dl(this,t,e,l,!0)},$e.prototype.lastIndexOf=function(t,e,l){return dl(this,t,e,l,!1)},$e.prototype.write=function(t,e,l,n){if(void 0===e)n="utf8",l=this.length,e=0;else if(void 0===l&&"string"==typeof e)n=e,l=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(l)?(l|=0,void 0===n&&(n="utf8")):(n=l,l=void 0)}var i=this.length-e;if((void 0===l||l>i)&&(l=i),t.length>0&&(l<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var c=!1;;)switch(n){case"hex":return Zl(this,t,e,l);case"utf8":case"utf-8":return sl(this,t,e,l);case"ascii":return bl(this,t,e,l);case"latin1":case"binary":return Il(this,t,e,l);case"base64":return hl(this,t,e,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ml(this,t,e,l);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},$e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},$e.prototype.slice=function(t,e){var l,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t),$e.TYPED_ARRAY_SUPPORT)(l=this.subarray(t,e)).__proto__=$e.prototype;else{var i=e-t;l=new $e(i,void 0);for(var c=0;c<i;++c)l[c]=this[c+t]}return l},$e.prototype.readUIntLE=function(t,e,l){t|=0,e|=0,l||Wl(t,e,this.length);for(var n=this[t],i=1,c=0;++c<e&&(i*=256);)n+=this[t+c]*i;return n},$e.prototype.readUIntBE=function(t,e,l){t|=0,e|=0,l||Wl(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},$e.prototype.readUInt8=function(t,e){return e||Wl(t,1,this.length),this[t]},$e.prototype.readUInt16LE=function(t,e){return e||Wl(t,2,this.length),this[t]|this[t+1]<<8},$e.prototype.readUInt16BE=function(t,e){return e||Wl(t,2,this.length),this[t]<<8|this[t+1]},$e.prototype.readUInt32LE=function(t,e){return e||Wl(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},$e.prototype.readUInt32BE=function(t,e){return e||Wl(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},$e.prototype.readIntLE=function(t,e,l){t|=0,e|=0,l||Wl(t,e,this.length);for(var n=this[t],i=1,c=0;++c<e&&(i*=256);)n+=this[t+c]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},$e.prototype.readIntBE=function(t,e,l){t|=0,e|=0,l||Wl(t,e,this.length);for(var n=e,i=1,c=this[t+--n];n>0&&(i*=256);)c+=this[t+--n]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},$e.prototype.readInt8=function(t,e){return e||Wl(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},$e.prototype.readInt16LE=function(t,e){e||Wl(t,2,this.length);var l=this[t]|this[t+1]<<8;return 32768&l?4294901760|l:l},$e.prototype.readInt16BE=function(t,e){e||Wl(t,2,this.length);var l=this[t+1]|this[t]<<8;return 32768&l?4294901760|l:l},$e.prototype.readInt32LE=function(t,e){return e||Wl(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},$e.prototype.readInt32BE=function(t,e){return e||Wl(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},$e.prototype.readFloatLE=function(t,e){return e||Wl(t,4,this.length),je(this,t,!0,23,4)},$e.prototype.readFloatBE=function(t,e){return e||Wl(t,4,this.length),je(this,t,!1,23,4)},$e.prototype.readDoubleLE=function(t,e){return e||Wl(t,8,this.length),je(this,t,!0,52,8)},$e.prototype.readDoubleBE=function(t,e){return e||Wl(t,8,this.length),je(this,t,!1,52,8)},$e.prototype.writeUIntLE=function(t,e,l,n){t=+t,e|=0,l|=0,n||Cl(this,t,e,l,Math.pow(2,8*l)-1,0);var i=1,c=0;for(this[e]=255&t;++c<l&&(i*=256);)this[e+c]=t/i&255;return e+l},$e.prototype.writeUIntBE=function(t,e,l,n){t=+t,e|=0,l|=0,n||Cl(this,t,e,l,Math.pow(2,8*l)-1,0);var i=l-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+l},$e.prototype.writeUInt8=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,1,255,0),$e.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},$e.prototype.writeUInt16LE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,2,65535,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Rl(this,t,e,!0),e+2},$e.prototype.writeUInt16BE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,2,65535,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Rl(this,t,e,!1),e+2},$e.prototype.writeUInt32LE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,4,4294967295,0),$e.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):fl(this,t,e,!0),e+4},$e.prototype.writeUInt32BE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,4,4294967295,0),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):fl(this,t,e,!1),e+4},$e.prototype.writeIntLE=function(t,e,l,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*l-1);Cl(this,t,e,l,i-1,-i)}var c=0,o=1,a=0;for(this[e]=255&t;++c<l&&(o*=256);)t<0&&0===a&&0!==this[e+c-1]&&(a=1),this[e+c]=(t/o>>0)-a&255;return e+l},$e.prototype.writeIntBE=function(t,e,l,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*l-1);Cl(this,t,e,l,i-1,-i)}var c=l-1,o=1,a=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===a&&0!==this[e+c+1]&&(a=1),this[e+c]=(t/o>>0)-a&255;return e+l},$e.prototype.writeInt8=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,1,127,-128),$e.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},$e.prototype.writeInt16LE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,2,32767,-32768),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Rl(this,t,e,!0),e+2},$e.prototype.writeInt16BE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,2,32767,-32768),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Rl(this,t,e,!1),e+2},$e.prototype.writeInt32LE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,4,2147483647,-2147483648),$e.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):fl(this,t,e,!0),e+4},$e.prototype.writeInt32BE=function(t,e,l){return t=+t,e|=0,l||Cl(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),$e.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):fl(this,t,e,!1),e+4},$e.prototype.writeFloatLE=function(t,e,l){return vl(this,t,e,!0,l)},$e.prototype.writeFloatBE=function(t,e,l){return vl(this,t,e,!1,l)},$e.prototype.writeDoubleLE=function(t,e,l){return Yl(this,t,e,!0,l)},$e.prototype.writeDoubleBE=function(t,e,l){return Yl(this,t,e,!1,l)},$e.prototype.copy=function(t,e,l,n){if(l||(l=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<l&&(n=l),n===l)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(l<0||l>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-l&&(n=t.length-e+l);var i,c=n-l;if(this===t&&l<e&&e<n)for(i=c-1;i>=0;--i)t[i+e]=this[i+l];else if(c<1e3||!$e.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+l];else Uint8Array.prototype.set.call(t,this.subarray(l,l+c),e);return c},$e.prototype.fill=function(t,e,l,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,l=this.length):"string"==typeof l&&(n=l,l=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!$e.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<l)throw new RangeError("Out of range index");if(l<=e)return this;var c;if(e>>>=0,l=void 0===l?this.length:l>>>0,t||(t=0),"number"==typeof t)for(c=e;c<l;++c)this[c]=t;else{var o=cl(t)?t:Jl(new $e(t,n).toString()),a=o.length;for(c=0;c<l-e;++c)this[c+e]=o[c%a]}return this};var Kl=/[^+\/0-9A-Za-z-_]/g;function Nl(t){return t<16?"0"+t.toString(16):t.toString(16)}function Jl(t,e){var l;e=e||1/0;for(var n=t.length,i=null,c=[],o=0;o<n;++o){if((l=t.charCodeAt(o))>55295&&l<57344){if(!i){if(l>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&c.push(239,191,189);continue}i=l;continue}if(l<56320){(e-=3)>-1&&c.push(239,191,189),i=l;continue}l=65536+(i-55296<<10|l-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=null,l<128){if((e-=1)<0)break;c.push(l)}else if(l<2048){if((e-=2)<0)break;c.push(l>>6|192,63&l|128)}else if(l<65536){if((e-=3)<0)break;c.push(l>>12|224,l>>6&63|128,63&l|128)}else{if(!(l<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(l>>18|240,l>>12&63|128,l>>6&63|128,63&l|128)}}return c}function Hl(t){return function(t){var e,l,n,i,c,o;ze||we();var a=t.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[a-2]?2:"="===t[a-1]?1:0,o=new Ae(3*a/4-c),n=c>0?a-4:a;var r=0;for(e=0,l=0;e<n;e+=4,l+=3)i=xe[t.charCodeAt(e)]<<18|xe[t.charCodeAt(e+1)]<<12|xe[t.charCodeAt(e+2)]<<6|xe[t.charCodeAt(e+3)],o[r++]=i>>16&255,o[r++]=i>>8&255,o[r++]=255&i;return 2===c?(i=xe[t.charCodeAt(e)]<<2|xe[t.charCodeAt(e+1)]>>4,o[r++]=255&i):1===c&&(i=xe[t.charCodeAt(e)]<<10|xe[t.charCodeAt(e+1)]<<4|xe[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(Kl,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Ul(t,e,l,n){for(var i=0;i<n&&!(i+l>=e.length||i>=t.length);++i)e[i+l]=t[i];return i}function Ll(t){return null!=t&&(!!t._isBuffer||Bl(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&Bl(t.slice(0,0))}(t))}function Bl(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var kl=Object.freeze({__proto__:null,Buffer:$e,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),$e.alloc(+t)},isBuffer:Ll,kMaxLength:Oe}),Fl={exports:{}},Tl={},xl={};Object.defineProperty(xl,"__esModule",{value:!0}),xl.default=function(t){var e=t.length,l=e%4;if(!l)return t;var n=e,i=4-l,c=e+i,o=$e.alloc(c);for(o.write(t);i--;)o.write("=",n++);return o.toString()},Object.defineProperty(Tl,"__esModule",{value:!0});var Al=xl;function zl(t,e){return void 0===e&&(e="utf8"),$e.isBuffer(t)?Ql(t.toString("base64")):Ql($e.from(t,e).toString("base64"))}function wl(t){return t=t.toString(),Al.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function Ql(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var Pl,jl=zl;jl.encode=zl,jl.decode=function(t,e){return void 0===e&&(e="utf8"),$e.from(wl(t),"base64").toString(e)},jl.toBase64=wl,jl.fromBase64=Ql,jl.toBuffer=function(t){return $e.from(wl(t),"base64")},Tl.default=jl,(Pl=Fl).exports=Tl.default,Pl.exports.default=Pl.exports;var Ml=Fl.exports,El={exports:{}};!function(t){!function(e,l){var n={};!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 l(t,l,n,i,c){for(var o,a,r,d,u,Z,s,b,I,h,m,p,g;c>=64;){for(o=l[0],a=l[1],r=l[2],d=l[3],u=l[4],Z=l[5],s=l[6],b=l[7],h=0;h<16;h++)m=i+4*h,t[h]=(255&n[m])<<24|(255&n[m+1])<<16|(255&n[m+2])<<8|255&n[m+3];for(h=16;h<64;h++)p=((I=t[h-2])>>>17|I<<15)^(I>>>19|I<<13)^I>>>10,g=((I=t[h-15])>>>7|I<<25)^(I>>>18|I<<14)^I>>>3,t[h]=(p+t[h-7]|0)+(g+t[h-16]|0);for(h=0;h<64;h++)p=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&Z^~u&s)|0)+(b+(e[h]+t[h]|0)|0)|0,g=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&r^a&r)|0,b=s,s=Z,Z=u,u=d+p|0,d=r,r=a,a=o,o=p+g|0;l[0]+=o,l[1]+=a,l[2]+=r,l[3]+=d,l[4]+=u,l[5]+=Z,l[6]+=s,l[7]+=b,i+=64,c-=64}return i}var n=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 n=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[n++],e--;64===this.bufferLength&&(l(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(n=l(this.temp,this.state,t,n,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[n++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,n=this.bufferLength,i=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<o-8;a++)this.buffer[a]=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,l(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>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 l=0;l<this.state.length;l++)this.state[l]=t[l];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=n;var i=function(){function t(t){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new n).update(t).finish(e).clean();else for(var l=0;l<t.length;l++)e[l]=t[l];for(l=0;l<e.length;l++)e[l]^=54;for(this.inner.update(e),l=0;l<e.length;l++)e[l]^=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),l=0;l<e.length;l++)e[l]=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 n).update(t),l=e.digest();return e.clean(),l}function o(t,e){var l=new i(t).update(e),n=l.digest();return l.clean(),n}function a(t,e,l,n){var i=n[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),l&&e.update(l),e.update(n),e.finish(t),n[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=o;var r=new Uint8Array(t.digestLength);t.hkdf=function(t,e,l,n){void 0===e&&(e=r),void 0===n&&(n=32);for(var c=new Uint8Array([1]),d=o(e,t),u=new i(d),Z=new Uint8Array(u.digestLength),s=Z.length,b=new Uint8Array(n),I=0;I<n;I++)s===Z.length&&(a(Z,u,l,c),s=0),b[I]=Z[s++];return u.clean(),Z.fill(0),c.fill(0),b},t.pbkdf2=function(t,e,l,n){for(var c=new i(t),o=c.digestLength,a=new Uint8Array(4),r=new Uint8Array(o),d=new Uint8Array(o),u=new Uint8Array(n),Z=0;Z*o<n;Z++){var s=Z+1;a[0]=s>>>24&255,a[1]=s>>>16&255,a[2]=s>>>8&255,a[3]=s>>>0&255,c.reset(),c.update(e),c.update(a),c.finish(d);for(var b=0;b<o;b++)r[b]=d[b];for(b=2;b<=l;b++){c.reset(),c.update(d).finish(d);for(var I=0;I<o;I++)r[I]^=d[I]}for(b=0;b<o&&Z*o+b<n;b++)u[Z*o+b]=r[b]}for(Z=0;Z<o;Z++)r[Z]=d[Z]=0;for(Z=0;Z<4;Z++)a[Z]=0;return c.clean(),u}}(n);var i=n.default;for(var c in n)i[c]=n[c];t.exports=i}()}(El);var Dl=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(El.exports),Ol=crypto;function ql(t){try{return null!=t&&"boolean"==typeof t.extractable&&"string"==typeof t.algorithm.name&&"string"==typeof t.type}catch(t){return!1}}const _l=new TextEncoder,$l=new TextDecoder,tn=t=>{let e=t;e instanceof Uint8Array&&(e=$l.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>new Uint8Array(atob(t).split("").map(t=>t.charCodeAt(0))))(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class en 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 ln extends en{constructor(t,e="unspecified",l="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=e,this.reason=l}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class nn extends en{constructor(t,e="unspecified",l="unspecified"){super(t),this.code="ERR_JWT_EXPIRED",this.claim=e,this.reason=l}static get code(){return"ERR_JWT_EXPIRED"}}class cn extends en{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class on extends en{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class an extends en{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class rn extends en{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class dn extends en{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class un extends en{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 Zn extends en{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 sn extends en{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 bn(){return"function"==typeof WebSocketPair}function In(){try{return void 0!==ft.versions.node}catch(t){return!1}}function hn(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function mn(t,e){return t.name===e}function pn(t){return parseInt(t.name.slice(4),10)}var gn=(t,...e)=>{let l="Key must be ";if(e.length>2){const t=e.pop();l+=`one of type ${e.join(", ")}, or ${t}.`}else 2===e.length?l+=`one of type ${e[0]} or ${e[1]}.`:l+=`of type ${e[0]}.`;return null==t?l+=" Received "+t:"function"==typeof t&&t.name?l+=" Received function "+t.name:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(l+=" Received an instance of "+t.constructor.name),l},Gn=t=>ql(t);const yn=["CryptoKey"];function Xn(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 l=t;for(;null!==Object.getPrototypeOf(l);)l=Object.getPrototypeOf(l);return Object.getPrototypeOf(t)===l}const Vn=async t=>{var e,l;const{algorithm:n,keyUsages:i}=function(t){let e,l;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-"+t.alg.slice(-3)},l=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new on(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"},l=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},l=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},l=["deriveBits"];break;default:throw new on('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)},l=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.slice(-3)},l=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)},l=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new on('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},l=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},l=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},l=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},l=t.d?["deriveBits"]:[];break;default:throw new on('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(bn()||In())&&"OKP":if("EdDSA"!==t.alg)throw new on('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(t.crv){case"Ed25519":e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},l=t.d?["sign"]:["verify"];break;case In()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},l=t.d?["sign"]:["verify"];break;default:throw new on('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new on('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:l}}(t),c=[n,null!==(e=t.ext)&&void 0!==e&&e,null!==(l=t.key_ops)&&void 0!==l?l:i];if("PBKDF2"===n.name)return Ol.subtle.importKey("raw",tn(t.k),...c);const o={...t};return delete o.alg,Ol.subtle.importKey("jwk",o,...c)},Wn=async(t,e,l,n)=>{const i=await function(t,e,l){if(ql(e))return function(t,e,...l){switch(e){case"HS256":case"HS384":case"HS512":{if(!mn(t.algorithm,"HMAC"))throw hn("HMAC");const l=parseInt(e.slice(2),10);if(pn(t.algorithm.hash)!==l)throw hn("SHA-"+l,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!mn(t.algorithm,"RSASSA-PKCS1-v1_5"))throw hn("RSASSA-PKCS1-v1_5");const l=parseInt(e.slice(2),10);if(pn(t.algorithm.hash)!==l)throw hn("SHA-"+l,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!mn(t.algorithm,"RSA-PSS"))throw hn("RSA-PSS");const l=parseInt(e.slice(2),10);if(pn(t.algorithm.hash)!==l)throw hn("SHA-"+l,"algorithm.hash");break}case In()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw hn("NODE-ED25519 or NODE-ED448");break;case bn()&&"EdDSA":if(!mn(t.algorithm,"NODE-ED25519"))throw hn("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!mn(t.algorithm,"ECDSA"))throw hn("ECDSA");const l=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!==l)throw hn(l,"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 l=e.pop();t+=`one of ${e.join(", ")}, or ${l}.`}else 2===e.length?t+=`one of ${e[0]} or ${e[1]}.`:t+=e[0]+".";throw new TypeError(t)}}(t,l)}(e,t,l),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(gn(e,...yn));return Ol.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[l])}throw new TypeError(gn(e,...yn,"Uint8Array"))}(t,e,"verify");((t,e)=>{if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:l}=e.algorithm;if("number"!=typeof l||l<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,i);const c=function(t,e){const l="SHA-"+t.slice(-3);switch(t){case"HS256":case"HS384":case"HS512":return{hash:l,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:l,name:"RSA-PSS",saltLength:t.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:l,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:l,name:"ECDSA",namedCurve:e.namedCurve};case(bn()||In())&&"EdDSA":const{namedCurve:n}=e;return{name:n,namedCurve:n};default:throw new on(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await Ol.subtle.verify(c,i,l,n)}catch(t){return!1}};async function Cn(t,e,l){var n;if(!Xn(t))throw new an("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new an('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new an("JWS Protected Header incorrect type");if(void 0===t.payload)throw new an("JWS Payload missing");if("string"!=typeof t.signature)throw new an("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Xn(t.header))throw new an("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=tn(t.protected);try{i=JSON.parse($l.decode(e))}catch(t){throw new an("JWS Protected Header is invalid")}}if(!((...t)=>{const e=t.filter(Boolean);if(0===e.length||1===e.length)return!0;let l;for(const t of e){const e=Object.keys(t);if(l&&0!==l.size)for(const t of e){if(l.has(t))return!1;l.add(t)}else l=new Set(e)}return!0})(i,t.header))throw new an("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...i,...t.header};let o=!0;if(function(t,e,l,n,i){if(void 0!==i.crit&&void 0===n.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some(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!==l?new Map([...Object.entries(l),...e.entries()]):e;for(const e of n.crit){if(!c.has(e))throw new on(`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===n[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(n.crit)}(an,new Map([["b64",!0]]),null==l?void 0:l.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new an('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:a}=c;if("string"!=typeof a||!a)throw new an('JWS "alg" (Algorithm) Header Parameter missing or invalid');const r=l&&((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,l.algorithms);if(r&&!r.has(a))throw new cn('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new an("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new an("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof e&&(e=await e(i,t),d=!0),((t,e,l)=>{t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?(t=>{if(!(t instanceof Uint8Array)){if(!Gn(t))throw new TypeError(gn(t,...yn,"Uint8Array"));if("secret"!==t.type)throw new TypeError(yn.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Gn(t))throw new TypeError(gn(t,...yn));if("secret"===t.type)throw new TypeError(yn.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(yn.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(yn.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(yn.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(yn.join(" or ")+' instances for asymmetric algorithm encryption must be of type "public"')})(e,l)})(a,e,"verify");const u=function(...t){const e=t.reduce((t,{length:e})=>t+e,0),l=new Uint8Array(e);let n=0;return t.forEach(t=>{l.set(t,n),n+=t.length}),l}(_l.encode(null!==(n=t.protected)&&void 0!==n?n:""),_l.encode("."),"string"==typeof t.payload?_l.encode(t.payload):t.payload),Z=tn(t.signature);if(!await Wn(a,e,Z,u))throw new sn;let s;s=o?tn(t.payload):"string"==typeof t.payload?_l.encode(t.payload):t.payload;const b={payload:s};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),d?{...b,key:e}:b}const Rn=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var fn=t=>{const e=Rn.exec(t);if(!e)throw new TypeError("Invalid time period format");const l=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(l);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*l);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*l);case"day":case"days":case"d":return Math.round(86400*l);case"week":case"weeks":case"w":return Math.round(604800*l);default:return Math.round(31557600*l)}};const Sn=t=>t.toLowerCase().replace(/^application\//,"");var vn=(t,e,l={})=>{const{typ:n}=l;if(n&&("string"!=typeof t.typ||Sn(t.typ)!==Sn(n)))throw new ln('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse($l.decode(e))}catch(t){}if(!Xn(i))throw new rn("JWT Claims Set must be a top-level JSON object");const{issuer:c}=l;if(c&&!(Array.isArray(c)?c:[c]).includes(i.iss))throw new ln('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=l;if(o&&i.sub!==o)throw new ln('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=l;if(a&&(d="string"==typeof a?[a]:a,!("string"==typeof(r=i.aud)?d.includes(r):Array.isArray(r)&&d.some(Set.prototype.has.bind(new Set(r))))))throw new ln('unexpected "aud" claim value',"aud","check_failed");var r,d;let u;switch(typeof l.clockTolerance){case"string":u=fn(l.clockTolerance);break;case"number":u=l.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:Z}=l,s=(b=Z||new Date,Math.floor(b.getTime()/1e3));var b;if(void 0!==i.iat||l.maxTokenAge){if("number"!=typeof i.iat)throw new ln('"iat" claim must be a number',"iat","invalid");if(void 0===i.exp&&i.iat>s+u)throw new ln('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new ln('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>s+u)throw new ln('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new ln('"exp" claim must be a number',"exp","invalid");if(i.exp<=s-u)throw new nn('"exp" claim timestamp check failed',"exp","check_failed")}if(l.maxTokenAge){const t=s-i.iat;if(t-u>("number"==typeof l.maxTokenAge?l.maxTokenAge:fn(l.maxTokenAge)))throw new nn('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new ln('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Yn(t){return Xn(t)}class Kn{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Yn)}(t))throw new dn("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:l,kid:n}={...t,...e.header},i=this._jwks.keys.filter(t=>{let e=t.kty===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 on('Unsupported "alg" value for a JSON Web Key Set')}}(l);if(e&&"string"==typeof n&&(e=n===t.kid),e&&"string"==typeof t.alg&&(e=l===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"===l&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(l){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:c,length:o}=i;if(0===o)throw new un;if(1!==o)throw new Zn;const a=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===a[l]){const t=await async function(t,e,l){if(!Xn(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!=l||(l=!0!==t.ext),l?Vn({...t,alg:e,ext:!1}):tn(t.k);case"RSA":if(void 0!==t.oth)throw new on('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Vn({...t,alg:e});default:throw new on('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},l);if(t instanceof Uint8Array||"public"!==t.type)throw new dn("JSON Web Key Set members must be public keys");a[l]=t}return a[l]}}var Nn={exports:{}},Jn={exports:{}},Hn=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(l){var n=Object.getOwnPropertyDescriptor(t,l);Object.defineProperty(e,l,n.get?n:{enumerable:!0,get:function(){return t[l]}})})),e}(kl);
|
|
464
|
+
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var l=Hn,n=l.Buffer;function i(t,e){for(var l in t)e[l]=t[l]}function c(t,e,l){return n(t,e,l)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=l:(i(l,e),e.Buffer=c),c.prototype=Object.create(n.prototype),i(n,c),c.from=function(t,e,l){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,l)},c.alloc=function(t,e,l){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=n(t);return void 0!==e?"string"==typeof l?i.fill(e,l):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l.SlowBuffer(t)}}(Jn,Jn.exports);var Un=Jn.exports.Buffer,Ln=k.crypto||k.msCrypto;Ln&&Ln.getRandomValues?Nn.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var l=Un.allocUnsafe(t);if(t>0)if(t>65536)for(var n=0;n<t;n+=65536)Ln.getRandomValues(l.slice(n,n+65536));else Ln.getRandomValues(l);return"function"==typeof e?ft.nextTick((function(){e(null,l)})):l}:Nn.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var Bn=Nn.exports;class kn{base64URLEncode(t){return Ml.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return Ml.decode(t).toString()}hashSha256(t){return $e.from(Dl((new TextEncoder).encode(t)))}generateRandomBytes(t){return Bn(t)}verifyJwt(t,e,l,n,i,c,o){return async function(t,e,l){var n;const i=await async function(t,e,l){if(t instanceof Uint8Array&&(t=$l.decode(t)),"string"!=typeof t)throw new an("Compact JWS must be a string or Uint8Array");const{0:n,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new an("Invalid Compact JWS");const a=await Cn({payload:i,protected:n,signature:c},e,l),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof e?{...r,key:a.key}:r}(t,e,l);if((null===(n=i.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===i.protectedHeader.b64)throw new rn("JWTs MUST NOT use unencoded payload");const c={payload:vn(i.protectedHeader,i.payload,l),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(a={keys:[e]},Kn.prototype.getKey.bind(new Kn(a))),{algorithms:l,audience:n,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0));var a}}const Fn=t=>n(void 0,void 0,void 0,(function*(){var e;const l=(t=>{switch(t){case N.LocalStorage:return new Be;case N.SessionStorage:return new Fe;case N.BrowserMemory:return new ke;default:return new Fe}})(t.storage),i=new kn,o=new K(l,i);yield o.initialize(t);const a=new U(o),r=o.getDataLayer(),d=yield B(()=>n(void 0,void 0,void 0,(function*(){return o.signOut()})),null!==(e=t.storage)&&void 0!==e?e:N.SessionStorage,t=>r.setSessionDataParameter(p,null!=t?t:""));let u=!1;const Z=Le.getInstance();let s,b,I=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,t=>n(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield o.getAccessToken())}))}))));const h=()=>n(void 0,void 0,void 0,(function*(){var t,e,l;const i=yield o.getOIDCServiceEndpoints(),c=yield r.getConfigData();d.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",()=>n(void 0,void 0,void 0,(function*(){return(yield o.getBasicUserInfo()).sessionState})),null!==(e=c.checkSessionInterval)&&void 0!==e?e:3,null!==(l=c.sessionRefreshInterval)&&void 0!==l?l:300,c.signInRedirectURL,t=>n(void 0,void 0,void 0,(function*(){return o.getAuthorizationURL(t)})))})),g=t=>n(void 0,void 0,void 0,(function*(){var e,l,i;let c=!0,d=!1;if(null==t?void 0:t.tokenEndpoint){c=!1;for(const n of[...null!==(l=null===(e=yield r.getConfigData())||void 0===e?void 0:e.resourceServerURLs)&&void 0!==l?l:[],t.baseUrl])if(n&&(null===(i=t.tokenEndpoint)||void 0===i?void 0:i.startsWith(n))){d=!0;break}}return t.shouldReplayAfterRefresh&&r.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),c||d?o.requestCustomGrant(t).then(e=>n(void 0,void 0,void 0,(function*(){return t.preventSignOutURLUpdate&&(u=!0),t.returnsSession?(a.refreshAccessTokenAutomatically(),o.getBasicUserInfo()):e}))).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`"))})),G=()=>n(void 0,void 0,void 0,(function*(){try{yield o.refreshAccessToken();const t=yield V();return t&&(yield g(t)),a.refreshAccessTokenAutomatically(),o.getBasicUserInfo()}catch(t){return Promise.reject(t)}})),X=(t,e,l)=>n(void 0,void 0,void 0,(function*(){const i=yield r.getConfigData();if(i.storage===N.BrowserMemory&&i.enablePKCE){const t=L.getPKCE(C.extractPKCEKeyFromStateParam(l));yield o.setPKCECode(C.extractPKCEKeyFromStateParam(l),t)}return o.requestAccessToken(t,e,l).then(()=>n(void 0,void 0,void 0,(function*(){return L.setSignOutURL(yield o.getSignOutURL()),a.clearRefreshTokenTimeout(),a.refreshAccessTokenAutomatically(),i.enableOIDCSessionManagement&&h(),o.getBasicUserInfo()}))).catch(t=>Promise.reject(t))})),V=()=>n(void 0,void 0,void 0,(function*(){const t=yield r.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}));return{disableHttpHandler:()=>((null==Z?void 0:Z.disableHandler)&&Z.disableHandler(),I=!1,!0),enableHttpHandler:()=>((null==Z?void 0:Z.enableHandler)&&Z.enableHandler(),I=!0,!0),getAccessToken:()=>n(void 0,void 0,void 0,(function*(){return o.getAccessToken()})),getBasicUserInfo:()=>n(void 0,void 0,void 0,(function*(){return o.getBasicUserInfo()})),getDecodedIDToken:()=>n(void 0,void 0,void 0,(function*(){return o.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>n(void 0,void 0,void 0,(function*(){return o.getIDToken()})),getOIDCServiceEndpoints:()=>n(void 0,void 0,void 0,(function*(){return o.getOIDCServiceEndpoints()})),httpRequest:t=>n(void 0,void 0,void 0,(function*(){var e,l;let i=!1;const c=yield r.getConfigData();for(const n of[...null!==(e=yield null==c?void 0:c.resourceServerURLs)&&void 0!==e?e:[],c.baseUrl])if(n&&(null===(l=null==t?void 0:t.url)||void 0===l?void 0:l.startsWith(n))){i=!0;break}if(i)return Z.request(t).then(t=>Promise.resolve(t)).catch(e=>n(void 0,void 0,void 0,(function*(){var l,n,i;if(401===(null===(l=null==e?void 0:e.response)||void 0===l?void 0:l.status)||!(null==e?void 0:e.response)){let c;try{c=yield G()}catch(l){throw I&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},e),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new W("SPA-MAIN_THREAD_CLIENT-HR-SE01",null!==(n=null==l?void 0:l.name)&&void 0!==n?n:"Refresh token request failed.",null!==(i=null==l?void 0:l.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(c)try{const e=yield Z.request(t);return Promise.resolve(e)}catch(l){return I&&("function"==typeof s&&(yield s(l)),"function"==typeof b&&b()),Promise.reject(l)}}return I&&("function"==typeof s&&(yield s(e)),"function"==typeof b&&b()),Promise.reject(e)})));throw new W("SPA-MAIN_THREAD_CLIENT-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=>n(void 0,void 0,void 0,(function*(){var e,l,i;let c=!0;const a=yield r.getConfigData();for(const n of t){let t=!1;for(const c of[...null!==(l=null===(e=yield a)||void 0===e?void 0:e.resourceServerURLs)&&void 0!==l?l:[],a.baseUrl])if(c&&(null===(i=n.url)||void 0===i?void 0:i.startsWith(c))){t=!0;break}if(!t){c=!1;break}}const d=[];if(c)return t.forEach(t=>{d.push(Z.request(t))}),(null==Z?void 0:Z.all)&&Z.all(d).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){var e,l,i;if(401===(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status)||!(null==t?void 0:t.response)){let e;try{e=yield o.refreshAccessToken()}catch(e){throw I&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new W("SPA-MAIN_THREAD_CLIENT-HRA-SE01",null!==(l=null==e?void 0:e.name)&&void 0!==l?l:"Refresh token request failed.",null!==(i=null==e?void 0:e.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(e)return Z.all&&Z.all(d).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){return I&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})))}return I&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})));throw new W("SPA-MAIN_THREAD_CLIENT-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`")})),isAuthenticated:()=>n(void 0,void 0,void 0,(function*(){return o.isAuthenticated()})),refreshAccessToken:G,requestCustomGrant:g,revokeAccessToken:()=>o.revokeAccessToken().then(()=>(d.reset(),a.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{s=t},setHttpRequestFinishCallback:t=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(t),b=t},setHttpRequestStartCallback:t=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(t)},signIn:(t,e,l,i)=>n(void 0,void 0,void 0,(function*(){var u,Z,s;const b=yield r.getConfigData();if(yield d.receivePromptNoneResponse(t=>n(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(p,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(yield o.isAuthenticated())return a.clearRefreshTokenTimeout(),a.refreshAccessTokenAutomatically(),b.enableOIDCSessionManagement&&h(),Promise.resolve(yield o.getBasicUserInfo());let I,g,G;if((null==b?void 0:b.responseMode)===c.formPost&&e?(I=e,g=null!=l?l:"",G=null!=i?i:""):(I=null!==(u=new URL(window.location.href).searchParams.get(m))&&void 0!==u?u:"",g=null!==(Z=new URL(window.location.href).searchParams.get(p))&&void 0!==Z?Z:"",G=null!==(s=new URL(window.location.href).searchParams.get(y))&&void 0!==s?s:"",L.removeAuthorizationCode()),I&&G)return X(I,g,G);const V=new URL(window.location.href).searchParams.get("error"),R=new URL(window.location.href).searchParams.get("error_description");if(V){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-MAIN_THREAD_CLIENT-SI-SE01",V,null!=R?R:"")}return o.getAuthorizationURL(t).then(t=>n(void 0,void 0,void 0,(function*(){if(b.storage===N.BrowserMemory&&b.enablePKCE){const t=C.extractPKCEKeyFromStateParam(G);L.setPKCE(t,yield o.getPKCECode(G))}return location.href=t,yield L.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))})),signOut:()=>n(void 0,void 0,void 0,(function*(){return(yield o.isAuthenticated())&&!u?location.href=yield o.signOut():(location.href=L.getSignOutURL(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData()),a.clearRefreshTokenTimeout(),yield L.waitTillPageRedirect(),!0})),trySignInSilently:()=>n(void 0,void 0,void 0,(function*(){var t;const e=yield r.getConfigData();if(L.isInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById("rpIFrame"),i=null===(t=null==l?void 0:l.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield o.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),l=new URL(t);l.searchParams.set("response_mode","query");const n=l.toString();if(e.storage===N.BrowserMemory&&e.enablePKCE){const t=l.searchParams.get(y);L.setPKCE(C.extractPKCEKeyFromStateParam(null!=t?t:""),yield o.getPKCECode(null!=t?t:""))}i.src=n}catch(t){return Promise.reject(t)}return new Promise((t,e)=>{const l=setTimeout(()=>{t(!1)},1e4),i=c=>n(void 0,void 0,void 0,(function*(){var n,o,a;const r=c.data;"check_session_signed_out"==(null==r?void 0:r.type)&&(window.removeEventListener("message",i),clearTimeout(l),t(!1)),"check_session_signed_in"==(null==r?void 0:r.type)&&(null===(n=null==r?void 0:r.data)||void 0===n?void 0:n.code)&&X(r.data.code,null===(o=null==r?void 0:r.data)||void 0===o?void 0:o.sessionState,null===(a=null==r?void 0:r.data)||void 0===a?void 0:a.state).then(e=>{window.removeEventListener("message",i),t(e)}).catch(t=>{window.removeEventListener("message",i),e(t)}).finally(()=>{clearTimeout(l)})}));window.addEventListener("message",i)})})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){const e=yield r.getConfigData(),l=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},e),t);yield o.updateConfig(n),n.enableOIDCSessionManagement&&l&&(d.reset(),h())}))}}));var Tn,xn=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsO2lmKCFyKXRocm93IG5ldyBhKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL2F1dGhvcml6ZWAsZW5kX3Nlc3Npb25fZW5kcG9pbnQ6YCR7cn0vb2lkYy9sb2dvdXRgLGlzc3VlcjpgJHtyfS9vYXV0aDIvdG9rZW5gLGp3a3NfdXJpOmAke3J9L29hdXRoMi9qd2tzYCxjaGVja19zZXNzaW9uX2lmcmFtZTpgJHtyfS9vaWRjL2NoZWNrc2Vzc2lvbmAscmV2b2NhdGlvbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvcmV2b2tlYCx0b2tlbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvdG9rZW5gLHVzZXJpbmZvX2VuZHBvaW50OmAke3J9L29hdXRoMi91c2VyaW5mb2B9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksZSl9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCkpLmp3a3NfdXJpLHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTX0FVVEhfSEVMUEVSLVZJVC1ORjAxIiwiSldLUyBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gSldLUyBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBKV0tTIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2xldCBuO3RyeXtuPXlpZWxkIGZldGNoKHQse2NyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW59KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULU5FMDIiLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKDIwMCE9PW4uc3RhdHVzfHwhbi5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0ICgke24uc3RhdHVzVGV4dH0pLmAseWllbGQgbi5qc29uKCkpO2NvbnN0IGk9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLmlzc3Vlcix7a2V5czpvfT15aWVsZCBuLmpzb24oKSxjPXlpZWxkIHRoaXMuX2NyeXB0b0hlbHBlci5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSxvKTtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmlzVmFsaWRJZFRva2VuKGUsYywoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELG51bGwhPWk/aToiIix0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSl9KSl9Z2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkscz1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChvKSxhPW51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPW8uZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixsPW51bGwhPT0obj1vLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGg9dSYmbD9gJHt1fSAke2x9YDp1fHxsfHwiIixkPW51bGwhPT0oaT1vLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWk/aTpoO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpkLHRlbmFudERvbWFpbjpzLHVzZXJuYW1lOmF9LGMuZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKG8pKX1yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCB0PSJvcGVuaWQiO2NvbnN0IGk9eWllbGQgdGhpcy5fY29uZmlnKCksbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocik7cmV0dXJuIGkuc2NvcGUmJmkuc2NvcGUubGVuZ3RoPjAmJihpLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8aS5zY29wZS5wdXNoKCJvcGVuaWQiKSx0PWkuc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsby5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsdGhpcy5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oby5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIsdCkucmVwbGFjZSgie3tjbGllbnRJRH19IixpLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KG49aS5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT1uP246IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoZSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpfSkpfWhhbmRsZVRva2VuUmVzcG9uc2UoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItSFRSLU5FMDEiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdCAoJHtlLnN0YXR1c1RleHR9KS5gLHlpZWxkIGUuanNvbigpKTtjb25zdCBuPXlpZWxkIGUuanNvbigpO2lmKG4uY3JlYXRlZF9hdD0obmV3IERhdGUpLmdldFRpbWUoKSwoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4obi5pZF90b2tlbikudGhlbigoKCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKTtjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpKSk7e2NvbnN0IGU9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKSxQcm9taXNlLnJlc29sdmUoZSl9fSkpfWdlbmVyYXRlUEtDRUtleShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGEoZSksbj1bXTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57ZS5zdGFydHNXaXRoKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSYmbi5wdXNoKGUpfSkpO2NvbnN0IGk9bi5zb3J0KCkucG9wKCk7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KG51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT1yP3I6Ii0xIikrMX1gfSkpfX1jbGFzcyBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NyeXB0b1V0aWxzPWV9Z2V0Q29kZVZlcmlmaWVyKCl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5nZW5lcmF0ZVJhbmRvbUJ5dGVzKDMyKSl9Z2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmhhc2hTaGEyNTYoZSkpfWdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UodGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUpKTtmb3IoY29uc3QgZSBvZiB0KWlmKHIua2lkPT09ZS5raWQpcmV0dXJuIGU7dGhyb3cgbmV3IGEoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrci5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChlPT5lLmtpZCkpLmpvaW4oIiwgIikpfWlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxzKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLHIsbixpLHMpLnRoZW4oKGU9PmU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgYSgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSkpKX1kZWNvZGVJRFRva2VuKGUpe3RyeXtjb25zdCB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuX2NyeXB0b1V0aWxzPXIsdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBsKHIpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyB1KGUsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUscil7dmFyIG4saSxvO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR0FVLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9bmV3IFVSTCh0KTt1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjbGllbnRfaWQiLHMuY2xpZW50SUQpO2xldCBsPSJvcGVuaWQiO3Muc2NvcGUmJnMuc2NvcGUubGVuZ3RoPjAmJihzLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8cy5zY29wZS5wdXNoKCJvcGVuaWQiKSxsPXMuc2NvcGUuam9pbigiICIpKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIixsKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlZGlyZWN0X3VyaSIscy5zaWduSW5SZWRpcmVjdFVSTCkscy5yZXNwb25zZU1vZGUmJnUuc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfbW9kZSIscy5yZXNwb25zZU1vZGUpO2NvbnN0IGg9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KHIpO2lmKHMuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KG49dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxlLHIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXMucHJvbXB0JiZ1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIscy5wcm9tcHQpO2NvbnN0IGQ9ZTtpZihkKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMoZCkpIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSYmdS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdC50b1N0cmluZygpKTtyZXR1cm4gdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzdGF0ZSIsYy5nZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oaCxkP251bGw9PT0obz1kLnN0YXRlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b1N0cmluZygpOiIiKSksdS50b1N0cmluZygpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7ciYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIscixpKSk7Y29uc3QgdT1bXTt1LnB1c2goYGNsaWVudF9pZD0ke28uY2xpZW50SUR9YCksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmdS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7by5jbGllbnRTZWNyZXR9YCk7Y29uc3QgbD1lO2xldCBoO3UucHVzaChgY29kZT0ke2x9YCksdS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLHUucHVzaChgcmVkaXJlY3RfdXJpPSR7by5zaWduSW5SZWRpcmVjdFVSTH1gKSxvLmVuYWJsZVBLQ0UmJih1LnB1c2goYGNvZGVfdmVyaWZpZXI9JHt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksaSl9YCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpKTt0cnl7aD15aWVsZCBmZXRjaCh0LHtib2R5OnUuam9pbigiJiIpLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLGBSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke2guc3RhdHVzVGV4dH1gLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCksbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIW4ucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKGBjbGllbnRfaWQ9JHtyLmNsaWVudElEfWApLGkucHVzaChgcmVmcmVzaF90b2tlbj0ke24ucmVmcmVzaF90b2tlbn1gKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHIuY2xpZW50U2VjcmV0JiZyLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke3IuY2xpZW50U2VjcmV0fWApO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7by5zdGF0dXNUZXh0fWAseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPVtdO2xldCBpO24ucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxuLnB1c2goYHRva2VuPSR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuYWNjZXNzX3Rva2VufWApLG4ucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6bi5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoJHtpLnN0YXR1c1RleHR9KS5gLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6bi50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSxuXSk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhuLHIpO3JldHVybmAke2V9PSR7dH1gfSkpKSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShyKSkuYWNjZXNzX3Rva2VufWB9KSk7Y29uc3QgaD17Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGQ7dHJ5e2Q9eWllbGQgZmV0Y2gobyxoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09ZC5zdGF0dXN8fCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoJHtkLnN0YXR1c1RleHR9KWAseWllbGQgZC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxyKTpQcm9taXNlLnJlc29sdmUoeWllbGQgZC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxyPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChlPT57dm9pZCAwIT09cltlXSYmIiIhPT1yW2VdJiZudWxsIT09cltlXXx8ZGVsZXRlIHJbZV19KSksbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksciksbn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj10LndlbGxLbm93bkVuZHBvaW50O2lmKHIpe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKHIpLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLHIsbixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShyPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShyPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBjPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFjfHwwPT09Yy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTChlKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksdH0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSkscil9KSl9c2V0UEtDRUNvZGUoZSxyLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxlLG4pfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBke2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBkKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGYpLGUpLHtzY29wZTpbLi4ubnVsbCE9PShyPWYuc2NvcGUpJiZ2b2lkIDAhPT1yP3I6W10sLi4ubnVsbCE9PShpPW51bGw9PT0obj1lLnNjb3BlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1mP3ZvaWQgMDpmLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LHIpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3Jldm9rZUFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYWNjZXNzCiAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgYXV0aC5nZXRBY2Nlc3NUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKICAgICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBwYXNzZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgRmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGVwZW5kaW5nCiAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgYXR0YWNoVG9rZW46IGZhbHNlLAogICAgICAgICAqICAgZGF0YTogewogICAgICAgICAqICAgICAgIGNsaWVudF9pZDogInt7Y2xpZW50SUR9fSIsCiAgICAgICAgICogICAgICAgZ3JhbnRfdHlwZTogImFjY291bnRfc3dpdGNoIiwKICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICogICAgICAgdG9rZW46ICJ7e3Rva2VufX0iLAogICAgICAgICAqICAgfSwKICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAqICAgcmV0dXJuUmVzcG9uc2U6IHRydWUsCiAgICAgICAgICogICByZXR1cm5zU2Vzc2lvbjogdHJ1ZSwKICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50CiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzQXV0aGVudGljYXRlZAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgcGtjZSA9IGF3YWl0IGdldFBLQ0VDb2RlKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUscil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLnNldFBLQ0VDb2RlKCJwa2NlX2NvZGUiKQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zZXRQS0NFQ29kZShlLHIsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxyLG4pfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGhhcyBmYWlsZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNkaWRTaWduT3V0RmFpbAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJm59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBiYXNlVXJsOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwogICAgICAgICAqIGBgYAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWcKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IGc9ImluaXQiO3ZhciB5LHY7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0odnx8KHY9e30pKTtjb25zdCBtPSJjdXN0b21fZ3JhbnRfY29uZmlnIjtjbGFzcyB3e2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYodC5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpO2NsZWFyVGltZW91dChlKX19KSl9fWNsYXNzIF97Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19dmFyIGI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBTKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gayhlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBFPXtleHBvcnRzOnt9fSxSPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LFQ9UixBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBEKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUEuY2FsbChlKX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEkoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1BLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09QS5jYWxsKGUpfWZ1bmN0aW9uIEgoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxDKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBMPXtpc0FycmF5OkMsaXNBcnJheUJ1ZmZlcjpQLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIUQoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhRChlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUEuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmUChlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpPLGlzUGxhaW5PYmplY3Q6SSxpc1VuZGVmaW5lZDpELGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1BLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1BLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1BLmNhbGwoZSl9LGlzRnVuY3Rpb246VSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTyhlKSYmVShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUEuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpILG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7SSh0W25dKSYmSShyKT90W25dPWUodFtuXSxyKTpJKHIpP3Rbbl09ZSh7fSxyKTpDKHIpP3Rbbl09ci5zbGljZSgpOnRbbl09cn1mb3IodmFyIG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKylIKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSCh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/VCh0LHIpOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxNPUw7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgaj1mdW5jdGlvbihlLHQscil7aWYoIXQpcmV0dXJuIGU7dmFyIG47aWYociluPXIodCk7ZWxzZSBpZihNLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107TS5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKE0uaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLE0uZm9yRWFjaChlLChmdW5jdGlvbihlKXtNLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpNLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKE4odCkrIj0iK04oZSkpfSkpKX0pKSxuPWkuam9pbigiJiIpfWlmKG4pe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStufXJldHVybiBlfSx4PUw7ZnVuY3Rpb24gcSgpe3RoaXMuaGFuZGxlcnM9W119cS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhciYmci5zeW5jaHJvbm91cyxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0scS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt4LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBLPXEsSj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIEIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVz1CLCQ9RjtmdW5jdGlvbiB6KGUpe2lmKFc9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFc9PT1CfHwhVykmJnNldFRpbWVvdXQpcmV0dXJuIFc9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBXKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBXLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBXLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIEouc2V0VGltZW91dCYmKFc9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEouY2xlYXJUaW1lb3V0JiYoJD1jbGVhclRpbWVvdXQpO3ZhciBZLFY9W10sRz0hMSxYPS0xO2Z1bmN0aW9uIFooKXtHJiZZJiYoRz0hMSxZLmxlbmd0aD9WPVkuY29uY2F0KFYpOlg9LTEsVi5sZW5ndGgmJlEoKSl9ZnVuY3Rpb24gUSgpe2lmKCFHKXt2YXIgZT16KFopO0c9ITA7Zm9yKHZhciB0PVYubGVuZ3RoO3Q7KXtmb3IoWT1WLFY9W107KytYPHQ7KVkmJllbWF0ucnVuKCk7WD0tMSx0PVYubGVuZ3RofVk9bnVsbCxHPSExLGZ1bmN0aW9uKGUpe2lmKCQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoJD09PUZ8fCEkKSYmY2xlYXJUaW1lb3V0KXJldHVybiAkPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5eyQoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiAkLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gJC5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGVlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIHRlKCl7fXZhciByZT10ZSxuZT10ZSxpZT10ZSxvZT10ZSxzZT10ZSxhZT10ZSxjZT10ZTt2YXIgdWU9Si5wZXJmb3JtYW5jZXx8e30sbGU9dWUubm93fHx1ZS5tb3pOb3d8fHVlLm1zTm93fHx1ZS5vTm93fHx1ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBoZT1uZXcgRGF0ZTt2YXIgZGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07Vi5wdXNoKG5ldyBlZShlLHQpKSwxIT09Vi5sZW5ndGh8fEd8fHooUSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246cmUsYWRkTGlzdGVuZXI6bmUsb25jZTppZSxvZmY6b2UscmVtb3ZlTGlzdGVuZXI6c2UscmVtb3ZlQWxsTGlzdGVuZXJzOmFlLGVtaXQ6Y2UsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqbGUuY2FsbCh1ZSkscj1NYXRoLmZsb29yKHQpLG49TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKHItPWVbMF0sKG4tPWVbMV0pPDAmJihyLS0sbis9MWU5KSksW3Isbl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtaGUpLzFlM319LGZlPWRlLHBlPUwsZ2U9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gZS5jb25maWc9dCxyJiYoZS5jb2RlPXIpLGUucmVxdWVzdD1uLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHllPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSx2ZT1nZSxtZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gdmUobyx0LHIsbixpKX0sd2U9bWUsX2U9TCxiZT1fZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksX2UuaXNOdW1iZXIocikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLF9lLmlzU3RyaW5nKG4pJiZzLnB1c2goInBhdGg9IituKSxfZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFNlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LGtlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEVlPUwsUmU9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxUZT1MLEFlPVRlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPVRlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gQ2UoZSl7dGhpcy5tZXNzYWdlPWV9Q2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LENlLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBEZT1DZSxQZT1MLE9lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qod2UoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sSWU9YmUsVWU9aixIZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhU2UodCk/a2UoZSx0KTp0fSxMZT1mdW5jdGlvbihlKXt2YXIgdCxyLG4saT17fTtyZXR1cm4gZT8oRWUuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihuPWUuaW5kZXhPZigiOiIpLHQ9RWUudHJpbShlLnN1YnN0cigwLG4pKS50b0xvd2VyQ2FzZSgpLHI9RWUudHJpbShlLnN1YnN0cihuKzEpKSx0KXtpZihpW3RdJiZSZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtyXSk6aVt0XT9pW3RdKyIsICIrcjpyfX0pKSxpKTppfSxNZT1BZSxOZT1tZSxqZT15ZSx4ZT1EZSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG4saT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfVBlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgaD1IZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGQoKXtpZihjKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TGUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6Y307T2UoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe3IoZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxVZShoLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWQ6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChkKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKHIoTmUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7cihOZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLG49ZS50cmFuc2l0aW9uYWx8fGplO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKE5lKHQsZSxuLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sUGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxNZShoKSkmJmUueHNyZkNvb2tpZU5hbWU/SWUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmUGUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFBlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihuPWZ1bmN0aW9uKGUpe2MmJihyKCFlfHxlJiZlLnR5cGU/bmV3IHhlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/bigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sS2U9TCxKZT1mdW5jdGlvbihlLHQpe3BlLmZvckVhY2goZSwoZnVuY3Rpb24ocixuKXtuIT09dCYmbi50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1yLGRlbGV0ZSBlW25dKX0pKX0sQmU9Z2UsRmU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBXZShlLHQpeyFLZS5pc1VuZGVmaW5lZChlKSYmS2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyICRlLHplPXt0cmFuc2l0aW9uYWw6eWUsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PWZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmUpKSYmKCRlPXFlKSwkZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUodCwiQWNjZXB0IiksSmUodCwiQ29udGVudC1UeXBlIiksS2UuaXNGb3JtRGF0YShlKXx8S2UuaXNBcnJheUJ1ZmZlcihlKXx8S2UuaXNCdWZmZXIoZSl8fEtlLmlzU3RyZWFtKGUpfHxLZS5pc0ZpbGUoZSl8fEtlLmlzQmxvYihlKT9lOktlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOktlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6S2UuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEtlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksS2UudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fHplLnRyYW5zaXRpb25hbCxyPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IXImJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fG4mJktlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBCZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0tlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe3plLmhlYWRlcnNbZV09e319KSksS2UuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPUtlLm1lcmdlKEZlKX0pKTt2YXIgWWU9emUsVmU9TCxHZT1ZZSxYZT1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sWmU9TCxRZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpc3x8R2U7cmV0dXJuIFZlLmZvckVhY2gociwoZnVuY3Rpb24ocil7ZT1yLmNhbGwobixlLHQpfSkpLGV9LGV0PVhlLHR0PVllLHJ0PURlO2Z1bmN0aW9uIG50KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBydCgiY2FuY2VsZWQiKX12YXIgaXQ9TCxvdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLHQpe3JldHVybiBpdC5pc1BsYWluT2JqZWN0KGUpJiZpdC5pc1BsYWluT2JqZWN0KHQpP2l0Lm1lcmdlKGUsdCk6aXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZSh7fSx0KTppdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKGVbcl0sdFtyXSl9ZnVuY3Rpb24gbyhlKXtpZighaXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIG4odm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKHZvaWQgMCx0W3JdKX1mdW5jdGlvbiBhKHIpe3JldHVybiByIGluIHQ/bihlW3JdLHRbcl0pOnIgaW4gZT9uKHZvaWQgMCxlW3JdKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGl0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxuPXQoZSk7aXQuaXNVbmRlZmluZWQobikmJnQhPT1hfHwocltlXT1uKX0pKSxyfSxzdD0iMC4yNi4xIixhdD1zdCxjdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y3RbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciB1dD17fTtjdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2F0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIXV0W2ldJiYodXRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLGksbyl9fTt2YXIgbHQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpjdH0saHQ9TCxkdD1qLGZ0PUsscHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG50KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1RZS5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1aZS5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLFplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8dHQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG50KGUpLHQuZGF0YT1RZS5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBldCh0KXx8KG50KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9UWUuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sZ3Q9b3QseXQ9bHQsdnQ9eXQudmFsaWRhdG9ycztmdW5jdGlvbiBtdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGZ0LHJlc3BvbnNlOm5ldyBmdH19bXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9Z3QodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgcj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1yJiZ5dC5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnZ0LnRyYW5zaXRpb25hbCh2dC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbil9LCExKTt2YXIgbj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsbi51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3B0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsbiksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7bi5sZW5ndGg7KXt2YXIgdT1uLnNoaWZ0KCksbD1uLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz1wdChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LG10LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z3QodGhpcy5kZWZhdWx0cyxlKSxkdChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxodC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChndChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGh0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGd0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB3dD1tdCxfdD1EZTtmdW5jdGlvbiBidChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYoci5fbGlzdGVuZXJzKXt2YXIgdCxuPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PG47dCsrKXIuX2xpc3RlbmVyc1t0XShlKTtyLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSh0KX0sbn0sZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgX3QoZSksdChyLnJlYXNvbikpfSkpfWJ0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGJ0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGJ0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sYnQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgYnQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBTdD1idCxrdD1MLEV0PUwsUnQ9UixUdD13dCxBdD1vdDt2YXIgQ3Q9ZnVuY3Rpb24gZSh0KXt2YXIgcj1uZXcgVHQodCksbj1SdChUdC5wcm90b3R5cGUucmVxdWVzdCxyKTtyZXR1cm4gRXQuZXh0ZW5kKG4sVHQucHJvdG90eXBlLHIpLEV0LmV4dGVuZChuLHIpLG4uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBlKEF0KHQscikpfSxufShZZSk7Q3QuQXhpb3M9VHQsQ3QuQ2FuY2VsPURlLEN0LkNhbmNlbFRva2VuPVN0LEN0LmlzQ2FuY2VsPVhlLEN0LlZFUlNJT049c3QsQ3QuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sQ3Quc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sQ3QuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBrdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sRS5leHBvcnRzPUN0LEUuZXhwb3J0cy5kZWZhdWx0PUN0O3ZhciBEdCxQdD1FLmV4cG9ydHM7bGV0IE90PUR0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVB0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IER0KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1QdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1QdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiBEdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBEdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPUR0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntEdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O090LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLE90PUR0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sT3QpO2NsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIgVXQ9W10sSHQ9W10sTHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksTXQ9ITE7ZnVuY3Rpb24gTnQoKXtNdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpVXRbdF09ZVt0XSxIdFtlLmNoYXJDb2RlQXQodCldPXQ7SHRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLEh0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBqdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goVXRbKGk9bik+PjE4JjYzXStVdFtpPj4xMiY2M10rVXRbaT4+NiY2M10rVXRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHh0KGUpe3ZhciB0O010fHxOdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1yLW47YTxjO2ErPXMpby5wdXNoKGp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9VXRbdD4+Ml0saSs9VXRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1VdFt0Pj4xMF0saSs9VXRbdD4+NCY2M10saSs9VXRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBxdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsaD1yP2ktMTowLGQ9cj8tMToxLGY9ZVt0K2hdO2ZvcihoKz1kLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2hdLGgrPWQsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPW47bD4wO3M9MjU2KnMrZVt0K2hdLGgrPWQsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBLdChlLHQscixuLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGg9bD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMraD49MT9kL2M6ZCpNYXRoLnBvdygyLDEtaCkpKmM+PTImJihzKyssYy89MikscytoPj1sPyhhPTAscz1sKTpzK2g+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWgpOihhPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbcitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW3IrZi1wXXw9MTI4Kmd9dmFyIEp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUp0LmNhbGwoZSl9O3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Si5UWVBFRF9BUlJBWV9TVVBQT1JUfHxKLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEZ0PVd0KCk7ZnVuY3Rpb24gV3QoKXtyZXR1cm4genQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gJHQoZSx0KXtpZihXdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz16dC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgenQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24genQoZSx0LHIpe2lmKCEoenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHp0KSlyZXR1cm4gbmV3IHp0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIEd0KHRoaXMsZSl9cmV0dXJuIFl0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFl0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7enQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189enQucHJvdG90eXBlOmU9WHQoZSx0KTtyZXR1cm4gZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKTtpZighenQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGVyKHQsciksaT0oZT0kdChlLG4pKS53cml0ZSh0LHIpO2khPT1uJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihRdCh0KSl7dmFyIHI9MHxadCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT0kdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/JHQoZSwwKTpYdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZCdCh0LmRhdGEpKXJldHVybiBYdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFZ0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gR3QoZSx0KXtpZihWdCh0KSxlPSR0KGUsdDwwPzA6MHxadCh0KSksIXp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxadCh0Lmxlbmd0aCk7ZT0kdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gWnQoZSl7aWYoZT49V3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrV3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIGVyKGUsdCl7aWYoUXQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEFyKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gQXIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdHIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4geXIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGRyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gcHIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGdyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGhyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHJyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gbnIoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXp0LmZyb20odCxuKSksUXQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTppcihlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTppcihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gaXIoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixyLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPXI7bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKHIrYz5hJiYocj1hLWMpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBoPSEwLGQ9MDtkPGM7ZCsrKWlmKHUoZSxvK2QpIT09dSh0LGQpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gb3IoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBEcihBcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBhcihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBjcihlLHQscixuKXtyZXR1cm4gYXIoZSx0LHIsbil9ZnVuY3Rpb24gdXIoZSx0LHIsbil7cmV0dXJuIERyKENyKHQpLGUscixuKX1mdW5jdGlvbiBscihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBocihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/eHQoZSk6eHQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBkcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsaD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsaD0xKTpsPjY1NTM1JiYobC09NjU1MzYsbi5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksbi5wdXNoKGwpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PWZyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1mcikpO3JldHVybiByfShuKX16dC5wb29sU2l6ZT04MTkyLHp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz16dC5wcm90b3R5cGUsZX0senQuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFl0KG51bGwsZSx0LHIpfSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoenQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx6dC5fX3Byb3RvX189VWludDhBcnJheSksenQuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gVnQodCksdDw9MD8kdChlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuPyR0KGUsdCkuZmlsbChyLG4pOiR0KGUsdCkuZmlsbChyKTokdChlLHQpfShudWxsLGUsdCxyKX0senQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gR3QobnVsbCxlKX0senQuaXNCdWZmZXI9UHIsenQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFRdChlKXx8IVF0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSx6dC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx6dC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighQnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4genQuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj16dC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG89ZVtyXTtpZighUXQobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSx6dC5ieXRlTGVuZ3RoPWVyLHp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsenQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Milycih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClycih0aGlzLHQsdCszKSxycih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KXJyKHRoaXMsdCx0KzcpLHJyKHRoaXMsdCsxLHQrNikscnIodGhpcyx0KzIsdCs1KSxycih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9kcih0aGlzLDAsZSk6dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx6dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09enQuY29tcGFyZSh0aGlzLGUpfSx6dC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSx6dC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQscixuLGkpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PWUuc2xpY2UodCxyKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LHp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSx6dC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5yKHRoaXMsZSx0LHIsITApfSx6dC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCExKX0senQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBvcih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBzcih0aGlzLGUsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gYXIodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gY3IodGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB1cih0aGlzLGUsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBmcj00MDk2O2Z1bmN0aW9uIHByKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ3IoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIHlyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9VHIoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gdnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBtcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gd3IoZSx0LHIsbixpLG8pe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gX3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIGJyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFNyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24ga3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsNCksS3QoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gRXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsOCksS3QoZSx0LHIsbiw1Miw4KSxyKzh9enQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IHp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSx6dC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSx6dC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0senQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0senQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LHp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSx6dC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsMjMsNCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITAsNTIsOCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsNTIsOCl9LHp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fHdyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDI1NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0senQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDEsMTI3LC0xMjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpfcih0aGlzLGUsdCwhMCksdCsyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITAscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGksbz1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK3JdO2Vsc2UgaWYobzwxZTN8fCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KHIscitvKSx0KTtyZXR1cm4gb30senQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXp0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPHI7KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPVF0KGUpP2U6QXIobmV3IHp0KGUsbikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288ci10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgUnI9L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gVHIoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEFyKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPG47KytzKXtpZigocj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PW4peyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBDcihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscixuLGksbyxzO010fHxOdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyBMdCgzKmEvNC1vKSxuPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAscj0wO3Q8bjt0Kz00LHIrPTMpaT1IdFtlLmNoYXJDb2RlQXQodCldPDwxOHxIdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfEh0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxIdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1IdFtlLmNoYXJDb2RlQXQodCldPDwyfEh0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1IdFtlLmNoYXJDb2RlQXQodCldPDwxMHxIdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8SHRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoUnIsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIERyKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8T3IoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmT3IoZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIElyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjp6dCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSx6dC5hbGxvYygrZSl9LGlzQnVmZmVyOlByLGtNYXhMZW5ndGg6RnR9KSxVcj17ZXhwb3J0czp7fX0sSHI9e30sTHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KExyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxMci5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dCU0O2lmKCFyKXJldHVybiBlO3ZhciBuPXQsaT00LXIsbz10K2kscz16dC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLG4rKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEhyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTXI9THI7ZnVuY3Rpb24gTnIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5pc0J1ZmZlcihlKT94cihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6eHIoenQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLE1yLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgcXIsS3I9TnI7S3IuZW5jb2RlPU5yLEtyLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLHp0LmZyb20oanIoZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxLci50b0Jhc2U2ND1qcixLci5mcm9tQmFzZTY0PXhyLEtyLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiB6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKX0sSHIuZGVmYXVsdD1LciwocXI9VXIpLmV4cG9ydHM9SHIuZGVmYXVsdCxxci5leHBvcnRzLmRlZmF1bHQ9cXIuZXhwb3J0czt2YXIgSnI9VXIuZXhwb3J0cyxCcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsaCxkLGYscCxnLHksdixtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sYz1yWzJdLHU9clszXSxsPXJbNF0saD1yWzVdLGQ9cls2XSxmPXJbN10sZz0wO2c8MTY7ZysrKXk9aSs0KmcsZVtnXT0oMjU1Jm5beV0pPDwyNHwoMjU1Jm5beSsxXSk8PDE2fCgyNTUmblt5KzJdKTw8OHwyNTUmblt5KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXY9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oditlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXY9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmhefmwmZCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWQsZD1oLGg9bCxsPXUrdnwwLHU9YyxjPWEsYT1zLHM9dittfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPWMsclszXSs9dSxyWzRdKz1sLHJbNV0rPWgscls2XSs9ZCxyWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09biYmKG49MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksaD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksZD1oLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KG4pLHA9MDtwPG47cCsrKWQ9PT1oLmxlbmd0aCYmKGEoaCxsLHIsbyksZD0wKSxmW3BdPWhbZCsrXTtyZXR1cm4gbC5jbGVhbigpLGguZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxyLG4pe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkobiksaD0wO2gqczxuO2grKyl7dmFyIGQ9aCsxO2FbMF09ZD4+PjI0JjI1NSxhWzFdPWQ+Pj4xNiYyNTUsYVsyXT1kPj4+OCYyNTUsYVszXT1kPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9cjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZoKnMrZjxuO2YrKylsW2gqcytmXT1jW2ZdfWZvcihoPTA7aDxzO2grKyljW2hdPXVbaF09MDtmb3IoaD0wO2g8NDtoKyspYVtoXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfShCcik7dmFyIEZyPVMoQnIuZXhwb3J0cyksV3I9Y3J5cHRvO2Z1bmN0aW9uICRyKGUpe3RyeXtyZXR1cm4gbnVsbCE9ZSYmImJvb2xlYW4iPT10eXBlb2YgZS5leHRyYWN0YWJsZSYmInN0cmluZyI9PXR5cGVvZiBlLmFsZ29yaXRobS5uYW1lJiYic3RyaW5nIj09dHlwZW9mIGUudHlwZX1jYXRjaChlKXtyZXR1cm4hMX19Y29uc3QgenI9bmV3IFRleHRFbmNvZGVyLFlyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBWcj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9WXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT5uZXcgVWludDhBcnJheShhdG9iKGUpLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpKSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgR3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyBYciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIFpyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIscj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIFFyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgZW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIHRuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3Mgcm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBubiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBzbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBhbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gY24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiB1bigpe3RyeXtyZXR1cm4gdm9pZCAwIT09ZmUudmVyc2lvbnMubm9kZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbG4oZSx0PSJhbGdvcml0aG0ubmFtZSIpe3JldHVybiBuZXcgVHlwZUVycm9yKGBDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICR7dH0gbXVzdCBiZSAke2V9YCl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiBkbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBmbihlLHQsLi4ucil7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBsbigiSE1BQyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBsbigiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGRuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBsbigiUlNBLVBTUyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSB1bigpJiYiRWREU0EiOmlmKCJOT0RFLUVEMjU1MTkiIT09ZS5hbGdvcml0aG0ubmFtZSYmIk5PREUtRUQ0NDgiIT09ZS5hbGdvcml0aG0ubmFtZSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5IG9yIE5PREUtRUQ0NDgiKTticmVhaztjYXNlIGNuKCkmJiJFZERTQSI6aWYoIWhuKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBsbigiRUNEU0EiKTtjb25zdCByPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1yKXRocm93IGxuKHIsImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgcj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke3J9LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLHIpfXZhciBwbj0oZSwuLi50KT0+e2xldCByPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/cis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOnIrPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9yKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/cis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYocis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxyfSxnbj1lPT4kcihlKTtjb25zdCB5bj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIHZuKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IHI9ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yfWNvbnN0IG1uPWFzeW5jIGU9Pnt2YXIgdCxyO2NvbnN0e2FsZ29yaXRobTpuLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGVuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlKGNuKCl8fHVuKCkpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtzd2l0Y2goZS5jcnYpe2Nhc2UiRWQyNTUxOSI6dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UgdW4oKSYmIkVkNDQ4Ijp0PXtuYW1lOiJOT0RFLUVENDQ4IixuYW1lZEN1cnZlOiJOT0RFLUVENDQ4In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6cn19KGUpLG89W24sbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KHI9ZS5rZXlfb3BzKSYmdm9pZCAwIT09cj9yOmldO2lmKCJQQktERjIiPT09bi5uYW1lKXJldHVybiBXci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLFZyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxXci5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IHduPShlLHQscik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4sIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiYCl9fSkodCk6KChlLHQpPT57aWYoIWduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IocG4oZSwuLi55bikpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiYCk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCl9KSh0LHIpfTtjb25zdCBfbj1hc3luYyhlLHQscixuKT0+e2NvbnN0IGk9YXdhaXQgZnVuY3Rpb24oZSx0LHIpe2lmKCRyKHQpKXJldHVybiBmbih0LGUsciksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4pKTtyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOmBTSEEtJHtlLnNsaWNlKC0zKX1gLG5hbWU6IkhNQUMifSwhMSxbcl0pfXRocm93IG5ldyBUeXBlRXJyb3IocG4odCwuLi55biwiVWludDhBcnJheSIpKX0oZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpyfT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V9IHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXJgKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCByPWBTSEEtJHtlLnNsaWNlKC0zKX1gO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZShjbigpfHx1bigpKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOm59PXQ7cmV0dXJue25hbWU6bixuYW1lZEN1cnZlOm59O2RlZmF1bHQ6dGhyb3cgbmV3IGVuKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFdyLnN1YnRsZS52ZXJpZnkobyxpLHIsbil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBibihlLHQscil7dmFyIG47aWYoIXZuKGUpKXRocm93IG5ldyB0bigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgdG4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgdG4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhdm4oZS5oZWFkZXIpKXRocm93IG5ldyB0bigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVZyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKFlyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgcjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKHImJjAhPT1yLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoci5oYXMoZSkpcmV0dXJuITE7ci5hZGQoZSl9ZWxzZSByPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1uLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIW58fHZvaWQgMD09PW4uY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShuLmNyaXQpfHwwPT09bi5jcml0Lmxlbmd0aHx8bi5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PXI/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMociksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIG4uY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBlbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09blt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KG4uY3JpdCl9KHRuLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1yP3ZvaWQgMDpyLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyB0bignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyB0bignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1yJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixyLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgUXIoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSx3bihjLHQsInZlcmlmeSIpO2NvbnN0IGg9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KHpyLmVuY29kZShudWxsIT09KG49ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1uP246IiIpLHpyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP3pyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksZD1WcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IF9uKGMsdCxkLGgpKXRocm93IG5ldyBhbjtsZXQgZjtmPWE/VnIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgU249ODY0MDAsa249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIEVuPWU9Pntjb25zdCB0PWtuLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKHIqU24pO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IFJuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBUbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFJuKGUudHlwKSE9PVJuKG4pKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoWXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIXZuKGkpKXRocm93IG5ldyBybigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1yO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiByLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1FbihyLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1yLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6aH09cixkPShmPWh8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYodm9pZCAwIT09aS5pYXR8fHIubWF4VG9rZW5BZ2Upe2lmKCJudW1iZXIiIT10eXBlb2YgaS5pYXQpdGhyb3cgbmV3IFhyKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMD09PWkuZXhwJiZpLmlhdD5kK2wpdGhyb3cgbmV3IFhyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmQrbCl0aHJvdyBuZXcgWHIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgWHIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWQtbCl0aHJvdyBuZXcgWnIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihyLm1heFRva2VuQWdlKXtjb25zdCBlPWQtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIHIubWF4VG9rZW5BZ2U/ci5tYXhUb2tlbkFnZTpFbihyLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IFpyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBBbihlLHQscil7dmFyIG47Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPVlyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB0bigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpuLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdG4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IGJuKHtwYXlsb2FkOmkscHJvdGVjdGVkOm4sc2lnbmF0dXJlOm99LHQsciksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxyKTtpZigobnVsbD09PShuPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBybigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlRuKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBDbihlKXtyZXR1cm4gdm4oZSl9Y2xhc3MgRG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShDbil9KGUpKXRocm93IG5ldyBubigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpyLGtpZDpufT17Li4uZSwuLi50LmhlYWRlcn0saT10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9ZS5rdHk9PT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KHIpO2lmKHQmJiJzdHJpbmciPT10eXBlb2YgbiYmKHQ9bj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1yPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PXImJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKHIpe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6byxsZW5ndGg6c309aTtpZigwPT09cyl0aHJvdyBuZXcgb247aWYoMSE9PXMpdGhyb3cgbmV3IHNuO2NvbnN0IGE9dGhpcy5fY2FjaGVkLmdldChvKXx8dGhpcy5fY2FjaGVkLnNldChvLHt9KS5nZXQobyk7aWYodm9pZCAwPT09YVtyXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoIXZuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/bW4oey4uLmUsYWxnOnQsZXh0OiExfSk6VnIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IGVuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIG1uKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ubyxleHQ6ITB9LHIpO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgbm4oIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7YVtyXT1lfXJldHVybiBhW3JdfX12YXIgUG49e2V4cG9ydHM6e319LE9uPXtleHBvcnRzOnt9fSxJbj1rKElyKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciByPUluLG49ci5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gbihlLHQscil9bi5mcm9tJiZuLmFsbG9jJiZuLmFsbG9jVW5zYWZlJiZuLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9cjooaShyLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGkobixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBuKGUsdCxyKX0sby5hbGxvYz1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1uKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygcj9pLmZpbGwodCxyKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gci5TbG93QnVmZmVyKGUpfX0oT24sT24uZXhwb3J0cyk7dmFyIFVuPTY1NTM2LEhuPTQyOTQ5NjcyOTU7dmFyIExuPU9uLmV4cG9ydHMuQnVmZmVyLE1uPWIuY3J5cHRvfHxiLm1zQ3J5cHRvO01uJiZNbi5nZXRSYW5kb21WYWx1ZXM/UG4uZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+SG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgcj1Mbi5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5Vbilmb3IodmFyIG49MDtuPGU7bis9VW4pTW4uZ2V0UmFuZG9tVmFsdWVzKHIuc2xpY2UobixuK1VuKSk7ZWxzZSBNbi5nZXRSYW5kb21WYWx1ZXMocik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxyKX0pKTtyZXR1cm4gcn06UG4uZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIE5uPVBuLmV4cG9ydHM7Y2xhc3Mgam57YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBKci5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gSnIuZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4genQuZnJvbShGcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBObihlKX12ZXJpZnlKd3QoZSx0LHIsbixpLG8scyl7cmV0dXJuIEFuKGUsKGE9e2tleXM6W3RdfSxEbi5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IERuKGEpKSkse2FsZ29yaXRobXM6cixhdWRpZW5jZTpuLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKTt2YXIgYX19Y29uc3QgeG49c2VsZjtsZXQgcW47eG4ub25tZXNzYWdlPSh7ZGF0YTp0LHBvcnRzOnJ9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvLHM7Y29uc3QgYz1yWzBdO2lmKHQudHlwZT09PWd8fHFuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgZzp0cnl7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSk7cW49eWllbGQodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgSXQsbj1uZXcgam4saT1uZXcgcChyLG4pO3lpZWxkIGkuaW5pdGlhbGl6ZSh0KTtjb25zdCBvPW5ldyB3KGkpLHM9aS5nZXREYXRhTGF5ZXIoKSxjPU90LmdldEluc3RhbmNlKCk7KG51bGw9PWM/dm9pZCAwOmMuaW5pdCkmJih5aWVsZCBjLmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgaS5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSk7Y29uc3QgdT10PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcixuLGM7bGV0IHU9ITAsbD0hMTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShuPW51bGw9PT0ocj15aWVsZCBzLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09bj9uOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0oYz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnMuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihtLEpTT04uc3RyaW5naWZ5KHQpKSx1fHxsP2kucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxsPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgaS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIGgoKTtyZXR1cm4gZSYmKHlpZWxkIHUoZSkpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSksaD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntjLmRpc2FibGVIYW5kbGVyJiZjLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5lbmFibGVIYW5kbGVyJiZjLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9PmkuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgcj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLG49eWllbGQgaS5nZXRQS0NFQ29kZShyKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6bn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgaS5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89bnVsbD09cj92b2lkIDA6ci51cmwpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXt1PSEwO2JyZWFrfXJldHVybiB1P2MucmVxdWVzdChyKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsbixpO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgbCgpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFItU0UwMSIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PW4/bjoiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0oaT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT1pP2k6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihlKXJldHVybiBjLnJlcXVlc3QocikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUi1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaHR0cFJlcXVlc3RBbGw6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSEwO2Zvcihjb25zdCBlIG9mIHIpe2xldCByPSExO2Zvcihjb25zdCBhIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGEmJihudWxsPT09KG89ZS51cmwpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoYSkpKXtyPSEwO2JyZWFrfWlmKCFyKXt1PSExO2JyZWFrfX1jb25zdCBoPVtdO3JldHVybiB1PyhyLmZvckVhY2goKGU9PntoLnB1c2goYy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09Yz92b2lkIDA6Yy5hbGwpJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixuO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKSl7bGV0IGU7dHJ5e2U9eWllbGQgbCgpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFJBLVNFMDEiLG51bGwhPT0ocj1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1yP3I6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KG49bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSlyZXR1cm4gYy5hbGwmJmMuYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfXJldHVybiBQcm9taXNlLnJlamVjdCh0KX0pKSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5pLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjpsLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxyLG4sYyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgcy5nZXRDb25maWdEYXRhKCk7cmV0dXJuIG4mJmUuZW5hYmxlUEtDRSYmKHlpZWxkIGkuc2V0UEtDRUNvZGUobixudWxsIT1jP2M6IiIpKSx0P2kucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9cj9yOiIiLG51bGwhPWM/YzoiJyIpLnRoZW4oKCgpPT4oby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksaS5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnUscmV2b2tlQWNjZXNzVG9rZW46KCk9PmkucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgcy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgaS5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBpLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKHIpLHFuLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soQm4pLHFuLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhLbikscW4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soSm4pLGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6cW4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6cW4ucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0obj1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvZGUsbnVsbD09PShpPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc2Vzc2lvblN0YXRlLG51bGw9PT0obz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnBrY2UsbnVsbD09PShzPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdGUpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOnFuLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOnFuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnFuLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpxbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0QmFzaWNVc2VySW5mbygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6cW4uZW5hYmxlSHR0cEhhbmRsZXIoKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpxbi5kaXNhYmxlSHR0cEhhbmRsZXIoKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9zaWduX291dF91cmwiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UocW4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzZXRfc2Vzc2lvbl9zdGF0ZSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnVwZGF0ZUNvbmZpZyhudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2RlZmF1bHQ6bnVsbD09Y3x8Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYSgiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgS249KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sSm49ZT0+e3huLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxCbj0oKT0+e3huLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX07cmV0dXJue319KCk7Cgo=",null,!1,function(t){return Tn=Tn||function(t,e,l){var n=void 0===e?null:e,i=function(t,e){var l=atob(t);if(e){for(var n=new Uint8Array(l.length),i=0,c=l.length;i<c;++i)n[i]=l.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return l}(t,void 0!==l&&l),c=i.indexOf("\n",10)+1,o=i.substring(c)+(n?"//# sourceMappingURL="+n:""),a=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(a)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsO2lmKCFyKXRocm93IG5ldyBhKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL2F1dGhvcml6ZWAsZW5kX3Nlc3Npb25fZW5kcG9pbnQ6YCR7cn0vb2lkYy9sb2dvdXRgLGlzc3VlcjpgJHtyfS9vYXV0aDIvdG9rZW5gLGp3a3NfdXJpOmAke3J9L29hdXRoMi9qd2tzYCxjaGVja19zZXNzaW9uX2lmcmFtZTpgJHtyfS9vaWRjL2NoZWNrc2Vzc2lvbmAscmV2b2NhdGlvbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvcmV2b2tlYCx0b2tlbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvdG9rZW5gLHVzZXJpbmZvX2VuZHBvaW50OmAke3J9L29hdXRoMi91c2VyaW5mb2B9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksZSl9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCkpLmp3a3NfdXJpLHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTX0FVVEhfSEVMUEVSLVZJVC1ORjAxIiwiSldLUyBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gSldLUyBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBKV0tTIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2xldCBuO3RyeXtuPXlpZWxkIGZldGNoKHQse2NyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW59KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULU5FMDIiLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKDIwMCE9PW4uc3RhdHVzfHwhbi5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0ICgke24uc3RhdHVzVGV4dH0pLmAseWllbGQgbi5qc29uKCkpO2NvbnN0IGk9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLmlzc3Vlcix7a2V5czpvfT15aWVsZCBuLmpzb24oKSxjPXlpZWxkIHRoaXMuX2NyeXB0b0hlbHBlci5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSxvKTtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmlzVmFsaWRJZFRva2VuKGUsYywoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELG51bGwhPWk/aToiIix0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSl9KSl9Z2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkscz1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChvKSxhPW51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPW8uZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixsPW51bGwhPT0obj1vLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGg9dSYmbD9gJHt1fSAke2x9YDp1fHxsfHwiIixkPW51bGwhPT0oaT1vLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWk/aTpoO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpkLHRlbmFudERvbWFpbjpzLHVzZXJuYW1lOmF9LGMuZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKG8pKX1yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCB0PSJvcGVuaWQiO2NvbnN0IGk9eWllbGQgdGhpcy5fY29uZmlnKCksbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocik7cmV0dXJuIGkuc2NvcGUmJmkuc2NvcGUubGVuZ3RoPjAmJihpLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8aS5zY29wZS5wdXNoKCJvcGVuaWQiKSx0PWkuc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsby5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsdGhpcy5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oby5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIsdCkucmVwbGFjZSgie3tjbGllbnRJRH19IixpLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KG49aS5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT1uP246IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoZSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpfSkpfWhhbmRsZVRva2VuUmVzcG9uc2UoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItSFRSLU5FMDEiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdCAoJHtlLnN0YXR1c1RleHR9KS5gLHlpZWxkIGUuanNvbigpKTtjb25zdCBuPXlpZWxkIGUuanNvbigpO2lmKG4uY3JlYXRlZF9hdD0obmV3IERhdGUpLmdldFRpbWUoKSwoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4obi5pZF90b2tlbikudGhlbigoKCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKTtjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpKSk7e2NvbnN0IGU9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKSxQcm9taXNlLnJlc29sdmUoZSl9fSkpfWdlbmVyYXRlUEtDRUtleShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGEoZSksbj1bXTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57ZS5zdGFydHNXaXRoKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSYmbi5wdXNoKGUpfSkpO2NvbnN0IGk9bi5zb3J0KCkucG9wKCk7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KG51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT1yP3I6Ii0xIikrMX1gfSkpfX1jbGFzcyBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NyeXB0b1V0aWxzPWV9Z2V0Q29kZVZlcmlmaWVyKCl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5nZW5lcmF0ZVJhbmRvbUJ5dGVzKDMyKSl9Z2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmhhc2hTaGEyNTYoZSkpfWdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UodGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUpKTtmb3IoY29uc3QgZSBvZiB0KWlmKHIua2lkPT09ZS5raWQpcmV0dXJuIGU7dGhyb3cgbmV3IGEoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrci5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChlPT5lLmtpZCkpLmpvaW4oIiwgIikpfWlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxzKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLHIsbixpLHMpLnRoZW4oKGU9PmU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgYSgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSkpKX1kZWNvZGVJRFRva2VuKGUpe3RyeXtjb25zdCB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuX2NyeXB0b1V0aWxzPXIsdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBsKHIpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyB1KGUsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUscil7dmFyIG4saSxvO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR0FVLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9bmV3IFVSTCh0KTt1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjbGllbnRfaWQiLHMuY2xpZW50SUQpO2xldCBsPSJvcGVuaWQiO3Muc2NvcGUmJnMuc2NvcGUubGVuZ3RoPjAmJihzLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8cy5zY29wZS5wdXNoKCJvcGVuaWQiKSxsPXMuc2NvcGUuam9pbigiICIpKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIixsKSx1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlZGlyZWN0X3VyaSIscy5zaWduSW5SZWRpcmVjdFVSTCkscy5yZXNwb25zZU1vZGUmJnUuc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfbW9kZSIscy5yZXNwb25zZU1vZGUpO2NvbnN0IGg9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KHIpO2lmKHMuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KG49dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxlLHIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXMucHJvbXB0JiZ1LnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIscy5wcm9tcHQpO2NvbnN0IGQ9ZTtpZihkKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMoZCkpIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSYmdS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdC50b1N0cmluZygpKTtyZXR1cm4gdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzdGF0ZSIsYy5nZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oaCxkP251bGw9PT0obz1kLnN0YXRlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b1N0cmluZygpOiIiKSksdS50b1N0cmluZygpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7ciYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIscixpKSk7Y29uc3QgdT1bXTt1LnB1c2goYGNsaWVudF9pZD0ke28uY2xpZW50SUR9YCksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmdS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7by5jbGllbnRTZWNyZXR9YCk7Y29uc3QgbD1lO2xldCBoO3UucHVzaChgY29kZT0ke2x9YCksdS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLHUucHVzaChgcmVkaXJlY3RfdXJpPSR7by5zaWduSW5SZWRpcmVjdFVSTH1gKSxvLmVuYWJsZVBLQ0UmJih1LnB1c2goYGNvZGVfdmVyaWZpZXI9JHt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksaSl9YCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpKTt0cnl7aD15aWVsZCBmZXRjaCh0LHtib2R5OnUuam9pbigiJiIpLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLGBSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke2guc3RhdHVzVGV4dH1gLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCksbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIW4ucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKGBjbGllbnRfaWQ9JHtyLmNsaWVudElEfWApLGkucHVzaChgcmVmcmVzaF90b2tlbj0ke24ucmVmcmVzaF90b2tlbn1gKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHIuY2xpZW50U2VjcmV0JiZyLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke3IuY2xpZW50U2VjcmV0fWApO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7by5zdGF0dXNUZXh0fWAseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPVtdO2xldCBpO24ucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxuLnB1c2goYHRva2VuPSR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuYWNjZXNzX3Rva2VufWApLG4ucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6bi5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoJHtpLnN0YXR1c1RleHR9KS5gLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6bi50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSxuXSk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhuLHIpO3JldHVybmAke2V9PSR7dH1gfSkpKSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShyKSkuYWNjZXNzX3Rva2VufWB9KSk7Y29uc3QgaD17Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGQ7dHJ5e2Q9eWllbGQgZmV0Y2gobyxoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09ZC5zdGF0dXN8fCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoJHtkLnN0YXR1c1RleHR9KWAseWllbGQgZC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxyKTpQcm9taXNlLnJlc29sdmUoeWllbGQgZC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxyPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChlPT57dm9pZCAwIT09cltlXSYmIiIhPT1yW2VdJiZudWxsIT09cltlXXx8ZGVsZXRlIHJbZV19KSksbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksciksbn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj10LndlbGxLbm93bkVuZHBvaW50O2lmKHIpe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKHIpLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLHIsbixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShyPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShyPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBjPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFjfHwwPT09Yy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTChlKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksdH0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSkscil9KSl9c2V0UEtDRUNvZGUoZSxyLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxlLG4pfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBke2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBkKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGYpLGUpLHtzY29wZTpbLi4ubnVsbCE9PShyPWYuc2NvcGUpJiZ2b2lkIDAhPT1yP3I6W10sLi4ubnVsbCE9PShpPW51bGw9PT0obj1lLnNjb3BlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1mP3ZvaWQgMDpmLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LHIpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3Jldm9rZUFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYWNjZXNzCiAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgYXV0aC5nZXRBY2Nlc3NUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKICAgICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBwYXNzZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgRmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGVwZW5kaW5nCiAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgYXR0YWNoVG9rZW46IGZhbHNlLAogICAgICAgICAqICAgZGF0YTogewogICAgICAgICAqICAgICAgIGNsaWVudF9pZDogInt7Y2xpZW50SUR9fSIsCiAgICAgICAgICogICAgICAgZ3JhbnRfdHlwZTogImFjY291bnRfc3dpdGNoIiwKICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICogICAgICAgdG9rZW46ICJ7e3Rva2VufX0iLAogICAgICAgICAqICAgfSwKICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAqICAgcmV0dXJuUmVzcG9uc2U6IHRydWUsCiAgICAgICAgICogICByZXR1cm5zU2Vzc2lvbjogdHJ1ZSwKICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50CiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzQXV0aGVudGljYXRlZAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgcGtjZSA9IGF3YWl0IGdldFBLQ0VDb2RlKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUscil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLnNldFBLQ0VDb2RlKCJwa2NlX2NvZGUiKQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zZXRQS0NFQ29kZShlLHIsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxyLG4pfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGhhcyBmYWlsZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNkaWRTaWduT3V0RmFpbAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJm59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBiYXNlVXJsOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwogICAgICAgICAqIGBgYAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWcKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IGc9ImluaXQiO3ZhciB5LHY7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0odnx8KHY9e30pKTtjb25zdCBtPSJjdXN0b21fZ3JhbnRfY29uZmlnIjtjbGFzcyB3e2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYodC5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpO2NsZWFyVGltZW91dChlKX19KSl9fWNsYXNzIF97Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19dmFyIGI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBTKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gayhlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBFPXtleHBvcnRzOnt9fSxSPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LFQ9UixBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBEKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUEuY2FsbChlKX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEkoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1BLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09QS5jYWxsKGUpfWZ1bmN0aW9uIEgoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxDKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBMPXtpc0FycmF5OkMsaXNBcnJheUJ1ZmZlcjpQLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIUQoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhRChlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUEuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmUChlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpPLGlzUGxhaW5PYmplY3Q6SSxpc1VuZGVmaW5lZDpELGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1BLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1BLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1BLmNhbGwoZSl9LGlzRnVuY3Rpb246VSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTyhlKSYmVShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUEuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpILG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7SSh0W25dKSYmSShyKT90W25dPWUodFtuXSxyKTpJKHIpP3Rbbl09ZSh7fSxyKTpDKHIpP3Rbbl09ci5zbGljZSgpOnRbbl09cn1mb3IodmFyIG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKylIKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSCh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/VCh0LHIpOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxNPUw7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgaj1mdW5jdGlvbihlLHQscil7aWYoIXQpcmV0dXJuIGU7dmFyIG47aWYociluPXIodCk7ZWxzZSBpZihNLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107TS5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKE0uaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLE0uZm9yRWFjaChlLChmdW5jdGlvbihlKXtNLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpNLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKE4odCkrIj0iK04oZSkpfSkpKX0pKSxuPWkuam9pbigiJiIpfWlmKG4pe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStufXJldHVybiBlfSx4PUw7ZnVuY3Rpb24gcSgpe3RoaXMuaGFuZGxlcnM9W119cS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhciYmci5zeW5jaHJvbm91cyxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0scS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt4LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBLPXEsSj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIEIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVz1CLCQ9RjtmdW5jdGlvbiB6KGUpe2lmKFc9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFc9PT1CfHwhVykmJnNldFRpbWVvdXQpcmV0dXJuIFc9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBXKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBXLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBXLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIEouc2V0VGltZW91dCYmKFc9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEouY2xlYXJUaW1lb3V0JiYoJD1jbGVhclRpbWVvdXQpO3ZhciBZLFY9W10sRz0hMSxYPS0xO2Z1bmN0aW9uIFooKXtHJiZZJiYoRz0hMSxZLmxlbmd0aD9WPVkuY29uY2F0KFYpOlg9LTEsVi5sZW5ndGgmJlEoKSl9ZnVuY3Rpb24gUSgpe2lmKCFHKXt2YXIgZT16KFopO0c9ITA7Zm9yKHZhciB0PVYubGVuZ3RoO3Q7KXtmb3IoWT1WLFY9W107KytYPHQ7KVkmJllbWF0ucnVuKCk7WD0tMSx0PVYubGVuZ3RofVk9bnVsbCxHPSExLGZ1bmN0aW9uKGUpe2lmKCQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoJD09PUZ8fCEkKSYmY2xlYXJUaW1lb3V0KXJldHVybiAkPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5eyQoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiAkLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gJC5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGVlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIHRlKCl7fXZhciByZT10ZSxuZT10ZSxpZT10ZSxvZT10ZSxzZT10ZSxhZT10ZSxjZT10ZTt2YXIgdWU9Si5wZXJmb3JtYW5jZXx8e30sbGU9dWUubm93fHx1ZS5tb3pOb3d8fHVlLm1zTm93fHx1ZS5vTm93fHx1ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBoZT1uZXcgRGF0ZTt2YXIgZGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07Vi5wdXNoKG5ldyBlZShlLHQpKSwxIT09Vi5sZW5ndGh8fEd8fHooUSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246cmUsYWRkTGlzdGVuZXI6bmUsb25jZTppZSxvZmY6b2UscmVtb3ZlTGlzdGVuZXI6c2UscmVtb3ZlQWxsTGlzdGVuZXJzOmFlLGVtaXQ6Y2UsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqbGUuY2FsbCh1ZSkscj1NYXRoLmZsb29yKHQpLG49TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKHItPWVbMF0sKG4tPWVbMV0pPDAmJihyLS0sbis9MWU5KSksW3Isbl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtaGUpLzFlM319LGZlPWRlLHBlPUwsZ2U9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gZS5jb25maWc9dCxyJiYoZS5jb2RlPXIpLGUucmVxdWVzdD1uLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHllPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSx2ZT1nZSxtZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gdmUobyx0LHIsbixpKX0sd2U9bWUsX2U9TCxiZT1fZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksX2UuaXNOdW1iZXIocikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLF9lLmlzU3RyaW5nKG4pJiZzLnB1c2goInBhdGg9IituKSxfZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFNlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LGtlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEVlPUwsUmU9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxUZT1MLEFlPVRlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPVRlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gQ2UoZSl7dGhpcy5tZXNzYWdlPWV9Q2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LENlLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBEZT1DZSxQZT1MLE9lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qod2UoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sSWU9YmUsVWU9aixIZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhU2UodCk/a2UoZSx0KTp0fSxMZT1mdW5jdGlvbihlKXt2YXIgdCxyLG4saT17fTtyZXR1cm4gZT8oRWUuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihuPWUuaW5kZXhPZigiOiIpLHQ9RWUudHJpbShlLnN1YnN0cigwLG4pKS50b0xvd2VyQ2FzZSgpLHI9RWUudHJpbShlLnN1YnN0cihuKzEpKSx0KXtpZihpW3RdJiZSZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtyXSk6aVt0XT9pW3RdKyIsICIrcjpyfX0pKSxpKTppfSxNZT1BZSxOZT1tZSxqZT15ZSx4ZT1EZSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG4saT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfVBlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgaD1IZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGQoKXtpZihjKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TGUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6Y307T2UoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe3IoZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxVZShoLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWQ6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChkKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKHIoTmUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7cihOZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLG49ZS50cmFuc2l0aW9uYWx8fGplO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKE5lKHQsZSxuLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sUGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxNZShoKSkmJmUueHNyZkNvb2tpZU5hbWU/SWUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmUGUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFBlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihuPWZ1bmN0aW9uKGUpe2MmJihyKCFlfHxlJiZlLnR5cGU/bmV3IHhlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/bigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sS2U9TCxKZT1mdW5jdGlvbihlLHQpe3BlLmZvckVhY2goZSwoZnVuY3Rpb24ocixuKXtuIT09dCYmbi50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1yLGRlbGV0ZSBlW25dKX0pKX0sQmU9Z2UsRmU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBXZShlLHQpeyFLZS5pc1VuZGVmaW5lZChlKSYmS2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyICRlLHplPXt0cmFuc2l0aW9uYWw6eWUsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PWZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmUpKSYmKCRlPXFlKSwkZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUodCwiQWNjZXB0IiksSmUodCwiQ29udGVudC1UeXBlIiksS2UuaXNGb3JtRGF0YShlKXx8S2UuaXNBcnJheUJ1ZmZlcihlKXx8S2UuaXNCdWZmZXIoZSl8fEtlLmlzU3RyZWFtKGUpfHxLZS5pc0ZpbGUoZSl8fEtlLmlzQmxvYihlKT9lOktlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOktlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6S2UuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEtlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksS2UudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fHplLnRyYW5zaXRpb25hbCxyPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IXImJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fG4mJktlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBCZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0tlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe3plLmhlYWRlcnNbZV09e319KSksS2UuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPUtlLm1lcmdlKEZlKX0pKTt2YXIgWWU9emUsVmU9TCxHZT1ZZSxYZT1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sWmU9TCxRZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpc3x8R2U7cmV0dXJuIFZlLmZvckVhY2gociwoZnVuY3Rpb24ocil7ZT1yLmNhbGwobixlLHQpfSkpLGV9LGV0PVhlLHR0PVllLHJ0PURlO2Z1bmN0aW9uIG50KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBydCgiY2FuY2VsZWQiKX12YXIgaXQ9TCxvdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLHQpe3JldHVybiBpdC5pc1BsYWluT2JqZWN0KGUpJiZpdC5pc1BsYWluT2JqZWN0KHQpP2l0Lm1lcmdlKGUsdCk6aXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZSh7fSx0KTppdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKGVbcl0sdFtyXSl9ZnVuY3Rpb24gbyhlKXtpZighaXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIG4odm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKHZvaWQgMCx0W3JdKX1mdW5jdGlvbiBhKHIpe3JldHVybiByIGluIHQ/bihlW3JdLHRbcl0pOnIgaW4gZT9uKHZvaWQgMCxlW3JdKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGl0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxuPXQoZSk7aXQuaXNVbmRlZmluZWQobikmJnQhPT1hfHwocltlXT1uKX0pKSxyfSxzdD0iMC4yNi4xIixhdD1zdCxjdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y3RbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciB1dD17fTtjdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2F0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIXV0W2ldJiYodXRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLGksbyl9fTt2YXIgbHQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpjdH0saHQ9TCxkdD1qLGZ0PUsscHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG50KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1RZS5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1aZS5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLFplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8dHQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG50KGUpLHQuZGF0YT1RZS5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBldCh0KXx8KG50KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9UWUuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sZ3Q9b3QseXQ9bHQsdnQ9eXQudmFsaWRhdG9ycztmdW5jdGlvbiBtdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGZ0LHJlc3BvbnNlOm5ldyBmdH19bXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9Z3QodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgcj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1yJiZ5dC5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnZ0LnRyYW5zaXRpb25hbCh2dC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbil9LCExKTt2YXIgbj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsbi51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3B0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsbiksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7bi5sZW5ndGg7KXt2YXIgdT1uLnNoaWZ0KCksbD1uLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz1wdChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LG10LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z3QodGhpcy5kZWZhdWx0cyxlKSxkdChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxodC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChndChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGh0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGd0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB3dD1tdCxfdD1EZTtmdW5jdGlvbiBidChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYoci5fbGlzdGVuZXJzKXt2YXIgdCxuPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PG47dCsrKXIuX2xpc3RlbmVyc1t0XShlKTtyLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSh0KX0sbn0sZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgX3QoZSksdChyLnJlYXNvbikpfSkpfWJ0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGJ0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGJ0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sYnQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgYnQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBTdD1idCxrdD1MLEV0PUwsUnQ9UixUdD13dCxBdD1vdDt2YXIgQ3Q9ZnVuY3Rpb24gZSh0KXt2YXIgcj1uZXcgVHQodCksbj1SdChUdC5wcm90b3R5cGUucmVxdWVzdCxyKTtyZXR1cm4gRXQuZXh0ZW5kKG4sVHQucHJvdG90eXBlLHIpLEV0LmV4dGVuZChuLHIpLG4uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBlKEF0KHQscikpfSxufShZZSk7Q3QuQXhpb3M9VHQsQ3QuQ2FuY2VsPURlLEN0LkNhbmNlbFRva2VuPVN0LEN0LmlzQ2FuY2VsPVhlLEN0LlZFUlNJT049c3QsQ3QuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sQ3Quc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sQ3QuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBrdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sRS5leHBvcnRzPUN0LEUuZXhwb3J0cy5kZWZhdWx0PUN0O3ZhciBEdCxQdD1FLmV4cG9ydHM7bGV0IE90PUR0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVB0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IER0KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1QdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1QdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiBEdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBEdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPUR0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntEdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O090LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLE90PUR0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sT3QpO2NsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIgVXQ9W10sSHQ9W10sTHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksTXQ9ITE7ZnVuY3Rpb24gTnQoKXtNdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpVXRbdF09ZVt0XSxIdFtlLmNoYXJDb2RlQXQodCldPXQ7SHRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLEh0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBqdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goVXRbKGk9bik+PjE4JjYzXStVdFtpPj4xMiY2M10rVXRbaT4+NiY2M10rVXRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHh0KGUpe3ZhciB0O010fHxOdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1yLW47YTxjO2ErPXMpby5wdXNoKGp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9VXRbdD4+Ml0saSs9VXRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1VdFt0Pj4xMF0saSs9VXRbdD4+NCY2M10saSs9VXRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBxdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsaD1yP2ktMTowLGQ9cj8tMToxLGY9ZVt0K2hdO2ZvcihoKz1kLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2hdLGgrPWQsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPW47bD4wO3M9MjU2KnMrZVt0K2hdLGgrPWQsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBLdChlLHQscixuLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGg9bD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMraD49MT9kL2M6ZCpNYXRoLnBvdygyLDEtaCkpKmM+PTImJihzKyssYy89MikscytoPj1sPyhhPTAscz1sKTpzK2g+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWgpOihhPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbcitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW3IrZi1wXXw9MTI4Kmd9dmFyIEp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUp0LmNhbGwoZSl9O3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Si5UWVBFRF9BUlJBWV9TVVBQT1JUfHxKLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEZ0PVd0KCk7ZnVuY3Rpb24gV3QoKXtyZXR1cm4genQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gJHQoZSx0KXtpZihXdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz16dC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgenQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24genQoZSx0LHIpe2lmKCEoenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHp0KSlyZXR1cm4gbmV3IHp0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIEd0KHRoaXMsZSl9cmV0dXJuIFl0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFl0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7enQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189enQucHJvdG90eXBlOmU9WHQoZSx0KTtyZXR1cm4gZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKTtpZighenQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGVyKHQsciksaT0oZT0kdChlLG4pKS53cml0ZSh0LHIpO2khPT1uJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihRdCh0KSl7dmFyIHI9MHxadCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT0kdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/JHQoZSwwKTpYdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZCdCh0LmRhdGEpKXJldHVybiBYdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFZ0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gR3QoZSx0KXtpZihWdCh0KSxlPSR0KGUsdDwwPzA6MHxadCh0KSksIXp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxadCh0Lmxlbmd0aCk7ZT0kdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gWnQoZSl7aWYoZT49V3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrV3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIGVyKGUsdCl7aWYoUXQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEFyKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gQXIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdHIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4geXIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGRyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gcHIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGdyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGhyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHJyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gbnIoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXp0LmZyb20odCxuKSksUXQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTppcihlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTppcihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gaXIoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixyLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPXI7bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKHIrYz5hJiYocj1hLWMpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBoPSEwLGQ9MDtkPGM7ZCsrKWlmKHUoZSxvK2QpIT09dSh0LGQpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gb3IoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBEcihBcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBhcihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBjcihlLHQscixuKXtyZXR1cm4gYXIoZSx0LHIsbil9ZnVuY3Rpb24gdXIoZSx0LHIsbil7cmV0dXJuIERyKENyKHQpLGUscixuKX1mdW5jdGlvbiBscihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBocihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/eHQoZSk6eHQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBkcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsaD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsaD0xKTpsPjY1NTM1JiYobC09NjU1MzYsbi5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksbi5wdXNoKGwpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PWZyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1mcikpO3JldHVybiByfShuKX16dC5wb29sU2l6ZT04MTkyLHp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz16dC5wcm90b3R5cGUsZX0senQuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFl0KG51bGwsZSx0LHIpfSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoenQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx6dC5fX3Byb3RvX189VWludDhBcnJheSksenQuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gVnQodCksdDw9MD8kdChlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuPyR0KGUsdCkuZmlsbChyLG4pOiR0KGUsdCkuZmlsbChyKTokdChlLHQpfShudWxsLGUsdCxyKX0senQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gR3QobnVsbCxlKX0senQuaXNCdWZmZXI9UHIsenQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFRdChlKXx8IVF0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSx6dC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx6dC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighQnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4genQuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj16dC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG89ZVtyXTtpZighUXQobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSx6dC5ieXRlTGVuZ3RoPWVyLHp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsenQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Milycih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClycih0aGlzLHQsdCszKSxycih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KXJyKHRoaXMsdCx0KzcpLHJyKHRoaXMsdCsxLHQrNikscnIodGhpcyx0KzIsdCs1KSxycih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9kcih0aGlzLDAsZSk6dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx6dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09enQuY29tcGFyZSh0aGlzLGUpfSx6dC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSx6dC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQscixuLGkpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PWUuc2xpY2UodCxyKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LHp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSx6dC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5yKHRoaXMsZSx0LHIsITApfSx6dC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCExKX0senQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBvcih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBzcih0aGlzLGUsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gYXIodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gY3IodGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB1cih0aGlzLGUsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBmcj00MDk2O2Z1bmN0aW9uIHByKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ3IoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIHlyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9VHIoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gdnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBtcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gd3IoZSx0LHIsbixpLG8pe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gX3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIGJyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFNyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24ga3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsNCksS3QoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gRXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsOCksS3QoZSx0LHIsbiw1Miw4KSxyKzh9enQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IHp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSx6dC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSx6dC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0senQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0senQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LHp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSx6dC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsMjMsNCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITAsNTIsOCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsNTIsOCl9LHp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fHdyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDI1NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0senQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDEsMTI3LC0xMjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpfcih0aGlzLGUsdCwhMCksdCsyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGtyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITAscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGksbz1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK3JdO2Vsc2UgaWYobzwxZTN8fCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KHIscitvKSx0KTtyZXR1cm4gb30senQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXp0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPHI7KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPVF0KGUpP2U6QXIobmV3IHp0KGUsbikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288ci10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgUnI9L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gVHIoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEFyKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPG47KytzKXtpZigocj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PW4peyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBDcihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscixuLGksbyxzO010fHxOdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyBMdCgzKmEvNC1vKSxuPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAscj0wO3Q8bjt0Kz00LHIrPTMpaT1IdFtlLmNoYXJDb2RlQXQodCldPDwxOHxIdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfEh0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxIdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1IdFtlLmNoYXJDb2RlQXQodCldPDwyfEh0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1IdFtlLmNoYXJDb2RlQXQodCldPDwxMHxIdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8SHRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoUnIsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIERyKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8T3IoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmT3IoZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIElyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjp6dCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSx6dC5hbGxvYygrZSl9LGlzQnVmZmVyOlByLGtNYXhMZW5ndGg6RnR9KSxVcj17ZXhwb3J0czp7fX0sSHI9e30sTHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KExyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxMci5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dCU0O2lmKCFyKXJldHVybiBlO3ZhciBuPXQsaT00LXIsbz10K2kscz16dC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLG4rKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEhyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTXI9THI7ZnVuY3Rpb24gTnIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5pc0J1ZmZlcihlKT94cihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6eHIoenQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLE1yLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgcXIsS3I9TnI7S3IuZW5jb2RlPU5yLEtyLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLHp0LmZyb20oanIoZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxLci50b0Jhc2U2ND1qcixLci5mcm9tQmFzZTY0PXhyLEtyLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiB6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKX0sSHIuZGVmYXVsdD1LciwocXI9VXIpLmV4cG9ydHM9SHIuZGVmYXVsdCxxci5leHBvcnRzLmRlZmF1bHQ9cXIuZXhwb3J0czt2YXIgSnI9VXIuZXhwb3J0cyxCcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsaCxkLGYscCxnLHksdixtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sYz1yWzJdLHU9clszXSxsPXJbNF0saD1yWzVdLGQ9cls2XSxmPXJbN10sZz0wO2c8MTY7ZysrKXk9aSs0KmcsZVtnXT0oMjU1Jm5beV0pPDwyNHwoMjU1Jm5beSsxXSk8PDE2fCgyNTUmblt5KzJdKTw8OHwyNTUmblt5KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXY9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oditlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXY9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmhefmwmZCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWQsZD1oLGg9bCxsPXUrdnwwLHU9YyxjPWEsYT1zLHM9dittfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPWMsclszXSs9dSxyWzRdKz1sLHJbNV0rPWgscls2XSs9ZCxyWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09biYmKG49MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksaD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksZD1oLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KG4pLHA9MDtwPG47cCsrKWQ9PT1oLmxlbmd0aCYmKGEoaCxsLHIsbyksZD0wKSxmW3BdPWhbZCsrXTtyZXR1cm4gbC5jbGVhbigpLGguZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxyLG4pe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkobiksaD0wO2gqczxuO2grKyl7dmFyIGQ9aCsxO2FbMF09ZD4+PjI0JjI1NSxhWzFdPWQ+Pj4xNiYyNTUsYVsyXT1kPj4+OCYyNTUsYVszXT1kPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9cjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZoKnMrZjxuO2YrKylsW2gqcytmXT1jW2ZdfWZvcihoPTA7aDxzO2grKyljW2hdPXVbaF09MDtmb3IoaD0wO2g8NDtoKyspYVtoXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfShCcik7dmFyIEZyPVMoQnIuZXhwb3J0cyksV3I9Y3J5cHRvO2Z1bmN0aW9uICRyKGUpe3RyeXtyZXR1cm4gbnVsbCE9ZSYmImJvb2xlYW4iPT10eXBlb2YgZS5leHRyYWN0YWJsZSYmInN0cmluZyI9PXR5cGVvZiBlLmFsZ29yaXRobS5uYW1lJiYic3RyaW5nIj09dHlwZW9mIGUudHlwZX1jYXRjaChlKXtyZXR1cm4hMX19Y29uc3QgenI9bmV3IFRleHRFbmNvZGVyLFlyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBWcj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9WXIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT5uZXcgVWludDhBcnJheShhdG9iKGUpLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpKSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgR3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyBYciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIFpyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIscj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIFFyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgZW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIHRuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3Mgcm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBubiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBzbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBhbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gY24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiB1bigpe3RyeXtyZXR1cm4gdm9pZCAwIT09ZmUudmVyc2lvbnMubm9kZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbG4oZSx0PSJhbGdvcml0aG0ubmFtZSIpe3JldHVybiBuZXcgVHlwZUVycm9yKGBDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICR7dH0gbXVzdCBiZSAke2V9YCl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiBkbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBmbihlLHQsLi4ucil7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBsbigiSE1BQyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBsbigiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGRuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBsbigiUlNBLVBTUyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSB1bigpJiYiRWREU0EiOmlmKCJOT0RFLUVEMjU1MTkiIT09ZS5hbGdvcml0aG0ubmFtZSYmIk5PREUtRUQ0NDgiIT09ZS5hbGdvcml0aG0ubmFtZSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5IG9yIE5PREUtRUQ0NDgiKTticmVhaztjYXNlIGNuKCkmJiJFZERTQSI6aWYoIWhuKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBsbigiRUNEU0EiKTtjb25zdCByPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1yKXRocm93IGxuKHIsImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgcj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke3J9LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLHIpfXZhciBwbj0oZSwuLi50KT0+e2xldCByPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/cis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOnIrPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9yKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/cis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYocis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxyfSxnbj1lPT4kcihlKTtjb25zdCB5bj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIHZuKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IHI9ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yfWNvbnN0IG1uPWFzeW5jIGU9Pnt2YXIgdCxyO2NvbnN0e2FsZ29yaXRobTpuLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGVuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlKGNuKCl8fHVuKCkpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtzd2l0Y2goZS5jcnYpe2Nhc2UiRWQyNTUxOSI6dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UgdW4oKSYmIkVkNDQ4Ijp0PXtuYW1lOiJOT0RFLUVENDQ4IixuYW1lZEN1cnZlOiJOT0RFLUVENDQ4In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6cn19KGUpLG89W24sbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KHI9ZS5rZXlfb3BzKSYmdm9pZCAwIT09cj9yOmldO2lmKCJQQktERjIiPT09bi5uYW1lKXJldHVybiBXci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLFZyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxXci5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IHduPShlLHQscik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4sIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiYCl9fSkodCk6KChlLHQpPT57aWYoIWduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IocG4oZSwuLi55bikpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiYCk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCl9KSh0LHIpfTtjb25zdCBfbj1hc3luYyhlLHQscixuKT0+e2NvbnN0IGk9YXdhaXQgZnVuY3Rpb24oZSx0LHIpe2lmKCRyKHQpKXJldHVybiBmbih0LGUsciksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4pKTtyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOmBTSEEtJHtlLnNsaWNlKC0zKX1gLG5hbWU6IkhNQUMifSwhMSxbcl0pfXRocm93IG5ldyBUeXBlRXJyb3IocG4odCwuLi55biwiVWludDhBcnJheSIpKX0oZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpyfT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V9IHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXJgKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCByPWBTSEEtJHtlLnNsaWNlKC0zKX1gO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZShjbigpfHx1bigpKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOm59PXQ7cmV0dXJue25hbWU6bixuYW1lZEN1cnZlOm59O2RlZmF1bHQ6dGhyb3cgbmV3IGVuKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFdyLnN1YnRsZS52ZXJpZnkobyxpLHIsbil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBibihlLHQscil7dmFyIG47aWYoIXZuKGUpKXRocm93IG5ldyB0bigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgdG4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgdG4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhdm4oZS5oZWFkZXIpKXRocm93IG5ldyB0bigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVZyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKFlyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgcjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKHImJjAhPT1yLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoci5oYXMoZSkpcmV0dXJuITE7ci5hZGQoZSl9ZWxzZSByPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1uLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIW58fHZvaWQgMD09PW4uY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShuLmNyaXQpfHwwPT09bi5jcml0Lmxlbmd0aHx8bi5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PXI/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMociksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIG4uY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBlbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09blt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KG4uY3JpdCl9KHRuLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1yP3ZvaWQgMDpyLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyB0bignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyB0bignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1yJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixyLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgUXIoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSx3bihjLHQsInZlcmlmeSIpO2NvbnN0IGg9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KHpyLmVuY29kZShudWxsIT09KG49ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1uP246IiIpLHpyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP3pyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksZD1WcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IF9uKGMsdCxkLGgpKXRocm93IG5ldyBhbjtsZXQgZjtmPWE/VnIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgU249ODY0MDAsa249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIEVuPWU9Pntjb25zdCB0PWtuLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKHIqU24pO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IFJuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBUbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFJuKGUudHlwKSE9PVJuKG4pKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoWXIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIXZuKGkpKXRocm93IG5ldyBybigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1yO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiByLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1FbihyLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1yLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6aH09cixkPShmPWh8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYodm9pZCAwIT09aS5pYXR8fHIubWF4VG9rZW5BZ2Upe2lmKCJudW1iZXIiIT10eXBlb2YgaS5pYXQpdGhyb3cgbmV3IFhyKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMD09PWkuZXhwJiZpLmlhdD5kK2wpdGhyb3cgbmV3IFhyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmQrbCl0aHJvdyBuZXcgWHIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgWHIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWQtbCl0aHJvdyBuZXcgWnIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihyLm1heFRva2VuQWdlKXtjb25zdCBlPWQtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIHIubWF4VG9rZW5BZ2U/ci5tYXhUb2tlbkFnZTpFbihyLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IFpyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBBbihlLHQscil7dmFyIG47Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPVlyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB0bigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpuLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdG4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IGJuKHtwYXlsb2FkOmkscHJvdGVjdGVkOm4sc2lnbmF0dXJlOm99LHQsciksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxyKTtpZigobnVsbD09PShuPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBybigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlRuKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBDbihlKXtyZXR1cm4gdm4oZSl9Y2xhc3MgRG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShDbil9KGUpKXRocm93IG5ldyBubigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpyLGtpZDpufT17Li4uZSwuLi50LmhlYWRlcn0saT10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9ZS5rdHk9PT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KHIpO2lmKHQmJiJzdHJpbmciPT10eXBlb2YgbiYmKHQ9bj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1yPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PXImJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKHIpe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6byxsZW5ndGg6c309aTtpZigwPT09cyl0aHJvdyBuZXcgb247aWYoMSE9PXMpdGhyb3cgbmV3IHNuO2NvbnN0IGE9dGhpcy5fY2FjaGVkLmdldChvKXx8dGhpcy5fY2FjaGVkLnNldChvLHt9KS5nZXQobyk7aWYodm9pZCAwPT09YVtyXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoIXZuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/bW4oey4uLmUsYWxnOnQsZXh0OiExfSk6VnIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IGVuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIG1uKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ubyxleHQ6ITB9LHIpO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgbm4oIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7YVtyXT1lfXJldHVybiBhW3JdfX12YXIgUG49e2V4cG9ydHM6e319LE9uPXtleHBvcnRzOnt9fSxJbj1rKElyKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciByPUluLG49ci5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gbihlLHQscil9bi5mcm9tJiZuLmFsbG9jJiZuLmFsbG9jVW5zYWZlJiZuLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9cjooaShyLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGkobixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBuKGUsdCxyKX0sby5hbGxvYz1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1uKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygcj9pLmZpbGwodCxyKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gci5TbG93QnVmZmVyKGUpfX0oT24sT24uZXhwb3J0cyk7dmFyIFVuPTY1NTM2LEhuPTQyOTQ5NjcyOTU7dmFyIExuPU9uLmV4cG9ydHMuQnVmZmVyLE1uPWIuY3J5cHRvfHxiLm1zQ3J5cHRvO01uJiZNbi5nZXRSYW5kb21WYWx1ZXM/UG4uZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+SG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgcj1Mbi5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5Vbilmb3IodmFyIG49MDtuPGU7bis9VW4pTW4uZ2V0UmFuZG9tVmFsdWVzKHIuc2xpY2UobixuK1VuKSk7ZWxzZSBNbi5nZXRSYW5kb21WYWx1ZXMocik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxyKX0pKTtyZXR1cm4gcn06UG4uZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIE5uPVBuLmV4cG9ydHM7Y2xhc3Mgam57YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBKci5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gSnIuZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4genQuZnJvbShGcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBObihlKX12ZXJpZnlKd3QoZSx0LHIsbixpLG8scyl7cmV0dXJuIEFuKGUsKGE9e2tleXM6W3RdfSxEbi5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IERuKGEpKSkse2FsZ29yaXRobXM6cixhdWRpZW5jZTpuLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKTt2YXIgYX19Y29uc3QgeG49c2VsZjtsZXQgcW47eG4ub25tZXNzYWdlPSh7ZGF0YTp0LHBvcnRzOnJ9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvLHM7Y29uc3QgYz1yWzBdO2lmKHQudHlwZT09PWd8fHFuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgZzp0cnl7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSk7cW49eWllbGQodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgSXQsbj1uZXcgam4saT1uZXcgcChyLG4pO3lpZWxkIGkuaW5pdGlhbGl6ZSh0KTtjb25zdCBvPW5ldyB3KGkpLHM9aS5nZXREYXRhTGF5ZXIoKSxjPU90LmdldEluc3RhbmNlKCk7KG51bGw9PWM/dm9pZCAwOmMuaW5pdCkmJih5aWVsZCBjLmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgaS5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSk7Y29uc3QgdT10PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcixuLGM7bGV0IHU9ITAsbD0hMTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShuPW51bGw9PT0ocj15aWVsZCBzLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09bj9uOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0oYz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnMuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihtLEpTT04uc3RyaW5naWZ5KHQpKSx1fHxsP2kucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxsPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7eWllbGQgaS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjb25zdCBlPXlpZWxkIGgoKTtyZXR1cm4gZSYmKHlpZWxkIHUoZSkpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSksaD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSk7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntjLmRpc2FibGVIYW5kbGVyJiZjLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5lbmFibGVIYW5kbGVyJiZjLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9PmkuZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGU7Y29uc3Qgcj1udWxsIT09KGU9bmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09ZT9lOiIiLG49eWllbGQgaS5nZXRQS0NFQ29kZShyKTtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6bn19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgaS5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KG89bnVsbD09cj92b2lkIDA6ci51cmwpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXt1PSEwO2JyZWFrfXJldHVybiB1P2MucmVxdWVzdChyKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsbixpO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgbCgpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFItU0UwMSIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PW4/bjoiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0oaT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT1pP2k6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihlKXJldHVybiBjLnJlcXVlc3QocikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUi1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaHR0cFJlcXVlc3RBbGw6cj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2xldCB1PSEwO2Zvcihjb25zdCBlIG9mIHIpe2xldCByPSExO2Zvcihjb25zdCBhIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KG49eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWk/aTpbXSx0LmJhc2VVcmxdKWlmKGEmJihudWxsPT09KG89ZS51cmwpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoYSkpKXtyPSEwO2JyZWFrfWlmKCFyKXt1PSExO2JyZWFrfX1jb25zdCBoPVtdO3JldHVybiB1PyhyLmZvckVhY2goKGU9PntoLnB1c2goYy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09Yz92b2lkIDA6Yy5hbGwpJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixuO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKSl7bGV0IGU7dHJ5e2U9eWllbGQgbCgpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFJBLVNFMDEiLG51bGwhPT0ocj1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1yP3I6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KG49bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSlyZXR1cm4gYy5hbGwmJmMuYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfXJldHVybiBQcm9taXNlLnJlamVjdCh0KX0pKSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5pLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjpsLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxyLG4sYyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgcy5nZXRDb25maWdEYXRhKCk7cmV0dXJuIG4mJmUuZW5hYmxlUEtDRSYmKHlpZWxkIGkuc2V0UEtDRUNvZGUobixudWxsIT1jP2M6IiIpKSx0P2kucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9cj9yOiIiLG51bGwhPWM/YzoiJyIpLnRoZW4oKCgpPT4oby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksaS5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnUscmV2b2tlQWNjZXNzVG9rZW46KCk9PmkucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgcy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgaS5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBpLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKHIpLHFuLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soQm4pLHFuLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhLbikscW4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soSm4pLGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6cW4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6cW4ucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0obj1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvZGUsbnVsbD09PShpPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc2Vzc2lvblN0YXRlLG51bGw9PT0obz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnBrY2UsbnVsbD09PShzPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdGUpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOnFuLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOnFuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnFuLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpxbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0QmFzaWNVc2VySW5mbygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2lkX3Rva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6cW4uZW5hYmxlSHR0cEhhbmRsZXIoKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpxbi5kaXNhYmxlSHR0cEhhbmRsZXIoKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9zaWduX291dF91cmwiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnJlZnJlc2hBY2Nlc3NUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UocW4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzZXRfc2Vzc2lvbl9zdGF0ZSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnVwZGF0ZUNvbmZpZyhudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2RlZmF1bHQ6bnVsbD09Y3x8Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYSgiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgS249KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sSm49ZT0+e3huLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxCbj0oKT0+e3huLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX07cmV0dXJue319KCk7Cgo=",null,!1),new Worker(Tn,t)});const An={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:N.SessionStorage};class zn{constructor(t){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}_isInitialized(){return n(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 n(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
465
465
|
/**
|
|
466
466
|
* This method returns the instance of the singleton class.
|
|
467
467
|
*
|
|
@@ -477,7 +477,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
477
477
|
* @memberof AsgardeoSPAClient
|
|
478
478
|
*
|
|
479
479
|
* @preserve
|
|
480
|
-
*/static getInstance(t){var e,
|
|
480
|
+
*/static getInstance(t){var e,l;return t&&(null===(e=this._instances)||void 0===e?void 0:e.get(t))?this._instances.get(t):!t&&(null===(l=this._instances)||void 0===l?void 0:l.get("primaryInstance"))?this._instances.get("primaryInstance"):t?(this._instances.set(t,new zn(t)),this._instances.get(t)):(this._instances.set("primaryInstance",new zn("primaryInstance")),this._instances.get("primaryInstance"))}
|
|
481
481
|
/**
|
|
482
482
|
* This method initializes the `AsgardeoSPAClient` instance.
|
|
483
483
|
*
|
|
@@ -499,7 +499,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
499
499
|
* @memberof AsgardeoSPAClient
|
|
500
500
|
*
|
|
501
501
|
* @preserve
|
|
502
|
-
*/initialize(t){var e;return
|
|
502
|
+
*/initialize(t){var e;return n(this,void 0,void 0,(function*(){if(this._storage=null!==(e=t.storage)&&void 0!==e?e:N.SessionStorage,this._initialized=!1,this._startedInitialize=!0,this._storage!==N.WebWorker){if(!this._client){const e=t,l=Object.assign({},An);this._client=yield Fn(Object.assign(Object.assign({},l),e))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),Promise.resolve(!0)}if(!this._client){const e=t;return this._client=yield(t=>n(void 0,void 0,void 0,(function*(){var e;let l;const i=null!==(e=null==t?void 0:t.requestTimeout)&&void 0!==e?e:6e4;let o=!0,a=!1;const r=yield B(()=>n(void 0,void 0,void 0,(function*(){const t={type:"sign-out"};try{return yield u(t)}catch(t){return L.getSignOutURL()}})),t.storage,t=>Z(t)),d=new xn,u=t=>{const e=new MessageChannel;return d.postMessage(t,[e.port2]),new Promise((t,l)=>{const n=setTimeout(()=>{l(new W("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+i/1e3+" since dispatching the request"))},i);return e.port1.onmessage=({data:e})=>{if(clearTimeout(n),null==e?void 0:e.success){const l=(null==e?void 0:e.data)?JSON.parse(null==e?void 0:e.data):null;(null==e?void 0:e.blob)&&(l.data=null==e?void 0:e.blob),t(l)}else l(e.error?JSON.parse(e.error):null)}})},Z=t=>u({data:t,type:"set_session_state"}),s=()=>u({type:"start_auto_refresh_token"}),b=()=>n(void 0,void 0,void 0,(function*(){var t,e,l;const i=yield g(),c=yield G();r.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",()=>n(void 0,void 0,void 0,(function*(){return(yield X()).sessionState})),null!==(e=c.checkSessionInterval)&&void 0!==e?e:3,null!==(l=c.sessionRefreshInterval)&&void 0!==l?l:300,c.signInRedirectURL,t=>n(void 0,void 0,void 0,(function*(){return(yield I(t)).authorizationURL})))})),I=t=>n(void 0,void 0,void 0,(function*(){const e=yield G();return u({data:t,type:"get_auth_url"}).then(t=>n(void 0,void 0,void 0,(function*(){var l;if(t.pkce&&e.enablePKCE){const e=C.extractPKCEKeyFromStateParam(null!==(l=new URL(t.authorizationURL).searchParams.get(y))&&void 0!==l?l:"");L.setPKCE(e,t.pkce)}return Promise.resolve(t)})))})),h=(t,e,l)=>n(void 0,void 0,void 0,(function*(){const n=yield G(),i=C.extractPKCEKeyFromStateParam(l),c={data:{code:t,pkce:n.enablePKCE?L.getPKCE(i):void 0,sessionState:e,state:l},type:"request_get_token"};return n.enablePKCE&&L.removePKCE(i),u(c).then(t=>u({type:"get_sign_out_url"}).then(e=>(L.setSignOutURL(e),n.enableOIDCSessionManagement&&b(),s(),Promise.resolve(t))).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(t))})),g=()=>u({type:"get-oidc-service-endpoints"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),G=()=>u({type:"get_config_data"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),X=()=>u({type:"get-basic-user-info"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),V=()=>u({type:"is_authenticated"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t));return{disableHttpHandler:()=>u({type:"disable_http_handler"}).then(()=>(o=!1,Promise.resolve(!0))).catch(t=>Promise.reject(t)),enableHttpHandler:()=>u({type:"enable_http_handler"}).then(()=>(o=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t)),getBasicUserInfo:X,getDecodedIDToken:()=>u({type:"get-decoded-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getIDToken:()=>u({type:"get_id_token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getOIDCServiceEndpoints:g,httpRequest:t=>u({data:t,type:"http-request"}).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){return o&&("function"==typeof l.requestErrorCallback&&(yield l.requestErrorCallback(t)),"function"==typeof l.requestFinishCallback&&l.requestFinishCallback()),Promise.reject(t)}))),httpRequestAll:t=>u({data:t,type:"http-request-all"}).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){return o&&("function"==typeof l.requestErrorCallback&&(yield l.requestErrorCallback(t)),"function"==typeof l.requestFinishCallback&&l.requestFinishCallback()),Promise.reject(t)}))),initialize:()=>(l||(l={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),d.onmessage=({data:t})=>{switch(t.type){case"request-finish":(null==l?void 0:l.requestFinishCallback)&&(null==l||l.requestFinishCallback());break;case"request-start":(null==l?void 0:l.requestStartCallback)&&(null==l||l.requestStartCallback());break;case"request-success":(null==l?void 0:l.requestSuccessCallback)&&(null==l||l.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},u({data:t,type:"init"}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(t))),isAuthenticated:V,refreshAccessToken:()=>u({type:"refresh_access-token"}),requestCustomGrant:t=>u({data:t,type:"request-custom-grant"}).then(e=>(t.preventSignOutURLUpdate&&(a=!0),Promise.resolve(e))).catch(t=>Promise.reject(t)),revokeAccessToken:()=>u({type:"revoke-access-token"}).then(t=>(r.reset(),Promise.resolve(t))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{t&&"function"==typeof t&&(l.requestErrorCallback=t)},setHttpRequestFinishCallback:t=>{t&&"function"==typeof t&&(l.requestFinishCallback=t)},setHttpRequestStartCallback:t=>{t&&"function"==typeof t&&(l.requestStartCallback=t)},setHttpRequestSuccessCallback:t=>{t&&"function"==typeof t&&(l.requestSuccessCallback=t)},signIn:(t,e,l,i)=>n(void 0,void 0,void 0,(function*(){var o,a,d;const u=yield G();if(yield r.receivePromptNoneResponse(t=>n(void 0,void 0,void 0,(function*(){return Z(t)}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const g=new URL(window.location.href).searchParams.get("error"),C=new URL(window.location.href).searchParams.get("error_description");if(g){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-WEB_WORKER_CLIENT-SI-SE01",g,null!=C?C:"")}if(yield V())return yield s(),u.enableOIDCSessionManagement&&b(),X();let R,f,S;return(null==u?void 0:u.responseMode)===c.formPost&&e?(R=e,f=null!=l?l:"",S=null!=i?i:""):(R=null!==(o=new URL(window.location.href).searchParams.get(m))&&void 0!==o?o:"",f=null!==(a=new URL(window.location.href).searchParams.get(p))&&void 0!==a?a:"",S=null!==(d=new URL(window.location.href).searchParams.get(y))&&void 0!==d?d:"",L.removeAuthorizationCode()),R&&S?h(R,f,S):I(t).then(t=>n(void 0,void 0,void 0,(function*(){return location.href=t.authorizationURL,yield L.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))).catch(t=>Promise.reject(t))})),signOut:()=>V().then(t=>n(void 0,void 0,void 0,(function*(){return t&&!a?u({type:"sign-out"}).then(t=>n(void 0,void 0,void 0,(function*(){return window.location.href=t,yield L.waitTillPageRedirect(),Promise.resolve(!0)}))).catch(t=>Promise.reject(t)):(window.location.href=L.getSignOutURL(),yield L.waitTillPageRedirect(),Promise.resolve(!0))}))).catch(t=>Promise.reject(t)),trySignInSilently:()=>n(void 0,void 0,void 0,(function*(){var t,e;const l=yield G();if(L.isInitializedSilentSignIn())return yield r.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const i=document.getElementById("rpIFrame"),c=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame"),o={data:{prompt:"none",state:"sign-in-silently"},type:"get_auth_url"};try{const t=yield u(o),n=C.extractPKCEKeyFromStateParam(null!==(e=new URL(t.authorizationURL).searchParams.get(y))&&void 0!==e?e:"");t.pkce&&l.enablePKCE&&L.setPKCE(n,t.pkce);const i=t.authorizationURL,a=new URL(i);a.searchParams.set("response_mode","query");const r=a.toString();c.src=r}catch(t){return Promise.reject(t)}return new Promise((t,e)=>{const l=setTimeout(()=>{t(!1)},1e4),i=c=>n(void 0,void 0,void 0,(function*(){var n,o,a,r;const d=c.data;"check_session_signed_out"==(null==d?void 0:d.type)&&(window.removeEventListener("message",i),clearTimeout(l),t(!1)),"check_session_signed_in"==(null==d?void 0:d.type)&&(null===(n=null==d?void 0:d.data)||void 0===n?void 0:n.code)&&h(null===(o=null==d?void 0:d.data)||void 0===o?void 0:o.code,null===(a=null==d?void 0:d.data)||void 0===a?void 0:a.sessionState,null===(r=null==d?void 0:d.data)||void 0===r?void 0:r.state).then(e=>{window.removeEventListener("message",i),t(e)}).catch(t=>{window.removeEventListener("message",i),e(t)}).finally(()=>{clearTimeout(l)})}));window.addEventListener("message",i)})})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){const e=yield G(),l=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},e),t),i={data:n,type:"update_config"};yield u(i),n.enableOIDCSessionManagement&&l&&(r.reset(),b())}))}})))(Object.assign(Object.assign({},An),e)),this._client.initialize().then(()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t))}return Promise.resolve(!0)}))}
|
|
503
503
|
/**
|
|
504
504
|
* This method returns a Promise that resolves with the basic user information obtained from the ID token.
|
|
505
505
|
*
|
|
@@ -519,7 +519,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
519
519
|
* @memberof AsgardeoSPAClient
|
|
520
520
|
*
|
|
521
521
|
* @preserve
|
|
522
|
-
*/getBasicUserInfo(){var t;return
|
|
522
|
+
*/getBasicUserInfo(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getBasicUserInfo()}))}
|
|
523
523
|
/**
|
|
524
524
|
* This method initiates the authentication flow. This should be called twice.
|
|
525
525
|
* 1. To initiate the authentication flow.
|
|
@@ -555,7 +555,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
555
555
|
* @memberof AsgardeoSPAClient
|
|
556
556
|
*
|
|
557
557
|
* @preserve
|
|
558
|
-
*/signIn(t,e,
|
|
558
|
+
*/signIn(t,e,l,i){var c;return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),L.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,l,i).then(t=>(this._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t),t))}))}trySignInSilently(){var t;return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!L.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})}))}
|
|
559
559
|
/**
|
|
560
560
|
* This method initiates the sign-out flow.
|
|
561
561
|
*
|
|
@@ -575,7 +575,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
575
575
|
* @memberof AsgardeoSPAClient
|
|
576
576
|
*
|
|
577
577
|
* @preserve
|
|
578
|
-
*/signOut(){var t,e;return
|
|
578
|
+
*/signOut(){var t,e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null!==(e=yield null===(t=this._client)||void 0===t?void 0:t.signOut())&&void 0!==e&&e}))}
|
|
579
579
|
/**
|
|
580
580
|
* This method sends an API request to a protected endpoint.
|
|
581
581
|
* The access token is automatically attached to the header of the request.
|
|
@@ -612,7 +612,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
612
612
|
* @memberof AsgardeoSPAClient
|
|
613
613
|
*
|
|
614
614
|
* @preserve
|
|
615
|
-
*/httpRequest(t){var e;return
|
|
615
|
+
*/httpRequest(t){var e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.httpRequest(t)}))}
|
|
616
616
|
/**
|
|
617
617
|
* This method sends multiple API requests to a protected endpoint.
|
|
618
618
|
* The access token is automatically attached to the header of the request.
|
|
@@ -659,7 +659,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
659
659
|
* @memberof AsgardeoSPAClient
|
|
660
660
|
*
|
|
661
661
|
* @preserve
|
|
662
|
-
*/httpRequestAll(t){var e;return
|
|
662
|
+
*/httpRequestAll(t){var e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.httpRequestAll(t)}))}
|
|
663
663
|
/**
|
|
664
664
|
* This method allows you to send a request with a custom grant.
|
|
665
665
|
*
|
|
@@ -690,7 +690,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
690
690
|
* @memberof AsgardeoSPAClient
|
|
691
691
|
*
|
|
692
692
|
* @preserve
|
|
693
|
-
*/requestCustomGrant(t){var e,
|
|
693
|
+
*/requestCustomGrant(t){var e,l;return n(this,void 0,void 0,(function*(){if(t.signInRequired,yield this._validateMethod(),!t.id)return Promise.reject(new W("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t),i=this._onCustomGrant.get(t.id);return i&&i(null===(l=this._onCustomGrant)||void 0===l?void 0:l.get(t.id)),n}))}
|
|
694
694
|
/**
|
|
695
695
|
* This method ends a user session. The access token is revoked and the session information is destroyed.
|
|
696
696
|
*
|
|
@@ -710,7 +710,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
710
710
|
* @memberof AsgardeoSPAClient
|
|
711
711
|
*
|
|
712
712
|
* @preserve
|
|
713
|
-
*/revokeAccessToken(){var t;return
|
|
713
|
+
*/revokeAccessToken(){var t;return n(this,void 0,void 0,(function*(){yield this._validateMethod();const e=yield null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(e)),e}))}
|
|
714
714
|
/**
|
|
715
715
|
* This method returns a Promise that resolves with an object containing the service endpoints.
|
|
716
716
|
*
|
|
@@ -730,7 +730,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
730
730
|
* @memberof AsgardeoSPAClient
|
|
731
731
|
*
|
|
732
732
|
* @preserve
|
|
733
|
-
*/getOIDCServiceEndpoints(){var t;return
|
|
733
|
+
*/getOIDCServiceEndpoints(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.getOIDCServiceEndpoints()}))}
|
|
734
734
|
/**
|
|
735
735
|
* This methods returns the Axios http client.
|
|
736
736
|
*
|
|
@@ -759,7 +759,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
759
759
|
* @memberof AsgardeoSPAClient
|
|
760
760
|
*
|
|
761
761
|
* @preserve
|
|
762
|
-
*/getDecodedIDToken(){var t;return
|
|
762
|
+
*/getDecodedIDToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getDecodedIDToken()}))}
|
|
763
763
|
/**
|
|
764
764
|
* This method return the ID token.
|
|
765
765
|
*
|
|
@@ -775,7 +775,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
775
775
|
* @memberof AsgardeoAuthClient
|
|
776
776
|
*
|
|
777
777
|
* @preserve
|
|
778
|
-
*/getIDToken(){var t;return
|
|
778
|
+
*/getIDToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getIDToken()}))}
|
|
779
779
|
/**
|
|
780
780
|
* This method return a Promise that resolves with the access token.
|
|
781
781
|
*
|
|
@@ -797,7 +797,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
797
797
|
* @memberof AsgardeoSPAClient
|
|
798
798
|
*
|
|
799
799
|
* @preserve
|
|
800
|
-
*/getAccessToken(){return
|
|
800
|
+
*/getAccessToken(){return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),this._storage&&[(N.WebWorker,N.BrowserMemory)].includes(this._storage)?Promise.reject(new W("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")):this._client.getAccessToken()}))}
|
|
801
801
|
/**
|
|
802
802
|
* This method refreshes the access token.
|
|
803
803
|
*
|
|
@@ -818,7 +818,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
818
818
|
* @memberof AsgardeoSPAClient
|
|
819
819
|
*
|
|
820
820
|
* @preserve
|
|
821
|
-
*/refreshAccessToken(){var t;return
|
|
821
|
+
*/refreshAccessToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.refreshAccessToken()}))}
|
|
822
822
|
/**
|
|
823
823
|
* This method specifies if the user is authenticated or not.
|
|
824
824
|
*
|
|
@@ -827,7 +827,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
827
827
|
* @memberof AsgardeoSPAClient
|
|
828
828
|
*
|
|
829
829
|
* @preserve
|
|
830
|
-
*/isAuthenticated(){var t;return
|
|
830
|
+
*/isAuthenticated(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.isAuthenticated()}))}on(t,e,l){var i,c,o,a;return n(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 J.SignIn:this._onSignInCallback=e;break;case J.SignOut:this._onSignOutCallback=e,L.isSignOutSuccessful()&&this._onSignOutCallback();break;case J.RevokeAccessToken:this._onEndUserSession=e;break;case J.Initialize:this._onInitialize=e;break;case J.HttpRequestError:null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(e);break;case J.HttpRequestFinish:null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(e);break;case J.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(e);break;case J.HttpRequestSuccess:null===(a=this._client)||void 0===a||a.setHttpRequestSuccessCallback(e);break;case J.CustomGrant:l&&this._onCustomGrant.set(l,e);break;case J.SignOutFailed:{this._onSignOutFailedCallback=e;const t=L.didSignOutFail();t&&this._onSignOutFailedCallback(t);break}default:throw new W("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
|
|
831
831
|
/**
|
|
832
832
|
* This method enables callback functions attached to the http client.
|
|
833
833
|
*
|
|
@@ -843,7 +843,7 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
843
843
|
* @memberof AsgardeoSPAClient
|
|
844
844
|
*
|
|
845
845
|
* @preserve
|
|
846
|
-
*/enableHttpHandler(){var t;return
|
|
846
|
+
*/enableHttpHandler(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.enableHttpHandler()}))}
|
|
847
847
|
/**
|
|
848
848
|
* This method disables callback functions attached to the http client.
|
|
849
849
|
*
|
|
@@ -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
|
-
*/disableHttpHandler(){var t;return
|
|
862
|
+
*/disableHttpHandler(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.disableHttpHandler()}))}
|
|
863
863
|
/**
|
|
864
864
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
865
865
|
*
|
|
@@ -879,4 +879,4 @@ constructor(t,e){K._instanceID?K._instanceID+=1:K._instanceID=0,this._dataLayer=
|
|
|
879
879
|
* @memberof AsgardeoAuthClient
|
|
880
880
|
*
|
|
881
881
|
* @preserve
|
|
882
|
-
*/updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===N.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}zl._instances=new Map;class wl extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,n(140))},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var l=n(106),i=n(59);t.exports=function(t){var e=l(t,"string");return i(e)?e:String(e)}},function(t,e,n){var l,i,c=n(4),o=n(39),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u?i=(l=u.split("."))[0]<4?1:l[0]+l[1]:o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(i=l[1]),t.exports=i&&+i},function(t,e,n){var l=n(146),i=n(112).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return l(t,i)}},function(t,e,n){var l=n(30),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){var l=n(46);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,e,n){var l=n(76),i=n(75),c=n(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||i[l(t)]}},function(t,e,n){"use strict";var l=n(47),i=n(14),c=n(38);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){"use strict";var l=n(11),i=n(14),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(70),c=n(8),o=n(16),d=n(14).f,r=n(49),a=n(115),u=n(69),Z=n(77),s=!1,b=u("meta"),m=0,I=Object.isExtensible||function(){return!0},h=function(t){d(t,b,{value:{objectID:"O"+m++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,e=[].splice,n={};n[b]=1,t(n).length&&(r.f=function(n){for(var l=t(n),i=0,c=l.length;i<c;i++)if(l[i]===b){e.call(l,i,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:a.f}))},fastKey:function(t,e){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!I(t))return"F";if(!e)return"E";h(t)}return t[b].objectID},getWeakData:function(t,e){if(!o(t,b)){if(!I(t))return!0;if(!e)return!1;h(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&I(t)&&!o(t,b)&&h(t),t}};i[b]=!0},function(t,e,n){"use strict";var l=n(61),i=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=n(11)("Promise"),s=u.set,b=u.get,m=a("toStringTag");t.exports=function(t,e){var n=function(t){t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,s(this,t)};return n.prototype=r(o(l.AsyncIterator.prototype),{next:function(n){var l=this,i=!!arguments.length;return new Z((function(o){var d=b(l),r=i?[d.ignoreArgument?void 0:n]:e?[]:[void 0];d.ignoreArgument=!1,o(d.done?{done:!0,value:void 0}:c(t.call(d,Z,r)))}))},return:function(t){var e=this;return new Z((function(n,l){var i=b(e),o=i.iterator;i.done=!0;var d=o.return;if(void 0===d)return n({done:!0,value:t});Z.resolve(d.call(o,t)).then((function(e){c(e),n({done:!0,value:t})}),l)}))},throw:function(t){var e=this;return new Z((function(n,l){var i=b(e),c=i.iterator;i.done=!0;var o=c.throw;if(void 0===o)return l(t);n(o.call(c,t))}))}}),e||d(n.prototype,m,"Generator"),n}},function(t,e,n){"use strict";var l=n(61),i=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=u.set,s=u.get,b=a("toStringTag");t.exports=function(t,e){var n=function(t){t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,Z(this,t)};return n.prototype=r(o(l.Iterator.prototype),{next:function(n){var l=s(this),i=arguments.length?[l.ignoreArg?void 0:n]:e?[]:[void 0];l.ignoreArg=!1;var c=l.done?void 0:t.call(l,i);return{done:l.done,value:c}},return:function(t){var e=s(this),n=e.iterator;e.done=!0;var l=n.return;return{done:!0,value:void 0===l?t:c(l.call(n,t)).value}},throw:function(t){var e=s(this),n=e.iterator;e.done=!0;var l=n.throw;if(void 0===l)throw t;return l.call(n,t)}}),e||d(n.prototype,b,"Generator"),n}},function(t,e){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,e,n){var l=n(11),i=n(141);t.exports=i?function(t){return"symbol"==typeof t}:function(t){var e=l("Symbol");return"function"==typeof e&&Object(t)instanceof e}},function(t,e,n){var l=n(146),i=n(112);t.exports=Object.keys||function(t){return l(t,i)}},function(t,e,n){var l=n(4);t.exports=l},function(t,e,n){"use strict";var l=n(121).IteratorPrototype,i=n(26),c=n(38),o=n(34),d=n(75),r=function(){return this};t.exports=function(t,e,n){var a=e+" Iterator";return t.prototype=i(l,{next:c(1,n)}),o(t,a,!1,!0),d[a]=r,t}},function(t,e,n){var l=n(46),i=n(4);t.exports="process"==l(i.process)},function(t,e,n){var l=n(22),i=n(15),c="["+n(93)+"]",o=RegExp("^"+c+c+"*"),d=RegExp(c+c+"*$"),r=function(t){return function(e){var n=i(l(e));return 1&t&&(n=n.replace(o,"")),2&t&&(n=n.replace(d,"")),n}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,e,n){"use strict";var l=n(1);t.exports=function(){var t=l(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){var l=n(30),i=n(15),c=n(22),o=function(t){return function(e,n){var o,d,r=i(c(e)),a=l(n),u=r.length;return a<0||a>=u?t?"":void 0:(o=r.charCodeAt(a))<55296||o>56319||a+1===u||(d=r.charCodeAt(a+1))<56320||d>57343?t?r.charAt(a):o:t?r.slice(a,a+2):d-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,e,n){var l=n(2),i=n(46),c="".split;t.exports=l((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?c.call(t,""):Object(t)}:Object},function(t,e,n){var l=n(5),i=n(83);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.17.2",mode:l?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,e){var n=0,l=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+l).toString(36)}},function(t,e){t.exports={}},function(t,e,n){var l=n(29),i=n(10),c=n(50),o=function(t){return function(e,n,o){var d,r=l(e),a=i(r.length),u=c(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(2),i=/#|\.prototype\./,c=function(t,e){var n=d[o(t)];return n==a||n!=r&&("function"==typeof e?l(e):!!e)},o=c.normalize=function(t){return String(t).replace(i,".").toLowerCase()},d=c.data={},r=c.NATIVE="N",a=c.POLYFILL="P";t.exports=c},function(t,e,n){var l=n(197);t.exports=function(t,e){return new(l(t))(0===e?0:e)}},function(t,e,n){var l=n(2),i=n(7),c=n(48),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){var l=n(119),i=n(46),c=n(7)("toStringTag"),o="Arguments"==i(function(){return arguments}());t.exports=l?i: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=Object(t),c))?n:o?i(e):"Object"==(l=i(e))&&"function"==typeof e.callee?"Arguments":l}},function(t,e,n){var l=n(2);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){"use strict";var l=n(3),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(8),i=n(46),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(30);t.exports=function(t){var e=l(t);if(e<0)throw RangeError("The argument can't be less than 0");return e}},function(t,e,n){"use strict";var l=n(3),i=n(1),c=n(11)("Promise"),o=[].push,d=function(t){var e=0==t,n=1==t,d=2==t,r=3==t;return function(t,a){i(t);var u=l(t.next),Z=e?[]:void 0;return e||l(a),new c((function(l,s){var b=function(e,n){try{var l=t.return;if(void 0!==l)return c.resolve(l.call(t)).then((function(){e(n)}),(function(t){s(t)}))}catch(t){return s(t)}e(n)},m=function(t){b(s,t)},I=function(){try{c.resolve(i(u.call(t))).then((function(t){try{if(i(t).done)l(e?Z:!r&&(d||void 0));else{var u=t.value;e?(o.call(Z,u),I()):c.resolve(a(u)).then((function(t){n?I():d?t?I():b(l,!1):t?b(l,r||u):I()}),m)}}catch(t){m(t)}}),m)}catch(t){m(t)}};I()}))}};t.exports={toArray:d(0),forEach:d(1),every:d(2),some:d(3),find:d(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(4),i=n(108),c=l["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,n){var l=n(68),i=n(69),c=l("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e,n){var l=n(1);t.exports=function(t,e,n){var i,c;l(t);try{if(void 0===(i=t.return)){if("throw"===e)throw n;return n}i=i.call(t)}catch(t){c=!0,i=t}if("throw"===e)throw n;if(c)throw i;return l(i),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(29),i=n(35),c=n(75),o=n(17),d=n(120),r=o.set,a=o.getterFor("Array Iterator");t.exports=d(Array,"Array",(function(t,e){r(this,{type:"Array Iterator",target:l(t),index:0,kind:e})}),(function(){var t=a(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"),c.Arguments=c.Array,i("keys"),i("values"),i("entries")},function(t,e,n){var l=n(3),i=n(13),c=n(67),o=n(10),d=function(t){return function(e,n,d,r){l(n);var a=i(e),u=c(a),Z=o(a.length),s=t?Z-1:0,b=t?-1:1;if(d<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=n(r,u[s],s,a));return r}};t.exports={left:d(!1),right:d(!0)}},function(t,e,n){"use strict";var l=n(4),i=n(9),c=n(124),o=n(18),d=n(36),r=n(2),a=n(33),u=n(30),Z=n(10),s=n(158),b=n(241),m=n(27),I=n(42),h=n(49).f,p=n(14).f,g=n(116),G=n(34),y=n(17),X=y.get,V=y.set,W=l.ArrayBuffer,C=W,R=l.DataView,f=R&&R.prototype,S=Object.prototype,v=l.RangeError,Y=b.pack,K=b.unpack,N=function(t){return[255&t]},J=function(t){return[255&t,t>>8&255]},H=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},k=function(t){return Y(t,23,4)},L=function(t){return Y(t,52,8)},B=function(t,e){p(t.prototype,e,{get:function(){return X(this)[e]}})},x=function(t,e,n,l){var i=s(n),c=X(t);if(i+e>c.byteLength)throw v("Wrong index");var o=X(c.buffer).bytes,d=i+c.byteOffset,r=o.slice(d,d+e);return l?r:r.reverse()},A=function(t,e,n,l,i,c){var o=s(n),d=X(t);if(o+e>d.byteLength)throw v("Wrong index");for(var r=X(d.buffer).bytes,a=o+d.byteOffset,u=l(+i),Z=0;Z<e;Z++)r[a+Z]=u[c?Z:e-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var T,F=(C=function(t){return a(this,C),new W(s(t))}).prototype=W.prototype,z=h(W),w=0;z.length>w;)(T=z[w++])in C||o(C,T,W[T]);F.constructor=C}I&&m(f)!==S&&I(f,S);var Q=new R(new C(2)),j=f.setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||d(f,{setInt8:function(t,e){j.call(this,t,e<<24>>24)},setUint8:function(t,e){j.call(this,t,e<<24>>24)}},{unsafe:!0})}else C=function(t){a(this,C,"ArrayBuffer");var e=s(t);V(this,{bytes:g.call(new Array(e),0),byteLength:e}),i||(this.byteLength=e)},R=function(t,e,n){a(this,R,"DataView"),a(t,C,"DataView");var l=X(t).byteLength,c=u(e);if(c<0||c>l)throw v("Wrong offset");if(c+(n=void 0===n?l-c:Z(n))>l)throw v("Wrong length");V(this,{buffer:t,byteLength:n,byteOffset:c}),i||(this.buffer=t,this.byteLength=n,this.byteOffset=c)},i&&(B(C,"byteLength"),B(R,"buffer"),B(R,"byteLength"),B(R,"byteOffset")),d(R.prototype,{getInt8:function(t){return x(this,1,t)[0]<<24>>24},getUint8:function(t){return x(this,1,t)[0]},getInt16:function(t){var e=x(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=x(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return U(x(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return U(x(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return K(x(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return K(x(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){A(this,1,t,N,e)},setUint8:function(t,e){A(this,1,t,N,e)},setInt16:function(t,e){A(this,2,t,J,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){A(this,2,t,J,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){A(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){A(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){A(this,4,t,k,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){A(this,8,t,L,e,arguments.length>2?arguments[2]:void 0)}});G(C,"ArrayBuffer"),G(R,"DataView"),t.exports={ArrayBuffer:C,DataView:R}},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(72),o=n(25),d=n(55),r=n(6),a=n(33),u=n(8),Z=n(2),s=n(86),b=n(34),m=n(91);t.exports=function(t,e,n){var I=-1!==t.indexOf("Map"),h=-1!==t.indexOf("Weak"),p=I?"set":"add",g=i[t],G=g&&g.prototype,y=g,X={},V=function(t){var e=G[t];o(G,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(h&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return h&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(h&&!u(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(c(t,"function"!=typeof g||!(h||G.forEach&&!Z((function(){(new g).entries().next()})))))y=n.getConstructor(e,t,I,p),d.enable();else if(c(t,!0)){var W=new y,C=W[p](h?{}:-0,1)!=W,R=Z((function(){W.has(1)})),f=s((function(t){new g(t)})),S=!h&&Z((function(){for(var t=new g,e=5;e--;)t[p](e,e);return!t.has(-0)}));f||((y=e((function(e,n){a(e,y,t);var l=m(new g,e,y);return null!=n&&r(n,l[p],{that:l,AS_ENTRIES:I}),l}))).prototype=G,G.constructor=y),(R||S)&&(V("delete"),V("has"),I&&V("get")),(S||C)&&V(p),h&&G.clear&&delete G.clear}return X[t]=y,l({global:!0,forced:y!=g},X),b(y,t),h||n.setStrong(y,t,I),y}},function(t,e,n){var l=n(8),i=n(42);t.exports=function(t,e,n){var c,o;return i&&"function"==typeof(c=e.constructor)&&c!==n&&l(o=c.prototype)&&o!==n.prototype&&i(t,o),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(5),i=n(4),c=n(2),o=n(123);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},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(2),i=n(4).RegExp;e.UNSUPPORTED_Y=l((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=l((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,n){"use strict";var l,i,c=n(15),o=n(65),d=n(96),r=n(68),a=n(26),u=n(17).get,Z=n(177),s=n(178),b=RegExp.prototype.exec,m=r("native-string-replace",String.prototype.replace),I=b,h=(l=/a/,i=/b*/g,b.call(l,"a"),b.call(i,"a"),0!==l.lastIndex||0!==i.lastIndex),p=d.UNSUPPORTED_Y||d.BROKEN_CARET,g=void 0!==/()??/.exec("")[1];(h||g||p||Z||s)&&(I=function(t){var e,n,l,i,d,r,Z,s=this,G=u(s),y=c(t),X=G.raw;if(X)return X.lastIndex=s.lastIndex,e=I.call(X,y),s.lastIndex=X.lastIndex,e;var V=G.groups,W=p&&s.sticky,C=o.call(s),R=s.source,f=0,S=y;if(W&&(-1===(C=C.replace("y","")).indexOf("g")&&(C+="g"),S=y.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==y.charAt(s.lastIndex-1))&&(R="(?: "+R+")",S=" "+S,f++),n=new RegExp("^(?:"+R+")",C)),g&&(n=new RegExp("^"+R+"$(?!\\s)",C)),h&&(l=s.lastIndex),i=b.call(W?n:s,S),W?i?(i.input=i.input.slice(f),i[0]=i[0].slice(f),i.index=s.lastIndex,s.lastIndex+=i[0].length):s.lastIndex=0:h&&i&&(s.lastIndex=s.global?i.index+i[0].length:l),g&&i&&i.length>1&&m.call(i[0],n,(function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(i[d]=void 0)})),i&&V)for(i.groups=r=a(null),d=0;d<V.length;d++)r[(Z=V[d])[0]]=i[Z[1]];return i}),t.exports=I},function(t,e,n){"use strict";n(132);var l=n(25),i=n(97),c=n(2),o=n(7),d=n(18),r=o("species"),a=RegExp.prototype;t.exports=function(t,e,n,u){var Z=o(t),s=!c((function(){var e={};return e[Z]=function(){return 7},7!=""[t](e)})),b=s&&!c((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(!s||!b||n){var m=/./[Z],I=e(Z,""[t],(function(t,e,n,l,c){var o=e.exec;return o===i||o===a.exec?s&&!c?{done:!0,value:m.call(e,n,l)}:{done:!0,value:t.call(n,e,l)}:{done:!1}}));l(String.prototype,t,I[0]),l(a,Z,I[1])}u&&d(a[Z],"sham",!0)}},function(t,e,n){"use strict";var l=n(66).charAt;t.exports=function(t,e,n){return e+(n?l(t,e).length:1)}},function(t,e,n){var l=n(46),i=n(97);t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var c=n.call(t,e);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==l(t))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,n){var l=n(12),i=n(28),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,n){var l=n(3);t.exports=function(t){return null==t?void 0:l(t)}},function(t,e,n){"use strict";var l=n(1),i=n(3);t.exports=function(){for(var t,e=l(this),n=i(e.delete),c=!0,o=0,d=arguments.length;o<d;o++)t=n.call(e,arguments[o]),c=c&&t;return!!c}},function(t,e,n){"use strict";var l=n(3),i=n(19),c=n(6);t.exports=function(t){var e,n,o,d,r=arguments.length,a=r>1?arguments[1]:void 0;return l(this),(e=void 0!==a)&&l(a),null==t?new this:(n=[],e?(o=0,d=i(a,r>2?arguments[2]:void 0,2),c(t,(function(t){n.push(d(t,o++))}))):c(t,n.push,{that:n}),new this(n))}},function(t,e,n){"use strict";t.exports=function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}},function(t,e,n){var l=n(8),i=n(59),c=n(142),o=n(7)("toPrimitive");t.exports=function(t,e){if(!l(t)||i(t))return t;var n,d=t[o];if(void 0!==d){if(void 0===e&&(e="default"),n=d.call(t,e),!l(n)||i(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),c(t,e)}},function(t,e,n){var l=n(48),i=n(2);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(4);t.exports=function(t,e){try{Object.defineProperty(l,t,{value:e,configurable:!0,writable:!0})}catch(n){l[t]=e}return e}},function(t,e,n){var l=n(4),i=n(8),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(83),i=Function.toString;"function"!=typeof l.inspectSource&&(l.inspectSource=function(t){return i.call(t)}),t.exports=l.inspectSource},function(t,e,n){var l=n(11),i=n(49),c=n(113),o=n(1);t.exports=l("Reflect","ownKeys")||function(t){var e=i.f(o(t)),n=c.f;return n?e.concat(n(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var l=n(9),i=n(14),c=n(1),o=n(60);t.exports=l?Object.defineProperties:function(t,e){c(t);for(var n,l=o(e),d=l.length,r=0;d>r;)i.f(t,n=l[r++],e[n]);return t}},function(t,e,n){var l=n(29),i=n(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return i(t)}catch(t){return o.slice()}}(t):i(l(t))}},function(t,e,n){"use strict";var l=n(13),i=n(50),c=n(10);t.exports=function(t){for(var e=l(this),n=c(e.length),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(1),i=n(85);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(75),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,e,n){"use strict";var l=n(0),i=n(62),c=n(27),o=n(42),d=n(34),r=n(18),a=n(25),u=n(7),Z=n(5),s=n(75),b=n(121),m=b.IteratorPrototype,I=b.BUGGY_SAFARI_ITERATORS,h=u("iterator"),p=function(){return this};t.exports=function(t,e,n,u,b,g,G){i(n,e,u);var y,X,V,W=function(t){if(t===b&&v)return v;if(!I&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},C=e+" Iterator",R=!1,f=t.prototype,S=f[h]||f["@@iterator"]||b&&f[b],v=!I&&S||W(b),Y="Array"==e&&f.entries||S;if(Y&&(y=c(Y.call(new t)),m!==Object.prototype&&y.next&&(Z||c(y)===m||(o?o(y,m):"function"!=typeof y[h]&&r(y,h,p)),d(y,C,!0,!0),Z&&(s[C]=p))),"values"==b&&S&&"values"!==S.name&&(R=!0,v=function(){return S.call(this)}),Z&&!G||f[h]===v||r(f,h,v),s[e]=v,b)if(X={values:W("values"),keys:g?v:W("keys"),entries:W("entries")},G)for(V in X)(I||R||!(V in f))&&a(f,V,X[V]);else l({target:e,proto:!0,forced:I||R},X);return X}},function(t,e,n){"use strict";var l,i,c,o=n(2),d=n(27),r=n(18),a=n(16),u=n(7),Z=n(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(i=d(d(c)))!==Object.prototype&&(l=i):b=!0);var m=null==l||o((function(){var t={};return l[s].call(t)!==t}));m&&(l={}),Z&&!m||a(l,s)||r(l,s,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:b}},function(t,e,n){var l=n(2);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var l=n(39).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(10),i=n(15),c=n(126),o=n(22),d=Math.ceil,r=function(t){return function(e,n,r){var a,u,Z=i(o(e)),s=Z.length,b=void 0===r?" ":i(r),m=l(n);return m<=s||""==b?Z:(a=m-s,(u=c.call(b,d(a/b.length))).length>a&&(u=u.slice(0,a)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,e,n){"use strict";var l=n(30),i=n(15),c=n(22);t.exports=function(t){var e=i(c(this)),n="",o=l(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(n+=e);return n}},function(t,e,n){"use strict";var l=n(90),i=n(161);t.exports=l("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i)},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(8),i=Math.floor;t.exports=function(t){return!l(t)&&isFinite(t)&&i(t)===t}},function(t,e,n){var l=n(4),i=n(15),c=n(64).trim,o=n(93),d=l.parseInt,r=/^[+-]?0[Xx]/,a=8!==d(o+"08")||22!==d(o+"0x16");t.exports=a?function(t,e){var n=c(i(t));return d(n,e>>>0||(r.test(n)?16:10))}:d},function(t,e,n){var l,i,c,o,d=n(4),r=n(2),a=n(19),u=n(147),Z=n(109),s=n(171),b=n(63),m=d.setImmediate,I=d.clearImmediate,h=d.process,p=d.MessageChannel,g=d.Dispatch,G=0,y={};try{l=d.location}catch(t){}var X=function(t){if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},V=function(t){return function(){X(t)}},W=function(t){X(t.data)},C=function(t){d.postMessage(String(t),l.protocol+"//"+l.host)};m&&I||(m=function(t){for(var e=[],n=arguments.length,l=1;n>l;)e.push(arguments[l++]);return y[++G]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},i(G),G},I=function(t){delete y[t]},b?i=function(t){h.nextTick(V(t))}:g&&g.now?i=function(t){g.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,i=a(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts&&l&&"file:"!==l.protocol&&!r(C)?(i=C,d.addEventListener("message",W,!1)):i="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),X(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:m,clear:I}},function(t,e,n){"use strict";var l=n(0),i=n(97);l({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,n){var l=n(79);t.exports=function(t){if(l(t))throw TypeError("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(2),i=n(93);t.exports=function(t){return l((function(){return!!i[t]()||"
"!="
"[t]()||i[t].name!==t}))}},function(t,e,n){var l=n(4),i=n(2),c=n(86),o=n(12).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){"use strict";var l,i=n(4),c=n(36),o=n(55),d=n(90),r=n(186),a=n(8),u=n(17).enforce,Z=n(144),s=!i.ActiveXObject&&"ActiveXObject"in i,b=Object.isExtensible,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},I=t.exports=d("WeakMap",m,r);if(Z&&s){l=r.getConstructor(m,"WeakMap",!0),o.enable();var h=I.prototype,p=h.delete,g=h.has,G=h.get,y=h.set;c(h,{delete:function(t){if(a(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new l),p.call(this,t)||e.frozen.delete(t)}return p.call(this,t)},has:function(t){if(a(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new l),g.call(this,t)||e.frozen.has(t)}return g.call(this,t)},get:function(t){if(a(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new l),g.call(this,t)?G.call(this,t):e.frozen.get(t)}return G.call(this,t)},set:function(t,e){if(a(t)&&!b(t)){var n=u(this);n.frozen||(n.frozen=new l),g.call(this,t)?y.call(this,t,e):n.frozen.set(t,e)}else y.call(this,t,e);return this}})}},function(t,e,n){"use strict";var l=n(1);t.exports=function(t,e){var n,i=l(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof e&&"function"!=typeof c)throw TypeError("At least one callback required");return i.has(t)?(n=i.get(t),"function"==typeof e&&(n=e(n),i.set(t,n))):"function"==typeof c&&(n=c(),i.set(t,n)),n}},function(t,e,n){"use strict";var l=n(17),i=n(62),c=n(16),o=n(60),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){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(107);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var l=n(8);t.exports=function(t,e){var n,i;if("string"===e&&"function"==typeof(n=t.toString)&&!l(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!l(i=n.call(t)))return i;if("string"!==e&&"function"==typeof(n=t.toString)&&!l(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var l=n(9),i=n(2),c=n(109);t.exports=!l&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var l=n(4),i=n(110),c=l.WeakMap;t.exports="function"==typeof c&&/native code/.test(i(c))},function(t,e,n){var l=n(16),i=n(111),c=n(24),o=n(14);t.exports=function(t,e){for(var n=i(e),d=o.f,r=c.f,a=0;a<n.length;a++){var u=n[a];l(t,u)||d(t,u,r(e,u))}}},function(t,e,n){var l=n(16),i=n(29),c=n(71).indexOf,o=n(70);t.exports=function(t,e){var n,d=i(t),r=0,a=[];for(n in d)!l(o,n)&&l(d,n)&&a.push(n);for(;e.length>r;)l(d,n=e[r++])&&(~c(a,n)||a.push(n));return a}},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){"use strict";var l=n(13),i=n(50),c=n(10),o=Math.min;t.exports=[].copyWithin||function(t,e){var n=l(this),d=c(n.length),r=i(t,d),a=i(e,d),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?d:i(u,d))-a,d-r),s=1;for(a<r&&r<a+Z&&(s=-1,a+=Z-1,r+=Z-1);Z-- >0;)a in n?n[r]=n[a]:delete n[r],r+=s,a+=s;return n}},function(t,e,n){"use strict";var l=n(51),i=n(10),c=n(19),o=function(t,e,n,d,r,a,u,Z){for(var s,b=r,m=0,I=!!u&&c(u,Z,3);m<d;){if(m in n){if(s=I?I(n[m],m,e):n[m],a>0&&l(s))b=o(t,e,s,i(s.length),b,a-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}m++}return b};t.exports=o},function(t,e,n){"use strict";var l=n(23).forEach,i=n(40)("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(19),i=n(13),c=n(117),o=n(118),d=n(10),r=n(53),a=n(41),u=n(52);t.exports=function(t){var e,n,Z,s,b,m,I=i(t),h="function"==typeof this?this:Array,p=arguments.length,g=p>1?arguments[1]:void 0,G=void 0!==g,y=u(I),X=0;if(G&&(g=l(g,p>2?arguments[2]:void 0,2)),null==y||h==Array&&o(y))for(n=new h(e=d(I.length));e>X;X++)m=G?g(I[X],X):I[X],r(n,X,m);else for(b=(s=a(I,y)).next,n=new h;!(Z=b.call(s)).done;X++)m=G?c(s,g,[Z.value,X],!0):Z.value,r(n,X,m);return n.length=X,n}},function(t,e,n){var l=n(8);t.exports=function(t){if(!l(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,n){"use strict";var l=n(29),i=n(30),c=n(10),o=n(40),d=Math.min,r=[].lastIndexOf,a=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=a||!u;t.exports=Z?function(t){if(a)return r.apply(this,arguments)||0;var e=l(this),n=c(e.length),o=n-1;for(arguments.length>1&&(o=d(o,i(arguments[1]))),o<0&&(o=n+o);o>=0;o--)if(o in e&&e[o]===t)return o||0;return-1}:r},function(t,e){var n=Math.floor,l=function(t,e){var o=t.length,d=n(o/2);return o<8?i(t,e):c(l(t.slice(0,d),e),l(t.slice(d),e),e)},i=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},c=function(t,e,n){for(var l=t.length,i=e.length,c=0,o=0,d=[];c<l||o<i;)c<l&&o<i?d.push(n(t[c],e[o])<=0?t[c++]:e[o++]):d.push(c<l?t[c++]:e[o++]);return d};t.exports=l},function(t,e,n){var l=n(39).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,e,n){var l=n(39);t.exports=/MSIE|Trident/.test(l)},function(t,e,n){var l=n(30),i=n(10);t.exports=function(t){if(void 0===t)return 0;var e=l(t),n=i(e);if(e!==n)throw RangeError("Wrong length or index");return n}},function(t,e,n){"use strict";var l=n(3),i=n(8),c=[].slice,o={},d=function(t,e,n){if(!(e in o)){for(var l=[],i=0;i<e;i++)l[i]="a["+i+"]";o[e]=Function("C,a","return new C("+l.join(",")+")")}return o[e](t,n)};t.exports=Function.bind||function(t){var e=l(this),n=c.call(arguments,1),o=function(){var l=n.concat(c.call(arguments));return this instanceof o?d(e,l.length,l):e.apply(t,l)};return i(e.prototype)&&(o.prototype=e.prototype),o}},function(t,e,n){n(0)({global:!0},{globalThis:n(4)})},function(t,e,n){"use strict";var l=n(14).f,i=n(26),c=n(36),o=n(19),d=n(33),r=n(6),a=n(120),u=n(54),Z=n(9),s=n(55).fastKey,b=n(17),m=b.set,I=b.getterFor;t.exports={getConstructor:function(t,e,n,a){var u=t((function(t,l){d(t,u,e),m(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),b=I(e),h=function(t,e,n){var l,i,c=b(t),o=p(t,e);return o?o.value=n:(c.last=o={index:i=s(e,!0),key:e,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),Z?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},p=function(t,e){var n,l=b(t),i=s(e);if("F"!==i)return l.index[i];for(n=l.first;n;n=n.next)if(n.key==e)return n};return c(u.prototype,{clear:function(){for(var t=b(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,Z?t.size=0:this.size=0},delete:function(t){var e=b(this),n=p(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),Z?e.size--:this.size--}return!!n},forEach:function(t){for(var e,n=b(this),l=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:n.first;)for(l(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,n?{get:function(t){var e=p(this,t);return e&&e.value},set:function(t,e){return h(this,0===t?0:t,e)}}:{add:function(t){return h(this,t=0===t?0:t,t)}}),Z&&l(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,e,n){var l=e+" Iterator",i=I(e),c=I(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(128),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(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,e,n){var l=n(4),i=n(15),c=n(64).trim,o=n(93),d=l.parseFloat,r=1/d(o+"-0")!=-1/0;t.exports=r?function(t){var e=c(i(t)),n=d(e);return 0===n&&"-"==e.charAt(0)?-0:n}:d},function(t,e){var n=1..valueOf;t.exports=function(t){return n.call(t)}},function(t,e,n){"use strict";var l=n(9),i=n(2),c=n(60),o=n(113),d=n(82),r=n(13),a=n(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||i((function(){if(l&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(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!=u({},t)[n]||"abcdefghijklmnopqrst"!=c(u({},e)).join("")}))?function(t,e){for(var n=r(t),i=arguments.length,u=1,Z=o.f,s=d.f;i>u;)for(var b,m=a(arguments[u++]),I=Z?c(m).concat(Z(m)):c(m),h=I.length,p=0;h>p;)b=I[p++],l&&!s.call(m,b)||(n[b]=m[b]);return n}:u},function(t,e,n){var l=n(9),i=n(60),c=n(29),o=n(82).f,d=function(t){return function(e){for(var n,d=c(e),r=i(d),a=r.length,u=0,Z=[];a>u;)n=r[u++],l&&!o.call(d,n)||Z.push(t?[n,d[n]]:d[n]);return Z}};t.exports={entries:d(!0),values:d(!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(4);t.exports=l.Promise},function(t,e,n){var l=n(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,e,n){var l,i,c,o,d,r,a,u,Z=n(4),s=n(24).f,b=n(131).set,m=n(171),I=n(316),h=n(317),p=n(63),g=Z.MutationObserver||Z.WebKitMutationObserver,G=Z.document,y=Z.process,X=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(l=function(){var t,e;for(p&&(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()},m||p||h||!g||!G?!I&&X&&X.resolve?((a=X.resolve(void 0)).constructor=X,u=a.then,o=function(){u.call(a,l)}):o=p?function(){y.nextTick(l)}:function(){b.call(Z,l)}:(d=!0,r=G.createTextNode(""),new g(l).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=W||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),i=n(8),c=n(78);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(4);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){"use strict";var l=n(0),i=n(3),c=n(78),o=n(95),d=n(6);l({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=c.f(e),l=n.resolve,r=n.reject,a=o((function(){var n=i(e.resolve),c=[],o=0,r=1;d(t,(function(t){var i=o++,d=!1;c.push(void 0),r++,n.call(e,t).then((function(t){d||(d=!0,c[i]={status:"fulfilled",value:t},--r||l(c))}),(function(t){d||(d=!0,c[i]={status:"rejected",reason:t},--r||l(c))}))})),--r||l(c)}));return a.error&&r(a.value),n.promise}})},function(t,e,n){var l=n(16);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,e,n){var l=n(2),i=n(4).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(2),i=n(4).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(90),i=n(161);t.exports=l("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i)},function(t,e,n){"use strict";var l=n(66).charAt,i=n(15),c=n(17),o=n(120),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){"use strict";var l=n(0),i=n(62),c=n(22),o=n(10),d=n(15),r=n(3),a=n(1),u=n(46),Z=n(79),s=n(65),b=n(18),m=n(2),I=n(7),h=n(28),p=n(99),g=n(17),G=n(5),y=I("matchAll"),X=g.set,V=g.getterFor("RegExp String Iterator"),W=RegExp.prototype,C=W.exec,R="".matchAll,f=!!R&&!m((function(){"a".matchAll(/./)})),S=i((function(t,e,n,l){X(this,{type:"RegExp String Iterator",regexp:t,string:e,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,l=function(t,e){var n,l=t.exec;if("function"==typeof l){if("object"!=typeof(n=l.call(t,e)))throw TypeError("Incorrect exec result");return n}return C.call(t,e)}(e,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===d(l[0])&&(e.lastIndex=p(n,o(e.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),v=function(t){var e,n,l,i,c,r,u=a(this),Z=d(t);return e=h(u,RegExp),void 0===(n=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(n=s.call(u)),l=void 0===n?"":d(n),i=new e(e===RegExp?u.source:u,l),c=!!~l.indexOf("g"),r=!!~l.indexOf("u"),i.lastIndex=o(u.lastIndex),new S(i,Z,c,r)};l({target:"String",proto:!0,forced:f},{matchAll:function(t){var e,n,l,i=c(this);if(null!=t){if(Z(t)&&!~d(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return R.apply(i,arguments);if(void 0===(n=t[y])&&G&&"RegExp"==u(t)&&(n=v),null!=n)return r(n).call(t,i)}else if(f)return R.apply(i,arguments);return e=d(i),l=new RegExp(t,"g"),G?v.call(l,e):l[y](e)}}),G||y in W||b(W,y,v)},function(t,e,n){var l=n(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,e,n){var l=n(13),i=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,r,a,u){var Z=n+t.length,s=r.length,b=d;return void 0!==a&&(a=l(a),b=o),c.call(u,b,(function(l,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(Z);case"<":o=a[c.slice(1,-1)];break;default:var d=+c;if(0===d)return l;if(d>s){var u=i(d/10);return 0===u?l:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):l}o=r[d-1]}return void 0===o?"":o}))}},function(t,e,n){var l=n(80);t.exports=function(t,e){var n=l(t);if(n%e)throw RangeError("Wrong offset");return n}},function(t,e,n){var l=n(13),i=n(10),c=n(41),o=n(52),d=n(118),r=n(19),a=n(12).aTypedArrayConstructor;t.exports=function(t){var e,n,u,Z,s,b,m=l(t),I=arguments.length,h=I>1?arguments[1]:void 0,p=void 0!==h,g=o(m);if(null!=g&&!d(g))for(b=(s=c(m,g)).next,m=[];!(Z=b.call(s)).done;)m.push(Z.value);for(p&&I>2&&(h=r(h,arguments[2],2)),n=i(m.length),u=new(a(this))(n),e=0;n>e;e++)u[e]=p?h(m[e],e):m[e];return u}},function(t,e,n){"use strict";var l=n(36),i=n(55).getWeakData,c=n(1),o=n(8),d=n(33),r=n(6),a=n(23),u=n(16),Z=n(17),s=Z.set,b=Z.getterFor,m=a.find,I=a.findIndex,h=0,p=function(t){return t.frozen||(t.frozen=new g)},g=function(){this.entries=[]},G=function(t,e){return m(t.entries,(function(t){return t[0]===e}))};g.prototype={get:function(t){var e=G(this,t);if(e)return e[1]},has:function(t){return!!G(this,t)},set:function(t,e){var n=G(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=I(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,a){var Z=t((function(t,l){d(t,Z,e),s(t,{type:e,id:h++,frozen:void 0}),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),m=b(e),I=function(t,e,n){var l=m(t),o=i(c(e),!0);return!0===o?p(l).set(e,n):o[l.id]=n,t};return l(Z.prototype,{delete:function(t){var e=m(this);if(!o(t))return!1;var n=i(t);return!0===n?p(e).delete(t):n&&u(n,e.id)&&delete n[e.id]},has:function(t){var e=m(this);if(!o(t))return!1;var n=i(t);return!0===n?p(e).has(t):n&&u(n,e.id)}}),l(Z.prototype,n?{get:function(t){var e=m(this);if(o(t)){var n=i(t);return!0===n?p(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return I(this,t,e)}}:{add:function(t){return I(this,t,!0)}}),Z}}},function(t,e,n){var l=n(188),i=n(3),c=n(1),o=n(41),d=n(102),r=n(7)("asyncIterator");t.exports=function(t,e){var n=arguments.length<2?d(t[r]):e;return void 0===n?new l(o(t)):c(i(n).call(t))}},function(t,e,n){"use strict";var l=n(61),i=n(1),c=n(26),o=n(102),d=n(36),r=n(17),a=n(11)("Promise"),u=r.set,Z=r.get,s=function(t,e,n){var l=t.done;a.resolve(t.value).then((function(t){e({done:l,value:t})}),n)},b=function(t){u(this,{iterator:i(t),next:t.next})};b.prototype=d(c(l.AsyncIterator.prototype),{next:function(t){var e=Z(this),n=!!arguments.length;return new a((function(l,c){var o=i(e.next.apply(e.iterator,n?[t]:[]));s(o,l,c)}))},return:function(t){var e=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(e.return);if(void 0===d)return l({done:!0,value:t});var r=i(d.apply(e,n?[t]:[]));s(r,l,c)}))},throw:function(t){var e=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(e.throw);if(void 0===d)return c(t);var r=i(d.apply(e,n?[t]:[]));s(r,l,c)}))}}),t.exports=b},function(t,e,n){var l=n(127),i=n(137),c=n(26),o=n(8),d=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};d.prototype.get=function(t,e){return this[t]||(this[t]=e())},d.prototype.next=function(t,e,n){var c=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new i):this.primitives||(this.primitives=new l),o=c.get(e);return o||c.set(e,o=new d),o};var r=new d;t.exports=function(){var t,e,n=r,l=arguments.length;for(t=0;t<l;t++)o(e=arguments[t])&&(n=n.next(t,e,!0));if(this===Object&&n===r)throw TypeError("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){return 0===arguments.length||t!=t||e!=e||n!=n||l!=l||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-l)/(n-e)+l}},function(t,e,n){"use strict";var l=n(1),i=n(3);t.exports=function(){for(var t=l(this),e=i(t.add),n=0,c=arguments.length;n<c;n++)e.call(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(2),i=n(7),c=n(5),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(87);var l=n(0),i=n(11),c=n(193),o=n(25),d=n(36),r=n(34),a=n(62),u=n(17),Z=n(33),s=n(16),b=n(19),m=n(76),I=n(1),h=n(8),p=n(15),g=n(26),G=n(38),y=n(41),X=n(52),V=n(7),W=i("fetch"),C=i("Request"),R=C&&C.prototype,f=i("Headers"),S=V("iterator"),v=u.set,Y=u.getterFor("URLSearchParams"),K=u.getterFor("URLSearchParamsIterator"),N=/\+/g,J=Array(4),H=function(t){return J[t-1]||(J[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},U=function(t){try{return decodeURIComponent(t)}catch(e){return t}},k=function(t){var e=t.replace(N," "),n=4;try{return decodeURIComponent(e)}catch(t){for(;n;)e=e.replace(H(n--),U);return e}},L=/[!'()~]|%20/g,B={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},x=function(t){return B[t]},A=function(t){return encodeURIComponent(t).replace(L,x)},T=function(t,e){if(e)for(var n,l,i=e.split("&"),c=0;c<i.length;)(n=i[c++]).length&&(l=n.split("="),t.push({key:k(l.shift()),value:k(l.join("="))}))},F=function(t){this.entries.length=0,T(this.entries,t)},z=function(t,e){if(t<e)throw TypeError("Not enough arguments")},w=a((function(t,e){v(this,{type:"URLSearchParamsIterator",iterator:y(Y(t).entries),kind:e})}),"Iterator",(function(){var t=K(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})),Q=function(){Z(this,Q,"URLSearchParams");var t,e,n,l,i,c,o,d,r,a=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:F}),void 0!==a)if(h(a))if("function"==typeof(t=X(a)))for(n=(e=y(a,t)).next;!(l=n.call(e)).done;){if((o=(c=(i=y(I(l.value))).next).call(i)).done||(d=c.call(i)).done||!c.call(i).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(d.value)})}else for(r in a)s(a,r)&&b.push({key:r,value:p(a[r])});else T(b,"string"==typeof a?"?"===a.charAt(0)?a.slice(1):a:p(a))},j=Q.prototype;if(d(j,{append:function(t,e){z(arguments.length,2);var n=Y(this);n.entries.push({key:p(t),value:p(e)}),n.updateURL()},delete:function(t){z(arguments.length,1);for(var e=Y(this),n=e.entries,l=p(t),i=0;i<n.length;)n[i].key===l?n.splice(i,1):i++;e.updateURL()},get:function(t){z(arguments.length,1);for(var e=Y(this).entries,n=p(t),l=0;l<e.length;l++)if(e[l].key===n)return e[l].value;return null},getAll:function(t){z(arguments.length,1);for(var e=Y(this).entries,n=p(t),l=[],i=0;i<e.length;i++)e[i].key===n&&l.push(e[i].value);return l},has:function(t){z(arguments.length,1);for(var e=Y(this).entries,n=p(t),l=0;l<e.length;)if(e[l++].key===n)return!0;return!1},set:function(t,e){z(arguments.length,1);for(var n,l=Y(this),i=l.entries,c=!1,o=p(t),d=p(e),r=0;r<i.length;r++)(n=i[r]).key===o&&(c?i.splice(r--,1):(c=!0,n.value=d));c||i.push({key:o,value:d}),l.updateURL()},sort:function(){var t,e,n,l=Y(this),i=l.entries,c=i.slice();for(i.length=0,n=0;n<c.length;n++){for(t=c[n],e=0;e<n;e++)if(i[e].key>t.key){i.splice(e,0,t);break}e===n&&i.push(t)}l.updateURL()},forEach:function(t){for(var e,n=Y(this).entries,l=b(t,arguments.length>1?arguments[1]:void 0,3),i=0;i<n.length;)l((e=n[i++]).value,e.key,this)},keys:function(){return new w(this,"keys")},values:function(){return new w(this,"values")},entries:function(){return new w(this,"entries")}},{enumerable:!0}),o(j,S,j.entries),o(j,"toString",(function(){for(var t,e=Y(this).entries,n=[],l=0;l<e.length;)t=e[l++],n.push(A(t.key)+"="+A(t.value));return n.join("&")}),{enumerable:!0}),r(Q,"URLSearchParams"),l({global:!0,forced:!c},{URLSearchParams:Q}),!c&&"function"==typeof f){var P=function(t){if(h(t)){var e,n=t.body;if("URLSearchParams"===m(n))return(e=t.headers?new f(t.headers):new f).has("content-type")||e.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),g(t,{body:G(0,String(n)),headers:G(0,e)})}return t};if("function"==typeof W&&l({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?P(arguments[1]):{})}}),"function"==typeof C){var M=function(t){return Z(this,M,"Request"),new C(t,arguments.length>1?P(arguments[1]):{})};R.constructor=M,M.prototype=R,l({global:!0,forced:!0},{Request:M})}}t.exports={URLSearchParams:Q,getState:Y}},function(t,n){t.exports=e},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(11),o=n(5),d=n(9),r=n(107),a=n(2),u=n(16),Z=n(51),s=n(8),b=n(59),m=n(1),I=n(13),h=n(29),p=n(47),g=n(15),G=n(38),y=n(26),X=n(60),V=n(49),W=n(115),C=n(113),R=n(24),f=n(14),S=n(82),v=n(18),Y=n(25),K=n(68),N=n(84),J=n(70),H=n(69),U=n(7),k=n(148),L=n(21),B=n(34),x=n(17),A=n(23).forEach,T=N("hidden"),F=U("toPrimitive"),z=x.set,w=x.getterFor("Symbol"),Q=Object.prototype,j=i.Symbol,P=c("JSON","stringify"),M=R.f,E=f.f,D=W.f,O=S.f,q=K("symbols"),_=K("op-symbols"),$=K("string-to-symbol-registry"),tt=K("symbol-to-string-registry"),et=K("wks"),nt=i.QObject,lt=!nt||!nt.prototype||!nt.prototype.findChild,it=d&&a((function(){return 7!=y(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,n){var l=M(Q,e);l&&delete Q[e],E(t,e,n),l&&t!==Q&&E(Q,e,l)}:E,ct=function(t,e){var n=q[t]=y(j.prototype);return z(n,{type:"Symbol",tag:t,description:e}),d||(n.description=e),n},ot=function(t,e,n){t===Q&&ot(_,e,n),m(t);var l=p(e);return m(n),u(q,l)?(n.enumerable?(u(t,T)&&t[T][l]&&(t[T][l]=!1),n=y(n,{enumerable:G(0,!1)})):(u(t,T)||E(t,T,G(1,{})),t[T][l]=!0),it(t,l,n)):E(t,l,n)},dt=function(t,e){m(t);var n=h(e),l=X(n).concat(Zt(n));return A(l,(function(e){d&&!rt.call(n,e)||ot(t,e,n[e])})),t},rt=function(t){var e=p(t),n=O.call(this,e);return!(this===Q&&u(q,e)&&!u(_,e))&&(!(n||!u(this,e)||!u(q,e)||u(this,T)&&this[T][e])||n)},at=function(t,e){var n=h(t),l=p(e);if(n!==Q||!u(q,l)||u(_,l)){var i=M(n,l);return!i||!u(q,l)||u(n,T)&&n[T][l]||(i.enumerable=!0),i}},ut=function(t){var e=D(h(t)),n=[];return A(e,(function(t){u(q,t)||u(J,t)||n.push(t)})),n},Zt=function(t){var e=t===Q,n=D(e?_:h(t)),l=[];return A(n,(function(t){!u(q,t)||e&&!u(Q,t)||l.push(q[t])})),l};(r||(Y((j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,e=H(t),n=function(t){this===Q&&n.call(_,t),u(this,T)&&u(this[T],e)&&(this[T][e]=!1),it(this,e,G(1,t))};return d&<&&it(Q,e,{configurable:!0,set:n}),ct(e,t)}).prototype,"toString",(function(){return w(this).tag})),Y(j,"withoutSetter",(function(t){return ct(H(t),t)})),S.f=rt,f.f=ot,R.f=at,V.f=W.f=ut,C.f=Zt,k.f=function(t){return ct(U(t),t)},d&&(E(j.prototype,"description",{configurable:!0,get:function(){return w(this).description}}),o||Y(Q,"propertyIsEnumerable",rt,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:j}),A(X(et),(function(t){L(t)})),l({target:"Symbol",stat:!0,forced:!r},{for:function(t){var e=g(t);if(u($,e))return $[e];var n=j(e);return $[e]=n,tt[n]=e,n},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){lt=!0},useSimple:function(){lt=!1}}),l({target:"Object",stat:!0,forced:!r,sham:!d},{create:function(t,e){return void 0===e?y(t):dt(y(t),e)},defineProperty:ot,defineProperties:dt,getOwnPropertyDescriptor:at}),l({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),l({target:"Object",stat:!0,forced:a((function(){C.f(1)}))},{getOwnPropertySymbols:function(t){return C.f(I(t))}}),P)&&l({target:"JSON",stat:!0,forced:!r||a((function(){var t=j();return"[null]"!=P([t])||"{}"!=P({a:t})||"{}"!=P(Object(t))}))},{stringify:function(t,e,n){for(var l,i=[t],c=1;arguments.length>c;)i.push(arguments[c++]);if(l=e,(s(e)||void 0!==t)&&!b(t))return Z(e)||(e=function(t,e){if("function"==typeof l&&(e=l.call(this,t,e)),!b(e))return e}),i[1]=e,P.apply(null,i)}});j.prototype[F]||v(j.prototype,F,j.prototype.valueOf),B(j,"Symbol"),J[T]=!0},function(t,e,n){var l=n(8),i=n(51),c=n(7)("species");t.exports=function(t){var e;return i(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!i(e.prototype)?l(e)&&null===(e=e[c])&&(e=void 0):e=void 0),void 0===e?Array:e}},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(4),o=n(16),d=n(8),r=n(14).f,a=n(145),u=c.Symbol;if(i&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[e]=!0),e};a(s,u);var b=s.prototype=u.prototype;b.constructor=s;var m=b.toString,I="Symbol(test)"==String(u("test")),h=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=d(this)?this.valueOf():this,e=m.call(t);if(o(Z,t))return"";var n=I?e.slice(7,-1):e.replace(h,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:s})}},function(t,e,n){n(21)("asyncIterator")},function(t,e,n){n(21)("hasInstance")},function(t,e,n){n(21)("isConcatSpreadable")},function(t,e,n){n(21)("iterator")},function(t,e,n){n(21)("match")},function(t,e,n){n(21)("matchAll")},function(t,e,n){n(21)("replace")},function(t,e,n){n(21)("search")},function(t,e,n){n(21)("species")},function(t,e,n){n(21)("split")},function(t,e,n){n(21)("toPrimitive")},function(t,e,n){n(21)("toStringTag")},function(t,e,n){n(21)("unscopables")},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(51),o=n(8),d=n(13),r=n(10),a=n(53),u=n(73),Z=n(74),s=n(7),b=n(48),m=s("isConcatSpreadable"),I=b>=51||!i((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),h=Z("concat"),p=function(t){if(!o(t))return!1;var e=t[m];return void 0!==e?!!e:c(t)};l({target:"Array",proto:!0,forced:!I||!h},{concat:function(t){var e,n,l,i,c,o=d(this),Z=u(o,0),s=0;for(e=-1,l=arguments.length;e<l;e++)if(p(c=-1===e?o:arguments[e])){if(s+(i=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<i;n++,s++)n in c&&a(Z,s,c[n])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");a(Z,s++,c)}return Z.length=s,Z}})},function(t,e,n){var l=n(0),i=n(149),c=n(35);l({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,n){"use strict";var l=n(0),i=n(23).every;l({target:"Array",proto:!0,forced:!n(40)("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(116),c=n(35);l({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,n){"use strict";var l=n(0),i=n(23).filter;l({target:"Array",proto:!0,forced:!n(74)("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(23).find,c=n(35),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(23).findIndex,c=n(35),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(150),c=n(13),o=n(10),d=n(30),r=n(73);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),n=o(e.length),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(150),c=n(13),o=n(10),d=n(3),r=n(73);l({target:"Array",proto:!0},{flatMap:function(t){var e,n=c(this),l=o(n.length);return d(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(151);l({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,n){var l=n(0),i=n(152);l({target:"Array",stat:!0,forced:!n(86)((function(t){Array.from(t)}))},{from:i})},function(t,e,n){"use strict";var l=n(0),i=n(71).includes,c=n(35);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(71).indexOf,c=n(40),o=[].indexOf,d=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");l({target:"Array",proto:!0,forced:d||!r},{indexOf:function(t){return d?o.apply(this,arguments)||0:i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){n(0)({target:"Array",stat:!0},{isArray:n(51)})},function(t,e,n){"use strict";var l=n(0),i=n(67),c=n(29),o=n(40),d=[].join,r=i!=Object,a=o("join",",");l({target:"Array",proto:!0,forced:r||!a},{join:function(t){return d.call(c(this),void 0===t?",":t)}})},function(t,e,n){var l=n(0),i=n(154);l({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,n){"use strict";var l=n(0),i=n(23).map;l({target:"Array",proto:!0,forced:!n(74)("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(2),c=n(53);l({target:"Array",stat:!0,forced:i((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)c(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var l=n(0),i=n(88).left,c=n(40),o=n(48),d=n(63);l({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce: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(88).right,c=n(40),o=n(48),d=n(63);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(51),c=[].reverse,o=[1,2];l({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return i(this)&&(this.length=this.length),c.call(this)}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(51),o=n(50),d=n(10),r=n(29),a=n(53),u=n(7),Z=n(74)("slice"),s=u("species"),b=[].slice,m=Math.max;l({target:"Array",proto:!0,forced:!Z},{slice:function(t,e){var n,l,u,Z=r(this),I=d(Z.length),h=o(t,I),p=o(void 0===e?I:e,I);if(c(Z)&&("function"!=typeof(n=Z.constructor)||n!==Array&&!c(n.prototype)?i(n)&&null===(n=n[s])&&(n=void 0):n=void 0,n===Array||void 0===n))return b.call(Z,h,p);for(l=new(void 0===n?Array:n)(m(p-h,0)),u=0;h<p;h++,u++)h in Z&&a(l,u,Z[h]);return l.length=u,l}})},function(t,e,n){"use strict";var l=n(0),i=n(23).some;l({target:"Array",proto:!0,forced:!n(40)("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(13),o=n(10),d=n(15),r=n(2),a=n(155),u=n(40),Z=n(156),s=n(157),b=n(48),m=n(123),I=[],h=I.sort,p=r((function(){I.sort(void 0)})),g=r((function(){I.sort(null)})),G=u("sort"),y=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(m)return m<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++)I.push({k:e+l,v:n})}for(I.sort((function(t,e){return e.v-t.v})),l=0;l<I.length;l++)e=I[l].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));l({target:"Array",proto:!0,forced:p||!g||!G||!y},{sort:function(t){void 0!==t&&i(t);var e=c(this);if(y)return void 0===t?h.call(e):h.call(e,t);var n,l,r=[],u=o(e.length);for(l=0;l<u;l++)l in e&&r.push(e[l]);for(n=(r=a(r,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:d(e)>d(n)?1:-1}}(t))).length,l=0;l<n;)e[l]=r[l++];for(;l<u;)delete e[l++];return e}})},function(t,e,n){n(54)("Array")},function(t,e,n){"use strict";var l=n(0),i=n(50),c=n(30),o=n(10),d=n(13),r=n(73),a=n(53),u=n(74)("splice"),Z=Math.max,s=Math.min;l({target:"Array",proto:!0,forced:!u},{splice:function(t,e){var n,l,u,b,m,I,h=d(this),p=o(h.length),g=i(t,p),G=arguments.length;if(0===G?n=l=0:1===G?(n=0,l=p-g):(n=G-2,l=s(Z(c(e),0),p-g)),p+n-l>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(h,l),b=0;b<l;b++)(m=g+b)in h&&a(u,b,h[m]);if(u.length=l,n<l){for(b=g;b<p-l;b++)I=b+n,(m=b+l)in h?h[I]=h[m]:delete h[I];for(b=p;b>p-l+n;b--)delete h[b-1]}else if(n>l)for(b=p-l;b>g;b--)I=b+n-1,(m=b+l-1)in h?h[I]=h[m]:delete h[I];for(b=0;b<n;b++)h[b+g]=arguments[b+2];return h.length=p-l+n,u}})},function(t,e,n){n(35)("flat")},function(t,e,n){n(35)("flatMap")},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(89),o=n(54),d=c.ArrayBuffer;l({global:!0,forced:i.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,e){var n=Math.abs,l=Math.pow,i=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,e,d){var r,a,u,Z=new Array(d),s=8*d-e-1,b=(1<<s)-1,m=b>>1,I=23===e?l(2,-24)-l(2,-77):0,h=t<0||0===t&&1/t<0?1:0,p=0;for((t=n(t))!=t||t===1/0?(a=t!=t?1:0,r=b):(r=i(c(t)/o),t*(u=l(2,-r))<1&&(r--,u*=2),(t+=r+m>=1?I/u:I*l(2,1-m))*u>=2&&(r++,u/=2),r+m>=b?(a=0,r=b):r+m>=1?(a=(t*u-1)*l(2,e),r+=m):(a=t*l(2,m-1)*l(2,e),r=0));e>=8;Z[p++]=255&a,a/=256,e-=8);for(r=r<<e|a,s+=e;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*h,Z},unpack:function(t,e){var n,i=t.length,c=8*i-e-1,o=(1<<c)-1,d=o>>1,r=c-7,a=i-1,u=t[a--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[a],a--,r-=8);for(n=Z&(1<<-r)-1,Z>>=-r,r+=e;r>0;n=256*n+t[a],a--,r-=8);if(0===Z)Z=1-d;else{if(Z===o)return n?NaN:u?-1/0:1/0;n+=l(2,e),Z-=d}return(u?-1:1)*n*l(2,Z-e)}}},function(t,e,n){var l=n(0),i=n(12);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(2),c=n(89),o=n(1),d=n(50),r=n(10),a=n(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:i((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(void 0!==s&&void 0===e)return s.call(o(this),t);for(var n=o(this).byteLength,l=d(t,n),i=d(void 0===e?n:e,n),c=new(a(this,u))(r(i-l)),b=new Z(this),m=new Z(c),I=0;l<i;)m.setUint8(I++,b.getUint8(l++));return c}})},function(t,e,n){var l=n(0),i=n(89);l({global:!0,forced:!n(124)},{DataView:i.DataView})},function(t,e,n){n(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,e,n){var l=n(0),i=n(247);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,n){"use strict";var l=n(2),i=n(125).start,c=Math.abs,o=Date.prototype,d=o.getTime,r=o.toISOString;t.exports=l((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!l((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(d.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),e=this.getUTCMilliseconds(),n=t<0?"-":t>9999?"+":"";return n+i(c(t),n?6:4,0)+"-"+i(this.getUTCMonth()+1,2,0)+"-"+i(this.getUTCDate(),2,0)+"T"+i(this.getUTCHours(),2,0)+":"+i(this.getUTCMinutes(),2,0)+":"+i(this.getUTCSeconds(),2,0)+"."+i(e,3,0)+"Z"}:r},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(13),o=n(106);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(18),i=n(250),c=n(7)("toPrimitive"),o=Date.prototype;c in o||l(o,c,i)},function(t,e,n){"use strict";var l=n(1),i=n(142);t.exports=function(t){if(l(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return i(this,t)}},function(t,e,n){var l=n(25),i=Date.prototype,c=i.toString,o=i.getTime;"Invalid Date"!=String(new Date(NaN))&&l(i,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,e,n){n(0)({target:"Function",proto:!0},{bind:n(159)})},function(t,e,n){"use strict";var l=n(8),i=n(14),c=n(27),o=n(7)("hasInstance"),d=Function.prototype;o in d||i.f(d,o,{value:function(t){if("function"!=typeof this||!l(t))return!1;if(!l(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,n){var l=n(9),i=n(14).f,c=Function.prototype,o=c.toString,d=/^\s*function ([^ (]*)/;l&&!("name"in c)&&i(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(d)[1]}catch(t){return""}}})},function(t,e,n){var l=n(0),i=n(11),c=n(2),o=i("JSON","stringify"),d=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,a=/^[\uDC00-\uDFFF]$/,u=function(t,e,n){var l=n.charAt(e-1),i=n.charAt(e+1);return r.test(t)&&!a.test(i)||a.test(t)&&!r.test(l)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&l({target:"JSON",stat:!0,forced:Z},{stringify:function(t,e,n){var l=o.apply(null,arguments);return"string"==typeof l?l.replace(d,u):l}})},function(t,e,n){var l=n(4);n(34)(l.JSON,"JSON",!0)},function(t,e,n){var l=n(0),i=n(162),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(128),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(92),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(92);l({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,n){n(0)({target:"Math",stat:!0},{fround:n(163)})},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(2),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){var l=n(0),i=Math.log,c=Math.LOG10E;l({target:"Math",stat:!0},{log10:function(t){return i(t)*c}})},function(t,e,n){n(0)({target:"Math",stat:!0},{log1p:n(162)})},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(128)})},function(t,e,n){var l=n(0),i=n(2),c=n(92),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(92),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(34)(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(4),c=n(72),o=n(25),d=n(16),r=n(46),a=n(91),u=n(59),Z=n(106),s=n(2),b=n(26),m=n(49).f,I=n(24).f,h=n(14).f,p=n(64).trim,g=i.Number,G=g.prototype,y="Number"==r(b(G)),X=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var e,n,l,i,c,o,d,r,a=Z(t,"number");if("string"==typeof a&&a.length>2)if(43===(e=(a=p(a)).charCodeAt(0))||45===e){if(88===(n=a.charCodeAt(2))||120===n)return NaN}else if(48===e){switch(a.charCodeAt(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=a.slice(2)).length,d=0;d<o;d++)if((r=c.charCodeAt(d))<48||r>i)return NaN;return parseInt(c,l)}return+a};if(c("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var V,W=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof W&&(y?s((function(){G.valueOf.call(n)})):"Number"!=r(n))?a(new g(X(e)),n,W):X(e)},C=l?m(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),R=0;C.length>R;R++)d(g,V=C[R])&&!d(W,V)&&h(W,V,I(g,V));W.prototype=G,G.constructor=W,o(i,"Number",W)}},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(164)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isInteger:n(129)})},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(129),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(165);l({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(130);l({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,n){"use strict";var l=n(0),i=n(30),c=n(166),o=n(126),d=n(2),r=1..toFixed,a=Math.floor,u=function(t,e,n){return 0===e?n:e%2==1?u(t,e-1,n*t):u(t*t,e/2,n)},Z=function(t,e,n){for(var l=-1,i=n;++l<6;)i+=e*t[l],t[l]=i%1e7,i=a(i/1e7)},s=function(t,e){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=a(l/e),l=l%e*1e7},b=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var l=String(t[e]);n=""===n?l:n+o.call("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){r.call({})}))},{toFixed:function(t){var e,n,l,d,r=c(this),a=i(t),m=[0,0,0,0,0,0],I="",h="0";if(a<0||a>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(I="-",r=-r),r>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}(r*u(2,69,1))-69)<0?r*u(2,-e,1):r/u(2,e,1),n*=4503599627370496,(e=52-e)>0){for(Z(m,0,n),l=a;l>=7;)Z(m,1e7,0),l-=7;for(Z(m,u(10,l,1),0),l=e-1;l>=23;)s(m,1<<23),l-=23;s(m,1<<l),Z(m,1,1),s(m,2),h=b(m)}else Z(m,0,n),Z(m,1<<-e,0),h=b(m)+o.call("0",a);return h=a>0?I+((d=h.length)<=a?"0."+o.call("0",a-d)+h:h.slice(0,d-a)+"."+h.slice(d-a)):I+h}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(166),o=1..toPrecision;l({target:"Number",proto:!0,forced:i((function(){return"1"!==o.call(1,void 0)}))||!i((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,e,n){var l=n(0),i=n(167);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(26)})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(94),o=n(13),d=n(3),r=n(14);i&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){r.f(o(this),t,{get:d(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(9);l({target:"Object",stat:!0,forced:!i,sham:!i},{defineProperties:n(114)})},function(t,e,n){var l=n(0),i=n(9);l({target:"Object",stat:!0,forced:!i,sham:!i},{defineProperty:n(14).f})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(94),o=n(13),d=n(3),r=n(14);i&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){r.f(o(this),t,{set:d(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(168).entries;l({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(77),c=n(2),o=n(8),d=n(55).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(6),c=n(53);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(2),c=n(29),o=n(24).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(111),o=n(29),d=n(24),r=n(53);l({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,l=o(t),i=d.f,a=c(l),u={},Z=0;a.length>Z;)void 0!==(n=i(l,e=a[Z++]))&&r(u,e,n);return u}})},function(t,e,n){var l=n(0),i=n(2),c=n(115).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(2),c=n(13),o=n(27),d=n(122);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(169)})},function(t,e,n){var l=n(0),i=n(2),c=n(8),o=Object.isExtensible;l({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,e,n){var l=n(0),i=n(2),c=n(8),o=Object.isFrozen;l({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,e,n){var l=n(0),i=n(2),c=n(8),o=Object.isSealed;l({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,e,n){var l=n(0),i=n(13),c=n(60);l({target:"Object",stat:!0,forced:n(2)((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(94),o=n(13),d=n(47),r=n(27),a=n(24).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(94),o=n(13),d=n(47),r=n(27),a=n(24).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(8),c=n(55).onFreeze,o=n(77),d=n(2),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(8),c=n(55).onFreeze,o=n(77),d=n(2),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(42)})},function(t,e,n){var l=n(119),i=n(25),c=n(311);l||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,n){"use strict";var l=n(119),i=n(76);t.exports=l?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,n){var l=n(0),i=n(168).values;l({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(165);l({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(130);l({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,n){"use strict";var l,i,c,o,d=n(0),r=n(5),a=n(4),u=n(11),Z=n(170),s=n(25),b=n(36),m=n(42),I=n(34),h=n(54),p=n(8),g=n(3),G=n(33),y=n(110),X=n(6),V=n(86),W=n(28),C=n(131).set,R=n(172),f=n(173),S=n(174),v=n(78),Y=n(95),K=n(17),N=n(72),J=n(7),H=n(318),U=n(63),k=n(48),L=J("species"),B="Promise",x=K.get,A=K.set,T=K.getterFor(B),F=Z&&Z.prototype,z=Z,w=F,Q=a.TypeError,j=a.document,P=a.process,M=v.f,E=M,D=!!(j&&j.createEvent&&a.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=N(B,(function(){var t=y(z),e=t!==String(z);if(!e&&66===k)return!0;if(r&&!w.finally)return!0;if(k>=51&&/native code/.test(t))return!1;var n=new z((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[L]=l,!(q=n.then((function(){}))instanceof l)||!e&&H&&!O})),$=_||!V((function(t){z.all(t).catch((function(){}))})),tt=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},et=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;R((function(){for(var l=t.value,i=1==t.state,c=0;n.length>c;){var o,d,r,a=n[c++],u=i?a.ok:a.fail,Z=a.resolve,s=a.reject,b=a.domain;try{u?(i||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=l:(b&&b.enter(),o=u(l),b&&(b.exit(),r=!0)),o===a.promise?s(Q("Promise-chain cycle")):(d=tt(o))?d.call(o,Z,s):Z(o)):s(l)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&<(t)}))}},nt=function(t,e,n){var l,i;D?((l=j.createEvent("Event")).promise=e,l.reason=n,l.initEvent(t,!1,!0),a.dispatchEvent(l)):l={promise:e,reason:n},!O&&(i=a["on"+t])?i(l):"unhandledrejection"===t&&S("Unhandled promise rejection",n)},lt=function(t){C.call(a,(function(){var e,n=t.facade,l=t.value;if(it(t)&&(e=Y((function(){U?P.emit("unhandledRejection",l,n):nt("unhandledrejection",n,l)})),t.rejection=U||it(t)?2:1,e.error))throw e.value}))},it=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){C.call(a,(function(){var e=t.facade;U?P.emit("rejectionHandled",e):nt("rejectionhandled",e,t.value)}))},ot=function(t,e,n){return function(l){t(e,l,n)}},dt=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,et(t,!0))},rt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw Q("Promise can't be resolved itself");var l=tt(e);l?R((function(){var n={done:!1};try{l.call(e,ot(rt,n,t),ot(dt,n,t))}catch(e){dt(n,e,t)}})):(t.value=e,t.state=1,et(t,!1))}catch(e){dt({done:!1},e,t)}}};if(_&&(w=(z=function(t){G(this,z,B),g(t),l.call(this);var e=x(this);try{t(ot(rt,e),ot(dt,e))}catch(t){dt(e,t)}}).prototype,(l=function(t){A(this,{type:B,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(w,{then:function(t,e){var n=T(this),l=M(W(this,z));return l.ok="function"!=typeof t||t,l.fail="function"==typeof e&&e,l.domain=U?P.domain:void 0,n.parent=!0,n.reactions.push(l),0!=n.state&&et(n,!1),l.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new l,e=x(t);this.promise=t,this.resolve=ot(rt,e),this.reject=ot(dt,e)},v.f=M=function(t){return t===z||t===c?new i(t):E(t)},!r&&"function"==typeof Z&&F!==Object.prototype)){o=F.then,q||(s(F,"then",(function(t,e){var n=this;return new z((function(t,e){o.call(n,t,e)})).then(t,e)}),{unsafe:!0}),s(F,"catch",w.catch,{unsafe:!0}));try{delete F.constructor}catch(t){}m&&m(F,w)}d({global:!0,wrap:!0,forced:_},{Promise:z}),I(z,B,!1,!0),h(B),c=u(B),d({target:B,stat:!0,forced:_},{reject:function(t){var e=M(this);return e.reject.call(void 0,t),e.promise}}),d({target:B,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?z:this,t)}}),d({target:B,stat:!0,forced:$},{all:function(t){var e=this,n=M(e),l=n.resolve,i=n.reject,c=Y((function(){var n=g(e.resolve),c=[],o=0,d=1;X(t,(function(t){var r=o++,a=!1;c.push(void 0),d++,n.call(e,t).then((function(t){a||(a=!0,c[r]=t,--d||l(c))}),i)})),--d||l(c)}));return c.error&&i(c.value),n.promise},race:function(t){var e=this,n=M(e),l=n.reject,i=Y((function(){var i=g(e.resolve);X(t,(function(t){i.call(e,t).then(n.resolve,l)}))}));return i.error&&l(i.value),n.promise}})},function(t,e,n){var l=n(39),i=n(4);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==i.Pebble},function(t,e,n){var l=n(39);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,e){t.exports="object"==typeof window},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(170),o=n(2),d=n(11),r=n(28),a=n(173),u=n(25);if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=r(this,d("Promise")),n="function"==typeof t;return this.then(n?function(n){return a(e,t()).then((function(){return n}))}:t,n?function(n){return a(e,t()).then((function(){throw n}))}:t)}}),!i&&"function"==typeof c){var Z=d("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,e,n){var l=n(0),i=n(11),c=n(3),o=n(1),d=n(2),r=i("Reflect","apply"),a=Function.apply;l({target:"Reflect",stat:!0,forced:!d((function(){r((function(){}))}))},{apply:function(t,e,n){return c(t),o(n),r?r(t,e,n):a.call(t,e,n)}})},function(t,e,n){var l=n(0),i=n(11),c=n(3),o=n(1),d=n(8),r=n(26),a=n(159),u=n(2),Z=i("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),m=s||b;l({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(t,e){c(t),o(e);var n=arguments.length<3?t:c(arguments[2]);if(b&&!s)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 l.push.apply(l,e),new(a.apply(t,l))}var i=n.prototype,u=r(d(i)?i:Object.prototype),m=Function.apply.call(t,u,e);return d(m)?m:u}})},function(t,e,n){var l=n(0),i=n(9),c=n(1),o=n(47),d=n(14);l({target:"Reflect",stat:!0,forced:n(2)((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(1),c=n(24).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(8),c=n(1),o=n(176),d=n(24),r=n(27);l({target:"Reflect",stat:!0},{get:function t(e,n){var l,a,u=arguments.length<3?e:arguments[2];return c(e)===u?e[n]:(l=d.f(e,n))?o(l)?l.value:void 0===l.get?void 0:l.get.call(u):i(a=r(e))?t(a,n,u):void 0}})},function(t,e,n){var l=n(0),i=n(9),c=n(1),o=n(24);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(1),c=n(27);l({target:"Reflect",stat:!0,sham:!n(122)},{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(1),c=Object.isExtensible;l({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),!c||c(t)}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(111)})},function(t,e,n){var l=n(0),i=n(11),c=n(1);l({target:"Reflect",stat:!0,sham:!n(77)},{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(1),c=n(8),o=n(176),d=n(2),r=n(14),a=n(24),u=n(27),Z=n(38);l({target:"Reflect",stat:!0,forced:d((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 d,s,b,m=arguments.length<4?e:arguments[3],I=a.f(i(e),n);if(!I){if(c(s=u(e)))return t(s,n,l,m);I=Z(0)}if(o(I)){if(!1===I.writable||!c(m))return!1;if(d=a.f(m,n)){if(d.get||d.set||!1===d.writable)return!1;d.value=l,r.f(m,n,d)}else r.f(m,n,Z(0,l))}else{if(void 0===(b=I.set))return!1;b.call(m,l)}return!0}})},function(t,e,n){var l=n(0),i=n(1),c=n(153),o=n(42);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(4),c=n(72),o=n(91),d=n(18),r=n(14).f,a=n(49).f,u=n(79),Z=n(15),s=n(65),b=n(96),m=n(25),I=n(2),h=n(16),p=n(17).enforce,g=n(54),G=n(7),y=n(177),X=n(178),V=G("match"),W=i.RegExp,C=W.prototype,R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,Y=b.UNSUPPORTED_Y,K=l&&(!v||Y||y||X||I((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",K)){for(var N=function(t,e){var n,l,i,c,r,a,b=this instanceof N,m=u(t),I=void 0===e,g=[],G=t;if(!b&&m&&I&&t.constructor===N)return t;if((m||t instanceof N)&&(t=t.source,I&&(e="flags"in G?G.flags:s.call(G))),t=void 0===t?"":Z(t),e=void 0===e?"":Z(e),G=t,y&&"dotAll"in f&&(l=!!e&&e.indexOf("s")>-1)&&(e=e.replace(/s/g,"")),n=e,Y&&"sticky"in f&&(i=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,"")),X&&(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=t.charAt(l)))e+=t.charAt(++l);else if("]"===e)d=!1;else if(!d)switch(!0){case"["===e:d=!0;break;case"("===e:R.test(t.slice(l+1))&&(l+=2,r=!0),i+=e,a++;continue;case">"===e&&r:if(""===u||h(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,a]),r=!1,u="";continue}r?u+=e:i+=e}return[i,c]}(t))[0],g=c[1]),r=o(W(t,e),b?this:C,N),(l||i||g.length)&&(a=p(r),l&&(a.dotAll=!0,a.raw=N(function(t){for(var e,n=t.length,l=0,i="",c=!1;l<=n;l++)"\\"!==(e=t.charAt(l))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+t.charAt(++l);return i}(t),n)),i&&(a.sticky=!0),g.length&&(a.groups=g)),t!==G)try{d(r,"source",""===G?"(?:)":G)}catch(t){}return r},J=function(t){t in N||r(N,t,{configurable:!0,get:function(){return W[t]},set:function(e){W[t]=e}})},H=a(W),U=0;H.length>U;)J(H[U++]);C.constructor=N,N.prototype=C,m(i,"RegExp",N)}g("RegExp")},function(t,e,n){var l=n(9),i=n(14),c=n(65),o=n(2);l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,e,n){var l=n(9),i=n(96).UNSUPPORTED_Y,c=n(14).f,o=n(17).get,d=RegExp.prototype;l&&i&&c(d,"sticky",{configurable:!0,get:function(){if(this!==d){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,e,n){"use strict";n(132);var l,i,c=n(0),o=n(8),d=(l=!1,(i=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&l),r=/./.test;c({target:"RegExp",proto:!0,forced:!d},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var e=this.exec(t);if(null!==e&&!o(e))throw new Error("RegExp exec method returned something other than an Object or null");return!!e}})},function(t,e,n){"use strict";var l=n(25),i=n(1),c=n(15),o=n(2),d=n(65),r=RegExp.prototype,a=r.toString,u=o((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),Z="toString"!=a.name;(u||Z)&&l(RegExp.prototype,"toString",(function(){var t=i(this),e=c(t.source),n=t.flags;return"/"+e+"/"+c(void 0===n&&t instanceof RegExp&&!("flags"in r)?d.call(t):n)}),{unsafe:!0})},function(t,e,n){"use strict";var l=n(0),i=n(66).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(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".endsWith,b=Math.min,m=u("endsWith");i({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"endsWith"),!l||l.writable))&&!m},{endsWith:function(t){var e=d(a(this));r(t);var n=arguments.length>1?arguments[1]:void 0,l=o(e.length),i=void 0===n?l:b(o(n),l),c=d(t);return s?s.call(e,c,i):e.slice(i-c.length,i)===c}})},function(t,e,n){var l=n(0),i=n(50),c=String.fromCharCode,o=String.fromCodePoint;l({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var e,n=[],l=arguments.length,o=0;l>o;){if(e=+arguments[o++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?c(e):c(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}})},function(t,e,n){"use strict";var l=n(0),i=n(133),c=n(22),o=n(15);l({target:"String",proto:!0,forced:!n(134)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(i(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(98),i=n(1),c=n(10),o=n(15),d=n(22),r=n(99),a=n(100);l("match",(function(t,e,n){return[function(e){var n=d(this),l=null==e?void 0:e[t];return void 0!==l?l.call(e,n):new RegExp(e)[t](o(n))},function(t){var l=i(this),d=o(t),u=n(e,l,d);if(u.done)return u.value;if(!l.global)return a(l,d);var Z=l.unicode;l.lastIndex=0;for(var s,b=[],m=0;null!==(s=a(l,d));){var I=o(s[0]);b[m]=I,""===I&&(l.lastIndex=r(d,c(l.lastIndex),Z)),m++}return 0===m?null:b}]}))},function(t,e,n){"use strict";var l=n(0),i=n(125).end;l({target:"String",proto:!0,forced:n(182)},{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(125).start;l({target:"String",proto:!0,forced:n(182)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(29),c=n(10),o=n(15);l({target:"String",stat:!0},{raw:function(t){for(var e=i(t.raw),n=c(e.length),l=arguments.length,d=[],r=0;n>r;)d.push(o(e[r++])),r<l&&d.push(o(arguments[r]));return d.join("")}})},function(t,e,n){n(0)({target:"String",proto:!0},{repeat:n(126)})},function(t,e,n){"use strict";var l=n(98),i=n(2),c=n(1),o=n(30),d=n(10),r=n(15),a=n(22),u=n(99),Z=n(183),s=n(100),b=n(7)("replace"),m=Math.max,I=Math.min,h="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");l("replace",(function(t,e,n){var l=p?"$":"$0";return[function(t,n){var l=a(this),i=null==t?void 0:t[b];return void 0!==i?i.call(t,l,n):e.call(r(l),t,n)},function(t,i){var a=c(this),b=r(t);if("string"==typeof i&&-1===i.indexOf(l)&&-1===i.indexOf("$<")){var h=n(e,a,b,i);if(h.done)return h.value}var p="function"==typeof i;p||(i=r(i));var g=a.global;if(g){var G=a.unicode;a.lastIndex=0}for(var y=[];;){var X=s(a,b);if(null===X)break;if(y.push(X),!g)break;""===r(X[0])&&(a.lastIndex=u(b,d(a.lastIndex),G))}for(var V,W="",C=0,R=0;R<y.length;R++){X=y[R];for(var f=r(X[0]),S=m(I(o(X.index),b.length),0),v=[],Y=1;Y<X.length;Y++)v.push(void 0===(V=X[Y])?V:String(V));var K=X.groups;if(p){var N=[f].concat(v,S,b);void 0!==K&&N.push(K);var J=r(i.apply(void 0,N))}else J=Z(f,b,S,v,K,i);S>=C&&(W+=b.slice(C,S)+J,C=S+f.length)}return W+b.slice(C)}]}),!!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!h||p)},function(t,e,n){"use strict";var l=n(98),i=n(1),c=n(22),o=n(169),d=n(15),r=n(100);l("search",(function(t,e,n){return[function(e){var n=c(this),l=null==e?void 0:e[t];return void 0!==l?l.call(e,n):new RegExp(e)[t](d(n))},function(t){var l=i(this),c=d(t),a=n(e,l,c);if(a.done)return a.value;var u=l.lastIndex;o(u,0)||(l.lastIndex=0);var Z=r(l,c);return o(l.lastIndex,u)||(l.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,e,n){"use strict";var l=n(98),i=n(79),c=n(1),o=n(22),d=n(28),r=n(99),a=n(10),u=n(15),Z=n(100),s=n(97),b=n(96),m=n(2),I=b.UNSUPPORTED_Y,h=[].push,p=Math.min;l("split",(function(t,e,n){var l;return l="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 l=u(o(this)),c=void 0===n?4294967295:n>>>0;if(0===c)return[];if(void 0===t)return[l];if(!i(t))return e.call(l,t,c);for(var d,r,a,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),m=0,I=new RegExp(t.source,b+"g");(d=s.call(I,l))&&!((r=I.lastIndex)>m&&(Z.push(l.slice(m,d.index)),d.length>1&&d.index<l.length&&h.apply(Z,d.slice(1)),a=d[0].length,m=r,Z.length>=c));)I.lastIndex===d.index&&I.lastIndex++;return m===l.length?!a&&I.test("")||Z.push(""):Z.push(l.slice(m)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:e.call(this,t,n)}:e,[function(e,n){var i=o(this),c=null==e?void 0:e[t];return void 0!==c?c.call(e,i,n):l.call(u(i),e,n)},function(t,i){var o=c(this),s=u(t),b=n(l,o,s,i,l!==e);if(b.done)return b.value;var m=d(o,RegExp),h=o.unicode,g=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(I?"g":"y"),G=new m(I?"^(?:"+o.source+")":o,g),y=void 0===i?4294967295:i>>>0;if(0===y)return[];if(0===s.length)return null===Z(G,s)?[s]:[];for(var X=0,V=0,W=[];V<s.length;){G.lastIndex=I?0:V;var C,R=Z(G,I?s.slice(V):s);if(null===R||(C=p(a(G.lastIndex+(I?V:0)),s.length))===X)V=r(s,V,h);else{if(W.push(s.slice(X,V)),W.length===y)return W;for(var f=1;f<=R.length-1;f++)if(W.push(R[f]),W.length===y)return W;V=X=C}}return W.push(s.slice(X)),W}]}),!!m((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]})),I)},function(t,e,n){"use strict";var l,i=n(0),c=n(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".startsWith,b=Math.min,m=u("startsWith");i({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"startsWith"),!l||l.writable))&&!m},{startsWith:function(t){var e=d(a(this));r(t);var n=o(b(arguments.length>1?arguments[1]:void 0,e.length)),l=d(t);return s?s.call(e,l,n):e.slice(n,n+l.length)===l}})},function(t,e,n){"use strict";var l=n(0),i=n(64).trim;l({target:"String",proto:!0,forced:n(135)("trim")},{trim:function(){return i(this)}})},function(t,e,n){"use strict";var l=n(0),i=n(64).end,c=n(135)("trimEnd"),o=c?function(){return i(this)}:"".trimEnd;l({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,e,n){"use strict";var l=n(0),i=n(64).start,c=n(135)("trimStart"),o=c?function(){return i(this)}:"".trimStart;l({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(31);l({target:"String",proto:!0,forced:n(32)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,n){n(43)("Float32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Float64",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Int8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Int16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Int32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}),!0)},function(t,e,n){n(43)("Uint16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(43)("Uint32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){"use strict";var l=n(12),i=n(149),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("copyWithin",(function(t,e){return i.call(c(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(12),i=n(23).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(12),i=n(116),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){return i.apply(c(this),arguments)}))},function(t,e,n){"use strict";var l=n(12),i=n(23).filter,c=n(380),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(381),i=n(101);t.exports=function(t,e){return l(i(t),e)}},function(t,e){t.exports=function(t,e){for(var n=0,l=e.length,i=new t(l);l>n;)i[n]=e[n++];return i}},function(t,e,n){"use strict";var l=n(12),i=n(23).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(12),i=n(23).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(12),i=n(23).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(136);(0,n(12).exportTypedArrayStaticMethod)("from",n(185),l)},function(t,e,n){"use strict";var l=n(12),i=n(71).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(12),i=n(71).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(4),i=n(12),c=n(87),o=n(7)("iterator"),d=l.Uint8Array,r=c.values,a=c.keys,u=c.entries,Z=i.aTypedArray,s=i.exportTypedArrayMethod,b=d&&d.prototype[o],m=!!b&&("values"==b.name||null==b.name),I=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return a.call(Z(this))})),s("values",I,!m),s(o,I,!m)},function(t,e,n){"use strict";var l=n(12),i=l.aTypedArray,c=l.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(i(this),arguments)}))},function(t,e,n){"use strict";var l=n(12),i=n(154),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){return i.apply(c(this),arguments)}))},function(t,e,n){"use strict";var l=n(12),i=n(23).map,c=n(101),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(12),i=n(136),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(12),i=n(88).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){return i(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(12),i=n(88).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){return i(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(12),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(12),i=n(10),c=n(184),o=n(13),d=n(2),r=l.aTypedArray;(0,l.exportTypedArrayMethod)("set",(function(t){r(this);var e=c(arguments.length>1?arguments[1]:void 0,1),n=this.length,l=o(t),d=i(l.length),a=0;if(d+e>n)throw RangeError("Wrong length");for(;a<d;)this[e+a]=l[a++]}),d((function(){new Int8Array(1).set({})})))},function(t,e,n){"use strict";var l=n(12),i=n(101),c=n(2),o=l.aTypedArray,d=l.exportTypedArrayMethod,r=[].slice;d("slice",(function(t,e){for(var n=r.call(o(this),t,e),l=i(this),c=0,d=n.length,a=new l(d);d>c;)a[c]=n[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,e,n){"use strict";var l=n(12),i=n(23).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(12),i=n(4),c=n(2),o=n(3),d=n(10),r=n(155),a=n(156),u=n(157),Z=n(48),s=n(123),b=l.aTypedArray,m=l.exportTypedArrayMethod,I=i.Uint16Array,h=I&&I.prototype.sort,p=!!h&&!c((function(){var t=new I(2);t.sort(null),t.sort({})})),g=!!h&&!c((function(){if(Z)return Z<74;if(a)return a<67;if(u)return!0;if(s)return s<602;var t,e,n=new I(516),l=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,l[t]=t-2*e+3;for(n.sort((function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));m("sort",(function(t){if(void 0!==t&&o(t),g)return h.call(this,t);b(this);var e,n=d(this.length),l=Array(n);for(e=0;e<n;e++)l[e]=this[e];for(l=r(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)),e=0;e<n;e++)this[e]=l[e];return this}),!g||p)},function(t,e,n){"use strict";var l=n(12),i=n(10),c=n(50),o=n(101),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(4),i=n(12),c=n(2),o=l.Int8Array,d=i.aTypedArray,r=i.exportTypedArrayMethod,a=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){a.call(new o(1))}));r("toLocaleString",(function(){return a.apply(Z?u.call(d(this)):d(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,e,n){"use strict";var l=n(12).exportTypedArrayMethod,i=n(2),c=n(4).Uint8Array,o=c&&c.prototype||{},d=[].toString,r=[].join;i((function(){d.call({})}))&&(d=function(){return r.call(this)});var a=o.toString!=d;l("toString",d,a)},function(t,e,n){"use strict";n(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(186))},function(t,e,n){n(405)},function(t,e,n){"use strict";var l=n(0),i=n(27),c=n(42),o=n(26),d=n(18),r=n(38),a=n(6),u=n(15),Z=function(t,e){var n=this;if(!(n instanceof Z))return new Z(t,e);c&&(n=c(new Error(void 0),i(n))),void 0!==e&&d(n,"message",u(e));var l=[];return a(t,l.push,{that:l}),d(n,"errors",l),n};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),l({global:!0},{AggregateError:Z})},function(t,e,n){var l=n(0),i=n(51),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},{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(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastIndex"in[])&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t.length);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,n){"use strict";var l=n(9),i=n(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastItem"in[])&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t.length);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),n=o(e.length);return e[0==n?0:n-1]=t}}),i("lastItem"))},function(t,e,n){"use strict";var l=n(0),i=n(33),c=n(18),o=n(16),d=n(7),r=n(410),a=n(5),u=d("toStringTag"),Z=function(){i(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),l({global:!0,forced:a},{AsyncIterator:Z})},function(t,e,n){var l,i,c=n(4),o=n(83),d=n(27),r=n(16),a=n(18),u=n(7),Z=n(5),s=u("asyncIterator"),b=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(!Z)if(m)l=m;else if("function"==typeof b)l=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=d(d(d(Function("return async function*(){}()")()))),d(i)===Object.prototype&&(l=i)}catch(t){}l||(l={}),r(l,s)||a(l,s,(function(){return this})),t.exports=l},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(56)((function(t,e){var n=this,l=n.iterator;return t.resolve(i(n.next.apply(l,e))).then((function(t){return i(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:i(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(80),o=n(56)((function(t,e){var n=this;return new t((function(l,c){var o=function(){try{t.resolve(i(n.next.apply(n.iterator,n.remaining?[]:e))).then((function(t){try{i(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,o()):l({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(81).every;l({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(1),o=n(56)((function(t,e){var n=this,l=n.filterer;return new t((function(i,o){var d=function(){try{t.resolve(c(n.next.apply(n.iterator,e))).then((function(e){try{if(c(e).done)n.done=!0,i({done:!0,value:void 0});else{var r=e.value;t.resolve(l(r)).then((function(t){t?i({done:!1,value:r}):d()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:i(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(81).find;l({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(1),o=n(56),d=n(187),r=o((function(t){var e,n=this,l=n.mapper;return new t((function(o,r){var a=function(){try{t.resolve(c(n.next.call(n.iterator))).then((function(a){try{c(a).done?(n.done=!0,o({done:!0,value:void 0})):t.resolve(l(a.value)).then((function(t){try{return n.innerIterator=e=d(t),n.innerNext=i(e.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(e=n.innerIterator)try{t.resolve(c(n.innerNext.call(e))).then((function(t){try{c(t).done?(n.innerIterator=n.innerNext=null,a()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else a()};u()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:i(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(81).forEach;l({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return i(this,t)}})},function(t,e,n){var l=n(0),i=n(61),c=n(1),o=n(13),d=n(56),r=n(187),a=n(41),u=n(52),Z=n(102),s=n(7),b=n(188),m=s("asyncIterator"),I=i.AsyncIterator,h=d((function(t,e){return c(this.next.apply(this.iterator,e))}),!0);l({target:"AsyncIterator",stat:!0},{from:function(t){var e,n=o(t),l=Z(n[m]);return void 0!==l&&(e=r(n,l))instanceof I?e:void 0===e&&void 0!==(l=u(n))?new b(a(n,l)):new h({iterator:void 0!==e?e:n})}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(1),o=n(56)((function(t,e){var n=this,l=n.mapper;return t.resolve(c(n.next.apply(n.iterator,e))).then((function(e){return c(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},{map:function(t){return new o({iterator:c(this),mapper:i(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(1),o=n(11)("Promise");l({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var e=c(this),n=i(e.next),l=arguments.length<2,d=l?void 0:arguments[1];return i(t),new o((function(i,r){var a=function(){try{o.resolve(c(n.call(e))).then((function(e){try{if(c(e).done)l?r(TypeError("Reduce of empty iterator with no initial value")):i(d);else{var n=e.value;l?(l=!1,d=n,a()):o.resolve(t(d,n)).then((function(t){d=t,a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(81).some;l({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(80),o=n(56)((function(t,e){var n,l,i=this.iterator;return this.remaining--?this.next.apply(i,e):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=i.return)?t.resolve(n.call(i)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(81).toArray;l({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return i(this)}})},function(t,e,n){var l=n(0),i=n(189),c=n(11),o=n(26),d=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};l({global:!0},{compositeKey:function(){return i.apply(Object,arguments).get("object",d)}})},function(t,e,n){var l=n(0),i=n(189),c=n(11);l({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):i.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,e,n){n(160)},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(33),o=n(18),d=n(2),r=n(16),a=n(7),u=n(121).IteratorPrototype,Z=n(5),s=a("iterator"),b=a("toStringTag"),m=i.Iterator,I=Z||"function"!=typeof m||m.prototype!==u||!d((function(){m({})})),h=function(){c(this,h)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!I&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",h),h.prototype=u,l({global:!0,forced:I},{Iterator:h})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(57)((function(t){var e=i(this.next.apply(this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));l({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:i(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(80),o=n(57)((function(t){for(var e,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,e=i(l.call(n)),this.done=!!e.done)return;if(e=i(l.apply(n,t)),!(this.done=!!e.done))return e.value}));l({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!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(3),c=n(1),o=n(57),d=n(117),r=o((function(t){for(var e,n,l=this.iterator,i=this.filterer,o=this.next;;){if(e=c(o.apply(l,t)),this.done=!!e.done)return;if(n=e.value,d(l,i,n))return n}}));l({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:i(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!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(3),c=n(1),o=n(52),d=n(57),r=n(85),a=d((function(){for(var t,e,n,l,d=this.iterator,a=this.mapper;;)try{if(l=this.innerIterator){if(!(t=c(this.innerNext.call(l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(d)),this.done=!!t.done)return;if(e=a(t.value),void 0===(n=o(e)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=l=c(n.call(e)),this.innerNext=i(l.next)}catch(t){r(d,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new a({iterator:c(this),mapper:i(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(1);l({target:"Iterator",proto:!0,real:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,n){var l=n(0),i=n(61),c=n(1),o=n(13),d=n(57),r=n(41),a=n(52),u=i.Iterator,Z=d((function(t){var e=c(this.next.apply(this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);l({target:"Iterator",stat:!0},{from:function(t){var e,n=o(t),l=a(n);if(null!=l){if((e=r(n,l))instanceof u)return e}else e=n;return new Z({iterator:e})}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(1),o=n(57),d=n(117),r=o((function(t){var e=this.iterator,n=c(this.next.apply(e,t));if(!(this.done=!!n.done))return d(e,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:i(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var e=arguments.length<2,n=e?void 0:arguments[1];if(i(this,(function(l){e?(e=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),e)throw TypeError("Reduce of empty iterator with no initial value");return n}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!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(1),c=n(80),o=n(57),d=n(85),r=o((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,d(e,"normal",void 0);var n=i(this.next.apply(e,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:i(this),remaining:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(1),o=[].push;l({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(103);l({target:"Map",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{every:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(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(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{filter:function(t){var e=o(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(a(e,c("Map"))),s=d(i.set);return Z(n,(function(t,n){l(n,t,e)&&s.call(i,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{find:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(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(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{findKey:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(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},{from:n(104)})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(3);l({target:"Map",stat:!0},{groupBy:function(t,e){var n=new this;c(e);var l=c(n.has),o=c(n.get),d=c(n.set);return i(t,(function(t){var i=e(t);l.call(n,i)?o.call(n,i).push(t):d.call(n,i,[t])})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(37),d=n(449),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{includes:function(t){return r(o(c(this)),(function(e,n,l){if(d(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(6),c=n(3);l({target:"Map",stat:!0},{keyBy:function(t,e){var n=new this;c(e);var l=c(n.set);return i(t,(function(t){l.call(n,e(t),t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(37),d=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{keyOf:function(t){return d(o(c(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(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{mapKeys:function(t){var e=o(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(a(e,c("Map"))),s=d(i.set);return Z(n,(function(t,n){s.call(i,l(n,t,e),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{mapValues:function(t){var e=o(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(a(e,c("Map"))),s=d(i.set);return Z(n,(function(t,n){s.call(i,t,l(n,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(3),d=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{merge:function(t){for(var e=c(this),n=o(e.set),l=arguments.length,i=0;i<l;)d(arguments[i++],n,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,n){n(0)({target:"Map",stat:!0},{of:n(105)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(3),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{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 TypeError("Reduce of empty map with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:i},{some:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(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(5),c=n(1),o=n(3);l({target:"Map",proto:!0,real:!0,forced:i},{update:function(t,e){var n=c(this),l=arguments.length;o(e);var i=n.has(t);if(!i&&l<3)throw TypeError("Updating absent value");var d=i?n.get(t):o(l>2?arguments[2]:void 0)(t,n);return n.set(t,e(d,t,n)),n}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{updateOrInsert:n(138)})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,e,n){var l=n(0),i=Math.min,c=Math.max;l({target:"Math",stat:!0},{clamp:function(t,e,n){return i(n,c(e,t))}})},function(t,e,n){n(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,n){var l=n(0),i=180/Math.PI;l({target:"Math",stat:!0},{degrees:function(t){return t*i}})},function(t,e,n){var l=n(0),i=n(190),c=n(163);l({target:"Math",stat:!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},{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},{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},{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},{RAD_PER_DEG:180/Math.PI})},function(t,e,n){var l=n(0),i=Math.PI/180;l({target:"Math",stat:!0},{radians:function(t){return t*i}})},function(t,e,n){n(0)({target:"Math",stat:!0},{scale:n(190)})},function(t,e,n){var l=n(0),i=n(1),c=n(164),o=n(62),d=n(17),r=d.set,a=d.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=a(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=i(t).seed;if(!c(e))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(e)}})},function(t,e,n){n(0)({target:"Math",stat:!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},{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(30),c=n(130),o=/^[\da-z]+$/;l({target:"Number",stat:!0},{fromString:function(t,e){var n,l,d=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(d=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((n=void 0===e?10:i(e))<2||n>36)throw RangeError("Invalid radix");if(!o.test(t)||(l=c(t,n)).toString(n)!==t)throw SyntaxError("Invalid number representation");return d*l}})},function(t,e,n){"use strict";var l=n(0),i=n(139);l({target:"Object",stat:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,n){"use strict";var l=n(0),i=n(139);l({target:"Object",stat:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,n){"use strict";var l=n(0),i=n(139);l({target:"Object",stat:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(54),o=n(3),d=n(1),r=n(8),a=n(33),u=n(14).f,Z=n(18),s=n(36),b=n(41),m=n(102),I=n(6),h=n(174),p=n(7),g=n(17),G=p("observable"),y=g.get,X=g.set,V=function(t){var e=t.cleanup;if(e){t.cleanup=void 0;try{e()}catch(t){h(t)}}},W=function(t){return void 0===t.observer},C=function(t){var e=t.facade;if(!i){e.closed=!0;var n=t.subscriptionObserver;n&&(n.closed=!0)}t.observer=void 0},R=function(t,e){var n,l=X(this,{cleanup:void 0,observer:d(t),subscriptionObserver:void 0});i||(this.closed=!1);try{(n=m(t.start))&&n.call(t,this)}catch(t){h(t)}if(!W(l)){var c=l.subscriptionObserver=new f(this);try{var r=e(c),a=r;null!=r&&(l.cleanup="function"==typeof r.unsubscribe?function(){a.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(l)&&V(l)}};R.prototype=s({},{unsubscribe:function(){var t=y(this);W(t)||(C(t),V(t))}}),i&&u(R.prototype,"closed",{configurable:!0,get:function(){return W(y(this))}});var f=function(t){X(this,{subscription:t}),i||(this.closed=!1)};f.prototype=s({},{next:function(t){var e=y(y(this).subscription);if(!W(e)){var n=e.observer;try{var l=m(n.next);l&&l.call(n,t)}catch(t){h(t)}}},error:function(t){var e=y(y(this).subscription);if(!W(e)){var n=e.observer;C(e);try{var l=m(n.error);l?l.call(n,t):h(t)}catch(t){h(t)}V(e)}},complete:function(){var t=y(y(this).subscription);if(!W(t)){var e=t.observer;C(t);try{var n=m(e.complete);n&&n.call(e)}catch(t){h(t)}V(t)}}}),i&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(y(y(this).subscription))}});var S=function(t){a(this,S,"Observable"),X(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var e=arguments.length;return new R("function"==typeof t?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:r(t)?t:{},y(this).subscriber)}}),s(S,{from:function(t){var e="function"==typeof this?this:S,n=m(d(t)[G]);if(n){var l=d(n.call(t));return l.constructor===e?l:new e((function(t){return l.subscribe(t)}))}var i=b(t);return new e((function(t){I(i,(function(e,n){if(t.next(e),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,e=arguments.length,n=new Array(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()}))}}),Z(S.prototype,G,(function(){return this})),l({global:!0},{Observable:S}),c("Observable")},function(t,e,n){n(175)},function(t,e,n){n(481)},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(11),o=n(78),d=n(95),r=n(6);l({target:"Promise",stat:!0},{any:function(t){var e=this,n=o.f(e),l=n.resolve,a=n.reject,u=d((function(){var n=i(e.resolve),o=[],d=0,u=1,Z=!1;r(t,(function(t){var i=d++,r=!1;o.push(void 0),u++,n.call(e,t).then((function(t){r||Z||(Z=!0,l(t))}),(function(t){r||Z||(r=!0,o[i]=t,--u||a(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||a(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&a(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(78),c=n(95);l({target:"Promise",stat:!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(44),c=n(1),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(44),c=n(1),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(44),c=n(1),o=n(27),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(179),c=n(44),o=n(1),d=n(27),r=n(6),a=c.keys,u=c.toKey,Z=function(t,e){var n=a(t,e),l=d(t);if(null===l)return n;var c,o,u=Z(l,e);return u.length?n.length?(c=new i(n.concat(u)),r(c,(o=[]).push,{that:o}),o):u:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),e)}})},function(t,e,n){var l=n(0),i=n(44),c=n(1),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(44),c=n(1),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(44),c=n(1),o=n(27),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(44),c=n(1),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(44),c=n(1),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";var l=n(0),i=n(5),c=n(191);l({target:"Set",proto:!0,real:!0,forced:i},{addAll:function(){return c.apply(this,arguments)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(103);l({target:"Set",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{difference:function(t){var e=o(this),n=new(r(e,c("Set")))(e),l=d(n.delete);return a(t,(function(t){l.call(n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{every:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(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(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{filter:function(t){var e=o(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(a(e,c("Set"))),s=d(i.add);return Z(n,(function(t){l(t,t,e)&&s.call(i,t)}),{IS_ITERATOR:!0}),i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{find:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(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},{from:n(104)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{intersection:function(t){var e=o(this),n=new(r(e,c("Set"))),l=d(e.has),i=d(n.add);return a(t,(function(t){l.call(e,t)&&i.call(n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{isDisjointFrom:function(t){var e=c(this),n=o(e.has);return!d(t,(function(t,l){if(!0===n.call(e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(41),a=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{isSubsetOf:function(t){var e=r(this),n=o(t),l=n.has;return"function"!=typeof l&&(n=new(c("Set"))(t),l=d(n.has)),!a(e,(function(t,e){if(!1===l.call(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(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{isSupersetOf:function(t){var e=c(this),n=o(e.has);return!d(t,(function(t,l){if(!1===n.call(e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(58),d=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{join:function(t){var e=c(this),n=o(e),l=void 0===t?",":String(t),i=[];return d(n,i.push,{that:i,IS_ITERATOR:!0}),i.join(l)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{map:function(t){var e=o(this),n=u(e),l=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(a(e,c("Set"))),s=d(i.add);return Z(n,(function(t){s.call(i,l(t,t,e))}),{IS_ITERATOR:!0}),i}})},function(t,e,n){n(0)({target:"Set",stat:!0},{of:n(105)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(3),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{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){l?(l=!1,i=n):i=t(i,n,n,e)}),{IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty set with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{some:function(t){var e=c(this),n=d(e),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(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(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{symmetricDifference:function(t){var e=o(this),n=new(r(e,c("Set")))(e),l=d(n.delete),i=d(n.add);return a(t,(function(t){l.call(n,t)||i.call(n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:i},{union:function(t){var e=o(this),n=new(r(e,c("Set")))(e);return a(t,d(n.add),{that:n}),n}})},function(t,e,n){"use strict";var l=n(0),i=n(66).charAt;l({target:"String",proto:!0,forced:n(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(62),c=n(22),o=n(15),d=n(17),r=n(66),a=r.codeAt,u=r.charAt,Z=d.set,s=d.getterFor("String Iterator"),b=i((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=s(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},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,n){n(181)},function(t,e,n){n(514)},function(t,e,n){"use strict";var l=n(0),i=n(22),c=n(79),o=n(15),d=n(65),r=n(183),a=n(7),u=n(5),Z=a("replace"),s=RegExp.prototype,b=Math.max,m=function(t,e,n){return n>t.length?-1:""===e?n:t.indexOf(e,n)};l({target:"String",proto:!0},{replaceAll:function(t,e){var n,l,a,I,h,p,g,G,y=i(this),X=0,V=0,W="";if(null!=t){if((n=c(t))&&!~o(i("flags"in s?t.flags:d.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(l=t[Z]))return l.call(t,y,e);if(u&&n)return o(y).replace(t,e)}for(a=o(y),I=o(t),(h="function"==typeof e)||(e=o(e)),p=I.length,g=b(1,p),X=m(a,I,0);-1!==X;)G=h?o(e(I,X,a)):r(I,a,X,[],void 0,e),W+=a.slice(V,X)+G,V=X+p,X=m(a,I,X+g);return V<a.length&&(W+=a.slice(V)),W}})},function(t,e,n){n(21)("asyncDispose")},function(t,e,n){n(21)("dispose")},function(t,e,n){n(21)("observable")},function(t,e,n){n(21)("patternMatch")},function(t,e,n){n(21)("replaceAll")},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(103);l({target:"WeakMap",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,n){n(0)({target:"WeakMap",stat:!0},{from:n(104)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0},{of:n(105)})},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(191);l({target:"WeakSet",proto:!0,real:!0,forced:i},{addAll:function(){return c.apply(this,arguments)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(103);l({target:"WeakSet",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,n){n(0)({target:"WeakSet",stat:!0},{from:n(104)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0},{of:n(105)})},function(t,e,n){var l=n(4),i=n(192),c=n(151),o=n(18);for(var d in i){var r=l[d],a=r&&r.prototype;if(a&&a.forEach!==c)try{o(a,"forEach",c)}catch(t){a.forEach=c}}},function(t,e,n){var l=n(4),i=n(192),c=n(87),o=n(18),d=n(7),r=d("iterator"),a=d("toStringTag"),u=c.values;for(var Z in i){var s=l[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[a]||o(b,a,Z),i[Z])for(var m in c)if(b[m]!==c[m])try{o(b,m,c[m])}catch(t){b[m]=c[m]}}}},function(t,e,n){var l=n(0),i=n(4),c=n(131);l({global:!0,bind:!0,enumerable:!0,forced:!i.setImmediate||!i.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,e,n){var l=n(0),i=n(4),c=n(172),o=n(63),d=i.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var e=o&&d.domain;c(e?e.bind(t):t)}})},function(t,e,n){var l=n(0),i=n(4),c=n(39),o=[].slice,d=function(t){return function(e,n){var l=arguments.length>2,i=l?o.call(arguments,2):void 0;return t(l?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,n)}};l({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:d(i.setTimeout),setInterval:d(i.setInterval)})},function(t,e,n){"use strict";n(180);var l,i=n(0),c=n(9),o=n(193),d=n(4),r=n(114),a=n(25),u=n(33),Z=n(16),s=n(167),b=n(152),m=n(66).codeAt,I=n(534),h=n(15),p=n(34),g=n(194),G=n(17),y=d.URL,X=g.URLSearchParams,V=g.getState,W=G.set,C=G.getterFor("URL"),R=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,Y=/\d/,K=/^0x/i,N=/^[0-7]+$/,J=/^\d+$/,H=/^[\dA-Fa-f]+$/,U=/[\0\t\n\r #%/:<>?@[\\\]^|]/,k=/[\0\t\n\r #/:<>?@[\\\]^|]/,L=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,B=/[\t\n\r]/g,x=function(t,e){var n,l,i;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return"Invalid host";if(!(n=T(e.slice(1,-1))))return"Invalid host";t.host=n}else if(E(t)){if(e=I(e),U.test(e))return"Invalid host";if(null===(n=A(e)))return"Invalid host";t.host=n}else{if(k.test(e))return"Invalid host";for(n="",l=b(e),i=0;i<l.length;i++)n+=P(l[i],z);t.host=n}},A=function(t){var e,n,l,i,c,o,d,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(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"==i.charAt(0)&&(c=K.test(i)?16:8,i=i.slice(8==c?1:2)),""===i)o=0;else{if(!(10==c?J:8==c?N:H).test(i))return t;o=parseInt(i,c)}n.push(o)}for(l=0;l<e;l++)if(o=n[l],l==e-1){if(o>=f(256,5-e))return null}else if(o>255)return null;for(d=n.pop(),l=0;l<n.length;l++)d+=n[l]*f(256,3-l);return d},T=function(t){var e,n,l,i,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++a}for(;s();){if(8==a)return;if(":"!=s()){for(e=n=0;n<4&&H.test(s());)e=16*e+parseInt(s(),16),Z++,n++;if("."==s()){if(0==n)return;if(Z-=n,a>6)return;for(l=0;s();){if(i=null,l>0){if(!("."==s()&&l<4))return;Z++}if(!Y.test(s()))return;for(;Y.test(s());){if(c=parseInt(s(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;Z++}r[a]=256*r[a]+i,2!=++l&&4!=l||a++}if(4!=l)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[a++]=e}else{if(null!==u)return;Z++,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},F=function(t){var e,n,l,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)e.unshift(t%256),t=R(t/256);return e.join(".")}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+=t[n].toString(16),n<7&&(e+=":")));return"["+e+"]"}return t},z={},w=s({},z,{" ":1,'"':1,"<":1,">":1,"`":1}),Q=s({},w,{"#":1,"?":1,"{":1,"}":1}),j=s({},Q,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),P=function(t,e){var n=m(t,0);return n>32&&n<127&&!Z(e,t)?t:encodeURIComponent(t)},M={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(M,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,e){var n;return 2==t.length&&S.test(t.charAt(0))&&(":"==(n=t.charAt(1))||!e&&"|"==n)},_=function(t){var e;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},$=function(t){var e=t.path,n=e.length;!n||"file"==t.scheme&&1==n&&q(e[0],!0)||e.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},et={},nt={},lt={},it={},ct={},ot={},dt={},rt={},at={},ut={},Zt={},st={},bt={},mt={},It={},ht={},pt={},gt={},Gt={},yt={},Xt={},Vt=function(t,e,n,i){var c,o,d,r,a,u=n||et,s=0,m="",I=!1,h=!1,p=!1;for(n||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(L,"")),e=e.replace(B,""),c=b(e);s<=c.length;){switch(o=c[s],u){case et:if(!o||!S.test(o)){if(n)return"Invalid scheme";u=lt;continue}m+=o.toLowerCase(),u=nt;break;case nt:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))m+=o.toLowerCase();else{if(":"!=o){if(n)return"Invalid scheme";m="",u=lt,s=0;continue}if(n&&(E(t)!=Z(M,m)||"file"==m&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=m,n)return void(E(t)&&M[t.scheme]==t.port&&(t.port=null));m="","file"==t.scheme?u=mt:E(t)&&i&&i.scheme==t.scheme?u=it:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=Gt)}break;case lt:if(!i||i.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(i.cannotBeABaseURL&&"#"==o){t.scheme=i.scheme,t.path=i.path.slice(),t.query=i.query,t.fragment="",t.cannotBeABaseURL=!0,u=Xt;break}u="file"==i.scheme?mt:ot;continue;case it:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=at,s++;break;case ct:if("/"==o){u=ut;break}u=gt;continue;case ot:if(t.scheme=i.scheme,o==l)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query;else if("/"==o||"\\"==o&&E(t))u=dt;else if("?"==o)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query="",u=yt;else{if("#"!=o){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.path.pop(),u=gt;continue}t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Xt}break;case dt:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,u=gt;continue}u=ut}else u=at;break;case rt:if(u=at,"/"!=o||"/"!=m.charAt(s+1))continue;s++;break;case at:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){I&&(m="%40"+m),I=!0,d=b(m);for(var g=0;g<d.length;g++){var G=d[g];if(":"!=G||p){var y=P(G,j);p?t.password+=y:t.username+=y}else p=!0}m=""}else if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(I&&""==m)return"Invalid authority";s-=b(m).length+1,m="",u=Zt}else m+=o;break;case Zt:case st:if(n&&"file"==t.scheme){u=ht;continue}if(":"!=o||h){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==m)return"Invalid host";if(n&&""==m&&(D(t)||null!==t.port))return;if(r=x(t,m))return r;if(m="",u=pt,n)return;continue}"["==o?h=!0:"]"==o&&(h=!1),m+=o}else{if(""==m)return"Invalid host";if(r=x(t,m))return r;if(m="",u=bt,n==st)return}break;case bt:if(!Y.test(o)){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||n){if(""!=m){var X=parseInt(m,10);if(X>65535)return"Invalid port";t.port=E(t)&&X===M[t.scheme]?null:X,m=""}if(n)return;u=pt;continue}return"Invalid port"}m+=o;break;case mt:if(t.scheme="file","/"==o||"\\"==o)u=It;else{if(!i||"file"!=i.scheme){u=gt;continue}if(o==l)t.host=i.host,t.path=i.path.slice(),t.query=i.query;else if("?"==o)t.host=i.host,t.path=i.path.slice(),t.query="",u=yt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=i.host,t.path=i.path.slice(),$(t)),u=gt;continue}t.host=i.host,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Xt}}break;case It:if("/"==o||"\\"==o){u=ht;break}i&&"file"==i.scheme&&!_(c.slice(s).join(""))&&(q(i.path[0],!0)?t.path.push(i.path[0]):t.host=i.host),u=gt;continue;case ht:if(o==l||"/"==o||"\\"==o||"?"==o||"#"==o){if(!n&&q(m))u=gt;else if(""==m){if(t.host="",n)return;u=pt}else{if(r=x(t,m))return r;if("localhost"==t.host&&(t.host=""),n)return;m="",u=pt}continue}m+=o;break;case pt:if(E(t)){if(u=gt,"/"!=o&&"\\"!=o)continue}else if(n||"?"!=o)if(n||"#"!=o){if(o!=l&&(u=gt,"/"!=o))continue}else t.fragment="",u=Xt;else t.query="",u=yt;break;case gt:if(o==l||"/"==o||"\\"==o&&E(t)||!n&&("?"==o||"#"==o)){if(".."===(a=(a=m).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(m)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(m)&&(t.host&&(t.host=""),m=m.charAt(0)+":"),t.path.push(m)),m="","file"==t.scheme&&(o==l||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=yt):"#"==o&&(t.fragment="",u=Xt)}else m+=P(o,Q);break;case Gt:"?"==o?(t.query="",u=yt):"#"==o?(t.fragment="",u=Xt):o!=l&&(t.path[0]+=P(o,z));break;case yt:n||"#"!=o?o!=l&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":P(o,z)):(t.fragment="",u=Xt);break;case Xt:o!=l&&(t.fragment+=P(o,w))}s++}},Wt=function(t){var e,n,l=u(this,Wt,"URL"),i=arguments.length>1?arguments[1]:void 0,o=h(t),d=W(l,{type:"URL"});if(void 0!==i)if(i instanceof Wt)e=C(i);else if(n=Vt(e={},h(i)))throw TypeError(n);if(n=Vt(d,o,null,e))throw TypeError(n);var r=d.searchParams=new X,a=V(r);a.updateSearchParams(d.query),a.updateURL=function(){d.query=String(r)||null},c||(l.href=Rt.call(l),l.origin=ft.call(l),l.protocol=St.call(l),l.username=vt.call(l),l.password=Yt.call(l),l.host=Kt.call(l),l.hostname=Nt.call(l),l.port=Jt.call(l),l.pathname=Ht.call(l),l.search=Ut.call(l),l.searchParams=kt.call(l),l.hash=Lt.call(l))},Ct=Wt.prototype,Rt=function(){var t=C(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+="//",D(t)&&(a+=n+(l?":"+l:"")+"@"),a+=F(i),null!==c&&(a+=":"+c)):"file"==e&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},ft=function(){var t=C(this),e=t.scheme,n=t.port;if("blob"==e)try{return new Wt(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&E(t)?e+"://"+F(t.host)+(null!==n?":"+n:""):"null"},St=function(){return C(this).scheme+":"},vt=function(){return C(this).username},Yt=function(){return C(this).password},Kt=function(){var t=C(this),e=t.host,n=t.port;return null===e?"":null===n?F(e):F(e)+":"+n},Nt=function(){var t=C(this).host;return null===t?"":F(t)},Jt=function(){var t=C(this).port;return null===t?"":String(t)},Ht=function(){var t=C(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},Ut=function(){var t=C(this).query;return t?"?"+t:""},kt=function(){return C(this).searchParams},Lt=function(){var t=C(this).fragment;return t?"#"+t:""},Bt=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(c&&r(Ct,{href:Bt(Rt,(function(t){var e=C(this),n=h(t),l=Vt(e,n);if(l)throw TypeError(l);V(e.searchParams).updateSearchParams(e.query)})),origin:Bt(ft),protocol:Bt(St,(function(t){var e=C(this);Vt(e,h(t)+":",et)})),username:Bt(vt,(function(t){var e=C(this),n=b(h(t));if(!O(e)){e.username="";for(var l=0;l<n.length;l++)e.username+=P(n[l],j)}})),password:Bt(Yt,(function(t){var e=C(this),n=b(h(t));if(!O(e)){e.password="";for(var l=0;l<n.length;l++)e.password+=P(n[l],j)}})),host:Bt(Kt,(function(t){var e=C(this);e.cannotBeABaseURL||Vt(e,h(t),Zt)})),hostname:Bt(Nt,(function(t){var e=C(this);e.cannotBeABaseURL||Vt(e,h(t),st)})),port:Bt(Jt,(function(t){var e=C(this);O(e)||(""==(t=h(t))?e.port=null:Vt(e,t,bt))})),pathname:Bt(Ht,(function(t){var e=C(this);e.cannotBeABaseURL||(e.path=[],Vt(e,h(t),pt))})),search:Bt(Ut,(function(t){var e=C(this);""==(t=h(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",Vt(e,t,yt)),V(e.searchParams).updateSearchParams(e.query)})),searchParams:Bt(kt),hash:Bt(Lt,(function(t){var e=C(this);""!=(t=h(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",Vt(e,t,Xt)):e.fragment=null}))}),a(Ct,"toJSON",(function(){return Rt.call(this)}),{enumerable:!0}),a(Ct,"toString",(function(){return Rt.call(this)}),{enumerable:!0}),y){var xt=y.createObjectURL,At=y.revokeObjectURL;xt&&a(Wt,"createObjectURL",(function(t){return xt.apply(y,arguments)})),At&&a(Wt,"revokeObjectURL",(function(t){return At.apply(y,arguments)}))}p(Wt,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,e,n){"use strict";var l=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,d=String.fromCharCode,r=function(t){return t+22+75*(t<26)},a=function(t,e,n){var l=0;for(t=n?o(t/700):t>>1,t+=o(t/e);t>455;l+=36)t=o(t/35);return o(l+36*t/(t+38))},u=function(t){var e,n,l=[],i=(t=function(t){for(var e=[],n=0,l=t.length;n<l;){var i=t.charCodeAt(n++);if(i>=55296&&i<=56319&&n<l){var c=t.charCodeAt(n++);56320==(64512&c)?e.push(((1023&i)<<10)+(1023&c)+65536):(e.push(i),n--)}else e.push(i)}return e}(t)).length,u=128,Z=0,s=72;for(e=0;e<t.length;e++)(n=t[e])<128&&l.push(d(n));var b=l.length,m=b;for(b&&l.push("-");m<i;){var I=2147483647;for(e=0;e<t.length;e++)(n=t[e])>=u&&n<I&&(I=n);var h=m+1;if(I-u>o((2147483647-Z)/h))throw RangeError(c);for(Z+=(I-u)*h,u=I,e=0;e<t.length;e++){if((n=t[e])<u&&++Z>2147483647)throw RangeError(c);if(n==u){for(var p=Z,g=36;;g+=36){var G=g<=s?1:g>=s+26?26:g-s;if(p<G)break;var y=p-G,X=36-G;l.push(d(r(G+y%X))),p=o(y/X)}l.push(d(r(p))),s=a(Z,h,m==b),Z=0,++m}}++Z,++u}return l.join("")};t.exports=function(t){var e,n,c=[],o=t.toLowerCase().replace(i,".").split(".");for(e=0;e<o.length;e++)n=o[e],c.push(l.test(n)?"xn--"+u(n):n);return c.join(".")}},function(t,e,n){"use strict";n(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},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 Z?e:Z,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=y(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 Z(){}function s(){}function b(){}var m={};m[i]=function(){return this};var I=Object.getPrototypeOf,h=I&&I(I(C([])));h&&h!==e&&n.call(h,i)&&(m=h);var p=b.prototype=Z.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,Z=u.value;return Z&&"object"==typeof Z&&n.call(Z,"__await")?e.resolve(Z.__await).then((function(t){l("next",t,o,d)}),(function(t){l("throw",t,o,d)})):e.resolve(Z).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 y(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,y(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 X(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(X,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 s.prototype=p.constructor=b,b.constructor=s,s.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===s||"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(p),t},t.awrap=function(t){return{__await:t}},g(G.prototype),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(p),d(p,o,"Generator"),p[i]=function(){return this},p.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){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,"AuthenticationUtils",(function(){return l.e})),n.d(e,"CLIENT_ID_TAG",(function(){return l.f})),n.d(e,"CLIENT_SECRET_TAG",(function(){return l.g})),n.d(e,"Hooks",(function(){return l.h})),n.d(e,"OIDC_SCOPE",(function(){return l.i})),n.d(e,"PKCE_CODE_VERIFIER",(function(){return l.j})),n.d(e,"PKCE_SEPARATOR",(function(){return l.k})),n.d(e,"REFRESH_TOKEN_TIMER",(function(){return l.l})),n.d(e,"ResponseMode",(function(){return l.m})),n.d(e,"SCOPE_TAG",(function(){return l.n})),n.d(e,"SESSION_STATE",(function(){return l.o})),n.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.p})),n.d(e,"SIGN_OUT_URL",(function(){return l.q})),n.d(e,"SPAUtils",(function(){return l.r})),n.d(e,"STATE",(function(){return l.s})),n.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return l.t})),n.d(e,"Storage",(function(){return l.u})),n.d(e,"Stores",(function(){return l.v})),n.d(e,"TOKEN_TAG",(function(){return l.w})),n.d(e,"USERNAME_TAG",(function(){return l.x})),n.d(e,"WebWorkerClass",(function(){return l.y})),n.d(e,"AuthClient",(function(){return X})),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(196),n(198),n(199),n(200),n(201),n(202),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(87),n(226),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(242),n(243),n(244),n(245),n(246),n(248),n(249),n(251),n(252),n(253),n(254),n(160),n(255),n(256),n(127),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(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(312),n(313),n(314),n(315),n(175),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(132),n(334),n(335),n(336),n(337),n(179),n(338),n(339),n(340),n(341),n(180),n(342),n(181),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),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(374),n(375),n(376),n(377),n(378),n(379),n(382),n(383),n(384),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(397),n(398),n(399),n(400),n(401),n(402),n(137),n(403),n(404),n(406),n(407),n(408),n(409),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(426),n(427),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(450),n(451),n(452),n(453),n(454),n(455),n(456),n(457),n(458),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(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(500),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(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(530),n(531),n(532),n(533),n(535),n(194),n(536);var l=n(45),i=n(20),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){Z(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 Z(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var s=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=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,s,b,m,I,h,p,g,G,y,X,V,W,C;return e=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=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 C.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:(W=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 W.apply(this,arguments)})},{key:"httpRequest",value:(V=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 V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=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 X.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:(y=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 y.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",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.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getHttpClient",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.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return g.apply(this,arguments)})},{key:"getDecodedIDToken",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.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",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.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"getAccessToken",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.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.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:(s=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 s.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.h.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),t}();function b(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 m(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){b(c,l,i,o,d,"next",t)}function d(t){b(c,l,i,o,d,"throw",t)}o(void 0)}))}}function I(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 h(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?I(Object(n),!0).forEach((function(e){p(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(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 G(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 G(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 G(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}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var y={disableTrySignInSilently:!0},X=new s,V=Object(i.createContext)(null),W=function(t){var e=g(Object(i.useState)(X.getState()),2),n=e[0],o=e[1],d=g(Object(i.useState)(!1),2),r=d[0],a=d[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,I=t.onSignOut,p=Object(i.useMemo)((function(){return h(h({},y),Z)}),[Z]),G=function(){var t=m(regeneratorRuntime.mark((function t(e,l,i,c,d){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,X.signIn(o,n,e,l,i,c,d);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,l,i,c){return t.apply(this,arguments)}}(),W=function(t,e,n){return t===l.h.CustomGrant?X.on(t,e,n):X.on(t,e)},C=function(){return X.trySignInSilently(n,o)};return Object(i.useEffect)((function(){n.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=a,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(i.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var e,i,c,d,r,a,u;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,W(l.h.SignOut,(function(){e=!0,I&&I()}));case 3:if(!n.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=15;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(d=new URL(location.href),!(l.r.hasAuthSearchParamsInURL()&&new URL(d.origin+d.pathname).toString()===new URL(null==p?void 0:p.signInRedirectURL).toString()||null!==(i=c)&&void 0!==i&&i.authorizationCode||d.searchParams.get("error"))){t.next=15;break}return t.next=15,G({callOnlyOnRedirect:!0},null===(r=c)||void 0===r?void 0:r.authorizationCode,null===(a=c)||void 0===a?void 0:a.sessionState,null===(u=c)||void 0===u?void 0:u.state).then((function(){})).catch((function(t){throw t}));case 15:if(!X.getState().isAuthenticated){t.next=17;break}return t.abrupt("return");case 17:if(!p.disableTrySignInSilently&&!e){t.next=20;break}return o(h(h({},n),{},{isLoading:!1})),t.abrupt("return");case 20:return t.next=22,C().then((function(){})).catch((function(t){throw t}));case 22:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,e){return X.requestCustomGrant(t,e,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:G,signOut:function(t){return X.signOut(o,n,t)},state:n,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)}}},r?u:null!=s?s:null)},C=function(){return Object(i.useContext)(V)},R=n(195),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=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,S({},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,Z=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,Z();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))}}])}));
|
|
882
|
+
*/updateConfig(t){return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===N.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}zn._instances=new Map;class wn extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,l(140))},function(t,e){var l={}.toString;t.exports=function(t){return l.call(t).slice(8,-1)}},function(t,e,l){var n=l(106),i=l(59);t.exports=function(t){var e=n(t,"string");return i(e)?e:String(e)}},function(t,e,l){var n,i,c=l(4),o=l(39),a=c.process,r=c.Deno,d=a&&a.versions||r&&r.version,u=d&&d.v8;u?i=(n=u.split("."))[0]<4?1:n[0]+n[1]:o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(i=n[1]),t.exports=i&&+i},function(t,e,l){var n=l(146),i=l(112).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},function(t,e,l){var n=l(30),i=Math.max,c=Math.min;t.exports=function(t,e){var l=n(t);return l<0?i(l+e,0):c(l,e)}},function(t,e,l){var n=l(46);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,e,l){var n=l(76),i=l(75),c=l(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||i[n(t)]}},function(t,e,l){"use strict";var n=l(47),i=l(14),c=l(38);t.exports=function(t,e,l){var o=n(e);o in t?i.f(t,o,c(0,l)):t[o]=l}},function(t,e,l){"use strict";var n=l(11),i=l(14),c=l(7),o=l(9),a=c("species");t.exports=function(t){var e=n(t),l=i.f;o&&e&&!e[a]&&l(e,a,{configurable:!0,get:function(){return this}})}},function(t,e,l){var n=l(0),i=l(70),c=l(8),o=l(16),a=l(14).f,r=l(49),d=l(115),u=l(69),Z=l(77),s=!1,b=u("meta"),I=0,h=Object.isExtensible||function(){return!0},m=function(t){a(t,b,{value:{objectID:"O"+I++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,e=[].splice,l={};l[b]=1,t(l).length&&(r.f=function(l){for(var n=t(l),i=0,c=n.length;i<c;i++)if(n[i]===b){e.call(n,i,1);break}return n},n({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:d.f}))},fastKey:function(t,e){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!h(t))return"F";if(!e)return"E";m(t)}return t[b].objectID},getWeakData:function(t,e){if(!o(t,b)){if(!h(t))return!0;if(!e)return!1;m(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&h(t)&&!o(t,b)&&m(t),t}};i[b]=!0},function(t,e,l){"use strict";var n=l(61),i=l(3),c=l(1),o=l(26),a=l(18),r=l(36),d=l(7),u=l(17),Z=l(11)("Promise"),s=u.set,b=u.get,I=d("toStringTag");t.exports=function(t,e){var l=function(t){t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,s(this,t)};return l.prototype=r(o(n.AsyncIterator.prototype),{next:function(l){var n=this,i=!!arguments.length;return new Z((function(o){var a=b(n),r=i?[a.ignoreArgument?void 0:l]:e?[]:[void 0];a.ignoreArgument=!1,o(a.done?{done:!0,value:void 0}:c(t.call(a,Z,r)))}))},return:function(t){var e=this;return new Z((function(l,n){var i=b(e),o=i.iterator;i.done=!0;var a=o.return;if(void 0===a)return l({done:!0,value:t});Z.resolve(a.call(o,t)).then((function(e){c(e),l({done:!0,value:t})}),n)}))},throw:function(t){var e=this;return new Z((function(l,n){var i=b(e),c=i.iterator;i.done=!0;var o=c.throw;if(void 0===o)return n(t);l(o.call(c,t))}))}}),e||a(l.prototype,I,"Generator"),l}},function(t,e,l){"use strict";var n=l(61),i=l(3),c=l(1),o=l(26),a=l(18),r=l(36),d=l(7),u=l(17),Z=u.set,s=u.get,b=d("toStringTag");t.exports=function(t,e){var l=function(t){t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,Z(this,t)};return l.prototype=r(o(n.Iterator.prototype),{next:function(l){var n=s(this),i=arguments.length?[n.ignoreArg?void 0:l]:e?[]:[void 0];n.ignoreArg=!1;var c=n.done?void 0:t.call(n,i);return{done:n.done,value:c}},return:function(t){var e=s(this),l=e.iterator;e.done=!0;var n=l.return;return{done:!0,value:void 0===n?t:c(n.call(l,t)).value}},throw:function(t){var e=s(this),l=e.iterator;e.done=!0;var n=l.throw;if(void 0===n)throw t;return n.call(l,t)}}),e||a(l.prototype,b,"Generator"),l}},function(t,e){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,e,l){var n=l(11),i=l(141);t.exports=i?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return"function"==typeof e&&Object(t)instanceof e}},function(t,e,l){var n=l(146),i=l(112);t.exports=Object.keys||function(t){return n(t,i)}},function(t,e,l){var n=l(4);t.exports=n},function(t,e,l){"use strict";var n=l(121).IteratorPrototype,i=l(26),c=l(38),o=l(34),a=l(75),r=function(){return this};t.exports=function(t,e,l){var d=e+" Iterator";return t.prototype=i(n,{next:c(1,l)}),o(t,d,!1,!0),a[d]=r,t}},function(t,e,l){var n=l(46),i=l(4);t.exports="process"==n(i.process)},function(t,e,l){var n=l(22),i=l(15),c="["+l(93)+"]",o=RegExp("^"+c+c+"*"),a=RegExp(c+c+"*$"),r=function(t){return function(e){var l=i(n(e));return 1&t&&(l=l.replace(o,"")),2&t&&(l=l.replace(a,"")),l}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,e,l){"use strict";var n=l(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,l){var n=l(30),i=l(15),c=l(22),o=function(t){return function(e,l){var o,a,r=i(c(e)),d=n(l),u=r.length;return d<0||d>=u?t?"":void 0:(o=r.charCodeAt(d))<55296||o>56319||d+1===u||(a=r.charCodeAt(d+1))<56320||a>57343?t?r.charAt(d):o:t?r.slice(d,d+2):a-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,e,l){var n=l(2),i=l(46),c="".split;t.exports=n((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?c.call(t,""):Object(t)}:Object},function(t,e,l){var n=l(5),i=l(83);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.17.2",mode:n?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,e){var l=0,n=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++l+n).toString(36)}},function(t,e){t.exports={}},function(t,e,l){var n=l(29),i=l(10),c=l(50),o=function(t){return function(e,l,o){var a,r=n(e),d=i(r.length),u=c(o,d);if(t&&l!=l){for(;d>u;)if((a=r[u++])!=a)return!0}else for(;d>u;u++)if((t||u in r)&&r[u]===l)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,l){var n=l(2),i=/#|\.prototype\./,c=function(t,e){var l=a[o(t)];return l==d||l!=r&&("function"==typeof e?n(e):!!e)},o=c.normalize=function(t){return String(t).replace(i,".").toLowerCase()},a=c.data={},r=c.NATIVE="N",d=c.POLYFILL="P";t.exports=c},function(t,e,l){var n=l(197);t.exports=function(t,e){return new(n(t))(0===e?0:e)}},function(t,e,l){var n=l(2),i=l(7),c=l(48),o=i("species");t.exports=function(t){return c>=51||!n((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e){t.exports={}},function(t,e,l){var n=l(119),i=l(46),c=l(7)("toStringTag"),o="Arguments"==i(function(){return arguments}());t.exports=n?i:function(t){var e,l,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(l=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),c))?l:o?i(e):"Object"==(n=i(e))&&"function"==typeof e.callee?"Arguments":n}},function(t,e,l){var n=l(2);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,l){"use strict";var n=l(3),i=function(t){var e,l;this.promise=new t((function(t,n){if(void 0!==e||void 0!==l)throw TypeError("Bad Promise constructor");e=t,l=n})),this.resolve=n(e),this.reject=n(l)};t.exports.f=function(t){return new i(t)}},function(t,e,l){var n=l(8),i=l(46),c=l(7)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==i(t))}},function(t,e,l){var n=l(30);t.exports=function(t){var e=n(t);if(e<0)throw RangeError("The argument can't be less than 0");return e}},function(t,e,l){"use strict";var n=l(3),i=l(1),c=l(11)("Promise"),o=[].push,a=function(t){var e=0==t,l=1==t,a=2==t,r=3==t;return function(t,d){i(t);var u=n(t.next),Z=e?[]:void 0;return e||n(d),new c((function(n,s){var b=function(e,l){try{var n=t.return;if(void 0!==n)return c.resolve(n.call(t)).then((function(){e(l)}),(function(t){s(t)}))}catch(t){return s(t)}e(l)},I=function(t){b(s,t)},h=function(){try{c.resolve(i(u.call(t))).then((function(t){try{if(i(t).done)n(e?Z:!r&&(a||void 0));else{var u=t.value;e?(o.call(Z,u),h()):c.resolve(d(u)).then((function(t){l?h():a?t?h():b(n,!1):t?b(n,r||u):h()}),I)}}catch(t){I(t)}}),I)}catch(t){I(t)}};h()}))}};t.exports={toArray:a(0),forEach:a(1),every:a(2),some:a(3),find:a(4)}},function(t,e,l){"use strict";var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,c=i&&!n.call({1:2},1);e.f=c?function(t){var e=i(this,t);return!!e&&e.enumerable}:n},function(t,e,l){var n=l(4),i=l(108),c=n["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,l){var n=l(68),i=l(69),c=n("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e,l){var n=l(1);t.exports=function(t,e,l){var i,c;n(t);try{if(void 0===(i=t.return)){if("throw"===e)throw l;return l}i=i.call(t)}catch(t){c=!0,i=t}if("throw"===e)throw l;if(c)throw i;return n(i),l}},function(t,e,l){var n=l(7)("iterator"),i=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var l=!1;try{var c={};c[n]=function(){return{next:function(){return{done:l=!0}}}},t(c)}catch(t){}return l}},function(t,e,l){"use strict";var n=l(29),i=l(35),c=l(75),o=l(17),a=l(120),r=o.set,d=o.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){r(this,{type:"Array Iterator",target:n(t),index:0,kind:e})}),(function(){var t=d(this),e=t.target,l=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==l?{value:n,done:!1}:"values"==l?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),"values"),c.Arguments=c.Array,i("keys"),i("values"),i("entries")},function(t,e,l){var n=l(3),i=l(13),c=l(67),o=l(10),a=function(t){return function(e,l,a,r){n(l);var d=i(e),u=c(d),Z=o(d.length),s=t?Z-1:0,b=t?-1:1;if(a<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=l(r,u[s],s,d));return r}};t.exports={left:a(!1),right:a(!0)}},function(t,e,l){"use strict";var n=l(4),i=l(9),c=l(124),o=l(18),a=l(36),r=l(2),d=l(33),u=l(30),Z=l(10),s=l(158),b=l(241),I=l(27),h=l(42),m=l(49).f,p=l(14).f,g=l(116),G=l(34),y=l(17),X=y.get,V=y.set,W=n.ArrayBuffer,C=W,R=n.DataView,f=R&&R.prototype,S=Object.prototype,v=n.RangeError,Y=b.pack,K=b.unpack,N=function(t){return[255&t]},J=function(t){return[255&t,t>>8&255]},H=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},L=function(t){return Y(t,23,4)},B=function(t){return Y(t,52,8)},k=function(t,e){p(t.prototype,e,{get:function(){return X(this)[e]}})},F=function(t,e,l,n){var i=s(l),c=X(t);if(i+e>c.byteLength)throw v("Wrong index");var o=X(c.buffer).bytes,a=i+c.byteOffset,r=o.slice(a,a+e);return n?r:r.reverse()},T=function(t,e,l,n,i,c){var o=s(l),a=X(t);if(o+e>a.byteLength)throw v("Wrong index");for(var r=X(a.buffer).bytes,d=o+a.byteOffset,u=n(+i),Z=0;Z<e;Z++)r[d+Z]=u[c?Z:e-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var x,A=(C=function(t){return d(this,C),new W(s(t))}).prototype=W.prototype,z=m(W),w=0;z.length>w;)(x=z[w++])in C||o(C,x,W[x]);A.constructor=C}h&&I(f)!==S&&h(f,S);var Q=new R(new C(2)),P=f.setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||a(f,{setInt8:function(t,e){P.call(this,t,e<<24>>24)},setUint8:function(t,e){P.call(this,t,e<<24>>24)}},{unsafe:!0})}else C=function(t){d(this,C,"ArrayBuffer");var e=s(t);V(this,{bytes:g.call(new Array(e),0),byteLength:e}),i||(this.byteLength=e)},R=function(t,e,l){d(this,R,"DataView"),d(t,C,"DataView");var n=X(t).byteLength,c=u(e);if(c<0||c>n)throw v("Wrong offset");if(c+(l=void 0===l?n-c:Z(l))>n)throw v("Wrong length");V(this,{buffer:t,byteLength:l,byteOffset:c}),i||(this.buffer=t,this.byteLength=l,this.byteOffset=c)},i&&(k(C,"byteLength"),k(R,"buffer"),k(R,"byteLength"),k(R,"byteOffset")),a(R.prototype,{getInt8:function(t){return F(this,1,t)[0]<<24>>24},getUint8:function(t){return F(this,1,t)[0]},getInt16:function(t){var e=F(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=F(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return U(F(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return U(F(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return K(F(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return K(F(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){T(this,1,t,N,e)},setUint8:function(t,e){T(this,1,t,N,e)},setInt16:function(t,e){T(this,2,t,J,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){T(this,2,t,J,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){T(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){T(this,4,t,H,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){T(this,4,t,L,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){T(this,8,t,B,e,arguments.length>2?arguments[2]:void 0)}});G(C,"ArrayBuffer"),G(R,"DataView"),t.exports={ArrayBuffer:C,DataView:R}},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(72),o=l(25),a=l(55),r=l(6),d=l(33),u=l(8),Z=l(2),s=l(86),b=l(34),I=l(91);t.exports=function(t,e,l){var h=-1!==t.indexOf("Map"),m=-1!==t.indexOf("Weak"),p=h?"set":"add",g=i[t],G=g&&g.prototype,y=g,X={},V=function(t){var e=G[t];o(G,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(m&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(m&&!u(t))&&e.call(this,0===t?0:t)}:function(t,l){return e.call(this,0===t?0:t,l),this})};if(c(t,"function"!=typeof g||!(m||G.forEach&&!Z((function(){(new g).entries().next()})))))y=l.getConstructor(e,t,h,p),a.enable();else if(c(t,!0)){var W=new y,C=W[p](m?{}:-0,1)!=W,R=Z((function(){W.has(1)})),f=s((function(t){new g(t)})),S=!m&&Z((function(){for(var t=new g,e=5;e--;)t[p](e,e);return!t.has(-0)}));f||((y=e((function(e,l){d(e,y,t);var n=I(new g,e,y);return null!=l&&r(l,n[p],{that:n,AS_ENTRIES:h}),n}))).prototype=G,G.constructor=y),(R||S)&&(V("delete"),V("has"),h&&V("get")),(S||C)&&V(p),m&&G.clear&&delete G.clear}return X[t]=y,n({global:!0,forced:y!=g},X),b(y,t),m||l.setStrong(y,t,h),y}},function(t,e,l){var n=l(8),i=l(42);t.exports=function(t,e,l){var c,o;return i&&"function"==typeof(c=e.constructor)&&c!==l&&n(o=c.prototype)&&o!==l.prototype&&i(t,o),t}},function(t,e){var l=Math.expm1,n=Math.exp;t.exports=!l||l(10)>22025.465794806718||l(10)<22025.465794806718||-2e-17!=l(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:l},function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,e,l){"use strict";var n=l(5),i=l(4),c=l(2),o=l(123);t.exports=n||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,l){var n=l(2),i=l(4).RegExp;e.UNSUPPORTED_Y=n((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=n((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,l){"use strict";var n,i,c=l(15),o=l(65),a=l(96),r=l(68),d=l(26),u=l(17).get,Z=l(177),s=l(178),b=RegExp.prototype.exec,I=r("native-string-replace",String.prototype.replace),h=b,m=(n=/a/,i=/b*/g,b.call(n,"a"),b.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),p=a.UNSUPPORTED_Y||a.BROKEN_CARET,g=void 0!==/()??/.exec("")[1];(m||g||p||Z||s)&&(h=function(t){var e,l,n,i,a,r,Z,s=this,G=u(s),y=c(t),X=G.raw;if(X)return X.lastIndex=s.lastIndex,e=h.call(X,y),s.lastIndex=X.lastIndex,e;var V=G.groups,W=p&&s.sticky,C=o.call(s),R=s.source,f=0,S=y;if(W&&(-1===(C=C.replace("y","")).indexOf("g")&&(C+="g"),S=y.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==y.charAt(s.lastIndex-1))&&(R="(?: "+R+")",S=" "+S,f++),l=new RegExp("^(?:"+R+")",C)),g&&(l=new RegExp("^"+R+"$(?!\\s)",C)),m&&(n=s.lastIndex),i=b.call(W?l:s,S),W?i?(i.input=i.input.slice(f),i[0]=i[0].slice(f),i.index=s.lastIndex,s.lastIndex+=i[0].length):s.lastIndex=0:m&&i&&(s.lastIndex=s.global?i.index+i[0].length:n),g&&i&&i.length>1&&I.call(i[0],l,(function(){for(a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(i[a]=void 0)})),i&&V)for(i.groups=r=d(null),a=0;a<V.length;a++)r[(Z=V[a])[0]]=i[Z[1]];return i}),t.exports=h},function(t,e,l){"use strict";l(132);var n=l(25),i=l(97),c=l(2),o=l(7),a=l(18),r=o("species"),d=RegExp.prototype;t.exports=function(t,e,l,u){var Z=o(t),s=!c((function(){var e={};return e[Z]=function(){return 7},7!=""[t](e)})),b=s&&!c((function(){var e=!1,l=/a/;return"split"===t&&((l={}).constructor={},l.constructor[r]=function(){return l},l.flags="",l[Z]=/./[Z]),l.exec=function(){return e=!0,null},l[Z](""),!e}));if(!s||!b||l){var I=/./[Z],h=e(Z,""[t],(function(t,e,l,n,c){var o=e.exec;return o===i||o===d.exec?s&&!c?{done:!0,value:I.call(e,l,n)}:{done:!0,value:t.call(l,e,n)}:{done:!1}}));n(String.prototype,t,h[0]),n(d,Z,h[1])}u&&a(d[Z],"sham",!0)}},function(t,e,l){"use strict";var n=l(66).charAt;t.exports=function(t,e,l){return e+(l?n(t,e).length:1)}},function(t,e,l){var n=l(46),i=l(97);t.exports=function(t,e){var l=t.exec;if("function"==typeof l){var c=l.call(t,e);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==n(t))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,l){var n=l(12),i=l(28),c=n.TYPED_ARRAY_CONSTRUCTOR,o=n.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,l){var n=l(3);t.exports=function(t){return null==t?void 0:n(t)}},function(t,e,l){"use strict";var n=l(1),i=l(3);t.exports=function(){for(var t,e=n(this),l=i(e.delete),c=!0,o=0,a=arguments.length;o<a;o++)t=l.call(e,arguments[o]),c=c&&t;return!!c}},function(t,e,l){"use strict";var n=l(3),i=l(19),c=l(6);t.exports=function(t){var e,l,o,a,r=arguments.length,d=r>1?arguments[1]:void 0;return n(this),(e=void 0!==d)&&n(d),null==t?new this:(l=[],e?(o=0,a=i(d,r>2?arguments[2]:void 0,2),c(t,(function(t){l.push(a(t,o++))}))):c(t,l.push,{that:l}),new this(l))}},function(t,e,l){"use strict";t.exports=function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}},function(t,e,l){var n=l(8),i=l(59),c=l(142),o=l(7)("toPrimitive");t.exports=function(t,e){if(!n(t)||i(t))return t;var l,a=t[o];if(void 0!==a){if(void 0===e&&(e="default"),l=a.call(t,e),!n(l)||i(l))return l;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),c(t,e)}},function(t,e,l){var n=l(48),i=l(2);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},function(t,e,l){var n=l(4);t.exports=function(t,e){try{Object.defineProperty(n,t,{value:e,configurable:!0,writable:!0})}catch(l){n[t]=e}return e}},function(t,e,l){var n=l(4),i=l(8),c=n.document,o=i(c)&&i(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,e,l){var n=l(83),i=Function.toString;"function"!=typeof n.inspectSource&&(n.inspectSource=function(t){return i.call(t)}),t.exports=n.inspectSource},function(t,e,l){var n=l(11),i=l(49),c=l(113),o=l(1);t.exports=n("Reflect","ownKeys")||function(t){var e=i.f(o(t)),l=c.f;return l?e.concat(l(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,l){var n=l(9),i=l(14),c=l(1),o=l(60);t.exports=n?Object.defineProperties:function(t,e){c(t);for(var l,n=o(e),a=n.length,r=0;a>r;)i.f(t,l=n[r++],e[l]);return t}},function(t,e,l){var n=l(29),i=l(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return i(t)}catch(t){return o.slice()}}(t):i(n(t))}},function(t,e,l){"use strict";var n=l(13),i=l(50),c=l(10);t.exports=function(t){for(var e=n(this),l=c(e.length),o=arguments.length,a=i(o>1?arguments[1]:void 0,l),r=o>2?arguments[2]:void 0,d=void 0===r?l:i(r,l);d>a;)e[a++]=t;return e}},function(t,e,l){var n=l(1),i=l(85);t.exports=function(t,e,l,c){try{return c?e(n(l)[0],l[1]):e(l)}catch(e){i(t,"throw",e)}}},function(t,e,l){var n=l(7),i=l(75),c=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,l){var n={};n[l(7)("toStringTag")]="z",t.exports="[object z]"===String(n)},function(t,e,l){"use strict";var n=l(0),i=l(62),c=l(27),o=l(42),a=l(34),r=l(18),d=l(25),u=l(7),Z=l(5),s=l(75),b=l(121),I=b.IteratorPrototype,h=b.BUGGY_SAFARI_ITERATORS,m=u("iterator"),p=function(){return this};t.exports=function(t,e,l,u,b,g,G){i(l,e,u);var y,X,V,W=function(t){if(t===b&&v)return v;if(!h&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new l(this,t)}}return function(){return new l(this)}},C=e+" Iterator",R=!1,f=t.prototype,S=f[m]||f["@@iterator"]||b&&f[b],v=!h&&S||W(b),Y="Array"==e&&f.entries||S;if(Y&&(y=c(Y.call(new t)),I!==Object.prototype&&y.next&&(Z||c(y)===I||(o?o(y,I):"function"!=typeof y[m]&&r(y,m,p)),a(y,C,!0,!0),Z&&(s[C]=p))),"values"==b&&S&&"values"!==S.name&&(R=!0,v=function(){return S.call(this)}),Z&&!G||f[m]===v||r(f,m,v),s[e]=v,b)if(X={values:W("values"),keys:g?v:W("keys"),entries:W("entries")},G)for(V in X)(h||R||!(V in f))&&d(f,V,X[V]);else n({target:e,proto:!0,forced:h||R},X);return X}},function(t,e,l){"use strict";var n,i,c,o=l(2),a=l(27),r=l(18),d=l(16),u=l(7),Z=l(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(i=a(a(c)))!==Object.prototype&&(n=i):b=!0);var I=null==n||o((function(){var t={};return n[s].call(t)!==t}));I&&(n={}),Z&&!I||d(n,s)||r(n,s,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:b}},function(t,e,l){var n=l(2);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,l){var n=l(39).match(/AppleWebKit\/(\d+)\./);t.exports=!!n&&+n[1]},function(t,e){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,e,l){var n=l(10),i=l(15),c=l(126),o=l(22),a=Math.ceil,r=function(t){return function(e,l,r){var d,u,Z=i(o(e)),s=Z.length,b=void 0===r?" ":i(r),I=n(l);return I<=s||""==b?Z:(d=I-s,(u=c.call(b,a(d/b.length))).length>d&&(u=u.slice(0,d)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,e,l){"use strict";var n=l(30),i=l(15),c=l(22);t.exports=function(t){var e=i(c(this)),l="",o=n(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(l+=e);return l}},function(t,e,l){"use strict";var n=l(90),i=l(161);t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i)},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,l){var n=l(8),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,l){var n=l(4),i=l(15),c=l(64).trim,o=l(93),a=n.parseInt,r=/^[+-]?0[Xx]/,d=8!==a(o+"08")||22!==a(o+"0x16");t.exports=d?function(t,e){var l=c(i(t));return a(l,e>>>0||(r.test(l)?16:10))}:a},function(t,e,l){var n,i,c,o,a=l(4),r=l(2),d=l(19),u=l(147),Z=l(109),s=l(171),b=l(63),I=a.setImmediate,h=a.clearImmediate,m=a.process,p=a.MessageChannel,g=a.Dispatch,G=0,y={};try{n=a.location}catch(t){}var X=function(t){if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},V=function(t){return function(){X(t)}},W=function(t){X(t.data)},C=function(t){a.postMessage(String(t),n.protocol+"//"+n.host)};I&&h||(I=function(t){for(var e=[],l=arguments.length,n=1;l>n;)e.push(arguments[n++]);return y[++G]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},i(G),G},h=function(t){delete y[t]},b?i=function(t){m.nextTick(V(t))}:g&&g.now?i=function(t){g.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,i=d(o.postMessage,o,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts&&n&&"file:"!==n.protocol&&!r(C)?(i=C,a.addEventListener("message",W,!1)):i="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),X(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:I,clear:h}},function(t,e,l){"use strict";var n=l(0),i=l(97);n({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,l){var n=l(79);t.exports=function(t){if(n(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,e,l){var n=l(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(l){try{return e[n]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,l){var n=l(2),i=l(93);t.exports=function(t){return n((function(){return!!i[t]()||"
"!="
"[t]()||i[t].name!==t}))}},function(t,e,l){var n=l(4),i=l(2),c=l(86),o=l(12).NATIVE_ARRAY_BUFFER_VIEWS,a=n.ArrayBuffer,r=n.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 a(2),1,void 0).length}))},function(t,e,l){"use strict";var n,i=l(4),c=l(36),o=l(55),a=l(90),r=l(186),d=l(8),u=l(17).enforce,Z=l(144),s=!i.ActiveXObject&&"ActiveXObject"in i,b=Object.isExtensible,I=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=t.exports=a("WeakMap",I,r);if(Z&&s){n=r.getConstructor(I,"WeakMap",!0),o.enable();var m=h.prototype,p=m.delete,g=m.has,G=m.get,y=m.set;c(m,{delete:function(t){if(d(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new n),p.call(this,t)||e.frozen.delete(t)}return p.call(this,t)},has:function(t){if(d(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new n),g.call(this,t)||e.frozen.has(t)}return g.call(this,t)},get:function(t){if(d(t)&&!b(t)){var e=u(this);return e.frozen||(e.frozen=new n),g.call(this,t)?G.call(this,t):e.frozen.get(t)}return G.call(this,t)},set:function(t,e){if(d(t)&&!b(t)){var l=u(this);l.frozen||(l.frozen=new n),g.call(this,t)?y.call(this,t,e):l.frozen.set(t,e)}else y.call(this,t,e);return this}})}},function(t,e,l){"use strict";var n=l(1);t.exports=function(t,e){var l,i=n(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof e&&"function"!=typeof c)throw TypeError("At least one callback required");return i.has(t)?(l=i.get(t),"function"==typeof e&&(l=e(l),i.set(t,l))):"function"==typeof c&&(l=c(),i.set(t,l)),l}},function(t,e,l){"use strict";var n=l(17),i=l(62),c=l(16),o=l(60),a=l(13),r=n.set,d=n.getterFor("Object Iterator");t.exports=i((function(t,e){var l=a(t);r(this,{type:"Object Iterator",mode:e,object:l,keys:o(l),index:0})}),"Object",(function(){for(var t=d(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,{value:void 0,done:!0};var l=e[t.index++],n=t.object;if(c(n,l)){switch(t.mode){case"keys":return{value:l,done:!1};case"values":return{value:n[l],done:!1}}return{value:[l,n[l]],done:!1}}}}))},function(t,e){var l;l=function(){return this}();try{l=l||new Function("return this")()}catch(t){"object"==typeof window&&(l=window)}t.exports=l},function(t,e,l){var n=l(107);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,l){var n=l(8);t.exports=function(t,e){var l,i;if("string"===e&&"function"==typeof(l=t.toString)&&!n(i=l.call(t)))return i;if("function"==typeof(l=t.valueOf)&&!n(i=l.call(t)))return i;if("string"!==e&&"function"==typeof(l=t.toString)&&!n(i=l.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,l){var n=l(9),i=l(2),c=l(109);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,l){var n=l(4),i=l(110),c=n.WeakMap;t.exports="function"==typeof c&&/native code/.test(i(c))},function(t,e,l){var n=l(16),i=l(111),c=l(24),o=l(14);t.exports=function(t,e){for(var l=i(e),a=o.f,r=c.f,d=0;d<l.length;d++){var u=l[d];n(t,u)||a(t,u,r(e,u))}}},function(t,e,l){var n=l(16),i=l(29),c=l(71).indexOf,o=l(70);t.exports=function(t,e){var l,a=i(t),r=0,d=[];for(l in a)!n(o,l)&&n(a,l)&&d.push(l);for(;e.length>r;)n(a,l=e[r++])&&(~c(d,l)||d.push(l));return d}},function(t,e,l){var n=l(11);t.exports=n("document","documentElement")},function(t,e,l){var n=l(7);e.f=n},function(t,e,l){"use strict";var n=l(13),i=l(50),c=l(10),o=Math.min;t.exports=[].copyWithin||function(t,e){var l=n(this),a=c(l.length),r=i(t,a),d=i(e,a),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?a:i(u,a))-d,a-r),s=1;for(d<r&&r<d+Z&&(s=-1,d+=Z-1,r+=Z-1);Z-- >0;)d in l?l[r]=l[d]:delete l[r],r+=s,d+=s;return l}},function(t,e,l){"use strict";var n=l(51),i=l(10),c=l(19),o=function(t,e,l,a,r,d,u,Z){for(var s,b=r,I=0,h=!!u&&c(u,Z,3);I<a;){if(I in l){if(s=h?h(l[I],I,e):l[I],d>0&&n(s))b=o(t,e,s,i(s.length),b,d-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}I++}return b};t.exports=o},function(t,e,l){"use strict";var n=l(23).forEach,i=l(40)("forEach");t.exports=i?[].forEach:function(t){return n(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,l){"use strict";var n=l(19),i=l(13),c=l(117),o=l(118),a=l(10),r=l(53),d=l(41),u=l(52);t.exports=function(t){var e,l,Z,s,b,I,h=i(t),m="function"==typeof this?this:Array,p=arguments.length,g=p>1?arguments[1]:void 0,G=void 0!==g,y=u(h),X=0;if(G&&(g=n(g,p>2?arguments[2]:void 0,2)),null==y||m==Array&&o(y))for(l=new m(e=a(h.length));e>X;X++)I=G?g(h[X],X):h[X],r(l,X,I);else for(b=(s=d(h,y)).next,l=new m;!(Z=b.call(s)).done;X++)I=G?c(s,g,[Z.value,X],!0):Z.value,r(l,X,I);return l.length=X,l}},function(t,e,l){var n=l(8);t.exports=function(t){if(!n(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,l){"use strict";var n=l(29),i=l(30),c=l(10),o=l(40),a=Math.min,r=[].lastIndexOf,d=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=d||!u;t.exports=Z?function(t){if(d)return r.apply(this,arguments)||0;var e=n(this),l=c(e.length),o=l-1;for(arguments.length>1&&(o=a(o,i(arguments[1]))),o<0&&(o=l+o);o>=0;o--)if(o in e&&e[o]===t)return o||0;return-1}:r},function(t,e){var l=Math.floor,n=function(t,e){var o=t.length,a=l(o/2);return o<8?i(t,e):c(n(t.slice(0,a),e),n(t.slice(a),e),e)},i=function(t,e){for(var l,n,i=t.length,c=1;c<i;){for(n=c,l=t[c];n&&e(t[n-1],l)>0;)t[n]=t[--n];n!==c++&&(t[n]=l)}return t},c=function(t,e,l){for(var n=t.length,i=e.length,c=0,o=0,a=[];c<n||o<i;)c<n&&o<i?a.push(l(t[c],e[o])<=0?t[c++]:e[o++]):a.push(c<n?t[c++]:e[o++]);return a};t.exports=n},function(t,e,l){var n=l(39).match(/firefox\/(\d+)/i);t.exports=!!n&&+n[1]},function(t,e,l){var n=l(39);t.exports=/MSIE|Trident/.test(n)},function(t,e,l){var n=l(30),i=l(10);t.exports=function(t){if(void 0===t)return 0;var e=n(t),l=i(e);if(e!==l)throw RangeError("Wrong length or index");return l}},function(t,e,l){"use strict";var n=l(3),i=l(8),c=[].slice,o={},a=function(t,e,l){if(!(e in o)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";o[e]=Function("C,a","return new C("+n.join(",")+")")}return o[e](t,l)};t.exports=Function.bind||function(t){var e=n(this),l=c.call(arguments,1),o=function(){var n=l.concat(c.call(arguments));return this instanceof o?a(e,n.length,n):e.apply(t,n)};return i(e.prototype)&&(o.prototype=e.prototype),o}},function(t,e,l){l(0)({global:!0},{globalThis:l(4)})},function(t,e,l){"use strict";var n=l(14).f,i=l(26),c=l(36),o=l(19),a=l(33),r=l(6),d=l(120),u=l(54),Z=l(9),s=l(55).fastKey,b=l(17),I=b.set,h=b.getterFor;t.exports={getConstructor:function(t,e,l,d){var u=t((function(t,n){a(t,u,e),I(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=n&&r(n,t[d],{that:t,AS_ENTRIES:l})})),b=h(e),m=function(t,e,l){var n,i,c=b(t),o=p(t,e);return o?o.value=l:(c.last=o={index:i=s(e,!0),key:e,value:l,previous:n=c.last,next:void 0,removed:!1},c.first||(c.first=o),n&&(n.next=o),Z?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},p=function(t,e){var l,n=b(t),i=s(e);if("F"!==i)return n.index[i];for(l=n.first;l;l=l.next)if(l.key==e)return l};return c(u.prototype,{clear:function(){for(var t=b(this),e=t.index,l=t.first;l;)l.removed=!0,l.previous&&(l.previous=l.previous.next=void 0),delete e[l.index],l=l.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var e=b(this),l=p(this,t);if(l){var n=l.next,i=l.previous;delete e.index[l.index],l.removed=!0,i&&(i.next=n),n&&(n.previous=i),e.first==l&&(e.first=n),e.last==l&&(e.last=i),Z?e.size--:this.size--}return!!l},forEach:function(t){for(var e,l=b(this),n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:l.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,l?{get:function(t){var e=p(this,t);return e&&e.value},set:function(t,e){return m(this,0===t?0:t,e)}}:{add:function(t){return m(this,t=0===t?0:t,t)}}),Z&&n(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,e,l){var n=e+" Iterator",i=h(e),c=h(n);d(t,e,(function(t,e){I(this,{type:n,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,l=t.last;l&&l.removed;)l=l.previous;return t.target&&(t.last=l=l?l.next:t.state.first)?"keys"==e?{value:l.key,done:!1}:"values"==e?{value:l.value,done:!1}:{value:[l.key,l.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),l?"entries":"values",!l,!0),u(e)}}},function(t,e){var l=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:l(1+t)}},function(t,e,l){var n=l(128),i=Math.abs,c=Math.pow,o=c(2,-52),a=c(2,-23),r=c(2,127)*(2-a),d=c(2,-126);t.exports=Math.fround||function(t){var e,l,c=i(t),u=n(t);return c<d?u*(c/d/a+1/o-1/o)*d*a:(l=(e=(1+a/o)*c)-(e-c))>r||l!=l?u*(1/0):u*l}},function(t,e,l){var n=l(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&n(t)}},function(t,e,l){var n=l(4),i=l(15),c=l(64).trim,o=l(93),a=n.parseFloat,r=1/a(o+"-0")!=-1/0;t.exports=r?function(t){var e=c(i(t)),l=a(e);return 0===l&&"-"==e.charAt(0)?-0:l}:a},function(t,e){var l=1..valueOf;t.exports=function(t){return l.call(t)}},function(t,e,l){"use strict";var n=l(9),i=l(2),c=l(60),o=l(113),a=l(82),r=l(13),d=l(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||i((function(){if(n&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},l=Symbol();return t[l]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=u({},t)[l]||"abcdefghijklmnopqrst"!=c(u({},e)).join("")}))?function(t,e){for(var l=r(t),i=arguments.length,u=1,Z=o.f,s=a.f;i>u;)for(var b,I=d(arguments[u++]),h=Z?c(I).concat(Z(I)):c(I),m=h.length,p=0;m>p;)b=h[p++],n&&!s.call(I,b)||(l[b]=I[b]);return l}:u},function(t,e,l){var n=l(9),i=l(60),c=l(29),o=l(82).f,a=function(t){return function(e){for(var l,a=c(e),r=i(a),d=r.length,u=0,Z=[];d>u;)l=r[u++],n&&!o.call(a,l)||Z.push(t?[l,a[l]]:a[l]);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,l){var n=l(4);t.exports=n.Promise},function(t,e,l){var n=l(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},function(t,e,l){var n,i,c,o,a,r,d,u,Z=l(4),s=l(24).f,b=l(131).set,I=l(171),h=l(316),m=l(317),p=l(63),g=Z.MutationObserver||Z.WebKitMutationObserver,G=Z.document,y=Z.process,X=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(n=function(){var t,e;for(p&&(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()},I||p||m||!g||!G?!h&&X&&X.resolve?((d=X.resolve(void 0)).constructor=X,u=d.then,o=function(){u.call(d,n)}):o=p?function(){y.nextTick(n)}:function(){b.call(Z,n)}:(a=!0,r=G.createTextNode(""),new g(n).observe(r,{characterData:!0}),o=function(){r.data=a=!a})),t.exports=W||function(t){var e={fn:t,next:void 0};c&&(c.next=e),i||(i=e,o()),c=e}},function(t,e,l){var n=l(1),i=l(8),c=l(78);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var l=c.f(t);return(0,l.resolve)(e),l.promise}},function(t,e,l){var n=l(4);t.exports=function(t,e){var l=n.console;l&&l.error&&(1===arguments.length?l.error(t):l.error(t,e))}},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(78),o=l(95),a=l(6);n({target:"Promise",stat:!0},{allSettled:function(t){var e=this,l=c.f(e),n=l.resolve,r=l.reject,d=o((function(){var l=i(e.resolve),c=[],o=0,r=1;a(t,(function(t){var i=o++,a=!1;c.push(void 0),r++,l.call(e,t).then((function(t){a||(a=!0,c[i]={status:"fulfilled",value:t},--r||n(c))}),(function(t){a||(a=!0,c[i]={status:"rejected",reason:t},--r||n(c))}))})),--r||n(c)}));return d.error&&r(d.value),l.promise}})},function(t,e,l){var n=l(16);t.exports=function(t){return void 0!==t&&(n(t,"value")||n(t,"writable"))}},function(t,e,l){var n=l(2),i=l(4).RegExp;t.exports=n((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,l){var n=l(2),i=l(4).RegExp;t.exports=n((function(){var t=i("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,l){"use strict";var n=l(90),i=l(161);t.exports=n("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i)},function(t,e,l){"use strict";var n=l(66).charAt,i=l(15),c=l(17),o=l(120),a=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){a(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=r(this),l=e.string,i=e.index;return i>=l.length?{value:void 0,done:!0}:(t=n(l,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,l){"use strict";var n=l(0),i=l(62),c=l(22),o=l(10),a=l(15),r=l(3),d=l(1),u=l(46),Z=l(79),s=l(65),b=l(18),I=l(2),h=l(7),m=l(28),p=l(99),g=l(17),G=l(5),y=h("matchAll"),X=g.set,V=g.getterFor("RegExp String Iterator"),W=RegExp.prototype,C=W.exec,R="".matchAll,f=!!R&&!I((function(){"a".matchAll(/./)})),S=i((function(t,e,l,n){X(this,{type:"RegExp String Iterator",regexp:t,string:e,global:l,unicode:n,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,l=t.string,n=function(t,e){var l,n=t.exec;if("function"==typeof n){if("object"!=typeof(l=n.call(t,e)))throw TypeError("Incorrect exec result");return l}return C.call(t,e)}(e,l);return null===n?{value:void 0,done:t.done=!0}:t.global?(""===a(n[0])&&(e.lastIndex=p(l,o(e.lastIndex),t.unicode)),{value:n,done:!1}):(t.done=!0,{value:n,done:!1})})),v=function(t){var e,l,n,i,c,r,u=d(this),Z=a(t);return e=m(u,RegExp),void 0===(l=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(l=s.call(u)),n=void 0===l?"":a(l),i=new e(e===RegExp?u.source:u,n),c=!!~n.indexOf("g"),r=!!~n.indexOf("u"),i.lastIndex=o(u.lastIndex),new S(i,Z,c,r)};n({target:"String",proto:!0,forced:f},{matchAll:function(t){var e,l,n,i=c(this);if(null!=t){if(Z(t)&&!~a(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return R.apply(i,arguments);if(void 0===(l=t[y])&&G&&"RegExp"==u(t)&&(l=v),null!=l)return r(l).call(t,i)}else if(f)return R.apply(i,arguments);return e=a(i),n=new RegExp(t,"g"),G?v.call(n,e):n[y](e)}}),G||y in W||b(W,y,v)},function(t,e,l){var n=l(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(n)},function(t,e,l){var n=l(13),i=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,l,r,d,u){var Z=l+t.length,s=r.length,b=a;return void 0!==d&&(d=n(d),b=o),c.call(u,b,(function(n,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,l);case"'":return e.slice(Z);case"<":o=d[c.slice(1,-1)];break;default:var a=+c;if(0===a)return n;if(a>s){var u=i(a/10);return 0===u?n:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):n}o=r[a-1]}return void 0===o?"":o}))}},function(t,e,l){var n=l(80);t.exports=function(t,e){var l=n(t);if(l%e)throw RangeError("Wrong offset");return l}},function(t,e,l){var n=l(13),i=l(10),c=l(41),o=l(52),a=l(118),r=l(19),d=l(12).aTypedArrayConstructor;t.exports=function(t){var e,l,u,Z,s,b,I=n(t),h=arguments.length,m=h>1?arguments[1]:void 0,p=void 0!==m,g=o(I);if(null!=g&&!a(g))for(b=(s=c(I,g)).next,I=[];!(Z=b.call(s)).done;)I.push(Z.value);for(p&&h>2&&(m=r(m,arguments[2],2)),l=i(I.length),u=new(d(this))(l),e=0;l>e;e++)u[e]=p?m(I[e],e):I[e];return u}},function(t,e,l){"use strict";var n=l(36),i=l(55).getWeakData,c=l(1),o=l(8),a=l(33),r=l(6),d=l(23),u=l(16),Z=l(17),s=Z.set,b=Z.getterFor,I=d.find,h=d.findIndex,m=0,p=function(t){return t.frozen||(t.frozen=new g)},g=function(){this.entries=[]},G=function(t,e){return I(t.entries,(function(t){return t[0]===e}))};g.prototype={get:function(t){var e=G(this,t);if(e)return e[1]},has:function(t){return!!G(this,t)},set:function(t,e){var l=G(this,t);l?l[1]=e:this.entries.push([t,e])},delete:function(t){var e=h(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,l,d){var Z=t((function(t,n){a(t,Z,e),s(t,{type:e,id:m++,frozen:void 0}),null!=n&&r(n,t[d],{that:t,AS_ENTRIES:l})})),I=b(e),h=function(t,e,l){var n=I(t),o=i(c(e),!0);return!0===o?p(n).set(e,l):o[n.id]=l,t};return n(Z.prototype,{delete:function(t){var e=I(this);if(!o(t))return!1;var l=i(t);return!0===l?p(e).delete(t):l&&u(l,e.id)&&delete l[e.id]},has:function(t){var e=I(this);if(!o(t))return!1;var l=i(t);return!0===l?p(e).has(t):l&&u(l,e.id)}}),n(Z.prototype,l?{get:function(t){var e=I(this);if(o(t)){var l=i(t);return!0===l?p(e).get(t):l?l[e.id]:void 0}},set:function(t,e){return h(this,t,e)}}:{add:function(t){return h(this,t,!0)}}),Z}}},function(t,e,l){var n=l(188),i=l(3),c=l(1),o=l(41),a=l(102),r=l(7)("asyncIterator");t.exports=function(t,e){var l=arguments.length<2?a(t[r]):e;return void 0===l?new n(o(t)):c(i(l).call(t))}},function(t,e,l){"use strict";var n=l(61),i=l(1),c=l(26),o=l(102),a=l(36),r=l(17),d=l(11)("Promise"),u=r.set,Z=r.get,s=function(t,e,l){var n=t.done;d.resolve(t.value).then((function(t){e({done:n,value:t})}),l)},b=function(t){u(this,{iterator:i(t),next:t.next})};b.prototype=a(c(n.AsyncIterator.prototype),{next:function(t){var e=Z(this),l=!!arguments.length;return new d((function(n,c){var o=i(e.next.apply(e.iterator,l?[t]:[]));s(o,n,c)}))},return:function(t){var e=Z(this).iterator,l=!!arguments.length;return new d((function(n,c){var a=o(e.return);if(void 0===a)return n({done:!0,value:t});var r=i(a.apply(e,l?[t]:[]));s(r,n,c)}))},throw:function(t){var e=Z(this).iterator,l=!!arguments.length;return new d((function(n,c){var a=o(e.throw);if(void 0===a)return c(t);var r=i(a.apply(e,l?[t]:[]));s(r,n,c)}))}}),t.exports=b},function(t,e,l){var n=l(127),i=l(137),c=l(26),o=l(8),a=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};a.prototype.get=function(t,e){return this[t]||(this[t]=e())},a.prototype.next=function(t,e,l){var c=l?this.objectsByIndex[t]||(this.objectsByIndex[t]=new i):this.primitives||(this.primitives=new n),o=c.get(e);return o||c.set(e,o=new a),o};var r=new a;t.exports=function(){var t,e,l=r,n=arguments.length;for(t=0;t<n;t++)o(e=arguments[t])&&(l=l.next(t,e,!0));if(this===Object&&l===r)throw TypeError("Composite keys must contain a non-primitive component");for(t=0;t<n;t++)o(e=arguments[t])||(l=l.next(t,e,!1));return l}},function(t,e){t.exports=Math.scale||function(t,e,l,n,i){return 0===arguments.length||t!=t||e!=e||l!=l||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(l-e)+n}},function(t,e,l){"use strict";var n=l(1),i=l(3);t.exports=function(){for(var t=n(this),e=i(t.add),l=0,c=arguments.length;l<c;l++)e.call(t,arguments[l]);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,l){var n=l(2),i=l(7),c=l(5),o=i("iterator");t.exports=!n((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,l="";return t.pathname="c%20d",e.forEach((function(t,n){e.delete("b"),l+=n+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"!==l||"x"!==new URL("http://x",void 0).host}))},function(t,e,l){"use strict";l(87);var n=l(0),i=l(11),c=l(193),o=l(25),a=l(36),r=l(34),d=l(62),u=l(17),Z=l(33),s=l(16),b=l(19),I=l(76),h=l(1),m=l(8),p=l(15),g=l(26),G=l(38),y=l(41),X=l(52),V=l(7),W=i("fetch"),C=i("Request"),R=C&&C.prototype,f=i("Headers"),S=V("iterator"),v=u.set,Y=u.getterFor("URLSearchParams"),K=u.getterFor("URLSearchParamsIterator"),N=/\+/g,J=Array(4),H=function(t){return J[t-1]||(J[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},U=function(t){try{return decodeURIComponent(t)}catch(e){return t}},L=function(t){var e=t.replace(N," "),l=4;try{return decodeURIComponent(e)}catch(t){for(;l;)e=e.replace(H(l--),U);return e}},B=/[!'()~]|%20/g,k={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},F=function(t){return k[t]},T=function(t){return encodeURIComponent(t).replace(B,F)},x=function(t,e){if(e)for(var l,n,i=e.split("&"),c=0;c<i.length;)(l=i[c++]).length&&(n=l.split("="),t.push({key:L(n.shift()),value:L(n.join("="))}))},A=function(t){this.entries.length=0,x(this.entries,t)},z=function(t,e){if(t<e)throw TypeError("Not enough arguments")},w=d((function(t,e){v(this,{type:"URLSearchParamsIterator",iterator:y(Y(t).entries),kind:e})}),"Iterator",(function(){var t=K(this),e=t.kind,l=t.iterator.next(),n=l.value;return l.done||(l.value="keys"===e?n.key:"values"===e?n.value:[n.key,n.value]),l})),Q=function(){Z(this,Q,"URLSearchParams");var t,e,l,n,i,c,o,a,r,d=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:A}),void 0!==d)if(m(d))if("function"==typeof(t=X(d)))for(l=(e=y(d,t)).next;!(n=l.call(e)).done;){if((o=(c=(i=y(h(n.value))).next).call(i)).done||(a=c.call(i)).done||!c.call(i).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(a.value)})}else for(r in d)s(d,r)&&b.push({key:r,value:p(d[r])});else x(b,"string"==typeof d?"?"===d.charAt(0)?d.slice(1):d:p(d))},P=Q.prototype;if(a(P,{append:function(t,e){z(arguments.length,2);var l=Y(this);l.entries.push({key:p(t),value:p(e)}),l.updateURL()},delete:function(t){z(arguments.length,1);for(var e=Y(this),l=e.entries,n=p(t),i=0;i<l.length;)l[i].key===n?l.splice(i,1):i++;e.updateURL()},get:function(t){z(arguments.length,1);for(var e=Y(this).entries,l=p(t),n=0;n<e.length;n++)if(e[n].key===l)return e[n].value;return null},getAll:function(t){z(arguments.length,1);for(var e=Y(this).entries,l=p(t),n=[],i=0;i<e.length;i++)e[i].key===l&&n.push(e[i].value);return n},has:function(t){z(arguments.length,1);for(var e=Y(this).entries,l=p(t),n=0;n<e.length;)if(e[n++].key===l)return!0;return!1},set:function(t,e){z(arguments.length,1);for(var l,n=Y(this),i=n.entries,c=!1,o=p(t),a=p(e),r=0;r<i.length;r++)(l=i[r]).key===o&&(c?i.splice(r--,1):(c=!0,l.value=a));c||i.push({key:o,value:a}),n.updateURL()},sort:function(){var t,e,l,n=Y(this),i=n.entries,c=i.slice();for(i.length=0,l=0;l<c.length;l++){for(t=c[l],e=0;e<l;e++)if(i[e].key>t.key){i.splice(e,0,t);break}e===l&&i.push(t)}n.updateURL()},forEach:function(t){for(var e,l=Y(this).entries,n=b(t,arguments.length>1?arguments[1]:void 0,3),i=0;i<l.length;)n((e=l[i++]).value,e.key,this)},keys:function(){return new w(this,"keys")},values:function(){return new w(this,"values")},entries:function(){return new w(this,"entries")}},{enumerable:!0}),o(P,S,P.entries),o(P,"toString",(function(){for(var t,e=Y(this).entries,l=[],n=0;n<e.length;)t=e[n++],l.push(T(t.key)+"="+T(t.value));return l.join("&")}),{enumerable:!0}),r(Q,"URLSearchParams"),n({global:!0,forced:!c},{URLSearchParams:Q}),!c&&"function"==typeof f){var j=function(t){if(m(t)){var e,l=t.body;if("URLSearchParams"===I(l))return(e=t.headers?new f(t.headers):new f).has("content-type")||e.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),g(t,{body:G(0,String(l)),headers:G(0,e)})}return t};if("function"==typeof W&&n({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?j(arguments[1]):{})}}),"function"==typeof C){var M=function(t){return Z(this,M,"Request"),new C(t,arguments.length>1?j(arguments[1]):{})};R.constructor=M,M.prototype=R,n({global:!0,forced:!0},{Request:M})}}t.exports={URLSearchParams:Q,getState:Y}},function(t,l){t.exports=e},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(11),o=l(5),a=l(9),r=l(107),d=l(2),u=l(16),Z=l(51),s=l(8),b=l(59),I=l(1),h=l(13),m=l(29),p=l(47),g=l(15),G=l(38),y=l(26),X=l(60),V=l(49),W=l(115),C=l(113),R=l(24),f=l(14),S=l(82),v=l(18),Y=l(25),K=l(68),N=l(84),J=l(70),H=l(69),U=l(7),L=l(148),B=l(21),k=l(34),F=l(17),T=l(23).forEach,x=N("hidden"),A=U("toPrimitive"),z=F.set,w=F.getterFor("Symbol"),Q=Object.prototype,P=i.Symbol,j=c("JSON","stringify"),M=R.f,E=f.f,D=W.f,O=S.f,q=K("symbols"),_=K("op-symbols"),$=K("string-to-symbol-registry"),tt=K("symbol-to-string-registry"),et=K("wks"),lt=i.QObject,nt=!lt||!lt.prototype||!lt.prototype.findChild,it=a&&d((function(){return 7!=y(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,l){var n=M(Q,e);n&&delete Q[e],E(t,e,l),n&&t!==Q&&E(Q,e,n)}:E,ct=function(t,e){var l=q[t]=y(P.prototype);return z(l,{type:"Symbol",tag:t,description:e}),a||(l.description=e),l},ot=function(t,e,l){t===Q&&ot(_,e,l),I(t);var n=p(e);return I(l),u(q,n)?(l.enumerable?(u(t,x)&&t[x][n]&&(t[x][n]=!1),l=y(l,{enumerable:G(0,!1)})):(u(t,x)||E(t,x,G(1,{})),t[x][n]=!0),it(t,n,l)):E(t,n,l)},at=function(t,e){I(t);var l=m(e),n=X(l).concat(Zt(l));return T(n,(function(e){a&&!rt.call(l,e)||ot(t,e,l[e])})),t},rt=function(t){var e=p(t),l=O.call(this,e);return!(this===Q&&u(q,e)&&!u(_,e))&&(!(l||!u(this,e)||!u(q,e)||u(this,x)&&this[x][e])||l)},dt=function(t,e){var l=m(t),n=p(e);if(l!==Q||!u(q,n)||u(_,n)){var i=M(l,n);return!i||!u(q,n)||u(l,x)&&l[x][n]||(i.enumerable=!0),i}},ut=function(t){var e=D(m(t)),l=[];return T(e,(function(t){u(q,t)||u(J,t)||l.push(t)})),l},Zt=function(t){var e=t===Q,l=D(e?_:m(t)),n=[];return T(l,(function(t){!u(q,t)||e&&!u(Q,t)||n.push(q[t])})),n};(r||(Y((P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,e=H(t),l=function(t){this===Q&&l.call(_,t),u(this,x)&&u(this[x],e)&&(this[x][e]=!1),it(this,e,G(1,t))};return a&&nt&&it(Q,e,{configurable:!0,set:l}),ct(e,t)}).prototype,"toString",(function(){return w(this).tag})),Y(P,"withoutSetter",(function(t){return ct(H(t),t)})),S.f=rt,f.f=ot,R.f=dt,V.f=W.f=ut,C.f=Zt,L.f=function(t){return ct(U(t),t)},a&&(E(P.prototype,"description",{configurable:!0,get:function(){return w(this).description}}),o||Y(Q,"propertyIsEnumerable",rt,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:P}),T(X(et),(function(t){B(t)})),n({target:"Symbol",stat:!0,forced:!r},{for:function(t){var e=g(t);if(u($,e))return $[e];var l=P(e);return $[e]=l,tt[l]=e,l},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){nt=!0},useSimple:function(){nt=!1}}),n({target:"Object",stat:!0,forced:!r,sham:!a},{create:function(t,e){return void 0===e?y(t):at(y(t),e)},defineProperty:ot,defineProperties:at,getOwnPropertyDescriptor:dt}),n({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),n({target:"Object",stat:!0,forced:d((function(){C.f(1)}))},{getOwnPropertySymbols:function(t){return C.f(h(t))}}),j)&&n({target:"JSON",stat:!0,forced:!r||d((function(){var t=P();return"[null]"!=j([t])||"{}"!=j({a:t})||"{}"!=j(Object(t))}))},{stringify:function(t,e,l){for(var n,i=[t],c=1;arguments.length>c;)i.push(arguments[c++]);if(n=e,(s(e)||void 0!==t)&&!b(t))return Z(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!b(e))return e}),i[1]=e,j.apply(null,i)}});P.prototype[A]||v(P.prototype,A,P.prototype.valueOf),k(P,"Symbol"),J[x]=!0},function(t,e,l){var n=l(8),i=l(51),c=l(7)("species");t.exports=function(t){var e;return i(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!i(e.prototype)?n(e)&&null===(e=e[c])&&(e=void 0):e=void 0),void 0===e?Array:e}},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(4),o=l(16),a=l(8),r=l(14).f,d=l(145),u=c.Symbol;if(i&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[e]=!0),e};d(s,u);var b=s.prototype=u.prototype;b.constructor=s;var I=b.toString,h="Symbol(test)"==String(u("test")),m=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=a(this)?this.valueOf():this,e=I.call(t);if(o(Z,t))return"";var l=h?e.slice(7,-1):e.replace(m,"$1");return""===l?void 0:l}}),n({global:!0,forced:!0},{Symbol:s})}},function(t,e,l){l(21)("asyncIterator")},function(t,e,l){l(21)("hasInstance")},function(t,e,l){l(21)("isConcatSpreadable")},function(t,e,l){l(21)("iterator")},function(t,e,l){l(21)("match")},function(t,e,l){l(21)("matchAll")},function(t,e,l){l(21)("replace")},function(t,e,l){l(21)("search")},function(t,e,l){l(21)("species")},function(t,e,l){l(21)("split")},function(t,e,l){l(21)("toPrimitive")},function(t,e,l){l(21)("toStringTag")},function(t,e,l){l(21)("unscopables")},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(51),o=l(8),a=l(13),r=l(10),d=l(53),u=l(73),Z=l(74),s=l(7),b=l(48),I=s("isConcatSpreadable"),h=b>=51||!i((function(){var t=[];return t[I]=!1,t.concat()[0]!==t})),m=Z("concat"),p=function(t){if(!o(t))return!1;var e=t[I];return void 0!==e?!!e:c(t)};n({target:"Array",proto:!0,forced:!h||!m},{concat:function(t){var e,l,n,i,c,o=a(this),Z=u(o,0),s=0;for(e=-1,n=arguments.length;e<n;e++)if(p(c=-1===e?o:arguments[e])){if(s+(i=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(l=0;l<i;l++,s++)l in c&&d(Z,s,c[l])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");d(Z,s++,c)}return Z.length=s,Z}})},function(t,e,l){var n=l(0),i=l(149),c=l(35);n({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,l){"use strict";var n=l(0),i=l(23).every;n({target:"Array",proto:!0,forced:!l(40)("every")},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){var n=l(0),i=l(116),c=l(35);n({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,l){"use strict";var n=l(0),i=l(23).filter;n({target:"Array",proto:!0,forced:!l(74)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(23).find,c=l(35),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),n({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,l){"use strict";var n=l(0),i=l(23).findIndex,c=l(35),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),n({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,l){"use strict";var n=l(0),i=l(150),c=l(13),o=l(10),a=l(30),r=l(73);n({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),l=o(e.length),n=r(e,0);return n.length=i(n,e,e,l,0,void 0===t?1:a(t)),n}})},function(t,e,l){"use strict";var n=l(0),i=l(150),c=l(13),o=l(10),a=l(3),r=l(73);n({target:"Array",proto:!0},{flatMap:function(t){var e,l=c(this),n=o(l.length);return a(t),(e=r(l,0)).length=i(e,l,l,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},function(t,e,l){"use strict";var n=l(0),i=l(151);n({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,l){var n=l(0),i=l(152);n({target:"Array",stat:!0,forced:!l(86)((function(t){Array.from(t)}))},{from:i})},function(t,e,l){"use strict";var n=l(0),i=l(71).includes,c=l(35);n({target:"Array",proto:!0},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,e,l){"use strict";var n=l(0),i=l(71).indexOf,c=l(40),o=[].indexOf,a=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");n({target:"Array",proto:!0,forced:a||!r},{indexOf:function(t){return a?o.apply(this,arguments)||0:i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){l(0)({target:"Array",stat:!0},{isArray:l(51)})},function(t,e,l){"use strict";var n=l(0),i=l(67),c=l(29),o=l(40),a=[].join,r=i!=Object,d=o("join",",");n({target:"Array",proto:!0,forced:r||!d},{join:function(t){return a.call(c(this),void 0===t?",":t)}})},function(t,e,l){var n=l(0),i=l(154);n({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,l){"use strict";var n=l(0),i=l(23).map;n({target:"Array",proto:!0,forced:!l(74)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(53);n({target:"Array",stat:!0,forced:i((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,l=new("function"==typeof this?this:Array)(e);e>t;)c(l,t,arguments[t++]);return l.length=e,l}})},function(t,e,l){"use strict";var n=l(0),i=l(88).left,c=l(40),o=l(48),a=l(63);n({target:"Array",proto:!0,forced:!c("reduce")||!a&&o>79&&o<83},{reduce:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(88).right,c=l(40),o=l(48),a=l(63);n({target:"Array",proto:!0,forced:!c("reduceRight")||!a&&o>79&&o<83},{reduceRight:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(51),c=[].reverse,o=[1,2];n({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return i(this)&&(this.length=this.length),c.call(this)}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(51),o=l(50),a=l(10),r=l(29),d=l(53),u=l(7),Z=l(74)("slice"),s=u("species"),b=[].slice,I=Math.max;n({target:"Array",proto:!0,forced:!Z},{slice:function(t,e){var l,n,u,Z=r(this),h=a(Z.length),m=o(t,h),p=o(void 0===e?h:e,h);if(c(Z)&&("function"!=typeof(l=Z.constructor)||l!==Array&&!c(l.prototype)?i(l)&&null===(l=l[s])&&(l=void 0):l=void 0,l===Array||void 0===l))return b.call(Z,m,p);for(n=new(void 0===l?Array:l)(I(p-m,0)),u=0;m<p;m++,u++)m in Z&&d(n,u,Z[m]);return n.length=u,n}})},function(t,e,l){"use strict";var n=l(0),i=l(23).some;n({target:"Array",proto:!0,forced:!l(40)("some")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(13),o=l(10),a=l(15),r=l(2),d=l(155),u=l(40),Z=l(156),s=l(157),b=l(48),I=l(123),h=[],m=h.sort,p=r((function(){h.sort(void 0)})),g=r((function(){h.sort(null)})),G=u("sort"),y=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(I)return I<603;var t,e,l,n,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:l=3;break;case 68:case 71:l=4;break;default:l=2}for(n=0;n<47;n++)h.push({k:e+n,v:l})}for(h.sort((function(t,e){return e.v-t.v})),n=0;n<h.length;n++)e=h[n].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));n({target:"Array",proto:!0,forced:p||!g||!G||!y},{sort:function(t){void 0!==t&&i(t);var e=c(this);if(y)return void 0===t?m.call(e):m.call(e,t);var l,n,r=[],u=o(e.length);for(n=0;n<u;n++)n in e&&r.push(e[n]);for(l=(r=d(r,function(t){return function(e,l){return void 0===l?-1:void 0===e?1:void 0!==t?+t(e,l)||0:a(e)>a(l)?1:-1}}(t))).length,n=0;n<l;)e[n]=r[n++];for(;n<u;)delete e[n++];return e}})},function(t,e,l){l(54)("Array")},function(t,e,l){"use strict";var n=l(0),i=l(50),c=l(30),o=l(10),a=l(13),r=l(73),d=l(53),u=l(74)("splice"),Z=Math.max,s=Math.min;n({target:"Array",proto:!0,forced:!u},{splice:function(t,e){var l,n,u,b,I,h,m=a(this),p=o(m.length),g=i(t,p),G=arguments.length;if(0===G?l=n=0:1===G?(l=0,n=p-g):(l=G-2,n=s(Z(c(e),0),p-g)),p+l-n>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(m,n),b=0;b<n;b++)(I=g+b)in m&&d(u,b,m[I]);if(u.length=n,l<n){for(b=g;b<p-n;b++)h=b+l,(I=b+n)in m?m[h]=m[I]:delete m[h];for(b=p;b>p-n+l;b--)delete m[b-1]}else if(l>n)for(b=p-n;b>g;b--)h=b+l-1,(I=b+n-1)in m?m[h]=m[I]:delete m[h];for(b=0;b<l;b++)m[b+g]=arguments[b+2];return m.length=p-n+l,u}})},function(t,e,l){l(35)("flat")},function(t,e,l){l(35)("flatMap")},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(89),o=l(54),a=c.ArrayBuffer;n({global:!0,forced:i.ArrayBuffer!==a},{ArrayBuffer:a}),o("ArrayBuffer")},function(t,e){var l=Math.abs,n=Math.pow,i=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,e,a){var r,d,u,Z=new Array(a),s=8*a-e-1,b=(1<<s)-1,I=b>>1,h=23===e?n(2,-24)-n(2,-77):0,m=t<0||0===t&&1/t<0?1:0,p=0;for((t=l(t))!=t||t===1/0?(d=t!=t?1:0,r=b):(r=i(c(t)/o),t*(u=n(2,-r))<1&&(r--,u*=2),(t+=r+I>=1?h/u:h*n(2,1-I))*u>=2&&(r++,u/=2),r+I>=b?(d=0,r=b):r+I>=1?(d=(t*u-1)*n(2,e),r+=I):(d=t*n(2,I-1)*n(2,e),r=0));e>=8;Z[p++]=255&d,d/=256,e-=8);for(r=r<<e|d,s+=e;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*m,Z},unpack:function(t,e){var l,i=t.length,c=8*i-e-1,o=(1<<c)-1,a=o>>1,r=c-7,d=i-1,u=t[d--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[d],d--,r-=8);for(l=Z&(1<<-r)-1,Z>>=-r,r+=e;r>0;l=256*l+t[d],d--,r-=8);if(0===Z)Z=1-a;else{if(Z===o)return l?NaN:u?-1/0:1/0;l+=n(2,e),Z-=a}return(u?-1:1)*l*n(2,Z-e)}}},function(t,e,l){var n=l(0),i=l(12);n({target:"ArrayBuffer",stat:!0,forced:!i.NATIVE_ARRAY_BUFFER_VIEWS},{isView:i.isView})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(89),o=l(1),a=l(50),r=l(10),d=l(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;n({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:i((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(void 0!==s&&void 0===e)return s.call(o(this),t);for(var l=o(this).byteLength,n=a(t,l),i=a(void 0===e?l:e,l),c=new(d(this,u))(r(i-n)),b=new Z(this),I=new Z(c),h=0;n<i;)I.setUint8(h++,b.getUint8(n++));return c}})},function(t,e,l){var n=l(0),i=l(89);n({global:!0,forced:!l(124)},{DataView:i.DataView})},function(t,e,l){l(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,e,l){var n=l(0),i=l(247);n({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,l){"use strict";var n=l(2),i=l(125).start,c=Math.abs,o=Date.prototype,a=o.getTime,r=o.toISOString;t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!n((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),e=this.getUTCMilliseconds(),l=t<0?"-":t>9999?"+":"";return l+i(c(t),l?6:4,0)+"-"+i(this.getUTCMonth()+1,2,0)+"-"+i(this.getUTCDate(),2,0)+"T"+i(this.getUTCHours(),2,0)+":"+i(this.getUTCMinutes(),2,0)+":"+i(this.getUTCSeconds(),2,0)+"."+i(e,3,0)+"Z"}:r},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(13),o=l(106);n({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),l=o(e,"number");return"number"!=typeof l||isFinite(l)?e.toISOString():null}})},function(t,e,l){var n=l(18),i=l(250),c=l(7)("toPrimitive"),o=Date.prototype;c in o||n(o,c,i)},function(t,e,l){"use strict";var n=l(1),i=l(142);t.exports=function(t){if(n(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return i(this,t)}},function(t,e,l){var n=l(25),i=Date.prototype,c=i.toString,o=i.getTime;"Invalid Date"!=String(new Date(NaN))&&n(i,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,e,l){l(0)({target:"Function",proto:!0},{bind:l(159)})},function(t,e,l){"use strict";var n=l(8),i=l(14),c=l(27),o=l(7)("hasInstance"),a=Function.prototype;o in a||i.f(a,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,l){var n=l(9),i=l(14).f,c=Function.prototype,o=c.toString,a=/^\s*function ([^ (]*)/;n&&!("name"in c)&&i(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(a)[1]}catch(t){return""}}})},function(t,e,l){var n=l(0),i=l(11),c=l(2),o=i("JSON","stringify"),a=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,d=/^[\uDC00-\uDFFF]$/,u=function(t,e,l){var n=l.charAt(e-1),i=l.charAt(e+1);return r.test(t)&&!d.test(i)||d.test(t)&&!r.test(n)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&n({target:"JSON",stat:!0,forced:Z},{stringify:function(t,e,l){var n=o.apply(null,arguments);return"string"==typeof n?n.replace(a,u):n}})},function(t,e,l){var n=l(4);l(34)(n.JSON,"JSON",!0)},function(t,e,l){var n=l(0),i=l(162),c=Math.acosh,o=Math.log,a=Math.sqrt,r=Math.LN2;n({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+a(t-1)*a(t+1))}})},function(t,e,l){var n=l(0),i=Math.asinh,c=Math.log,o=Math.sqrt;n({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,l){var n=l(0),i=Math.atanh,c=Math.log;n({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,l){var n=l(0),i=l(128),c=Math.abs,o=Math.pow;n({target:"Math",stat:!0},{cbrt:function(t){return i(t=+t)*o(c(t),1/3)}})},function(t,e,l){var n=l(0),i=Math.floor,c=Math.log,o=Math.LOG2E;n({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-i(c(t+.5)*o):32}})},function(t,e,l){var n=l(0),i=l(92),c=Math.cosh,o=Math.abs,a=Math.E;n({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var e=i(o(t)-1)+1;return(e+1/(e*a*a))*(a/2)}})},function(t,e,l){var n=l(0),i=l(92);n({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,l){l(0)({target:"Math",stat:!0},{fround:l(163)})},function(t,e,l){var n=l(0),i=Math.hypot,c=Math.abs,o=Math.sqrt;n({target:"Math",stat:!0,forced:!!i&&i(1/0,NaN)!==1/0},{hypot:function(t,e){for(var l,n,i=0,a=0,r=arguments.length,d=0;a<r;)d<(l=c(arguments[a++]))?(i=i*(n=d/l)*n+1,d=l):i+=l>0?(n=l/d)*n:l;return d===1/0?1/0:d*o(i)}})},function(t,e,l){var n=l(0),i=l(2),c=Math.imul;n({target:"Math",stat:!0,forced:i((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n;return 0|i*c+((65535&l>>>16)*c+i*(65535&n>>>16)<<16>>>0)}})},function(t,e,l){var n=l(0),i=Math.log,c=Math.LOG10E;n({target:"Math",stat:!0},{log10:function(t){return i(t)*c}})},function(t,e,l){l(0)({target:"Math",stat:!0},{log1p:l(162)})},function(t,e,l){var n=l(0),i=Math.log,c=Math.LN2;n({target:"Math",stat:!0},{log2:function(t){return i(t)/c}})},function(t,e,l){l(0)({target:"Math",stat:!0},{sign:l(128)})},function(t,e,l){var n=l(0),i=l(2),c=l(92),o=Math.abs,a=Math.exp,r=Math.E;n({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:(a(t-1)-a(-t-1))*(r/2)}})},function(t,e,l){var n=l(0),i=l(92),c=Math.exp;n({target:"Math",stat:!0},{tanh:function(t){var e=i(t=+t),l=i(-t);return e==1/0?1:l==1/0?-1:(e-l)/(c(t)+c(-t))}})},function(t,e,l){l(34)(Math,"Math",!0)},function(t,e,l){var n=l(0),i=Math.ceil,c=Math.floor;n({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:i)(t)}})},function(t,e,l){"use strict";var n=l(9),i=l(4),c=l(72),o=l(25),a=l(16),r=l(46),d=l(91),u=l(59),Z=l(106),s=l(2),b=l(26),I=l(49).f,h=l(24).f,m=l(14).f,p=l(64).trim,g=i.Number,G=g.prototype,y="Number"==r(b(G)),X=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var e,l,n,i,c,o,a,r,d=Z(t,"number");if("string"==typeof d&&d.length>2)if(43===(e=(d=p(d)).charCodeAt(0))||45===e){if(88===(l=d.charCodeAt(2))||120===l)return NaN}else if(48===e){switch(d.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+d}for(o=(c=d.slice(2)).length,a=0;a<o;a++)if((r=c.charCodeAt(a))<48||r>i)return NaN;return parseInt(c,n)}return+d};if(c("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var V,W=function(t){var e=arguments.length<1?0:t,l=this;return l instanceof W&&(y?s((function(){G.valueOf.call(l)})):"Number"!=r(l))?d(new g(X(e)),l,W):X(e)},C=n?I(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),R=0;C.length>R;R++)a(g,V=C[R])&&!a(W,V)&&m(W,V,h(g,V));W.prototype=G,G.constructor=W,o(i,"Number",W)}},function(t,e,l){l(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isFinite:l(164)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isInteger:l(129)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,e,l){var n=l(0),i=l(129),c=Math.abs;n({target:"Number",stat:!0},{isSafeInteger:function(t){return i(t)&&c(t)<=9007199254740991}})},function(t,e,l){l(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,l){l(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,l){var n=l(0),i=l(165);n({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,l){var n=l(0),i=l(130);n({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,l){"use strict";var n=l(0),i=l(30),c=l(166),o=l(126),a=l(2),r=1..toFixed,d=Math.floor,u=function(t,e,l){return 0===e?l:e%2==1?u(t,e-1,l*t):u(t*t,e/2,l)},Z=function(t,e,l){for(var n=-1,i=l;++n<6;)i+=e*t[n],t[n]=i%1e7,i=d(i/1e7)},s=function(t,e){for(var l=6,n=0;--l>=0;)n+=t[l],t[l]=d(n/e),n=n%e*1e7},b=function(t){for(var e=6,l="";--e>=0;)if(""!==l||0===e||0!==t[e]){var n=String(t[e]);l=""===l?n:l+o.call("0",7-n.length)+n}return l};n({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!a((function(){r.call({})}))},{toFixed:function(t){var e,l,n,a,r=c(this),d=i(t),I=[0,0,0,0,0,0],h="",m="0";if(d<0||d>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(h="-",r=-r),r>1e-21)if(l=(e=function(t){for(var e=0,l=t;l>=4096;)e+=12,l/=4096;for(;l>=2;)e+=1,l/=2;return e}(r*u(2,69,1))-69)<0?r*u(2,-e,1):r/u(2,e,1),l*=4503599627370496,(e=52-e)>0){for(Z(I,0,l),n=d;n>=7;)Z(I,1e7,0),n-=7;for(Z(I,u(10,n,1),0),n=e-1;n>=23;)s(I,1<<23),n-=23;s(I,1<<n),Z(I,1,1),s(I,2),m=b(I)}else Z(I,0,l),Z(I,1<<-e,0),m=b(I)+o.call("0",d);return m=d>0?h+((a=m.length)<=d?"0."+o.call("0",d-a)+m:m.slice(0,a-d)+"."+m.slice(a-d)):h+m}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(166),o=1..toPrecision;n({target:"Number",proto:!0,forced:i((function(){return"1"!==o.call(1,void 0)}))||!i((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,e,l){var n=l(0),i=l(167);n({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},function(t,e,l){l(0)({target:"Object",stat:!0,sham:!l(9)},{create:l(26)})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(94),o=l(13),a=l(3),r=l(14);i&&n({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){r.f(o(this),t,{get:a(e),enumerable:!0,configurable:!0})}})},function(t,e,l){var n=l(0),i=l(9);n({target:"Object",stat:!0,forced:!i,sham:!i},{defineProperties:l(114)})},function(t,e,l){var n=l(0),i=l(9);n({target:"Object",stat:!0,forced:!i,sham:!i},{defineProperty:l(14).f})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(94),o=l(13),a=l(3),r=l(14);i&&n({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){r.f(o(this),t,{set:a(e),enumerable:!0,configurable:!0})}})},function(t,e,l){var n=l(0),i=l(168).entries;n({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,l){var n=l(0),i=l(77),c=l(2),o=l(8),a=l(55).onFreeze,r=Object.freeze;n({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!i},{freeze:function(t){return r&&o(t)?r(a(t)):t}})},function(t,e,l){var n=l(0),i=l(6),c=l(53);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return i(t,(function(t,l){c(e,t,l)}),{AS_ENTRIES:!0}),e}})},function(t,e,l){var n=l(0),i=l(2),c=l(29),o=l(24).f,a=l(9),r=i((function(){o(1)}));n({target:"Object",stat:!0,forced:!a||r,sham:!a},{getOwnPropertyDescriptor:function(t,e){return o(c(t),e)}})},function(t,e,l){var n=l(0),i=l(9),c=l(111),o=l(29),a=l(24),r=l(53);n({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,l,n=o(t),i=a.f,d=c(n),u={},Z=0;d.length>Z;)void 0!==(l=i(n,e=d[Z++]))&&r(u,e,l);return u}})},function(t,e,l){var n=l(0),i=l(2),c=l(115).f;n({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,e,l){var n=l(0),i=l(2),c=l(13),o=l(27),a=l(122);n({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!a},{getPrototypeOf:function(t){return o(c(t))}})},function(t,e,l){l(0)({target:"Object",stat:!0},{is:l(169)})},function(t,e,l){var n=l(0),i=l(2),c=l(8),o=Object.isExtensible;n({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,e,l){var n=l(0),i=l(2),c=l(8),o=Object.isFrozen;n({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,e,l){var n=l(0),i=l(2),c=l(8),o=Object.isSealed;n({target:"Object",stat:!0,forced:i((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,e,l){var n=l(0),i=l(13),c=l(60);n({target:"Object",stat:!0,forced:l(2)((function(){c(1)}))},{keys:function(t){return c(i(t))}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(94),o=l(13),a=l(47),r=l(27),d=l(24).f;i&&n({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var e,l=o(this),n=a(t);do{if(e=d(l,n))return e.get}while(l=r(l))}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(94),o=l(13),a=l(47),r=l(27),d=l(24).f;i&&n({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var e,l=o(this),n=a(t);do{if(e=d(l,n))return e.set}while(l=r(l))}})},function(t,e,l){var n=l(0),i=l(8),c=l(55).onFreeze,o=l(77),a=l(2),r=Object.preventExtensions;n({target:"Object",stat:!0,forced:a((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&i(t)?r(c(t)):t}})},function(t,e,l){var n=l(0),i=l(8),c=l(55).onFreeze,o=l(77),a=l(2),r=Object.seal;n({target:"Object",stat:!0,forced:a((function(){r(1)})),sham:!o},{seal:function(t){return r&&i(t)?r(c(t)):t}})},function(t,e,l){l(0)({target:"Object",stat:!0},{setPrototypeOf:l(42)})},function(t,e,l){var n=l(119),i=l(25),c=l(311);n||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,l){"use strict";var n=l(119),i=l(76);t.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,l){var n=l(0),i=l(168).values;n({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,l){var n=l(0),i=l(165);n({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,l){var n=l(0),i=l(130);n({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,l){"use strict";var n,i,c,o,a=l(0),r=l(5),d=l(4),u=l(11),Z=l(170),s=l(25),b=l(36),I=l(42),h=l(34),m=l(54),p=l(8),g=l(3),G=l(33),y=l(110),X=l(6),V=l(86),W=l(28),C=l(131).set,R=l(172),f=l(173),S=l(174),v=l(78),Y=l(95),K=l(17),N=l(72),J=l(7),H=l(318),U=l(63),L=l(48),B=J("species"),k="Promise",F=K.get,T=K.set,x=K.getterFor(k),A=Z&&Z.prototype,z=Z,w=A,Q=d.TypeError,P=d.document,j=d.process,M=v.f,E=M,D=!!(P&&P.createEvent&&d.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=N(k,(function(){var t=y(z),e=t!==String(z);if(!e&&66===L)return!0;if(r&&!w.finally)return!0;if(L>=51&&/native code/.test(t))return!1;var l=new z((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};return(l.constructor={})[B]=n,!(q=l.then((function(){}))instanceof n)||!e&&H&&!O})),$=_||!V((function(t){z.all(t).catch((function(){}))})),tt=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},et=function(t,e){if(!t.notified){t.notified=!0;var l=t.reactions;R((function(){for(var n=t.value,i=1==t.state,c=0;l.length>c;){var o,a,r,d=l[c++],u=i?d.ok:d.fail,Z=d.resolve,s=d.reject,b=d.domain;try{u?(i||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=n:(b&&b.enter(),o=u(n),b&&(b.exit(),r=!0)),o===d.promise?s(Q("Promise-chain cycle")):(a=tt(o))?a.call(o,Z,s):Z(o)):s(n)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&nt(t)}))}},lt=function(t,e,l){var n,i;D?((n=P.createEvent("Event")).promise=e,n.reason=l,n.initEvent(t,!1,!0),d.dispatchEvent(n)):n={promise:e,reason:l},!O&&(i=d["on"+t])?i(n):"unhandledrejection"===t&&S("Unhandled promise rejection",l)},nt=function(t){C.call(d,(function(){var e,l=t.facade,n=t.value;if(it(t)&&(e=Y((function(){U?j.emit("unhandledRejection",n,l):lt("unhandledrejection",l,n)})),t.rejection=U||it(t)?2:1,e.error))throw e.value}))},it=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){C.call(d,(function(){var e=t.facade;U?j.emit("rejectionHandled",e):lt("rejectionhandled",e,t.value)}))},ot=function(t,e,l){return function(n){t(e,n,l)}},at=function(t,e,l){t.done||(t.done=!0,l&&(t=l),t.value=e,t.state=2,et(t,!0))},rt=function(t,e,l){if(!t.done){t.done=!0,l&&(t=l);try{if(t.facade===e)throw Q("Promise can't be resolved itself");var n=tt(e);n?R((function(){var l={done:!1};try{n.call(e,ot(rt,l,t),ot(at,l,t))}catch(e){at(l,e,t)}})):(t.value=e,t.state=1,et(t,!1))}catch(e){at({done:!1},e,t)}}};if(_&&(w=(z=function(t){G(this,z,k),g(t),n.call(this);var e=F(this);try{t(ot(rt,e),ot(at,e))}catch(t){at(e,t)}}).prototype,(n=function(t){T(this,{type:k,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(w,{then:function(t,e){var l=x(this),n=M(W(this,z));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=U?j.domain:void 0,l.parent=!0,l.reactions.push(n),0!=l.state&&et(l,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new n,e=F(t);this.promise=t,this.resolve=ot(rt,e),this.reject=ot(at,e)},v.f=M=function(t){return t===z||t===c?new i(t):E(t)},!r&&"function"==typeof Z&&A!==Object.prototype)){o=A.then,q||(s(A,"then",(function(t,e){var l=this;return new z((function(t,e){o.call(l,t,e)})).then(t,e)}),{unsafe:!0}),s(A,"catch",w.catch,{unsafe:!0}));try{delete A.constructor}catch(t){}I&&I(A,w)}a({global:!0,wrap:!0,forced:_},{Promise:z}),h(z,k,!1,!0),m(k),c=u(k),a({target:k,stat:!0,forced:_},{reject:function(t){var e=M(this);return e.reject.call(void 0,t),e.promise}}),a({target:k,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?z:this,t)}}),a({target:k,stat:!0,forced:$},{all:function(t){var e=this,l=M(e),n=l.resolve,i=l.reject,c=Y((function(){var l=g(e.resolve),c=[],o=0,a=1;X(t,(function(t){var r=o++,d=!1;c.push(void 0),a++,l.call(e,t).then((function(t){d||(d=!0,c[r]=t,--a||n(c))}),i)})),--a||n(c)}));return c.error&&i(c.value),l.promise},race:function(t){var e=this,l=M(e),n=l.reject,i=Y((function(){var i=g(e.resolve);X(t,(function(t){i.call(e,t).then(l.resolve,n)}))}));return i.error&&n(i.value),l.promise}})},function(t,e,l){var n=l(39),i=l(4);t.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==i.Pebble},function(t,e,l){var n=l(39);t.exports=/web0s(?!.*chrome)/i.test(n)},function(t,e){t.exports="object"==typeof window},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(170),o=l(2),a=l(11),r=l(28),d=l(173),u=l(25);if(n({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=r(this,a("Promise")),l="function"==typeof t;return this.then(l?function(l){return d(e,t()).then((function(){return l}))}:t,l?function(l){return d(e,t()).then((function(){throw l}))}:t)}}),!i&&"function"==typeof c){var Z=a("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,e,l){var n=l(0),i=l(11),c=l(3),o=l(1),a=l(2),r=i("Reflect","apply"),d=Function.apply;n({target:"Reflect",stat:!0,forced:!a((function(){r((function(){}))}))},{apply:function(t,e,l){return c(t),o(l),r?r(t,e,l):d.call(t,e,l)}})},function(t,e,l){var n=l(0),i=l(11),c=l(3),o=l(1),a=l(8),r=l(26),d=l(159),u=l(2),Z=i("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),I=s||b;n({target:"Reflect",stat:!0,forced:I,sham:I},{construct:function(t,e){c(t),o(e);var l=arguments.length<3?t:c(arguments[2]);if(b&&!s)return Z(t,e,l);if(t==l){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 n=[null];return n.push.apply(n,e),new(d.apply(t,n))}var i=l.prototype,u=r(a(i)?i:Object.prototype),I=Function.apply.call(t,u,e);return a(I)?I:u}})},function(t,e,l){var n=l(0),i=l(9),c=l(1),o=l(47),a=l(14);n({target:"Reflect",stat:!0,forced:l(2)((function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})})),sham:!i},{defineProperty:function(t,e,l){c(t);var n=o(e);c(l);try{return a.f(t,n,l),!0}catch(t){return!1}}})},function(t,e,l){var n=l(0),i=l(1),c=l(24).f;n({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var l=c(i(t),e);return!(l&&!l.configurable)&&delete t[e]}})},function(t,e,l){var n=l(0),i=l(8),c=l(1),o=l(176),a=l(24),r=l(27);n({target:"Reflect",stat:!0},{get:function t(e,l){var n,d,u=arguments.length<3?e:arguments[2];return c(e)===u?e[l]:(n=a.f(e,l))?o(n)?n.value:void 0===n.get?void 0:n.get.call(u):i(d=r(e))?t(d,l,u):void 0}})},function(t,e,l){var n=l(0),i=l(9),c=l(1),o=l(24);n({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return o.f(c(t),e)}})},function(t,e,l){var n=l(0),i=l(1),c=l(27);n({target:"Reflect",stat:!0,sham:!l(122)},{getPrototypeOf:function(t){return c(i(t))}})},function(t,e,l){l(0)({target:"Reflect",stat:!0},{has:function(t,e){return e in t}})},function(t,e,l){var n=l(0),i=l(1),c=Object.isExtensible;n({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),!c||c(t)}})},function(t,e,l){l(0)({target:"Reflect",stat:!0},{ownKeys:l(111)})},function(t,e,l){var n=l(0),i=l(11),c=l(1);n({target:"Reflect",stat:!0,sham:!l(77)},{preventExtensions:function(t){c(t);try{var e=i("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}})},function(t,e,l){var n=l(0),i=l(1),c=l(8),o=l(176),a=l(2),r=l(14),d=l(24),u=l(27),Z=l(38);n({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,l,n){var a,s,b,I=arguments.length<4?e:arguments[3],h=d.f(i(e),l);if(!h){if(c(s=u(e)))return t(s,l,n,I);h=Z(0)}if(o(h)){if(!1===h.writable||!c(I))return!1;if(a=d.f(I,l)){if(a.get||a.set||!1===a.writable)return!1;a.value=n,r.f(I,l,a)}else r.f(I,l,Z(0,n))}else{if(void 0===(b=h.set))return!1;b.call(I,n)}return!0}})},function(t,e,l){var n=l(0),i=l(1),c=l(153),o=l(42);o&&n({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,l){var n=l(9),i=l(4),c=l(72),o=l(91),a=l(18),r=l(14).f,d=l(49).f,u=l(79),Z=l(15),s=l(65),b=l(96),I=l(25),h=l(2),m=l(16),p=l(17).enforce,g=l(54),G=l(7),y=l(177),X=l(178),V=G("match"),W=i.RegExp,C=W.prototype,R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,Y=b.UNSUPPORTED_Y,K=n&&(!v||Y||y||X||h((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",K)){for(var N=function(t,e){var l,n,i,c,r,d,b=this instanceof N,I=u(t),h=void 0===e,g=[],G=t;if(!b&&I&&h&&t.constructor===N)return t;if((I||t instanceof N)&&(t=t.source,h&&(e="flags"in G?G.flags:s.call(G))),t=void 0===t?"":Z(t),e=void 0===e?"":Z(e),G=t,y&&"dotAll"in f&&(n=!!e&&e.indexOf("s")>-1)&&(e=e.replace(/s/g,"")),l=e,Y&&"sticky"in f&&(i=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,"")),X&&(t=(c=function(t){for(var e,l=t.length,n=0,i="",c=[],o={},a=!1,r=!1,d=0,u="";n<=l;n++){if("\\"===(e=t.charAt(n)))e+=t.charAt(++n);else if("]"===e)a=!1;else if(!a)switch(!0){case"["===e:a=!0;break;case"("===e:R.test(t.slice(n+1))&&(n+=2,r=!0),i+=e,d++;continue;case">"===e&&r:if(""===u||m(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,d]),r=!1,u="";continue}r?u+=e:i+=e}return[i,c]}(t))[0],g=c[1]),r=o(W(t,e),b?this:C,N),(n||i||g.length)&&(d=p(r),n&&(d.dotAll=!0,d.raw=N(function(t){for(var e,l=t.length,n=0,i="",c=!1;n<=l;n++)"\\"!==(e=t.charAt(n))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+t.charAt(++n);return i}(t),l)),i&&(d.sticky=!0),g.length&&(d.groups=g)),t!==G)try{a(r,"source",""===G?"(?:)":G)}catch(t){}return r},J=function(t){t in N||r(N,t,{configurable:!0,get:function(){return W[t]},set:function(e){W[t]=e}})},H=d(W),U=0;H.length>U;)J(H[U++]);C.constructor=N,N.prototype=C,I(i,"RegExp",N)}g("RegExp")},function(t,e,l){var n=l(9),i=l(14),c=l(65),o=l(2);n&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,e,l){var n=l(9),i=l(96).UNSUPPORTED_Y,c=l(14).f,o=l(17).get,a=RegExp.prototype;n&&i&&c(a,"sticky",{configurable:!0,get:function(){if(this!==a){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,e,l){"use strict";l(132);var n,i,c=l(0),o=l(8),a=(n=!1,(i=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&n),r=/./.test;c({target:"RegExp",proto:!0,forced:!a},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var e=this.exec(t);if(null!==e&&!o(e))throw new Error("RegExp exec method returned something other than an Object or null");return!!e}})},function(t,e,l){"use strict";var n=l(25),i=l(1),c=l(15),o=l(2),a=l(65),r=RegExp.prototype,d=r.toString,u=o((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),Z="toString"!=d.name;(u||Z)&&n(RegExp.prototype,"toString",(function(){var t=i(this),e=c(t.source),l=t.flags;return"/"+e+"/"+c(void 0===l&&t instanceof RegExp&&!("flags"in r)?a.call(t):l)}),{unsafe:!0})},function(t,e,l){"use strict";var n=l(0),i=l(66).codeAt;n({target:"String",proto:!0},{codePointAt:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n,i=l(0),c=l(24).f,o=l(10),a=l(15),r=l(133),d=l(22),u=l(134),Z=l(5),s="".endsWith,b=Math.min,I=u("endsWith");i({target:"String",proto:!0,forced:!!(Z||I||(n=c(String.prototype,"endsWith"),!n||n.writable))&&!I},{endsWith:function(t){var e=a(d(this));r(t);var l=arguments.length>1?arguments[1]:void 0,n=o(e.length),i=void 0===l?n:b(o(l),n),c=a(t);return s?s.call(e,c,i):e.slice(i-c.length,i)===c}})},function(t,e,l){var n=l(0),i=l(50),c=String.fromCharCode,o=String.fromCodePoint;n({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var e,l=[],n=arguments.length,o=0;n>o;){if(e=+arguments[o++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");l.push(e<65536?c(e):c(55296+((e-=65536)>>10),e%1024+56320))}return l.join("")}})},function(t,e,l){"use strict";var n=l(0),i=l(133),c=l(22),o=l(15);n({target:"String",proto:!0,forced:!l(134)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(i(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(98),i=l(1),c=l(10),o=l(15),a=l(22),r=l(99),d=l(100);n("match",(function(t,e,l){return[function(e){var l=a(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,l):new RegExp(e)[t](o(l))},function(t){var n=i(this),a=o(t),u=l(e,n,a);if(u.done)return u.value;if(!n.global)return d(n,a);var Z=n.unicode;n.lastIndex=0;for(var s,b=[],I=0;null!==(s=d(n,a));){var h=o(s[0]);b[I]=h,""===h&&(n.lastIndex=r(a,c(n.lastIndex),Z)),I++}return 0===I?null:b}]}))},function(t,e,l){"use strict";var n=l(0),i=l(125).end;n({target:"String",proto:!0,forced:l(182)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(125).start;n({target:"String",proto:!0,forced:l(182)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){var n=l(0),i=l(29),c=l(10),o=l(15);n({target:"String",stat:!0},{raw:function(t){for(var e=i(t.raw),l=c(e.length),n=arguments.length,a=[],r=0;l>r;)a.push(o(e[r++])),r<n&&a.push(o(arguments[r]));return a.join("")}})},function(t,e,l){l(0)({target:"String",proto:!0},{repeat:l(126)})},function(t,e,l){"use strict";var n=l(98),i=l(2),c=l(1),o=l(30),a=l(10),r=l(15),d=l(22),u=l(99),Z=l(183),s=l(100),b=l(7)("replace"),I=Math.max,h=Math.min,m="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");n("replace",(function(t,e,l){var n=p?"$":"$0";return[function(t,l){var n=d(this),i=null==t?void 0:t[b];return void 0!==i?i.call(t,n,l):e.call(r(n),t,l)},function(t,i){var d=c(this),b=r(t);if("string"==typeof i&&-1===i.indexOf(n)&&-1===i.indexOf("$<")){var m=l(e,d,b,i);if(m.done)return m.value}var p="function"==typeof i;p||(i=r(i));var g=d.global;if(g){var G=d.unicode;d.lastIndex=0}for(var y=[];;){var X=s(d,b);if(null===X)break;if(y.push(X),!g)break;""===r(X[0])&&(d.lastIndex=u(b,a(d.lastIndex),G))}for(var V,W="",C=0,R=0;R<y.length;R++){X=y[R];for(var f=r(X[0]),S=I(h(o(X.index),b.length),0),v=[],Y=1;Y<X.length;Y++)v.push(void 0===(V=X[Y])?V:String(V));var K=X.groups;if(p){var N=[f].concat(v,S,b);void 0!==K&&N.push(K);var J=r(i.apply(void 0,N))}else J=Z(f,b,S,v,K,i);S>=C&&(W+=b.slice(C,S)+J,C=S+f.length)}return W+b.slice(C)}]}),!!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!m||p)},function(t,e,l){"use strict";var n=l(98),i=l(1),c=l(22),o=l(169),a=l(15),r=l(100);n("search",(function(t,e,l){return[function(e){var l=c(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,l):new RegExp(e)[t](a(l))},function(t){var n=i(this),c=a(t),d=l(e,n,c);if(d.done)return d.value;var u=n.lastIndex;o(u,0)||(n.lastIndex=0);var Z=r(n,c);return o(n.lastIndex,u)||(n.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,e,l){"use strict";var n=l(98),i=l(79),c=l(1),o=l(22),a=l(28),r=l(99),d=l(10),u=l(15),Z=l(100),s=l(97),b=l(96),I=l(2),h=b.UNSUPPORTED_Y,m=[].push,p=Math.min;n("split",(function(t,e,l){var n;return n="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,l){var n=u(o(this)),c=void 0===l?4294967295:l>>>0;if(0===c)return[];if(void 0===t)return[n];if(!i(t))return e.call(n,t,c);for(var a,r,d,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),I=0,h=new RegExp(t.source,b+"g");(a=s.call(h,n))&&!((r=h.lastIndex)>I&&(Z.push(n.slice(I,a.index)),a.length>1&&a.index<n.length&&m.apply(Z,a.slice(1)),d=a[0].length,I=r,Z.length>=c));)h.lastIndex===a.index&&h.lastIndex++;return I===n.length?!d&&h.test("")||Z.push(""):Z.push(n.slice(I)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,l){return void 0===t&&0===l?[]:e.call(this,t,l)}:e,[function(e,l){var i=o(this),c=null==e?void 0:e[t];return void 0!==c?c.call(e,i,l):n.call(u(i),e,l)},function(t,i){var o=c(this),s=u(t),b=l(n,o,s,i,n!==e);if(b.done)return b.value;var I=a(o,RegExp),m=o.unicode,g=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(h?"g":"y"),G=new I(h?"^(?:"+o.source+")":o,g),y=void 0===i?4294967295:i>>>0;if(0===y)return[];if(0===s.length)return null===Z(G,s)?[s]:[];for(var X=0,V=0,W=[];V<s.length;){G.lastIndex=h?0:V;var C,R=Z(G,h?s.slice(V):s);if(null===R||(C=p(d(G.lastIndex+(h?V:0)),s.length))===X)V=r(s,V,m);else{if(W.push(s.slice(X,V)),W.length===y)return W;for(var f=1;f<=R.length-1;f++)if(W.push(R[f]),W.length===y)return W;V=X=C}}return W.push(s.slice(X)),W}]}),!!I((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var l="ab".split(t);return 2!==l.length||"a"!==l[0]||"b"!==l[1]})),h)},function(t,e,l){"use strict";var n,i=l(0),c=l(24).f,o=l(10),a=l(15),r=l(133),d=l(22),u=l(134),Z=l(5),s="".startsWith,b=Math.min,I=u("startsWith");i({target:"String",proto:!0,forced:!!(Z||I||(n=c(String.prototype,"startsWith"),!n||n.writable))&&!I},{startsWith:function(t){var e=a(d(this));r(t);var l=o(b(arguments.length>1?arguments[1]:void 0,e.length)),n=a(t);return s?s.call(e,n,l):e.slice(l,l+n.length)===n}})},function(t,e,l){"use strict";var n=l(0),i=l(64).trim;n({target:"String",proto:!0,forced:l(135)("trim")},{trim:function(){return i(this)}})},function(t,e,l){"use strict";var n=l(0),i=l(64).end,c=l(135)("trimEnd"),o=c?function(){return i(this)}:"".trimEnd;n({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,e,l){"use strict";var n=l(0),i=l(64).start,c=l(135)("trimStart"),o=c?function(){return i(this)}:"".trimStart;n({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(31);n({target:"String",proto:!0,forced:l(32)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,l){l(43)("Float32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Float64",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Int8",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Int16",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Int32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Uint8",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Uint8",(function(t){return function(e,l,n){return t(this,e,l,n)}}),!0)},function(t,e,l){l(43)("Uint16",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(43)("Uint32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){"use strict";var n=l(12),i=l(149),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("copyWithin",(function(t,e){return i.call(c(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(23).every,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("every",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(116),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("fill",(function(t){return i.apply(c(this),arguments)}))},function(t,e,l){"use strict";var n=l(12),i=l(23).filter,c=l(380),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("filter",(function(t){var e=i(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,e)}))},function(t,e,l){var n=l(381),i=l(101);t.exports=function(t,e){return n(i(t),e)}},function(t,e){t.exports=function(t,e){for(var l=0,n=e.length,i=new t(n);n>l;)i[l]=e[l++];return i}},function(t,e,l){"use strict";var n=l(12),i=l(23).find,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("find",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(23).findIndex,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("findIndex",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(23).forEach,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("forEach",(function(t){i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(136);(0,l(12).exportTypedArrayStaticMethod)("from",l(185),n)},function(t,e,l){"use strict";var n=l(12),i=l(71).includes,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("includes",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(71).indexOf,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("indexOf",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(4),i=l(12),c=l(87),o=l(7)("iterator"),a=n.Uint8Array,r=c.values,d=c.keys,u=c.entries,Z=i.aTypedArray,s=i.exportTypedArrayMethod,b=a&&a.prototype[o],I=!!b&&("values"==b.name||null==b.name),h=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return d.call(Z(this))})),s("values",h,!I),s(o,h,!I)},function(t,e,l){"use strict";var n=l(12),i=n.aTypedArray,c=n.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(i(this),arguments)}))},function(t,e,l){"use strict";var n=l(12),i=l(154),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("lastIndexOf",(function(t){return i.apply(c(this),arguments)}))},function(t,e,l){"use strict";var n=l(12),i=l(23).map,c=l(101),o=n.aTypedArray;(0,n.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,l){"use strict";var n=l(12),i=l(136),c=n.aTypedArrayConstructor;(0,n.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,l=new(c(this))(e);e>t;)l[t]=arguments[t++];return l}),i)},function(t,e,l){"use strict";var n=l(12),i=l(88).left,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduce",(function(t){return i(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(88).right,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduceRight",(function(t){return i(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=n.aTypedArray,c=n.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,e=i(this).length,l=o(e/2),n=0;n<l;)t=this[n],this[n++]=this[--e],this[e]=t;return this}))},function(t,e,l){"use strict";var n=l(12),i=l(10),c=l(184),o=l(13),a=l(2),r=n.aTypedArray;(0,n.exportTypedArrayMethod)("set",(function(t){r(this);var e=c(arguments.length>1?arguments[1]:void 0,1),l=this.length,n=o(t),a=i(n.length),d=0;if(a+e>l)throw RangeError("Wrong length");for(;d<a;)this[e+d]=n[d++]}),a((function(){new Int8Array(1).set({})})))},function(t,e,l){"use strict";var n=l(12),i=l(101),c=l(2),o=n.aTypedArray,a=n.exportTypedArrayMethod,r=[].slice;a("slice",(function(t,e){for(var l=r.call(o(this),t,e),n=i(this),c=0,a=l.length,d=new n(a);a>c;)d[c]=l[c++];return d}),c((function(){new Int8Array(1).slice()})))},function(t,e,l){"use strict";var n=l(12),i=l(23).some,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("some",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(12),i=l(4),c=l(2),o=l(3),a=l(10),r=l(155),d=l(156),u=l(157),Z=l(48),s=l(123),b=n.aTypedArray,I=n.exportTypedArrayMethod,h=i.Uint16Array,m=h&&h.prototype.sort,p=!!m&&!c((function(){var t=new h(2);t.sort(null),t.sort({})})),g=!!m&&!c((function(){if(Z)return Z<74;if(d)return d<67;if(u)return!0;if(s)return s<602;var t,e,l=new h(516),n=Array(516);for(t=0;t<516;t++)e=t%4,l[t]=515-t,n[t]=t-2*e+3;for(l.sort((function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(l[t]!==n[t])return!0}));I("sort",(function(t){if(void 0!==t&&o(t),g)return m.call(this,t);b(this);var e,l=a(this.length),n=Array(l);for(e=0;e<l;e++)n[e]=this[e];for(n=r(this,function(t){return function(e,l){return void 0!==t?+t(e,l)||0:l!=l?-1:e!=e?1:0===e&&0===l?1/e>0&&1/l<0?1:-1:e>l}}(t)),e=0;e<l;e++)this[e]=n[e];return this}),!g||p)},function(t,e,l){"use strict";var n=l(12),i=l(10),c=l(50),o=l(101),a=n.aTypedArray;(0,n.exportTypedArrayMethod)("subarray",(function(t,e){var l=a(this),n=l.length,r=c(t,n);return new(o(l))(l.buffer,l.byteOffset+r*l.BYTES_PER_ELEMENT,i((void 0===e?n:c(e,n))-r))}))},function(t,e,l){"use strict";var n=l(4),i=l(12),c=l(2),o=n.Int8Array,a=i.aTypedArray,r=i.exportTypedArrayMethod,d=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){d.call(new o(1))}));r("toLocaleString",(function(){return d.apply(Z?u.call(a(this)):a(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,e,l){"use strict";var n=l(12).exportTypedArrayMethod,i=l(2),c=l(4).Uint8Array,o=c&&c.prototype||{},a=[].toString,r=[].join;i((function(){a.call({})}))&&(a=function(){return r.call(this)});var d=o.toString!=a;n("toString",a,d)},function(t,e,l){"use strict";l(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),l(186))},function(t,e,l){l(405)},function(t,e,l){"use strict";var n=l(0),i=l(27),c=l(42),o=l(26),a=l(18),r=l(38),d=l(6),u=l(15),Z=function(t,e){var l=this;if(!(l instanceof Z))return new Z(t,e);c&&(l=c(new Error(void 0),i(l))),void 0!==e&&a(l,"message",u(e));var n=[];return d(t,n.push,{that:n}),a(l,"errors",n),l};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),n({global:!0},{AggregateError:Z})},function(t,e,l){var n=l(0),i=l(51),c=Object.isFrozen,o=function(t,e){if(!c||!i(t)||!c(t))return!1;for(var l,n=0,o=t.length;n<o;)if(!("string"==typeof(l=t[n++])||e&&void 0===l))return!1;return 0!==o};n({target:"Array",stat:!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,l){"use strict";var n=l(9),i=l(35),c=l(13),o=l(10),a=l(14).f;n&&!("lastIndex"in[])&&(a(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t.length);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,l){"use strict";var n=l(9),i=l(35),c=l(13),o=l(10),a=l(14).f;n&&!("lastItem"in[])&&(a(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t.length);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),l=o(e.length);return e[0==l?0:l-1]=t}}),i("lastItem"))},function(t,e,l){"use strict";var n=l(0),i=l(33),c=l(18),o=l(16),a=l(7),r=l(410),d=l(5),u=a("toStringTag"),Z=function(){i(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),n({global:!0,forced:d},{AsyncIterator:Z})},function(t,e,l){var n,i,c=l(4),o=l(83),a=l(27),r=l(16),d=l(18),u=l(7),Z=l(5),s=u("asyncIterator"),b=c.AsyncIterator,I=o.AsyncIteratorPrototype;if(!Z)if(I)n=I;else if("function"==typeof b)n=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=a(a(a(Function("return async function*(){}()")()))),a(i)===Object.prototype&&(n=i)}catch(t){}n||(n={}),r(n,s)||d(n,s,(function(){return this})),t.exports=n},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(56)((function(t,e){var l=this,n=l.iterator;return t.resolve(i(l.next.apply(n,e))).then((function(t){return i(t).done?(l.done=!0,{done:!0,value:void 0}):{done:!1,value:[l.index++,t.value]}}))}));n({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:i(this),index:0})}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(80),o=l(56)((function(t,e){var l=this;return new t((function(n,c){var o=function(){try{t.resolve(i(l.next.apply(l.iterator,l.remaining?[]:e))).then((function(t){try{i(t).done?(l.done=!0,n({done:!0,value:void 0})):l.remaining?(l.remaining--,o()):n({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(81).every;n({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(56)((function(t,e){var l=this,n=l.filterer;return new t((function(i,o){var a=function(){try{t.resolve(c(l.next.apply(l.iterator,e))).then((function(e){try{if(c(e).done)l.done=!0,i({done:!0,value:void 0});else{var r=e.value;t.resolve(n(r)).then((function(t){t?i({done:!1,value:r}):a()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};a()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:i(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(81).find;n({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(56),a=l(187),r=o((function(t){var e,l=this,n=l.mapper;return new t((function(o,r){var d=function(){try{t.resolve(c(l.next.call(l.iterator))).then((function(d){try{c(d).done?(l.done=!0,o({done:!0,value:void 0})):t.resolve(n(d.value)).then((function(t){try{return l.innerIterator=e=a(t),l.innerNext=i(e.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(e=l.innerIterator)try{t.resolve(c(l.innerNext.call(e))).then((function(t){try{c(t).done?(l.innerIterator=l.innerNext=null,d()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else d()};u()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:i(t),innerIterator:null,innerNext:null})}})},function(t,e,l){"use strict";var n=l(0),i=l(81).forEach;n({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return i(this,t)}})},function(t,e,l){var n=l(0),i=l(61),c=l(1),o=l(13),a=l(56),r=l(187),d=l(41),u=l(52),Z=l(102),s=l(7),b=l(188),I=s("asyncIterator"),h=i.AsyncIterator,m=a((function(t,e){return c(this.next.apply(this.iterator,e))}),!0);n({target:"AsyncIterator",stat:!0},{from:function(t){var e,l=o(t),n=Z(l[I]);return void 0!==n&&(e=r(l,n))instanceof h?e:void 0===e&&void 0!==(n=u(l))?new b(d(l,n)):new m({iterator:void 0!==e?e:l})}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(56)((function(t,e){var l=this,n=l.mapper;return t.resolve(c(l.next.apply(l.iterator,e))).then((function(e){return c(e).done?(l.done=!0,{done:!0,value:void 0}):t.resolve(n(e.value)).then((function(t){return{done:!1,value:t}}))}))}));n({target:"AsyncIterator",proto:!0,real:!0},{map:function(t){return new o({iterator:c(this),mapper:i(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(11)("Promise");n({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var e=c(this),l=i(e.next),n=arguments.length<2,a=n?void 0:arguments[1];return i(t),new o((function(i,r){var d=function(){try{o.resolve(c(l.call(e))).then((function(e){try{if(c(e).done)n?r(TypeError("Reduce of empty iterator with no initial value")):i(a);else{var l=e.value;n?(n=!1,a=l,d()):o.resolve(t(a,l)).then((function(t){a=t,d()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};d()}))}})},function(t,e,l){"use strict";var n=l(0),i=l(81).some;n({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(80),o=l(56)((function(t,e){var l,n,i=this.iterator;return this.remaining--?this.next.apply(i,e):(n={done:!0,value:void 0},this.done=!0,void 0!==(l=i.return)?t.resolve(l.call(i)).then((function(){return n})):n)}));n({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(81).toArray;n({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return i(this)}})},function(t,e,l){var n=l(0),i=l(189),c=l(11),o=l(26),a=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};n({global:!0},{compositeKey:function(){return i.apply(Object,arguments).get("object",a)}})},function(t,e,l){var n=l(0),i=l(189),c=l(11);n({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):i.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,e,l){l(160)},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(33),o=l(18),a=l(2),r=l(16),d=l(7),u=l(121).IteratorPrototype,Z=l(5),s=d("iterator"),b=d("toStringTag"),I=i.Iterator,h=Z||"function"!=typeof I||I.prototype!==u||!a((function(){I({})})),m=function(){c(this,m)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!h&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",m),m.prototype=u,n({global:!0,forced:h},{Iterator:m})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(57)((function(t){var e=i(this.next.apply(this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));n({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:i(this),index:0})}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(80),o=l(57)((function(t){for(var e,l=this.iterator,n=this.next;this.remaining;)if(this.remaining--,e=i(n.call(l)),this.done=!!e.done)return;if(e=i(n.apply(l,t)),!(this.done=!!e.done))return e.value}));n({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:i(this),remaining:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(3),o=l(1);n({target:"Iterator",proto:!0,real:!0},{every:function(t){return o(this),c(t),!i(this,(function(e,l){if(!t(e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(57),a=l(117),r=o((function(t){for(var e,l,n=this.iterator,i=this.filterer,o=this.next;;){if(e=c(o.apply(n,t)),this.done=!!e.done)return;if(l=e.value,a(n,i,l))return l}}));n({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:i(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(3),o=l(1);n({target:"Iterator",proto:!0,real:!0},{find:function(t){return o(this),c(t),i(this,(function(e,l){if(t(e))return l(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(52),a=l(57),r=l(85),d=a((function(){for(var t,e,l,n,a=this.iterator,d=this.mapper;;)try{if(n=this.innerIterator){if(!(t=c(this.innerNext.call(n))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(a)),this.done=!!t.done)return;if(e=d(t.value),void 0===(l=o(e)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=n=c(l.call(e)),this.innerNext=i(n.next)}catch(t){r(a,"throw",t)}}));n({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new d({iterator:c(this),mapper:i(t),innerIterator:null,innerNext:null})}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(1);n({target:"Iterator",proto:!0,real:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,l){var n=l(0),i=l(61),c=l(1),o=l(13),a=l(57),r=l(41),d=l(52),u=i.Iterator,Z=a((function(t){var e=c(this.next.apply(this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);n({target:"Iterator",stat:!0},{from:function(t){var e,l=o(t),n=d(l);if(null!=n){if((e=r(l,n))instanceof u)return e}else e=l;return new Z({iterator:e})}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(1),o=l(57),a=l(117),r=o((function(t){var e=this.iterator,l=c(this.next.apply(e,t));if(!(this.done=!!l.done))return a(e,this.mapper,l.value)}));n({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:i(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(3),o=l(1);n({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var e=arguments.length<2,l=e?void 0:arguments[1];if(i(this,(function(n){e?(e=!1,l=n):l=t(l,n)}),{IS_ITERATOR:!0}),e)throw TypeError("Reduce of empty iterator with no initial value");return l}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(3),o=l(1);n({target:"Iterator",proto:!0,real:!0},{some:function(t){return o(this),c(t),i(this,(function(e,l){if(t(e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(80),o=l(57),a=l(85),r=o((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,a(e,"normal",void 0);var l=i(this.next.apply(e,t));return(this.done=!!l.done)?void 0:l.value}));n({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:i(this),remaining:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(1),o=[].push;n({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(103);n({target:"Map",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(37),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{every:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(l,(function(t,l,i){if(!n(l,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(19),d=l(28),u=l(37),Z=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{filter:function(t){var e=o(this),l=u(e),n=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(d(e,c("Map"))),s=a(i.set);return Z(l,(function(t,l){n(l,t,e)&&s.call(i,t,l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(37),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{find:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,i){if(n(l,t,e))return i(l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(37),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{findKey:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,i){if(n(l,t,e))return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){l(0)({target:"Map",stat:!0},{from:l(104)})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(3);n({target:"Map",stat:!0},{groupBy:function(t,e){var l=new this;c(e);var n=c(l.has),o=c(l.get),a=c(l.set);return i(t,(function(t){var i=e(t);n.call(l,i)?o.call(l,i).push(t):a.call(l,i,[t])})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(37),a=l(449),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{includes:function(t){return r(o(c(this)),(function(e,l,n){if(a(l,t))return n()}),{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,l){"use strict";var n=l(0),i=l(6),c=l(3);n({target:"Map",stat:!0},{keyBy:function(t,e){var l=new this;c(e);var n=c(l.set);return i(t,(function(t){n.call(l,e(t),t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(37),a=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{keyOf:function(t){return a(o(c(this)),(function(e,l,n){if(l===t)return n(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(19),d=l(28),u=l(37),Z=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{mapKeys:function(t){var e=o(this),l=u(e),n=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(d(e,c("Map"))),s=a(i.set);return Z(l,(function(t,l){s.call(i,n(l,t,e),l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(19),d=l(28),u=l(37),Z=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{mapValues:function(t){var e=o(this),l=u(e),n=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(d(e,c("Map"))),s=a(i.set);return Z(l,(function(t,l){s.call(i,t,n(l,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3),a=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{merge:function(t){for(var e=c(this),l=o(e.set),n=arguments.length,i=0;i<n;)a(arguments[i++],l,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,l){l(0)({target:"Map",stat:!0},{of:l(105)})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3),a=l(37),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{reduce:function(t){var e=c(this),l=a(e),n=arguments.length<2,i=n?void 0:arguments[1];if(o(t),r(l,(function(l,c){n?(n=!1,i=c):i=t(i,c,l,e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n)throw TypeError("Reduce of empty map with no initial value");return i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(37),r=l(6);n({target:"Map",proto:!0,real:!0,forced:i},{some:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,i){if(n(l,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3);n({target:"Map",proto:!0,real:!0,forced:i},{update:function(t,e){var l=c(this),n=arguments.length;o(e);var i=l.has(t);if(!i&&n<3)throw TypeError("Updating absent value");var a=i?l.get(t):o(n>2?arguments[2]:void 0)(t,l);return l.set(t,e(a,t,l)),l}})},function(t,e,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:l(5)},{updateOrInsert:l(138)})},function(t,e,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:l(5)},{upsert:l(138)})},function(t,e,l){var n=l(0),i=Math.min,c=Math.max;n({target:"Math",stat:!0},{clamp:function(t,e,l){return i(l,c(e,t))}})},function(t,e,l){l(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,l){var n=l(0),i=180/Math.PI;n({target:"Math",stat:!0},{degrees:function(t){return t*i}})},function(t,e,l){var n=l(0),i=l(190),c=l(163);n({target:"Math",stat:!0},{fscale:function(t,e,l,n,o){return c(i(t,e,l,n,o))}})},function(t,e,l){l(0)({target:"Math",stat:!0},{iaddh:function(t,e,l,n){var i=t>>>0,c=l>>>0;return(e>>>0)+(n>>>0)+((i&c|(i|c)&~(i+c>>>0))>>>31)|0}})},function(t,e,l){l(0)({target:"Math",stat:!0},{imulh:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n,o=l>>16,a=n>>16,r=(o*c>>>0)+(i*c>>>16);return o*a+(r>>16)+((i*a>>>0)+(65535&r)>>16)}})},function(t,e,l){l(0)({target:"Math",stat:!0},{isubh:function(t,e,l,n){var i=t>>>0,c=l>>>0;return(e>>>0)-(n>>>0)-((~i&c|~(i^c)&i-c>>>0)>>>31)|0}})},function(t,e,l){l(0)({target:"Math",stat:!0},{RAD_PER_DEG:180/Math.PI})},function(t,e,l){var n=l(0),i=Math.PI/180;n({target:"Math",stat:!0},{radians:function(t){return t*i}})},function(t,e,l){l(0)({target:"Math",stat:!0},{scale:l(190)})},function(t,e,l){var n=l(0),i=l(1),c=l(164),o=l(62),a=l(17),r=a.set,d=a.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=d(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));n({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var e=i(t).seed;if(!c(e))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(e)}})},function(t,e,l){l(0)({target:"Math",stat:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,e,l){l(0)({target:"Math",stat:!0},{umulh:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n,o=l>>>16,a=n>>>16,r=(o*c>>>0)+(i*c>>>16);return o*a+(r>>>16)+((i*a>>>0)+(65535&r)>>>16)}})},function(t,e,l){"use strict";var n=l(0),i=l(30),c=l(130),o=/^[\da-z]+$/;n({target:"Number",stat:!0},{fromString:function(t,e){var l,n,a=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(a=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((l=void 0===e?10:i(e))<2||l>36)throw RangeError("Invalid radix");if(!o.test(t)||(n=c(t,l)).toString(l)!==t)throw SyntaxError("Invalid number representation");return a*n}})},function(t,e,l){"use strict";var n=l(0),i=l(139);n({target:"Object",stat:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,l){"use strict";var n=l(0),i=l(139);n({target:"Object",stat:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,l){"use strict";var n=l(0),i=l(139);n({target:"Object",stat:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(54),o=l(3),a=l(1),r=l(8),d=l(33),u=l(14).f,Z=l(18),s=l(36),b=l(41),I=l(102),h=l(6),m=l(174),p=l(7),g=l(17),G=p("observable"),y=g.get,X=g.set,V=function(t){var e=t.cleanup;if(e){t.cleanup=void 0;try{e()}catch(t){m(t)}}},W=function(t){return void 0===t.observer},C=function(t){var e=t.facade;if(!i){e.closed=!0;var l=t.subscriptionObserver;l&&(l.closed=!0)}t.observer=void 0},R=function(t,e){var l,n=X(this,{cleanup:void 0,observer:a(t),subscriptionObserver:void 0});i||(this.closed=!1);try{(l=I(t.start))&&l.call(t,this)}catch(t){m(t)}if(!W(n)){var c=n.subscriptionObserver=new f(this);try{var r=e(c),d=r;null!=r&&(n.cleanup="function"==typeof r.unsubscribe?function(){d.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(n)&&V(n)}};R.prototype=s({},{unsubscribe:function(){var t=y(this);W(t)||(C(t),V(t))}}),i&&u(R.prototype,"closed",{configurable:!0,get:function(){return W(y(this))}});var f=function(t){X(this,{subscription:t}),i||(this.closed=!1)};f.prototype=s({},{next:function(t){var e=y(y(this).subscription);if(!W(e)){var l=e.observer;try{var n=I(l.next);n&&n.call(l,t)}catch(t){m(t)}}},error:function(t){var e=y(y(this).subscription);if(!W(e)){var l=e.observer;C(e);try{var n=I(l.error);n?n.call(l,t):m(t)}catch(t){m(t)}V(e)}},complete:function(){var t=y(y(this).subscription);if(!W(t)){var e=t.observer;C(t);try{var l=I(e.complete);l&&l.call(e)}catch(t){m(t)}V(t)}}}),i&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(y(y(this).subscription))}});var S=function(t){d(this,S,"Observable"),X(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var e=arguments.length;return new R("function"==typeof t?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:r(t)?t:{},y(this).subscriber)}}),s(S,{from:function(t){var e="function"==typeof this?this:S,l=I(a(t)[G]);if(l){var n=a(l.call(t));return n.constructor===e?n:new e((function(t){return n.subscribe(t)}))}var i=b(t);return new e((function(t){h(i,(function(e,l){if(t.next(e),t.closed)return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,e=arguments.length,l=new Array(e),n=0;n<e;)l[n]=arguments[n++];return new t((function(t){for(var n=0;n<e;n++)if(t.next(l[n]),t.closed)return;t.complete()}))}}),Z(S.prototype,G,(function(){return this})),n({global:!0},{Observable:S}),c("Observable")},function(t,e,l){l(175)},function(t,e,l){l(481)},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(11),o=l(78),a=l(95),r=l(6);n({target:"Promise",stat:!0},{any:function(t){var e=this,l=o.f(e),n=l.resolve,d=l.reject,u=a((function(){var l=i(e.resolve),o=[],a=0,u=1,Z=!1;r(t,(function(t){var i=a++,r=!1;o.push(void 0),u++,l.call(e,t).then((function(t){r||Z||(Z=!0,n(t))}),(function(t){r||Z||(r=!0,o[i]=t,--u||d(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||d(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&d(u.value),l.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(78),c=l(95);n({target:"Promise",stat:!0},{try:function(t){var e=i.f(this),l=c(t);return(l.error?e.reject:e.resolve)(l.value),e.promise}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.toKey,a=i.set;n({target:"Reflect",stat:!0},{defineMetadata:function(t,e,l){var n=arguments.length<4?void 0:o(arguments[3]);a(t,e,c(l),n)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.toKey,a=i.getMap,r=i.store;n({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var l=arguments.length<3?void 0:o(arguments[2]),n=a(c(e),l,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var i=r.get(e);return i.delete(l),!!i.size||r.delete(e)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=l(27),a=i.has,r=i.get,d=i.toKey,u=function(t,e,l){if(a(t,e,l))return r(t,e,l);var n=o(e);return null!==n?u(t,n,l):void 0};n({target:"Reflect",stat:!0},{getMetadata:function(t,e){var l=arguments.length<3?void 0:d(arguments[2]);return u(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(179),c=l(44),o=l(1),a=l(27),r=l(6),d=c.keys,u=c.toKey,Z=function(t,e){var l=d(t,e),n=a(t);if(null===n)return l;var c,o,u=Z(n,e);return u.length?l.length?(c=new i(l.concat(u)),r(c,(o=[]).push,{that:o}),o):u:l};n({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),e)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.get,a=i.toKey;n({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var l=arguments.length<3?void 0:a(arguments[2]);return o(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.keys,a=i.toKey;n({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:a(arguments[1]);return o(c(t),e)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=l(27),a=i.has,r=i.toKey,d=function(t,e,l){if(a(t,e,l))return!0;var n=o(e);return null!==n&&d(t,n,l)};n({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var l=arguments.length<3?void 0:r(arguments[2]);return d(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.has,a=i.toKey;n({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var l=arguments.length<3?void 0:a(arguments[2]);return o(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(44),c=l(1),o=i.toKey,a=i.set;n({target:"Reflect",stat:!0},{metadata:function(t,e){return function(l,n){a(t,e,c(l),o(n))}}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(191);n({target:"Set",proto:!0,real:!0,forced:i},{addAll:function(){return c.apply(this,arguments)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(103);n({target:"Set",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(28),d=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{difference:function(t){var e=o(this),l=new(r(e,c("Set")))(e),n=a(l.delete);return d(t,(function(t){n.call(l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(58),r=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{every:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(l,(function(t,l){if(!n(t,t,e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(19),d=l(28),u=l(58),Z=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{filter:function(t){var e=o(this),l=u(e),n=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(d(e,c("Set"))),s=a(i.add);return Z(l,(function(t){n(t,t,e)&&s.call(i,t)}),{IS_ITERATOR:!0}),i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(58),r=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{find:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l){if(n(t,t,e))return l(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){l(0)({target:"Set",stat:!0},{from:l(104)})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(28),d=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{intersection:function(t){var e=o(this),l=new(r(e,c("Set"))),n=a(e.has),i=a(l.add);return d(t,(function(t){n.call(e,t)&&i.call(l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3),a=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{isDisjointFrom:function(t){var e=c(this),l=o(e.has);return!a(t,(function(t,n){if(!0===l.call(e,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(41),d=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{isSubsetOf:function(t){var e=r(this),l=o(t),n=l.has;return"function"!=typeof n&&(l=new(c("Set"))(t),n=a(l.has)),!d(e,(function(t,e){if(!1===n.call(l,t))return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3),a=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{isSupersetOf:function(t){var e=c(this),l=o(e.has);return!a(t,(function(t,n){if(!1===l.call(e,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(58),a=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{join:function(t){var e=c(this),l=o(e),n=void 0===t?",":String(t),i=[];return a(l,i.push,{that:i,IS_ITERATOR:!0}),i.join(n)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(19),d=l(28),u=l(58),Z=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{map:function(t){var e=o(this),l=u(e),n=r(t,arguments.length>1?arguments[1]:void 0,3),i=new(d(e,c("Set"))),s=a(i.add);return Z(l,(function(t){s.call(i,n(t,t,e))}),{IS_ITERATOR:!0}),i}})},function(t,e,l){l(0)({target:"Set",stat:!0},{of:l(105)})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(3),a=l(58),r=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{reduce:function(t){var e=c(this),l=a(e),n=arguments.length<2,i=n?void 0:arguments[1];if(o(t),r(l,(function(l){n?(n=!1,i=l):i=t(i,l,l,e)}),{IS_ITERATOR:!0}),n)throw TypeError("Reduce of empty set with no initial value");return i}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(1),o=l(19),a=l(58),r=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{some:function(t){var e=c(this),l=a(e),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l){if(n(t,t,e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(28),d=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{symmetricDifference:function(t){var e=o(this),l=new(r(e,c("Set")))(e),n=a(l.delete),i=a(l.add);return d(t,(function(t){n.call(l,t)||i.call(l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(11),o=l(1),a=l(3),r=l(28),d=l(6);n({target:"Set",proto:!0,real:!0,forced:i},{union:function(t){var e=o(this),l=new(r(e,c("Set")))(e);return d(t,a(l.add),{that:l}),l}})},function(t,e,l){"use strict";var n=l(0),i=l(66).charAt;n({target:"String",proto:!0,forced:l(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(62),c=l(22),o=l(15),a=l(17),r=l(66),d=r.codeAt,u=r.charAt,Z=a.set,s=a.getterFor("String Iterator"),b=i((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=s(this),l=e.string,n=e.index;return n>=l.length?{value:void 0,done:!0}:(t=u(l,n),e.index+=t.length,{value:{codePoint:d(t,0),position:n},done:!1})}));n({target:"String",proto:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,l){l(181)},function(t,e,l){l(514)},function(t,e,l){"use strict";var n=l(0),i=l(22),c=l(79),o=l(15),a=l(65),r=l(183),d=l(7),u=l(5),Z=d("replace"),s=RegExp.prototype,b=Math.max,I=function(t,e,l){return l>t.length?-1:""===e?l:t.indexOf(e,l)};n({target:"String",proto:!0},{replaceAll:function(t,e){var l,n,d,h,m,p,g,G,y=i(this),X=0,V=0,W="";if(null!=t){if((l=c(t))&&!~o(i("flags"in s?t.flags:a.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(n=t[Z]))return n.call(t,y,e);if(u&&l)return o(y).replace(t,e)}for(d=o(y),h=o(t),(m="function"==typeof e)||(e=o(e)),p=h.length,g=b(1,p),X=I(d,h,0);-1!==X;)G=m?o(e(h,X,d)):r(h,d,X,[],void 0,e),W+=d.slice(V,X)+G,V=X+p,X=I(d,h,X+g);return V<d.length&&(W+=d.slice(V)),W}})},function(t,e,l){l(21)("asyncDispose")},function(t,e,l){l(21)("dispose")},function(t,e,l){l(21)("observable")},function(t,e,l){l(21)("patternMatch")},function(t,e,l){l(21)("replaceAll")},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(103);n({target:"WeakMap",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,l){l(0)({target:"WeakMap",stat:!0},{from:l(104)})},function(t,e,l){l(0)({target:"WeakMap",stat:!0},{of:l(105)})},function(t,e,l){"use strict";l(0)({target:"WeakMap",proto:!0,real:!0,forced:l(5)},{upsert:l(138)})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(191);n({target:"WeakSet",proto:!0,real:!0,forced:i},{addAll:function(){return c.apply(this,arguments)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(103);n({target:"WeakSet",proto:!0,real:!0,forced:i},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,e,l){l(0)({target:"WeakSet",stat:!0},{from:l(104)})},function(t,e,l){l(0)({target:"WeakSet",stat:!0},{of:l(105)})},function(t,e,l){var n=l(4),i=l(192),c=l(151),o=l(18);for(var a in i){var r=n[a],d=r&&r.prototype;if(d&&d.forEach!==c)try{o(d,"forEach",c)}catch(t){d.forEach=c}}},function(t,e,l){var n=l(4),i=l(192),c=l(87),o=l(18),a=l(7),r=a("iterator"),d=a("toStringTag"),u=c.values;for(var Z in i){var s=n[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[d]||o(b,d,Z),i[Z])for(var I in c)if(b[I]!==c[I])try{o(b,I,c[I])}catch(t){b[I]=c[I]}}}},function(t,e,l){var n=l(0),i=l(4),c=l(131);n({global:!0,bind:!0,enumerable:!0,forced:!i.setImmediate||!i.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,e,l){var n=l(0),i=l(4),c=l(172),o=l(63),a=i.process;n({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var e=o&&a.domain;c(e?e.bind(t):t)}})},function(t,e,l){var n=l(0),i=l(4),c=l(39),o=[].slice,a=function(t){return function(e,l){var n=arguments.length>2,i=n?o.call(arguments,2):void 0;return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,l)}};n({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:a(i.setTimeout),setInterval:a(i.setInterval)})},function(t,e,l){"use strict";l(180);var n,i=l(0),c=l(9),o=l(193),a=l(4),r=l(114),d=l(25),u=l(33),Z=l(16),s=l(167),b=l(152),I=l(66).codeAt,h=l(534),m=l(15),p=l(34),g=l(194),G=l(17),y=a.URL,X=g.URLSearchParams,V=g.getState,W=G.set,C=G.getterFor("URL"),R=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,Y=/\d/,K=/^0x/i,N=/^[0-7]+$/,J=/^\d+$/,H=/^[\dA-Fa-f]+$/,U=/[\0\t\n\r #%/:<>?@[\\\]^|]/,L=/[\0\t\n\r #/:<>?@[\\\]^|]/,B=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,k=/[\t\n\r]/g,F=function(t,e){var l,n,i;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return"Invalid host";if(!(l=x(e.slice(1,-1))))return"Invalid host";t.host=l}else if(E(t)){if(e=h(e),U.test(e))return"Invalid host";if(null===(l=T(e)))return"Invalid host";t.host=l}else{if(L.test(e))return"Invalid host";for(l="",n=b(e),i=0;i<n.length;i++)l+=j(n[i],z);t.host=l}},T=function(t){var e,l,n,i,c,o,a,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(e=r.length)>4)return t;for(l=[],n=0;n<e;n++){if(""==(i=r[n]))return t;if(c=10,i.length>1&&"0"==i.charAt(0)&&(c=K.test(i)?16:8,i=i.slice(8==c?1:2)),""===i)o=0;else{if(!(10==c?J:8==c?N:H).test(i))return t;o=parseInt(i,c)}l.push(o)}for(n=0;n<e;n++)if(o=l[n],n==e-1){if(o>=f(256,5-e))return null}else if(o>255)return null;for(a=l.pop(),n=0;n<l.length;n++)a+=l[n]*f(256,3-n);return a},x=function(t){var e,l,n,i,c,o,a,r=[0,0,0,0,0,0,0,0],d=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++d}for(;s();){if(8==d)return;if(":"!=s()){for(e=l=0;l<4&&H.test(s());)e=16*e+parseInt(s(),16),Z++,l++;if("."==s()){if(0==l)return;if(Z-=l,d>6)return;for(n=0;s();){if(i=null,n>0){if(!("."==s()&&n<4))return;Z++}if(!Y.test(s()))return;for(;Y.test(s());){if(c=parseInt(s(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;Z++}r[d]=256*r[d]+i,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[d++]=e}else{if(null!==u)return;Z++,u=++d}}if(null!==u)for(o=d-u,d=7;0!=d&&o>0;)a=r[d],r[d--]=r[u+o-1],r[u+--o]=a;else if(8!=d)return;return r},A=function(t){var e,l,n,i;if("number"==typeof t){for(e=[],l=0;l<4;l++)e.unshift(t%256),t=R(t/256);return e.join(".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,l=1,n=null,i=0,c=0;c<8;c++)0!==t[c]?(i>l&&(e=n,l=i),n=null,i=0):(null===n&&(n=c),++i);return i>l&&(e=n,l=i),e}(t),l=0;l<8;l++)i&&0===t[l]||(i&&(i=!1),n===l?(e+=l?":":"::",i=!0):(e+=t[l].toString(16),l<7&&(e+=":")));return"["+e+"]"}return t},z={},w=s({},z,{" ":1,'"':1,"<":1,">":1,"`":1}),Q=s({},w,{"#":1,"?":1,"{":1,"}":1}),P=s({},Q,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),j=function(t,e){var l=I(t,0);return l>32&&l<127&&!Z(e,t)?t:encodeURIComponent(t)},M={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(M,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,e){var l;return 2==t.length&&S.test(t.charAt(0))&&(":"==(l=t.charAt(1))||!e&&"|"==l)},_=function(t){var e;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},$=function(t){var e=t.path,l=e.length;!l||"file"==t.scheme&&1==l&&q(e[0],!0)||e.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},et={},lt={},nt={},it={},ct={},ot={},at={},rt={},dt={},ut={},Zt={},st={},bt={},It={},ht={},mt={},pt={},gt={},Gt={},yt={},Xt={},Vt=function(t,e,l,i){var c,o,a,r,d,u=l||et,s=0,I="",h=!1,m=!1,p=!1;for(l||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(B,"")),e=e.replace(k,""),c=b(e);s<=c.length;){switch(o=c[s],u){case et:if(!o||!S.test(o)){if(l)return"Invalid scheme";u=nt;continue}I+=o.toLowerCase(),u=lt;break;case lt:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))I+=o.toLowerCase();else{if(":"!=o){if(l)return"Invalid scheme";I="",u=nt,s=0;continue}if(l&&(E(t)!=Z(M,I)||"file"==I&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=I,l)return void(E(t)&&M[t.scheme]==t.port&&(t.port=null));I="","file"==t.scheme?u=It:E(t)&&i&&i.scheme==t.scheme?u=it:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=Gt)}break;case nt:if(!i||i.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(i.cannotBeABaseURL&&"#"==o){t.scheme=i.scheme,t.path=i.path.slice(),t.query=i.query,t.fragment="",t.cannotBeABaseURL=!0,u=Xt;break}u="file"==i.scheme?It:ot;continue;case it:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=dt,s++;break;case ct:if("/"==o){u=ut;break}u=gt;continue;case ot:if(t.scheme=i.scheme,o==n)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query;else if("/"==o||"\\"==o&&E(t))u=at;else if("?"==o)t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query="",u=yt;else{if("#"!=o){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.path.pop(),u=gt;continue}t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Xt}break;case at:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=i.username,t.password=i.password,t.host=i.host,t.port=i.port,u=gt;continue}u=ut}else u=dt;break;case rt:if(u=dt,"/"!=o||"/"!=I.charAt(s+1))continue;s++;break;case dt:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){h&&(I="%40"+I),h=!0,a=b(I);for(var g=0;g<a.length;g++){var G=a[g];if(":"!=G||p){var y=j(G,P);p?t.password+=y:t.username+=y}else p=!0}I=""}else if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(h&&""==I)return"Invalid authority";s-=b(I).length+1,I="",u=Zt}else I+=o;break;case Zt:case st:if(l&&"file"==t.scheme){u=mt;continue}if(":"!=o||m){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==I)return"Invalid host";if(l&&""==I&&(D(t)||null!==t.port))return;if(r=F(t,I))return r;if(I="",u=pt,l)return;continue}"["==o?m=!0:"]"==o&&(m=!1),I+=o}else{if(""==I)return"Invalid host";if(r=F(t,I))return r;if(I="",u=bt,l==st)return}break;case bt:if(!Y.test(o)){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||l){if(""!=I){var X=parseInt(I,10);if(X>65535)return"Invalid port";t.port=E(t)&&X===M[t.scheme]?null:X,I=""}if(l)return;u=pt;continue}return"Invalid port"}I+=o;break;case It:if(t.scheme="file","/"==o||"\\"==o)u=ht;else{if(!i||"file"!=i.scheme){u=gt;continue}if(o==n)t.host=i.host,t.path=i.path.slice(),t.query=i.query;else if("?"==o)t.host=i.host,t.path=i.path.slice(),t.query="",u=yt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=i.host,t.path=i.path.slice(),$(t)),u=gt;continue}t.host=i.host,t.path=i.path.slice(),t.query=i.query,t.fragment="",u=Xt}}break;case ht:if("/"==o||"\\"==o){u=mt;break}i&&"file"==i.scheme&&!_(c.slice(s).join(""))&&(q(i.path[0],!0)?t.path.push(i.path[0]):t.host=i.host),u=gt;continue;case mt:if(o==n||"/"==o||"\\"==o||"?"==o||"#"==o){if(!l&&q(I))u=gt;else if(""==I){if(t.host="",l)return;u=pt}else{if(r=F(t,I))return r;if("localhost"==t.host&&(t.host=""),l)return;I="",u=pt}continue}I+=o;break;case pt:if(E(t)){if(u=gt,"/"!=o&&"\\"!=o)continue}else if(l||"?"!=o)if(l||"#"!=o){if(o!=n&&(u=gt,"/"!=o))continue}else t.fragment="",u=Xt;else t.query="",u=yt;break;case gt:if(o==n||"/"==o||"\\"==o&&E(t)||!l&&("?"==o||"#"==o)){if(".."===(d=(d=I).toLowerCase())||"%2e."===d||".%2e"===d||"%2e%2e"===d?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(I)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(I)&&(t.host&&(t.host=""),I=I.charAt(0)+":"),t.path.push(I)),I="","file"==t.scheme&&(o==n||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=yt):"#"==o&&(t.fragment="",u=Xt)}else I+=j(o,Q);break;case Gt:"?"==o?(t.query="",u=yt):"#"==o?(t.fragment="",u=Xt):o!=n&&(t.path[0]+=j(o,z));break;case yt:l||"#"!=o?o!=n&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":j(o,z)):(t.fragment="",u=Xt);break;case Xt:o!=n&&(t.fragment+=j(o,w))}s++}},Wt=function(t){var e,l,n=u(this,Wt,"URL"),i=arguments.length>1?arguments[1]:void 0,o=m(t),a=W(n,{type:"URL"});if(void 0!==i)if(i instanceof Wt)e=C(i);else if(l=Vt(e={},m(i)))throw TypeError(l);if(l=Vt(a,o,null,e))throw TypeError(l);var r=a.searchParams=new X,d=V(r);d.updateSearchParams(a.query),d.updateURL=function(){a.query=String(r)||null},c||(n.href=Rt.call(n),n.origin=ft.call(n),n.protocol=St.call(n),n.username=vt.call(n),n.password=Yt.call(n),n.host=Kt.call(n),n.hostname=Nt.call(n),n.port=Jt.call(n),n.pathname=Ht.call(n),n.search=Ut.call(n),n.searchParams=Lt.call(n),n.hash=Bt.call(n))},Ct=Wt.prototype,Rt=function(){var t=C(this),e=t.scheme,l=t.username,n=t.password,i=t.host,c=t.port,o=t.path,a=t.query,r=t.fragment,d=e+":";return null!==i?(d+="//",D(t)&&(d+=l+(n?":"+n:"")+"@"),d+=A(i),null!==c&&(d+=":"+c)):"file"==e&&(d+="//"),d+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},ft=function(){var t=C(this),e=t.scheme,l=t.port;if("blob"==e)try{return new Wt(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&E(t)?e+"://"+A(t.host)+(null!==l?":"+l:""):"null"},St=function(){return C(this).scheme+":"},vt=function(){return C(this).username},Yt=function(){return C(this).password},Kt=function(){var t=C(this),e=t.host,l=t.port;return null===e?"":null===l?A(e):A(e)+":"+l},Nt=function(){var t=C(this).host;return null===t?"":A(t)},Jt=function(){var t=C(this).port;return null===t?"":String(t)},Ht=function(){var t=C(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},Ut=function(){var t=C(this).query;return t?"?"+t:""},Lt=function(){return C(this).searchParams},Bt=function(){var t=C(this).fragment;return t?"#"+t:""},kt=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(c&&r(Ct,{href:kt(Rt,(function(t){var e=C(this),l=m(t),n=Vt(e,l);if(n)throw TypeError(n);V(e.searchParams).updateSearchParams(e.query)})),origin:kt(ft),protocol:kt(St,(function(t){var e=C(this);Vt(e,m(t)+":",et)})),username:kt(vt,(function(t){var e=C(this),l=b(m(t));if(!O(e)){e.username="";for(var n=0;n<l.length;n++)e.username+=j(l[n],P)}})),password:kt(Yt,(function(t){var e=C(this),l=b(m(t));if(!O(e)){e.password="";for(var n=0;n<l.length;n++)e.password+=j(l[n],P)}})),host:kt(Kt,(function(t){var e=C(this);e.cannotBeABaseURL||Vt(e,m(t),Zt)})),hostname:kt(Nt,(function(t){var e=C(this);e.cannotBeABaseURL||Vt(e,m(t),st)})),port:kt(Jt,(function(t){var e=C(this);O(e)||(""==(t=m(t))?e.port=null:Vt(e,t,bt))})),pathname:kt(Ht,(function(t){var e=C(this);e.cannotBeABaseURL||(e.path=[],Vt(e,m(t),pt))})),search:kt(Ut,(function(t){var e=C(this);""==(t=m(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",Vt(e,t,yt)),V(e.searchParams).updateSearchParams(e.query)})),searchParams:kt(Lt),hash:kt(Bt,(function(t){var e=C(this);""!=(t=m(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",Vt(e,t,Xt)):e.fragment=null}))}),d(Ct,"toJSON",(function(){return Rt.call(this)}),{enumerable:!0}),d(Ct,"toString",(function(){return Rt.call(this)}),{enumerable:!0}),y){var Ft=y.createObjectURL,Tt=y.revokeObjectURL;Ft&&d(Wt,"createObjectURL",(function(t){return Ft.apply(y,arguments)})),Tt&&d(Wt,"revokeObjectURL",(function(t){return Tt.apply(y,arguments)}))}p(Wt,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,e,l){"use strict";var n=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,a=String.fromCharCode,r=function(t){return t+22+75*(t<26)},d=function(t,e,l){var n=0;for(t=l?o(t/700):t>>1,t+=o(t/e);t>455;n+=36)t=o(t/35);return o(n+36*t/(t+38))},u=function(t){var e,l,n=[],i=(t=function(t){for(var e=[],l=0,n=t.length;l<n;){var i=t.charCodeAt(l++);if(i>=55296&&i<=56319&&l<n){var c=t.charCodeAt(l++);56320==(64512&c)?e.push(((1023&i)<<10)+(1023&c)+65536):(e.push(i),l--)}else e.push(i)}return e}(t)).length,u=128,Z=0,s=72;for(e=0;e<t.length;e++)(l=t[e])<128&&n.push(a(l));var b=n.length,I=b;for(b&&n.push("-");I<i;){var h=2147483647;for(e=0;e<t.length;e++)(l=t[e])>=u&&l<h&&(h=l);var m=I+1;if(h-u>o((2147483647-Z)/m))throw RangeError(c);for(Z+=(h-u)*m,u=h,e=0;e<t.length;e++){if((l=t[e])<u&&++Z>2147483647)throw RangeError(c);if(l==u){for(var p=Z,g=36;;g+=36){var G=g<=s?1:g>=s+26?26:g-s;if(p<G)break;var y=p-G,X=36-G;n.push(a(r(G+y%X))),p=o(y/X)}n.push(a(r(p))),s=d(Z,m,I==b),Z=0,++I}}++Z,++u}return n.join("")};t.exports=function(t){var e,l,c=[],o=t.toLowerCase().replace(i,".").split(".");for(e=0;e<o.length;e++)l=o[e],c.push(n.test(l)?"xn--"+u(l):l);return c.join(".")}},function(t,e,l){"use strict";l(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},function(t,e,l){var n=function(t){"use strict";var e=Object.prototype,l=e.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",c=n.asyncIterator||"@@asyncIterator",o=n.toStringTag||"@@toStringTag";function a(t,e,l){return Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{a({},"")}catch(t){a=function(t,e,l){return t[e]=l}}function r(t,e,l,n){var i=e&&e.prototype instanceof Z?e:Z,c=Object.create(i.prototype),o=new W(n||[]);return c._invoke=function(t,e,l){var n="suspendedStart";return function(i,c){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw c;return R()}for(l.method=i,l.arg=c;;){var o=l.delegate;if(o){var a=y(o,l);if(a){if(a===u)continue;return a}}if("next"===l.method)l.sent=l._sent=l.arg;else if("throw"===l.method){if("suspendedStart"===n)throw n="completed",l.arg;l.dispatchException(l.arg)}else"return"===l.method&&l.abrupt("return",l.arg);n="executing";var r=d(t,e,l);if("normal"===r.type){if(n=l.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:l.done}}"throw"===r.type&&(n="completed",l.method="throw",l.arg=r.arg)}}}(t,l,o),c}function d(t,e,l){try{return{type:"normal",arg:t.call(e,l)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function Z(){}function s(){}function b(){}var I={};I[i]=function(){return this};var h=Object.getPrototypeOf,m=h&&h(h(C([])));m&&m!==e&&l.call(m,i)&&(I=m);var p=b.prototype=Z.prototype=Object.create(I);function g(t){["next","throw","return"].forEach((function(e){a(t,e,(function(t){return this._invoke(e,t)}))}))}function G(t,e){var n;this._invoke=function(i,c){function o(){return new e((function(n,o){!function n(i,c,o,a){var r=d(t[i],t,c);if("throw"!==r.type){var u=r.arg,Z=u.value;return Z&&"object"==typeof Z&&l.call(Z,"__await")?e.resolve(Z.__await).then((function(t){n("next",t,o,a)}),(function(t){n("throw",t,o,a)})):e.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return n("throw",t,o,a)}))}a(r.arg)}(i,c,n,o)}))}return n=n?n.then(o,o):o()}}function y(t,e){var l=t.iterator[e.method];if(void 0===l){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,y(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 n=d(l,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,u;var i=n.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 X(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(X,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 n=-1,c=function e(){for(;++n<t.length;)if(l.call(t,n))return e.value=t[n],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 s.prototype=p.constructor=b,b.constructor=s,s.displayName=a(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===s||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,a(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},g(G.prototype),G.prototype[c]=function(){return this},t.AsyncIterator=G,t.async=function(e,l,n,i,c){void 0===c&&(c=Promise);var o=new G(r(e,l,n,i),c);return t.isGeneratorFunction(l)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},g(p),a(p,o,"Generator"),p[i]=function(){return this},p.toString=function(){return"[object Generator]"},t.keys=function(t){var e=[];for(var l in t)e.push(l);return e.reverse(),function l(){for(;e.length;){var n=e.pop();if(n in t)return l.value=n,l.done=!1,l}return l.done=!0,l}},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)&&l.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 n(l,n){return o.type="throw",o.arg=t,e.next=l,n&&(e.method="next",e.arg=void 0),!!n}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],o=c.completion;if("root"===c.tryLoc)return n("end");if(c.tryLoc<=this.prev){var a=l.call(c,"catchLoc"),r=l.call(c,"finallyLoc");if(a&&r){if(this.prev<c.catchLoc)return n(c.catchLoc,!0);if(this.prev<c.finallyLoc)return n(c.finallyLoc)}else if(a){if(this.prev<c.catchLoc)return n(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return n(c.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&l.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 l=this.tryEntries[e];if(l.finallyLoc===t)return this.complete(l.completion,l.afterLoc),V(l),u}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var l=this.tryEntries[e];if(l.tryLoc===t){var n=l.completion;if("throw"===n.type){var i=n.arg;V(l)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,l){return this.delegate={iterator:C(t),resultName:e,nextLoc:l},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},function(t,e,l){"use strict";l.r(e),l.d(e,"AUTHORIZATION_CODE",(function(){return n.a})),l.d(e,"AsgardeoAuthClient",(function(){return n.b})),l.d(e,"AsgardeoAuthException",(function(){return n.c})),l.d(e,"AsgardeoSPAClient",(function(){return n.d})),l.d(e,"AuthenticationUtils",(function(){return n.e})),l.d(e,"CLIENT_ID_TAG",(function(){return n.f})),l.d(e,"CLIENT_SECRET_TAG",(function(){return n.g})),l.d(e,"Hooks",(function(){return n.h})),l.d(e,"OIDC_SCOPE",(function(){return n.i})),l.d(e,"PKCE_CODE_VERIFIER",(function(){return n.j})),l.d(e,"PKCE_SEPARATOR",(function(){return n.k})),l.d(e,"REFRESH_TOKEN_TIMER",(function(){return n.l})),l.d(e,"ResponseMode",(function(){return n.m})),l.d(e,"SCOPE_TAG",(function(){return n.n})),l.d(e,"SESSION_STATE",(function(){return n.o})),l.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return n.p})),l.d(e,"SIGN_OUT_URL",(function(){return n.q})),l.d(e,"SPAUtils",(function(){return n.r})),l.d(e,"STATE",(function(){return n.s})),l.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return n.t})),l.d(e,"Storage",(function(){return n.u})),l.d(e,"Stores",(function(){return n.v})),l.d(e,"TOKEN_TAG",(function(){return n.w})),l.d(e,"USERNAME_TAG",(function(){return n.x})),l.d(e,"WebWorkerClass",(function(){return n.y})),l.d(e,"AuthClient",(function(){return X})),l.d(e,"AuthProvider",(function(){return W})),l.d(e,"useAuthContext",(function(){return C})),l.d(e,"SecureRoute",(function(){return Y})),l.d(e,"AuthenticatedComponent",(function(){return K})),l.d(e,"SecureApp",(function(){return J}));l(196),l(198),l(199),l(200),l(201),l(202),l(203),l(204),l(205),l(206),l(207),l(208),l(209),l(210),l(211),l(212),l(213),l(214),l(215),l(216),l(217),l(218),l(219),l(220),l(221),l(222),l(223),l(224),l(225),l(87),l(226),l(227),l(228),l(229),l(230),l(231),l(232),l(233),l(234),l(235),l(236),l(237),l(238),l(239),l(240),l(242),l(243),l(244),l(245),l(246),l(248),l(249),l(251),l(252),l(253),l(254),l(160),l(255),l(256),l(127),l(257),l(258),l(259),l(260),l(261),l(262),l(263),l(264),l(265),l(266),l(267),l(268),l(269),l(270),l(271),l(272),l(273),l(274),l(275),l(276),l(277),l(278),l(279),l(280),l(281),l(282),l(283),l(284),l(285),l(286),l(287),l(288),l(289),l(290),l(291),l(292),l(293),l(294),l(295),l(296),l(297),l(298),l(299),l(300),l(301),l(302),l(303),l(304),l(305),l(306),l(307),l(308),l(309),l(310),l(312),l(313),l(314),l(315),l(175),l(319),l(320),l(321),l(322),l(323),l(324),l(325),l(326),l(327),l(328),l(329),l(330),l(331),l(332),l(333),l(132),l(334),l(335),l(336),l(337),l(179),l(338),l(339),l(340),l(341),l(180),l(342),l(181),l(343),l(344),l(345),l(346),l(347),l(348),l(349),l(350),l(351),l(352),l(353),l(354),l(355),l(356),l(357),l(358),l(359),l(360),l(361),l(362),l(363),l(364),l(365),l(366),l(367),l(368),l(369),l(370),l(371),l(372),l(373),l(374),l(375),l(376),l(377),l(378),l(379),l(382),l(383),l(384),l(385),l(386),l(387),l(388),l(389),l(390),l(391),l(392),l(393),l(394),l(395),l(396),l(397),l(398),l(399),l(400),l(401),l(402),l(137),l(403),l(404),l(406),l(407),l(408),l(409),l(411),l(412),l(413),l(414),l(415),l(416),l(417),l(418),l(419),l(420),l(421),l(422),l(423),l(424),l(425),l(426),l(427),l(428),l(429),l(430),l(431),l(432),l(433),l(434),l(435),l(436),l(437),l(438),l(439),l(440),l(441),l(442),l(443),l(444),l(445),l(446),l(447),l(448),l(450),l(451),l(452),l(453),l(454),l(455),l(456),l(457),l(458),l(459),l(460),l(461),l(462),l(463),l(464),l(465),l(466),l(467),l(468),l(469),l(470),l(471),l(472),l(473),l(474),l(475),l(476),l(477),l(478),l(479),l(480),l(482),l(483),l(484),l(485),l(486),l(487),l(488),l(489),l(490),l(491),l(492),l(493),l(494),l(495),l(496),l(497),l(498),l(499),l(500),l(501),l(502),l(503),l(504),l(505),l(506),l(507),l(508),l(509),l(510),l(511),l(512),l(513),l(515),l(516),l(517),l(518),l(519),l(520),l(521),l(522),l(523),l(524),l(525),l(526),l(527),l(528),l(529),l(530),l(531),l(532),l(533),l(535),l(194),l(536);var n=l(45),i=l(20),c=l.n(i);function o(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,n)}return l}function a(t){for(var e=1;e<arguments.length;e++){var l=null!=arguments[e]?arguments[e]:{};e%2?o(Object(l),!0).forEach((function(e){Z(t,e,l[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):o(Object(l)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(l,e))}))}return t}function r(t,e,l,n,i,c,o){try{var a=t[c](o),r=a.value}catch(t){return void l(t)}a.done?e(r):Promise.resolve(r).then(n,i)}function d(t){return function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){r(c,n,i,o,a,"next",t)}function a(t){r(c,n,i,o,a,"throw",t)}o(void 0)}))}}function u(t,e){for(var l=0;l<e.length;l++){var n=e[l];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function Z(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}var s=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=n.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,l,i,c,o,r,s,b,I,h,m,p,g,G,y,X,V,W,C;return e=t,(l=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=d(regeneratorRuntime.mark((function t(e,l,n,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(n,i,c,o).then(function(){var t=d(regeneratorRuntime.mark((function t(n){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){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:n.allowedScopes,displayName:n.displayName,email:n.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:n.sub,username:n.username},u.updateState(i),e(a(a({},l),i)),r&&r(n);case 9:return t.abrupt("return",n);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,l,n,i,c,o){return C.apply(this,arguments)})},{key:"signOut",value:function(t,e,l){return this._client.signOut().then((function(t){return l&&l(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=a(a({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=d(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 W.apply(this,arguments)})},{key:"httpRequest",value:(V=d(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 V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=d(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 X.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,e,l){var n=this;return this._client.requestCustomGrant(t).then((function(i){if(i)return t.returnsSession&&(n.updateState(a(a(a({},n.getState()),i),{},{isAuthenticated:!0,isLoading:!1})),l(a(a({},i),{},{isAuthenticated:!0,isLoading:!1}))),e&&e(i),i})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(y=d(regeneratorRuntime.mark((function e(l){var n=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._client.revokeAccessToken().then((function(){return n.updateState(a(a({},t.DEFAULT_STATE),{},{isLoading:!1})),l(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e,this)}))),function(t){return y.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(G=d(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 G.apply(this,arguments)})},{key:"getHttpClient",value:(g=d(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 g.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=d(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 p.apply(this,arguments)})},{key:"getIDToken",value:(m=d(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 m.apply(this,arguments)})},{key:"getAccessToken",value:(h=d(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 h.apply(this,arguments)})},{key:"refreshAccessToken",value:(I=d(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 I.apply(this,arguments)})},{key:"isAuthenticated",value:(b=d(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:(s=d(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 s.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=d(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=d(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,l){return t===n.h.CustomGrant?this._client.on(t,e,l):this._client.on(t,e)}},{key:"trySignInSilently",value:(c=d(regeneratorRuntime.mark((function t(e,l){var n=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=d(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 n.updateState(a(a({},n.getState()),{},{isLoading:!1})),l(a(a({},e),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,n._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},n.updateState(o),l(a(a({},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,l),i&&u(e,i),t}();function b(t,e,l,n,i,c,o){try{var a=t[c](o),r=a.value}catch(t){return void l(t)}a.done?e(r):Promise.resolve(r).then(n,i)}function I(t){return function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){b(c,n,i,o,a,"next",t)}function a(t){b(c,n,i,o,a,"throw",t)}o(void 0)}))}}function h(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,n)}return l}function m(t){for(var e=1;e<arguments.length;e++){var l=null!=arguments[e]?arguments[e]:{};e%2?h(Object(l),!0).forEach((function(e){p(t,e,l[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):h(Object(l)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(l,e))}))}return t}function p(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var l=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==l)return;var n,i,c=[],o=!0,a=!1;try{for(l=l.call(t);!(o=(n=l.next()).done)&&(c.push(n.value),!e||c.length!==e);o=!0);}catch(t){a=!0,i=t}finally{try{o||null==l.return||l.return()}finally{if(a)throw i}}return c}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return G(t,e);var l=Object.prototype.toString.call(t).slice(8,-1);"Object"===l&&t.constructor&&(l=t.constructor.name);if("Map"===l||"Set"===l)return Array.from(t);if("Arguments"===l||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l))return G(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 G(t,e){(null==e||e>t.length)&&(e=t.length);for(var l=0,n=new Array(e);l<e;l++)n[l]=t[l];return n}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var y={disableTrySignInSilently:!0},X=new s,V=Object(i.createContext)(null),W=function(t){var e=g(Object(i.useState)(X.getState()),2),l=e[0],o=e[1],a=g(Object(i.useState)(!1),2),r=a[0],d=a[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,h=t.onSignOut,p=Object(i.useMemo)((function(){return m(m({},y),Z)}),[Z]),G=function(){var t=I(regeneratorRuntime.mark((function t(e,n,i,c,a){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,X.signIn(o,l,e,n,i,c,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,l,n,i,c){return t.apply(this,arguments)}}(),W=function(t,e,l){return t===n.h.CustomGrant?X.on(t,e,l):X.on(t,e)},C=function(){return X.trySignInSilently(l,o)};return Object(i.useEffect)((function(){l.isAuthenticated||I(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=d,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(i.useEffect)((function(){I(regeneratorRuntime.mark((function t(){var e,i,c,a,r,d,u;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,W(n.h.SignOut,(function(){e=!0,h&&h()}));case 3:if(!l.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=15;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(a=new URL(location.href),!(n.r.hasAuthSearchParamsInURL()&&new URL(a.origin+a.pathname).toString()===new URL(null==p?void 0:p.signInRedirectURL).toString()||null!==(i=c)&&void 0!==i&&i.authorizationCode||a.searchParams.get("error"))){t.next=15;break}return t.next=15,G({callOnlyOnRedirect:!0},null===(r=c)||void 0===r?void 0:r.authorizationCode,null===(d=c)||void 0===d?void 0:d.sessionState,null===(u=c)||void 0===u?void 0:u.state).then((function(){})).catch((function(t){throw t}));case 15:if(!X.getState().isAuthenticated){t.next=17;break}return t.abrupt("return");case 17:if(!p.disableTrySignInSilently&&!e){t.next=20;break}return o(m(m({},l),{},{isLoading:!1})),t.abrupt("return");case 20:return t.next=22,C().then((function(){})).catch((function(t){throw t}));case 22:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,e){return X.requestCustomGrant(t,e,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:G,signOut:function(t){return X.signOut(o,l,t)},state:l,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)}}},r?u:null!=s?s:null)},C=function(){return Object(i.useContext)(V)},R=l(195),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var l=arguments[e];for(var n in l)Object.prototype.hasOwnProperty.call(l,n)&&(t[n]=l[n])}return t}).apply(this,arguments)}function v(t,e){if(null==t)return{};var l,n,i=function(t,e){if(null==t)return{};var l,n,i={},c=Object.keys(t);for(n=0;n<c.length;n++)l=c[n],e.indexOf(l)>=0||(i[l]=t[l]);return i}(t,e);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(n=0;n<c.length;n++)l=c[n],e.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(i[l]=t[l])}return i}var Y=function(t){var e=C().state,l=t.component,n=t.callback,o=v(t,f);return Object(i.useEffect)((function(){e.isAuthenticated||n&&n()}),[e.isAuthenticated]),e.isAuthenticated?c.a.createElement(R.Route,S({},o,{render:function(t){return c.a.createElement(l,t)}})):null},K=function(t){var e=t.fallback,l=t.children,n=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",n?l:null!=e?e:null," ")};function N(t,e,l,n,i,c,o){try{var a=t[c](o),r=a.value}catch(t){return void l(t)}a.done?e(r):Promise.resolve(r).then(n,i)}var J=function(t){var e=t.children,l=t.fallback,n=t.onSignIn,o=t.overrideSignIn,a=C(),r=a.state,d=r.isAuthenticated,u=r.isLoading,Z=a.signIn;return Object(i.useEffect)((function(){var t;d||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,Z();case 7:case"end":return t.stop()}}),t)})),function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){N(c,n,i,o,a,"next",t)}function a(t){N(c,n,i,o,a,"throw",t)}o(void 0)}))})(),d&&n&&"function"==typeof n&&n()}),[d,u]),c.a.createElement(K,{fallback:l},c.a.createElement(i.Suspense,{fallback:l},e))}}])}));
|