0&&o.default.createElement("div",{ref:m,"data-card-style":y,"data-testid":"consonant-CardsGrid",className:O,role:"tablist","aria-live":h?"polite":"off"},D.map((function(e,t){var n=(0,s.getByPath)(e,"styles.typeOverride"),i=y||n,u=e.contentArea,c=(u=void 0===u?{}:u).title,p=void 0===c?"":c,h=e.id,m=t+1,v=function(e,t){return!(!e.hideCtaId&&!e.hideCtaTags&&"hidden"!==t)}(e,C);return i===d.CARD_STYLES.CUSTOM?(0,l.default)(P(e)):o.default.createElement(f.default,r({cardStyle:i,lh:"Card "+m+" | "+A(p)+" | "+h,key:e.id},e,{bannerMap:R,onClick:a,dateFormat:k,locale:x,renderBorder:w,renderDivider:T,renderOverlay:E,hideCTA:v,onFocus:function(){return function(e){e&&document.getElementById(e).scrollIntoView({block:"nearest"})}(e.id)}}))})))};v.propTypes=h,v.defaultProps=m,t.default=v},function(e,t,n){var r=n(240),o=n(114);function i(e){return r.possibleStandardNames[e]}e.exports=function(e){var t,n,a,l,u,s={},c=(e=e||{}).type&&{reset:!0,submit:!0}[e.type];for(t in e)if(a=e[t],r.isCustomAttribute(t))s[t]=a;else if(l=i(n=t.toLowerCase()))switch(u=r.getPropertyInfo(l),"checked"!==l&&"value"!==l||c||(l=i("default"+n)),s[l]=a,u&&u.type){case r.BOOLEAN:s[l]=!0;break;case r.OVERLOADED_BOOLEAN:""===a&&(s[l]=!0)}else o.PRESERVE_CUSTOM_ATTRIBUTES&&(s[t]=a);return o.setStyleProp(e.style,s),s}},function(e,t,n){var r=n(0),o=n(242).default;var i={reactCompat:!0};var a=r.version.split(".")[0]>=16,l=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:a,invertObject:function(e,t){if(!e||"object"!=typeof e)throw new TypeError("First argument must be an object");var n,r,o="function"==typeof t,i={},a={};for(n in e)r=e[n],o&&(i=t(n,r))&&2===i.length?a[i[0]]=i[1]:"string"==typeof r&&(a[r]=n);return a},isCustomComponent:function(e,t){if(-1===e.indexOf("-"))return t&&"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}},setStyleProp:function(e,t){if(null!=e)try{t.style=o(e,i)}catch(e){t.style={}}},canTextBeChildOfNode:function(e){return!l.has(e.name)},elementsWithNoTextChildren:l}},function(e,t,n){for(var r,o=n(249),i=n(250),a=o.CASE_SENSITIVE_TAG_NAMES,l=i.Comment,u=i.Element,s=i.ProcessingInstruction,c=i.Text,f={},d=0,p=a.length;d0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(u);t.NodeWithChildren=p;var h=function(e){function t(t){return e.call(this,a.ElementType.Root,t)||this}return o(t,e),t}(p);t.Document=h;var m=function(e){function t(t,n,r,o){void 0===r&&(r=[]),void 0===o&&(o="script"===t?a.ElementType.Script:"style"===t?a.ElementType.Style:a.ElementType.Tag);var i=e.call(this,o,r)||this;return i.name=t,i.attribs=n,i}return o(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(p);function v(e){return(0,a.isTag)(e)}function y(e){return e.type===a.ElementType.CDATA}function g(e){return e.type===a.ElementType.Text}function b(e){return e.type===a.ElementType.Comment}function w(e){return e.type===a.ElementType.Directive}function T(e){return e.type===a.ElementType.Root}function E(e,t){var n;if(void 0===t&&(t=!1),g(e))n=new c(e.data);else if(b(e))n=new f(e.data);else if(v(e)){var r=t?k(e.children):[],o=new m(e.name,i({},e.attribs),r);r.forEach((function(e){return e.parent=o})),null!=e.namespace&&(o.namespace=e.namespace),e["x-attribsNamespace"]&&(o["x-attribsNamespace"]=i({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(o["x-attribsPrefix"]=i({},e["x-attribsPrefix"])),n=o}else if(y(e)){r=t?k(e.children):[];var l=new p(a.ElementType.CDATA,r);r.forEach((function(e){return e.parent=l})),n=l}else if(T(e)){r=t?k(e.children):[];var u=new h(r);r.forEach((function(e){return e.parent=u})),e["x-mode"]&&(u["x-mode"]=e["x-mode"]),n=u}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var s=new d(e.name,e.data);null!=e["x-name"]&&(s["x-name"]=e["x-name"],s["x-publicId"]=e["x-publicId"],s["x-systemId"]=e["x-systemId"]),n=s}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function k(e){for(var t=e.map((function(e){return E(e,!0)})),n=1;n0}(e)&&(h=e,d.render(c.default))})),t.default=p},function(e,t,n){"use strict";n(122),n(126),n(128),n(132),n(134),n(139),n(140),n(141),n(142),n(171),n(175),n(183),n(185),n(187),n(190),n(192),n(194),n(196),n(199),n(201),n(204),n(206),n(102),n(208),n(209)},function(e,t,n){n(123),e.exports=n(3).Array.includes},function(e,t,n){"use strict";var r=n(2),o=n(73)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)("includes")},function(e,t,n){e.exports=n(41)("native-function-to-string",Function.toString)},function(e,t,n){var r=n(35),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t,n){n(74),e.exports=n(3).Object.assign},function(e,t,n){"use strict";var r=n(10),o=n(31),i=n(42),a=n(36),l=n(14),u=n(51),s=Object.assign;e.exports=!s||n(16)((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=r}))?function(e,t){for(var n=l(e),s=arguments.length,c=1,f=i.f,d=a.f;s>c;)for(var p,h=u(arguments[c++]),m=f?o(h).concat(f(h)):o(h),v=m.length,y=0;v>y;)p=m[y++],r&&!d.call(h,p)||(n[p]=h[p]);return n}:s},function(e,t,n){n(129),e.exports=n(3).Array.findIndex},function(e,t,n){"use strict";var r=n(2),o=n(76)(6),i="findIndex",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){var r=n(131);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(8),o=n(77),i=n(4)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){n(133),e.exports=n(3).Array.find},function(e,t,n){"use strict";var r=n(2),o=n(76)(5),i="find",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){n(135),n(138),e.exports=n(3).Array.from},function(e,t,n){"use strict";var r=n(78)(!0);n(136)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r=n(28),o=n(2),i=n(27),a=n(23),l=n(55),u=n(137),s=n(44),c=n(45),f=n(4)("iterator"),d=!([].keys&&"next"in[].keys()),p="keys",h="values",m=function(){return this};e.exports=function(e,t,n,v,y,g,b){u(n,t,v);var w,T,E,k=function(e){if(!d&&e in _)return _[e];switch(e){case p:case h:return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",S=y==h,C=!1,_=e.prototype,P=_[f]||_["@@iterator"]||y&&_[y],O=P||k(y),R=y?S?k("entries"):O:void 0,I="Array"==t&&_.entries||P;if(I&&(E=c(I.call(new e)))!==Object.prototype&&E.next&&(s(E,x,!0),r||"function"==typeof E[f]||a(E,f,m)),S&&P&&P.name!==h&&(C=!0,O=function(){return P.call(this)}),r&&!b||!d&&!C&&_[f]||a(_,f,O),l[t]=O,l[x]=m,y)if(w={values:S?O:k(h),keys:g?O:k(p),entries:R},b)for(T in w)T in _||i(_,T,w[T]);else o(o.P+o.F*(d||C),t,w);return w}},function(e,t,n){"use strict";var r=n(43),o=n(33),i=n(44),a={};n(23)(a,n(4)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){"use strict";var r=n(25),o=n(2),i=n(14),a=n(81),l=n(82),u=n(19),s=n(83),c=n(84);o(o.S+o.F*!n(85)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,o,f,d=i(e),p="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,g=c(d);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),null==g||p==Array&&l(g))for(n=new p(t=u(d.length));t>y;y++)s(n,y,v?m(d[y],y):d[y]);else for(f=g.call(d),n=new p;!(o=f.next()).done;y++)s(n,y,v?a(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){n(86),e.exports=n(3).Object.entries},function(e,t,n){n(88),e.exports=n(3).Object.values},function(e,t,n){n(89),e.exports=n(3).Object.is},function(e,t,n){n(143),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(154),n(155),n(156),n(157),n(158),n(74),n(89),n(159),n(161),n(162),n(88),n(86),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),e.exports=n(3).Object},function(e,t,n){"use strict";var r=n(9),o=n(24),i=n(10),a=n(2),l=n(27),u=n(46).KEY,s=n(16),c=n(41),f=n(44),d=n(34),p=n(4),h=n(91),m=n(144),v=n(145),y=n(77),g=n(11),b=n(8),w=n(14),T=n(18),E=n(32),k=n(33),x=n(43),S=n(92),C=n(26),_=n(42),P=n(13),O=n(31),R=C.f,I=P.f,N=S.f,D=r.Symbol,M=r.JSON,A=M&&M.stringify,F="prototype",L=p("_hidden"),j=p("toPrimitive"),z={}.propertyIsEnumerable,U=c("symbol-registry"),B=c("symbols"),W=c("op-symbols"),V=Object[F],H="function"==typeof D&&!!_.f,q=r.QObject,$=!q||!q[F]||!q[F].findChild,Q=i&&s((function(){return 7!=x(I({},"a",{get:function(){return I(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=R(V,t);r&&delete V[t],I(e,t,n),r&&e!==V&&I(V,t,r)}:I,G=function(e){var t=B[e]=x(D[F]);return t._k=e,t},Y=H&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},K=function(e,t,n){return e===V&&K(W,t,n),g(e),t=E(t,!0),g(n),o(B,t)?(n.enumerable?(o(e,L)&&e[L][t]&&(e[L][t]=!1),n=x(n,{enumerable:k(0,!1)})):(o(e,L)||I(e,L,k(1,{})),e[L][t]=!0),Q(e,t,n)):I(e,t,n)},X=function(e,t){g(e);for(var n,r=v(t=T(t)),o=0,i=r.length;i>o;)K(e,n=r[o++],t[n]);return e},Z=function(e){var t=z.call(this,e=E(e,!0));return!(this===V&&o(B,e)&&!o(W,e))&&(!(t||!o(this,e)||!o(B,e)||o(this,L)&&this[L][e])||t)},J=function(e,t){if(e=T(e),t=E(t,!0),e!==V||!o(B,t)||o(W,t)){var n=R(e,t);return!n||!o(B,t)||o(e,L)&&e[L][t]||(n.enumerable=!0),n}},ee=function(e){for(var t,n=N(T(e)),r=[],i=0;n.length>i;)o(B,t=n[i++])||t==L||t==u||r.push(t);return r},te=function(e){for(var t,n=e===V,r=N(n?W:T(e)),i=[],a=0;r.length>a;)!o(B,t=r[a++])||n&&!o(V,t)||i.push(B[t]);return i};H||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===V&&t.call(W,n),o(this,L)&&o(this[L],e)&&(this[L][e]=!1),Q(this,e,k(1,n))};return i&&$&&Q(V,e,{configurable:!0,set:t}),G(e)},l(D[F],"toString",(function(){return this._k})),C.f=J,P.f=K,n(56).f=S.f=ee,n(36).f=Z,_.f=te,i&&!n(28)&&l(V,"propertyIsEnumerable",Z,!0),h.f=function(e){return G(p(e))}),a(a.G+a.W+a.F*!H,{Symbol:D});for(var ne="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ne.length>re;)p(ne[re++]);for(var oe=O(p.store),ie=0;oe.length>ie;)m(oe[ie++]);a(a.S+a.F*!H,"Symbol",{for:function(e){return o(U,e+="")?U[e]:U[e]=D(e)},keyFor:function(e){if(!Y(e))throw TypeError(e+" is not a symbol!");for(var t in U)if(U[t]===e)return t},useSetter:function(){$=!0},useSimple:function(){$=!1}}),a(a.S+a.F*!H,"Object",{create:function(e,t){return void 0===t?x(e):X(x(e),t)},defineProperty:K,defineProperties:X,getOwnPropertyDescriptor:J,getOwnPropertyNames:ee,getOwnPropertySymbols:te});var ae=s((function(){_.f(1)}));a(a.S+a.F*ae,"Object",{getOwnPropertySymbols:function(e){return _.f(w(e))}}),M&&a(a.S+a.F*(!H||s((function(){var e=D();return"[null]"!=A([e])||"{}"!=A({a:e})||"{}"!=A(Object(e))}))),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(b(t)||void 0!==e)&&!Y(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Y(t))return t}),r[1]=t,A.apply(M,r)}}),D[F][j]||n(23)(D[F],j,D[F].valueOf),f(D,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(9),o=n(3),i=n(28),a=n(91),l=n(13).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||l(t,e,{value:a.f(e)})}},function(e,t,n){var r=n(31),o=n(42),i=n(36);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,l=n(e),u=i.f,s=0;l.length>s;)u.call(e,a=l[s++])&&t.push(a);return t}},function(e,t,n){var r=n(2);r(r.S,"Object",{create:n(43)})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperty:n(13).f})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperties:n(79)})},function(e,t,n){var r=n(18),o=n(26).f;n(17)("getOwnPropertyDescriptor",(function(){return function(e,t){return o(r(e),t)}}))},function(e,t,n){var r=n(14),o=n(45);n(17)("getPrototypeOf",(function(){return function(e){return o(r(e))}}))},function(e,t,n){var r=n(14),o=n(31);n(17)("keys",(function(){return function(e){return o(r(e))}}))},function(e,t,n){n(17)("getOwnPropertyNames",(function(){return n(92).f}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("freeze",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("seal",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("preventExtensions",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8);n(17)("isFrozen",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isSealed",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isExtensible",(function(e){return function(t){return!!r(t)&&(!e||e(t))}}))},function(e,t,n){var r=n(2);r(r.S,"Object",{setPrototypeOf:n(160).set})},function(e,t,n){var r=n(8),o=n(11),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n(25)(Function.call,n(26).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},function(e,t,n){"use strict";var r=n(37),o={};o[n(4)("toStringTag")]="z",o+""!="[object z]"&&n(27)(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},function(e,t,n){var r=n(2),o=n(93),i=n(18),a=n(26),l=n(83);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),u=a.f,s=o(r),c={},f=0;s.length>f;)void 0!==(n=u(r,t=s[f++]))&&l(c,t,n);return c}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(29),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineGetter__:function(e,t){a.f(o(this),e,{get:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(29),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineSetter__:function(e,t){a.f(o(this),e,{set:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(32),a=n(45),l=n(26).f;n(10)&&r(r.P+n(47),"Object",{__lookupGetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.get}while(n=a(n))}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(32),a=n(45),l=n(26).f;n(10)&&r(r.P+n(47),"Object",{__lookupSetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.set}while(n=a(n))}})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{isObject:n(8)})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{classof:n(37)})},function(e,t,n){var r=n(2),o=n(94);r(r.S+r.F,"Object",{define:o})},function(e,t,n){var r=n(2),o=n(94),i=n(43);r(r.S+r.F,"Object",{make:function(e,t){return o(i(e),t)}})},function(e,t,n){n(172),e.exports=n(3).String.startsWith},function(e,t,n){"use strict";var r=n(2),o=n(19),i=n(173),a="startsWith",l=""[a];r(r.P+r.F*n(174)(a),"String",{startsWith:function(e){var t=i(this,e,a),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return l?l.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){var r=n(95),o=n(21);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(4)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,n){"use strict";n(96),n(182),e.exports=n(3).Promise.finally},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(25),o=n(81),i=n(82),a=n(11),l=n(19),u=n(84),s={},c={};(t=e.exports=function(e,t,n,f,d){var p,h,m,v,y=d?function(){return e}:u(e),g=r(n,f,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=l(e.length);p>b;b++)if((v=t?g(a(h=e[b])[0],h[1]):g(e[b]))===s||v===c)return v}else for(m=y.call(e);!(h=m.next()).done;)if((v=o(m,g,h.value,t))===s||v===c)return v}).BREAK=s,t.RETURN=c},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(9),o=n(97).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,u="process"==n(30)(a);e.exports=function(){var e,t,n,s=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(s)};else if(!i||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var c=l.resolve(void 0);n=function(){c.then(s)}}else n=function(){o.call(r,s)};else{var f=!0,d=document.createTextNode("");new i(s).observe(d,{characterData:!0}),n=function(){d.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){var r=n(27);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";var r=n(9),o=n(13),i=n(10),a=n(4)("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(9),a=n(57),l=n(99);r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,o.Promise||i.Promise),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}})},function(e,t,n){"use strict";n(96),n(184);var r=n(3).Promise,o=r.try;e.exports={try:function(e){return o.call("function"==typeof this?this:r,e)}}.try},function(e,t,n){"use strict";var r=n(2),o=n(58),i=n(98);r(r.S,"Promise",{try:function(e){var t=o.f(this),n=i(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){n(186);var r=n(60);e.exports=function(e){return r.call(e)}},function(e,t,n){n(10)&&"g"!=/./g.flags&&n(13).f(RegExp.prototype,"flags",{configurable:!0,get:n(60)})},function(e,t,n){n(188);var r=n(4)("match");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(19),i=n(61),a=n(48);n(49)("match",1,(function(e,t,n,l){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=l(n,e,this);if(t.done)return t.value;var u=r(e),s=String(this);if(!u.global)return a(u,s);var c=u.unicode;u.lastIndex=0;for(var f,d=[],p=0;null!==(f=a(u,s));){var h=String(f[0]);d[p]=h,""===h&&(u.lastIndex=i(s,o(u.lastIndex),c)),p++}return 0===p?null:d}]}))},function(e,t,n){"use strict";var r=n(62);n(2)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(e,t,n){n(191);var r=n(4)("replace");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(11),o=n(14),i=n(19),a=n(35),l=n(61),u=n(48),s=Math.max,c=Math.min,f=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;n(49)("replace",2,(function(e,t,n,h){return[function(r,o){var i=e(this),a=null==r?void 0:r[t];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},function(e,t){var o=h(n,e,this,t);if(o.done)return o.value;var f=r(e),d=String(this),p="function"==typeof t;p||(t=String(t));var v=f.global;if(v){var y=f.unicode;f.lastIndex=0}for(var g=[];;){var b=u(f,d);if(null===b)break;if(g.push(b),!v)break;""===String(b[0])&&(f.lastIndex=l(d,i(f.lastIndex),y))}for(var w,T="",E=0,k=0;k=E&&(T+=d.slice(E,S)+R,E=S+x.length)}return T+d.slice(E)}];function m(e,t,r,i,a,l){var u=r+e.length,s=i.length,c=p;return void 0!==a&&(a=o(a),c=d),n.call(l,c,(function(n,o){var l;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,r);case"'":return t.slice(u);case"<":l=a[o.slice(1,-1)];break;default:var c=+o;if(0===c)return n;if(c>s){var d=f(c/10);return 0===d?n:d<=s?void 0===i[d-1]?o.charAt(1):i[d-1]+o.charAt(1):n}l=i[c-1]}return void 0===l?"":l}))}}))},function(e,t,n){n(193);var r=n(4)("search");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(90),i=n(48);n(49)("search",1,(function(e,t,n,a){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=a(n,e,this);if(t.done)return t.value;var l=r(e),u=String(this),s=l.lastIndex;o(s,0)||(l.lastIndex=0);var c=i(l,u);return o(l.lastIndex,s)||(l.lastIndex=s),null===c?-1:c.index}]}))},function(e,t,n){n(195);var r=n(4)("split");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(95),o=n(11),i=n(57),a=n(61),l=n(19),u=n(48),s=n(62),c=n(16),f=Math.min,d=[].push,p="split",h="length",m="lastIndex",v=4294967295,y=!c((function(){RegExp(v,"y")}));n(49)("split",2,(function(e,t,n,c){var g;return g="c"=="abbc"[p](/(b)*/)[1]||4!="test"[p](/(?:)/,-1)[h]||2!="ab"[p](/(?:ab)*/)[h]||4!="."[p](/(.?)(.?)/)[h]||"."[p](/()()/)[h]>1||""[p](/.?/)[h]?function(e,t){var o=String(this);if(void 0===e&&0===t)return[];if(!r(e))return n.call(o,e,t);for(var i,a,l,u=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,p=void 0===t?v:t>>>0,y=new RegExp(e.source,c+"g");(i=s.call(y,o))&&!((a=y[m])>f&&(u.push(o.slice(f,i.index)),i[h]>1&&i.index=p));)y[m]===i.index&&y[m]++;return f===o[h]?!l&&y.test("")||u.push(""):u.push(o.slice(f)),u[h]>p?u.slice(0,p):u}:"0"[p](void 0,0)[h]?function(e,t){return void 0===e&&0===t?[]:n.call(this,e,t)}:n,[function(n,r){var o=e(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):g.call(String(o),n,r)},function(e,t){var r=c(g,e,this,t,g!==n);if(r.done)return r.value;var s=o(e),d=String(this),p=i(s,RegExp),h=s.unicode,m=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(y?"y":"g"),b=new p(y?s:"^(?:"+s.source+")",m),w=void 0===t?v:t>>>0;if(0===w)return[];if(0===d.length)return null===u(b,d)?[d]:[];for(var T=0,E=0,k=[];E1?arguments[1]:void 0,!1)}})},function(e,t,n){"use strict";var r=n(35),o=n(21);e.exports=function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t,n){n(200),e.exports=n(3).String.padStart},function(e,t,n){"use strict";var r=n(2),o=n(100),i=n(59),a=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i);r(r.P+r.F*a,"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){n(202),e.exports=n(3).String.trimRight},function(e,t,n){"use strict";n(101)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,t){e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(e,t,n){n(205),e.exports=n(3).String.trimLeft},function(e,t,n){"use strict";n(101)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,t,n){n(207),e.exports=n(3).Number.isNaN},function(e,t,n){var r=n(2);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){(function(e){!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},r=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},o=function(e){return decodeURIComponent(String(e).replace(/\+/g," "))};(function(){try{var t=e.URLSearchParams;return"a=1"===new t("?a=1").toString()&&"function"==typeof t.prototype.set&&"function"==typeof t.prototype.entries}catch(e){return!1}})()||function(){var o=function(e){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var t=typeof e;if("undefined"===t);else if("string"===t)""!==e&&this._fromString(e);else if(e instanceof o){var n=this;e.forEach((function(e,t){n.append(t,e)}))}else{if(null===e||"object"!==t)throw new TypeError("Unsupported input's type for URLSearchParams");if("[object Array]"===Object.prototype.toString.call(e))for(var r=0;rt[0]?1:0})),e._entries&&(e._entries={});for(var n=0;n1?o(r[1]):"")}})}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this),function(e){if(function(){try{var t=new e.URL("b","http://a");return t.pathname="c d","http://a/c%20d"===t.href&&t.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t)),n&&"string"!=typeof n&&(n=String(n));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){n=n.toLowerCase(),(r=(o=document.implementation.createHTMLDocument("")).createElement("base")).href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var i=o.createElement("a");i.href=t,r&&(o.body.appendChild(i),i.href=i.href);var a=o.createElement("input");if(a.type="url",a.value=t,":"===i.protocol||!/:/.test(i.href)||!a.checkValidity()&&!n)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:i});var l=new e.URLSearchParams(this.search),u=!0,s=!0,c=this;["append","delete","set"].forEach((function(e){var t=l[e];l[e]=function(){t.apply(l,arguments),u&&(s=!1,c.search=l.toString(),s=!0)}})),Object.defineProperty(this,"searchParams",{value:l,enumerable:!0});var f=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==f&&(f=this.search,s&&(u=!1,this.searchParams._fromString(this.search),u=!0))}})},r=n.prototype;["hash","host","hostname","port","protocol"].forEach((function(e){!function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)})),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval((function(){e.location.origin=t()}),100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this)}).call(t,n(103))},function(e,t){!function(){"use strict";if("object"==typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var e=function(e){for(var t=window.document,n=o(t);n;)n=o(t=n.ownerDocument);return t}(),t=[],n=null,r=null;a.prototype.THROTTLE_TIMEOUT=100,a.prototype.POLL_INTERVAL=null,a.prototype.USE_MUTATION_OBSERVER=!0,a._setupCrossOriginUpdater=function(){return n||(n=function(e,n){r=e&&n?f(e,n):{top:0,bottom:0,left:0,right:0,width:0,height:0},t.forEach((function(e){e._checkForIntersections()}))}),n},a._resetCrossOriginUpdater=function(){n=null,r=null},a.prototype.observe=function(e){if(!this._observationTargets.some((function(t){return t.element==e}))){if(!e||1!=e.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:e,entry:null}),this._monitorIntersections(e.ownerDocument),this._checkForIntersections()}},a.prototype.unobserve=function(e){this._observationTargets=this._observationTargets.filter((function(t){return t.element!=e})),this._unmonitorIntersections(e.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},a.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},a.prototype.takeRecords=function(){var e=this._queuedEntries.slice();return this._queuedEntries=[],e},a.prototype._initThresholds=function(e){var t=e||[0];return Array.isArray(t)||(t=[t]),t.sort().filter((function(e,t,n){if("number"!=typeof e||isNaN(e)||e<0||e>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return e!==n[t-1]}))},a.prototype._parseRootMargin=function(e){var t=(e||"0px").split(/\s+/).map((function(e){var t=/^(-?\d*\.?\d+)(px|%)$/.exec(e);if(!t)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(t[1]),unit:t[2]}}));return t[1]=t[1]||t[0],t[2]=t[2]||t[0],t[3]=t[3]||t[1],t},a.prototype._monitorIntersections=function(t){var n=t.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(t)){var r=this._checkForIntersections,i=null,a=null;if(this.POLL_INTERVAL?i=n.setInterval(r,this.POLL_INTERVAL):(l(n,"resize",r,!0),l(t,"scroll",r,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(a=new n.MutationObserver(r)).observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(t),this._monitoringUnsubscribes.push((function(){var e=t.defaultView;e&&(i&&e.clearInterval(i),u(e,"resize",r,!0)),u(t,"scroll",r,!0),a&&a.disconnect()})),t!=(this.root&&this.root.ownerDocument||e)){var s=o(t);s&&this._monitorIntersections(s.ownerDocument)}}},a.prototype._unmonitorIntersections=function(t){var n=this._monitoringDocuments.indexOf(t);if(-1!=n){var r=this.root&&this.root.ownerDocument||e,i=this._observationTargets.some((function(e){var n=e.element.ownerDocument;if(n==t)return!0;for(;n&&n!=r;){var i=o(n);if((n=i&&i.ownerDocument)==t)return!0}return!1}));if(!i){var a=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),a(),t!=r){var l=o(t);l&&this._unmonitorIntersections(l.ownerDocument)}}}},a.prototype._unmonitorAllIntersections=function(){var e=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var t=0;t=0&&v>=0&&{top:u,bottom:c,left:d,right:h,width:m,height:v}||null),!y)break;g=g&&p(g)}return y}},a.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var n=e.documentElement,r=e.body;t={top:0,left:0,right:n.clientWidth||r.clientWidth,width:n.clientWidth||r.clientWidth,bottom:n.clientHeight||r.clientHeight,height:n.clientHeight||r.clientHeight}}return this._expandRectByRootMargin(t)},a.prototype._expandRectByRootMargin=function(e){var t=this._rootMarginValues.map((function(t,n){return"px"==t.unit?t.value:t.value*(n%2?e.width:e.height)/100})),n={top:e.top-t[0],right:e.right+t[1],bottom:e.bottom+t[2],left:e.left-t[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},a.prototype._hasCrossedThreshold=function(e,t){var n=e&&e.isIntersecting?e.intersectionRatio||0:-1,r=t.isIntersecting?t.intersectionRatio||0:-1;if(n!==r)for(var o=0;o=_.DESKTOP_MIN_WIDTH,we=z.toLowerCase().trim()===_.FILTER_TYPES.XOR,Te=fe===_.LAYOUT_CONTAINER.CAROUSEL,Ee=fe!==_.LAYOUT_CONTAINER.CAROUSEL,ke=fe===_.LAYOUT_CONTAINER.CATEGORIES,xe=n("filterPanel","categories"),Se=ke?(Y=xe,K=j.filter((function(e){return e.id.includes("caas:product-categories")})).map((function(e){return e.id})).map((function(e){return Y&&Y.filter((function(t){return t.id===e}))[0]})),[{group:"All Topics",title:"All Topics",id:"",items:[]}].concat(N(K))):[],Ce=(0,i.useState)([]),_e=o(Ce,2),Pe=_e[0],Oe=(_e[1],(0,i.useState)(0)),Re=o(Oe,2),Ie=(Re[0],Re[1],a.default.useState()),Ne=o(Ie,2)[1],De=(0,i.useRef)(null),Me=a.default.useCallback((function(){return Ne({})}),[]),Ae=(0,S.useURLState)(),Fe=o(Ae,3),Le=Fe[0],je=Fe[1],ze=Fe[2],Ue=(0,i.useState)(null),Be=o(Ue,2),We=Be[0],Ve=Be[1],He=(0,i.useState)((0,p.readBookmarksFromLocalStorage)()),qe=o(He,2),$e=qe[0],Qe=qe[1],Ge=(0,i.useState)((0,p.readInclusionsFromLocalStorage)()),Ye=o(Ge,1)[0],Ke=(0,i.useState)(+Le.page||1),Xe=o(Ke,2),Ze=Xe[0],Je=Xe[1],et=(0,i.useState)([]),tt=o(et,2),nt=tt[0],rt=tt[1],ot=(0,i.useState)([]),it=o(ot,2),at=it[0],lt=it[1],ut=(0,i.useState)(""),st=o(ut,2),ct=st[0],ft=st[1],dt=(0,i.useState)(""),pt=o(dt,2),ht=pt[0],mt=pt[1],vt=(0,i.useState)(!1),yt=o(vt,2),gt=yt[0],bt=yt[1],wt=(0,i.useState)($),Tt=o(wt,2),Et=Tt[0],kt=Tt[1];Et.sort===_.SORT_TYPES.RANDOM&&(U=B);var xt=(0,S.useWindowDimensions)().width,St=(0,i.useState)(!1),Ct=o(St,2),_t=Ct[0],Pt=Ct[1],Ot=(0,i.useState)(!1),Rt=o(Ot,2),It=Rt[0],Nt=Rt[1],Dt=(0,i.useState)("top"===D),Mt=o(Dt,2),At=Mt[0],Ft=Mt[1],Lt=(0,i.useState)([]),jt=o(Lt,2),zt=jt[0],Ut=jt[1],Bt=(0,i.useState)(!1),Wt=o(Bt,2),Vt=Wt[0],Ht=Wt[1],qt=(0,i.useState)(!1),$t=o(qt,2),Qt=$t[0],Gt=$t[1],Yt=(0,i.useState)(null),Kt=o(Yt,2),Xt=Kt[0],Zt=Kt[1],Jt=(0,i.useState)(!0),en=o(Jt,2),tn=en[0],nn=en[1],rn=(0,i.useState)(),on=o(rn,2),an=on[0],ln=on[1],un=(0,i.useState)(!1),sn=o(un,2),cn=sn[0],fn=sn[1],dn=(0,i.createRef)(),pn=(0,i.createRef)();function hn(e){for(var t=e.length;"/"!==e[t]&&t>=0;)t--;return[e.substring(0,t),e.substring(t+1)]}function mn(e,t){if(!e)return"";for(var n=Math.pow(10,t)+7,r=0,o=1,i=0;i1&&void 0!==arguments[1]?arguments[1]:"";rt((function(t){var n=function(e,t){return t.map((function(t){return t.id!==e?t:r({},t,{items:t.items.map((function(e){return r({},e,{selected:!1})}))})}))}(e,t);return n}));var n=new URLSearchParams(window.location.search);ze(),n.forEach((function(n,r){var o=r.toLowerCase().replace("ch_","").replace(/ /g,"-");(0===r.indexOf(u)||e.toLowerCase().includes(o))&&t.toLowerCase().replace(/ /g,"-").includes(o)||je(r,n.replace(/%20/g," "))}))},yn=function(){rt((function(e){return e.map((function(e){return r({},e,{items:e.items.map((function(e){return r({},e,{selected:!1})}))})}))}));var e=new URLSearchParams(window.location.search);ze(),e.forEach((function(e,t){0!==t.indexOf(u)&&je(t,e)}))},gn=function(){yn(),ft("");var e=new URLSearchParams(window.location.search);ze(),e.forEach((function(e,t){-1===t.indexOf(u)&&-1===t.indexOf(h)&&je(t,e)})),Nt(!1)},bn=function(e){kt(e),bt(!1),nn(!1)},wn=function(e){ft(e),Je(1),je(h,e)},Tn=function(e){rt((function(t){var n=void 0;return t.map((function(t){return n=t.id===e?!t.opened:t.opened,r({},t,{opened:n})}))}))},En=function(e,t,n){we&&n&&yn(),rt((function(n){return n.map((function(n){return n.id!==e?n:r({},n,{items:n.items.map((function(e){return r({},e,{selected:e.id===t?!e.selected:e.selected})}))})}))})),Je(1),function(e,t,n){var r=nt.find((function(t){return t.id===e})),o=r.group,i=r.items.find((function(e){return e.id===t})).label,a=Le[u+o]||[];"string"==typeof a&&(a=a.split(","));var l=n?[].concat(N(a),[i]):a.filter((function(e){return e!==i}));je(u+o,l)}(e,t,n)},kn=function(){return Pt((function(e){return!e}))},xn=function(e){var t=$e.find((function(t){return t===e}));Qe(t?function(t){return t.filter((function(t){return t!==e}))}:function(t){return[].concat(N(t),[e])})},Sn=function(e){"Escape"!==e.key&&"Esc"!==e.key||Pt(!1)};(0,i.useEffect)((function(){rt(j.map((function(e){return r({},e,{opened:!!be&&e.openedOnLoad,items:e.items.map((function(e){return r({},e,{selected:!1})}))})})))}),[]),(0,i.useEffect)((function(){rt((function(e){return e.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))}));var e=Le[h];e&&ft(e[0])}),[]),(0,i.useEffect)((function(){Zt(Math.floor(1e13*Math.random()))}),[]),(0,i.useEffect)((function(){je("page",1===Ze?"":Ze)}),[Ze]);(0,i.useEffect)((function(){if(!(ie&&an||ie&&!cn)){var e,t=window.__satelliteLoadedPromise,i=n("collection","endpoint"),a=n("collection","fallbackEndpoint"),l=void 0;l=new RegExp("^(?:[a-z]+:)?//","i").test(i)?new URL(i):new URL(i,window.location.origin),a||(l.searchParams.set("flatFile",!1),i=l.toString()),Ht(!0),ue&&t&&f(t),ue&&!t&&(e=0,function t(){setTimeout((function(){if(e>=20)return Ht(!1),void Gt(!0);var n=window.__satelliteLoadedPromise;n&&f(n),!n&&e<20&&t(),e+=1}),100)}()),ue||c()}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i,t=Date.now();return window.fetch(e,{credentials:"include",headers:ge}).then((function(t){var n=t.ok,r=t.status,o=t.statusText,i=t.url;return n?t.json().then((function(t){return Object.keys(t).length?t:((0,s.logLana)({message:"no valid response data from "+e,tags:"collection"}),Promise.reject(new Error("no valid reponse data")))})):((0,s.logLana)({message:"failure for call to "+i,tags:"collection",errorMessage:r+": "+o}),Promise.reject(new Error(r+": "+o+", failure for call to "+i)))})).then((function(n){if((0,s.logLana)({message:"response took "+(Date.now()-t)/1e3+"s",tags:"collection"}),Ht(!1),nn(!0),(0,p.getByPath)(n,"cards.length")){if(n.isHashed){var i=!0,a=!1,l=void 0;try{for(var c,f=j[Symbol.iterator]();!(i=(c=f.next()).done);i=!0){var d=c.value;d.id=mn(d.id,6);var h=!0,m=!1,v=void 0;try{for(var y,g=d.items[Symbol.iterator]();!(h=(y=g.next()).done);h=!0){var b=y.value,w=hn(b.id),T=o(w,2),E=T[0],k=T[1];b.id=mn(E,6)+"/"+mn(k,6)}}catch(e){m=!0,v=e}finally{try{!h&&g.return&&g.return()}finally{if(m)throw v}}}}catch(e){a=!0,l=e}finally{try{!i&&f.return&&f.return()}finally{if(a)throw l}}var S=[],C=!0,P=!1,O=void 0;try{for(var R,I=X[Symbol.iterator]();!(C=(R=I.next()).done);C=!0){var D=hn(R.value),M=o(D,2);E=M[0],k=M[1];""!==E&&""!==k&&S.push(mn(E,6)+"/"+mn(k,6))}}catch(e){P=!0,O=e}finally{try{!C&&I.return&&I.return()}finally{if(P)throw O}}X=S}var A=new x.default(n.cards).removeDuplicateCards().addCardMetaData(_.TRUNCATE_TEXT_QTY,L,$e,G,X).processedCards,z=void 0===A?[]:A;rt(ke?function(e){return e.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))}:function(){return j.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))});var U=(0,p.getTransitions)(z);if("eventsort"===Et.sort.toLowerCase())for(;U.size()>0;)setTimeout((function(){Me()}),U.dequeue().priority+_.ONE_SECOND_DELAY);Ut(z),de||rt((function(e){return t=e,n=z,i=(o=[]).concat.apply(o,N(n.map((function(e){return e.tags.map((function(e){return e.id}))})))),a=[_.EVENT_TIMING_IDS.LIVE,_.EVENT_TIMING_IDS.ONDEMAND,_.EVENT_TIMING_IDS.UPCOMING],t.map((function(e){return r({},e,{items:e.items.filter((function(e){return i.includes(e.id)||i.includes(e.label)||i.toString().includes("/"+e.id)||a.includes(e.id)}))})})).filter((function(e){return e.items.length>0}));var t,n,o,i,a})),setTimeout((function(){if(De.current&&0!==z.length&&1!==Ze){var e=z.slice(0,F*Ze),t=F*Ze-F;if(!(e.length0,Bn=nt.length>0&&xt<_.TABLET_MIN_WIDTH?_.SORT_POPUP_LOCATION.LEFT:_.SORT_POPUP_LOCATION.RIGHT,Wn=be?_.PAGINATION_COUNT.DESKTOP:_.PAGINATION_COUNT.MOBILE,Vn=D===_.FILTER_PANEL.TOP,Hn=D===_.FILTER_PANEL.LEFT,qn=I||he||me||A,$n="";nt.forEach((function(e){e.items.filter((function(e){return e.selected})).forEach((function(e){$n+=e.label+", "}))}));var Qn=(0,l.default)({"consonant-u-themeLight":ce===_.THEME_TYPE.LIGHT,"consonant-u-themeDark":ce===_.THEME_TYPE.DARK,"consonant-u-themeDarkest":ce===_.THEME_TYPE.DARKEST});function Gn(){if(!Se)return[];var e=[],t=!0,n=!1,r=void 0;try{for(var o,i=Se[Symbol.iterator]();!(t=(o=i.next()).done);t=!0){var a=o.value;if(a&&a.items){var l=!0,u=!1,s=void 0;try{for(var c,f=a.items[Symbol.iterator]();!(l=(c=f.next()).done);l=!0){c.value.fromCategory=!0}}catch(e){u=!0,s=e}finally{try{!l&&f.return&&f.return()}finally{if(u)throw s}}e=e.concat(a.items)}}}catch(e){n=!0,r=e}finally{try{!t&&i.return&&i.return()}finally{if(n)throw r}}return{group:"All products",id:"caas:all-products",items:e}}function Yn(e){return j.filter((function(t){return t.id===e.id})).map((function(e){return e.icon})).toString()||e.icon||""}var Kn=(le?le+" | ":"")+"Card Collection | Filters: "+(An?$n:"No Filters")+"| Search Query: "+(ct||"None"),Xn=(0,l.default)({"consonant-Wrapper":!0,"consonant-Wrapper--32MarginContainer":fe===_.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,"consonant-Wrapper--83PercentContainier":fe===_.LAYOUT_CONTAINER.SIZE_83_VW,"consonant-Wrapper--1200MaxWidth":fe===_.LAYOUT_CONTAINER.SIZE_1200_PX,"consonant-Wrapper--1600MaxWidth":fe===_.LAYOUT_CONTAINER.SIZE_1600_PX,"consonant-Wrapper--1200MaxWidth Categories":ke,"consonant-Wrapper--carousel":Te,"consonant-Wrapper--withLeftFilter":I&&Hn});return(0,i.useEffect)((function(){ke&&rt((function(e){return e.concat(Gn())}))}),[]),a.default.createElement(P.ConfigContext.Provider,{value:t},a.default.createElement(P.ExpandableContext.Provider,{value:{value:We,setValue:Ve}},a.default.createElement("section",{ref:Cn,role:"group","aria-label":ye,"daa-lh":Kn,"daa-im":String(ae),onClick:function(){Ve(null)},className:Xn+" "+Qn},a.default.createElement("div",{className:"consonant-Wrapper-inner"},ke&&a.default.createElement(i.Fragment,null,a.default.createElement("h2",{"data-testid":"consonant-TopFilters-categoriesTitle",className:"consonant-TopFilters-categoriesTitle"},ye),a.default.createElement("div",{className:"filters-category"},Se.map((function(e){if(!e)return null;var t="";return e.id===ht&&(t="selected"),a.default.createElement("button",{onClick:function(){!function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,l=e[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;n.push(u.id)}}catch(e){o=!0,i=e}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}lt(n),rt((function(e){e.pop();var n=Se.filter((function(e){return e.id===t}))[0];return n.items.length?(e.push(n),e):e.concat(Gn())})),mt(t),Je(1)}(e.items,e.id)},"data-selected":t,"data-group":e.group.replaceAll(" ","").toLowerCase()},a.default.createElement("img",{className:"filters-category--icon",src:Yn(e),alt:e.icon&&"Category icon"}),e.title)})))),zn&&Ee&&a.default.createElement("div",{className:"consonant-Wrapper-leftFilterWrapper"},a.default.createElement(k.default,{filters:nt,selectedFiltersQty:An,windowWidth:xt,onFilterClick:Tn,onClearAllFilters:gn,onClearFilterItems:vn,onCheckboxClick:En,onMobileFiltersToggleClick:kn,onSelectedFilterClick:En,showMobileFilters:_t,resQty:Nn.length,bookmarkComponent:a.default.createElement(g.default,{showBookmarks:It,onClick:function(e){e.stopPropagation(),Nt((function(e){return!e})),Je(1)},savedCardsCount:$e.length}),searchComponent:a.default.createElement(f.default,{placeholderText:Z,name:"filtersSideSearch",value:ct,autofocus:!1,onSearch:wn}),ref:dn})),a.default.createElement("div",{className:"consonant-Wrapper-collection"+(Vt?" is-loading":"")},Vn&&Ee&&a.default.createElement(E.default,{filterPanelEnabled:I,filters:nt,windowWidth:xt,resQty:Nn.length,onCheckboxClick:En,onFilterClick:Tn,onClearFilterItems:vn,categories:at,onClearAllFilters:gn,showLimitedFiltersQty:At,searchComponent:a.default.createElement(f.default,{placeholderText:J,name:"filtersTopSearch",value:ct,autofocus:be,onSearch:wn}),sortComponent:a.default.createElement(c.default,{opened:gt,id:"sort",val:Et,values:H,onSelect:bn,name:"filtersTopSelect",autoWidth:!0,optionsAlignment:Bn}),onShowAllClick:function(){Ft((function(e){return!e}))}}),Hn&&Ee&&a.default.createElement(C.Info,{enabled:I,filtersQty:nt.length,filters:nt,cardsQty:Nn.length,selectedFiltersQty:An,windowWidth:xt,onMobileFiltersToggleClick:kn,searchComponent:a.default.createElement(f.default,{placeholderText:ee,name:"searchFiltersInfo",value:ct,autofocus:!1,onSearch:wn}),sortComponent:a.default.createElement(c.default,{opened:gt,id:"sort",val:Et,values:H,onSelect:bn,autoWidth:!1,optionsAlignment:"right"}),sortOptions:H,ref:pn}),Un&&Ee&&a.default.createElement(i.Fragment,null,a.default.createElement(w.default,{resultsPerPage:F,pages:Ze,cards:Nn,forwardedRef:De,onCardBookmark:xn,isAriaLiveActive:qn}),Ln&&a.default.createElement(y.default,{onClick:function(){Je((function(e){return e+1})),window.scrollTo(0,window.pageYOffset)},show:Mn,total:Nn.length}),jn&&a.default.createElement(b.default,{pageCount:Wn,currentPageNumber:Ze,totalPages:Dn,showItemsPerPage:F,totalResults:Nn.length,onClick:Je})),Un&&Te&&!("custom-card"===ve)&&a.default.createElement(m.default,{resQty:Nn.length,cards:Nn,role:"tablist",onCardBookmark:xn}),Un&&Te&&"custom-card"===ve&&a.default.createElement(v.default,{title:"Not Supported",description:"Using custom cards within a carousel layout is currently not supported. Please re-author the component",replaceValue:""}),Vt&&!Un&&a.default.createElement(d.default,{size:_.LOADER_SIZE.BIG,hidden:!U,absolute:!0}),!Qt&&!Un&&!Vt&&a.default.createElement(v.default,{title:te,description:ne,replaceValue:ct}),Qt&&a.default.createElement(v.default,{title:re,description:oe,replaceValue:""}))))))};D.propTypes={config:(0,u.shape)(h.configType)},D.defaultProps={config:{}},t.default=D},function(e,t,n){"use strict";(function(t){"production"===t.env.NODE_ENV?e.exports=n(228):e.exports=n(229)}).call(t,n(12))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeConfigGetter=t.getNumSelectedFilterItems=void 0,t.getDefaultSortOption=function(e,t){var n=i(e)("sort","options"),r=o.SORT_TYPES[t.toUpperCase()];return n.find((function(e){return e.sort===t}))||{label:r||"Featured",sort:r||"featured"}};var r=n(6),o=n(15),i=(t.getNumSelectedFilterItems=function(e){var t=(0,r.chainFromIterable)(e.map((function(e){return e.items})));return(0,r.getSelectedItemsCount)(t)},t.makeConfigGetter=function(e){return function(t,n){var i=n?t+"."+n:t,a=(0,r.getByPath)(o.DEFAULT_CONFIG,i),l=(0,r.getByPath)(e,i);return(0,r.isNullish)(l)?a:l}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigContext=t.ExpandableContext=t.noOp=void 0;var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=t.noOp=function(){};t.ExpandableContext=i.default.createContext({value:null,setValue:a}),t.ConfigContext=i.default.createContext({})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t0&&o.default.createElement("div",{ref:m,"data-card-style":y,"data-testid":"consonant-CardsGrid",className:O,role:"tablist","aria-live":h?"polite":"off"},D.map((function(e,t){var n=(0,s.getByPath)(e,"styles.typeOverride"),i=y||n,u=e.contentArea,c=(u=void 0===u?{}:u).title,p=void 0===c?"":c,h=e.id,m=t+1,v=function(e,t){return!(!e.hideCtaId&&!e.hideCtaTags&&"hidden"!==t)}(e,C);return i===d.CARD_STYLES.CUSTOM?(0,l.default)(P(e)):o.default.createElement(f.default,r({cardStyle:i,lh:"Card "+m+" | "+A(p)+" | "+h,key:e.id},e,{bannerMap:R,onClick:a,dateFormat:k,locale:x,renderBorder:w,renderDivider:T,renderOverlay:E,hideCTA:v,onFocus:function(){return function(e){e&&document.getElementById(e).scrollIntoView({block:"nearest"})}(e.id)}}))})))};v.propTypes=h,v.defaultProps=m,t.default=v},function(e,t,n){var r=n(240),o=n(114);function i(e){return r.possibleStandardNames[e]}e.exports=function(e){var t,n,a,l,u,s={},c=(e=e||{}).type&&{reset:!0,submit:!0}[e.type];for(t in e)if(a=e[t],r.isCustomAttribute(t))s[t]=a;else if(l=i(n=t.toLowerCase()))switch(u=r.getPropertyInfo(l),"checked"!==l&&"value"!==l||c||(l=i("default"+n)),s[l]=a,u&&u.type){case r.BOOLEAN:s[l]=!0;break;case r.OVERLOADED_BOOLEAN:""===a&&(s[l]=!0)}else o.PRESERVE_CUSTOM_ATTRIBUTES&&(s[t]=a);return o.setStyleProp(e.style,s),s}},function(e,t,n){var r=n(0),o=n(242).default;var i={reactCompat:!0};var a=r.version.split(".")[0]>=16,l=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:a,invertObject:function(e,t){if(!e||"object"!=typeof e)throw new TypeError("First argument must be an object");var n,r,o="function"==typeof t,i={},a={};for(n in e)r=e[n],o&&(i=t(n,r))&&2===i.length?a[i[0]]=i[1]:"string"==typeof r&&(a[r]=n);return a},isCustomComponent:function(e,t){if(-1===e.indexOf("-"))return t&&"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}},setStyleProp:function(e,t){if(null!=e)try{t.style=o(e,i)}catch(e){t.style={}}},canTextBeChildOfNode:function(e){return!l.has(e.name)},elementsWithNoTextChildren:l}},function(e,t,n){for(var r,o=n(249),i=n(250),a=o.CASE_SENSITIVE_TAG_NAMES,l=i.Comment,u=i.Element,s=i.ProcessingInstruction,c=i.Text,f={},d=0,p=a.length;d0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(u);t.NodeWithChildren=p;var h=function(e){function t(t){return e.call(this,a.ElementType.Root,t)||this}return o(t,e),t}(p);t.Document=h;var m=function(e){function t(t,n,r,o){void 0===r&&(r=[]),void 0===o&&(o="script"===t?a.ElementType.Script:"style"===t?a.ElementType.Style:a.ElementType.Tag);var i=e.call(this,o,r)||this;return i.name=t,i.attribs=n,i}return o(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(p);function v(e){return(0,a.isTag)(e)}function y(e){return e.type===a.ElementType.CDATA}function g(e){return e.type===a.ElementType.Text}function b(e){return e.type===a.ElementType.Comment}function w(e){return e.type===a.ElementType.Directive}function T(e){return e.type===a.ElementType.Root}function E(e,t){var n;if(void 0===t&&(t=!1),g(e))n=new c(e.data);else if(b(e))n=new f(e.data);else if(v(e)){var r=t?k(e.children):[],o=new m(e.name,i({},e.attribs),r);r.forEach((function(e){return e.parent=o})),null!=e.namespace&&(o.namespace=e.namespace),e["x-attribsNamespace"]&&(o["x-attribsNamespace"]=i({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(o["x-attribsPrefix"]=i({},e["x-attribsPrefix"])),n=o}else if(y(e)){r=t?k(e.children):[];var l=new p(a.ElementType.CDATA,r);r.forEach((function(e){return e.parent=l})),n=l}else if(T(e)){r=t?k(e.children):[];var u=new h(r);r.forEach((function(e){return e.parent=u})),e["x-mode"]&&(u["x-mode"]=e["x-mode"]),n=u}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var s=new d(e.name,e.data);null!=e["x-name"]&&(s["x-name"]=e["x-name"],s["x-publicId"]=e["x-publicId"],s["x-systemId"]=e["x-systemId"]),n=s}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function k(e){for(var t=e.map((function(e){return E(e,!0)})),n=1;n0}(e)&&(h=e,d.render(c.default))})),t.default=p},function(e,t,n){"use strict";n(122),n(126),n(128),n(132),n(134),n(139),n(140),n(141),n(142),n(171),n(175),n(183),n(185),n(187),n(190),n(192),n(194),n(196),n(199),n(201),n(204),n(206),n(102),n(208),n(209)},function(e,t,n){n(123),e.exports=n(3).Array.includes},function(e,t,n){"use strict";var r=n(2),o=n(73)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)("includes")},function(e,t,n){e.exports=n(41)("native-function-to-string",Function.toString)},function(e,t,n){var r=n(34),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t,n){n(74),e.exports=n(3).Object.assign},function(e,t,n){"use strict";var r=n(10),o=n(30),i=n(42),a=n(35),l=n(14),u=n(51),s=Object.assign;e.exports=!s||n(16)((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=r}))?function(e,t){for(var n=l(e),s=arguments.length,c=1,f=i.f,d=a.f;s>c;)for(var p,h=u(arguments[c++]),m=f?o(h).concat(f(h)):o(h),v=m.length,y=0;v>y;)p=m[y++],r&&!d.call(h,p)||(n[p]=h[p]);return n}:s},function(e,t,n){n(129),e.exports=n(3).Array.findIndex},function(e,t,n){"use strict";var r=n(2),o=n(76)(6),i="findIndex",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){var r=n(131);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(8),o=n(77),i=n(4)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){n(133),e.exports=n(3).Array.find},function(e,t,n){"use strict";var r=n(2),o=n(76)(5),i="find",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){n(135),n(138),e.exports=n(3).Array.from},function(e,t,n){"use strict";var r=n(78)(!0);n(136)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r=n(27),o=n(2),i=n(26),a=n(22),l=n(55),u=n(137),s=n(44),c=n(45),f=n(4)("iterator"),d=!([].keys&&"next"in[].keys()),p="keys",h="values",m=function(){return this};e.exports=function(e,t,n,v,y,g,b){u(n,t,v);var w,T,E,k=function(e){if(!d&&e in _)return _[e];switch(e){case p:case h:return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",S=y==h,C=!1,_=e.prototype,P=_[f]||_["@@iterator"]||y&&_[y],O=P||k(y),R=y?S?k("entries"):O:void 0,I="Array"==t&&_.entries||P;if(I&&(E=c(I.call(new e)))!==Object.prototype&&E.next&&(s(E,x,!0),r||"function"==typeof E[f]||a(E,f,m)),S&&P&&P.name!==h&&(C=!0,O=function(){return P.call(this)}),r&&!b||!d&&!C&&_[f]||a(_,f,O),l[t]=O,l[x]=m,y)if(w={values:S?O:k(h),keys:g?O:k(p),entries:R},b)for(T in w)T in _||i(_,T,w[T]);else o(o.P+o.F*(d||C),t,w);return w}},function(e,t,n){"use strict";var r=n(43),o=n(32),i=n(44),a={};n(22)(a,n(4)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){"use strict";var r=n(24),o=n(2),i=n(14),a=n(81),l=n(82),u=n(19),s=n(83),c=n(84);o(o.S+o.F*!n(85)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,o,f,d=i(e),p="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,g=c(d);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),null==g||p==Array&&l(g))for(n=new p(t=u(d.length));t>y;y++)s(n,y,v?m(d[y],y):d[y]);else for(f=g.call(d),n=new p;!(o=f.next()).done;y++)s(n,y,v?a(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){n(86),e.exports=n(3).Object.entries},function(e,t,n){n(88),e.exports=n(3).Object.values},function(e,t,n){n(89),e.exports=n(3).Object.is},function(e,t,n){n(143),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(154),n(155),n(156),n(157),n(158),n(74),n(89),n(159),n(161),n(162),n(88),n(86),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),e.exports=n(3).Object},function(e,t,n){"use strict";var r=n(9),o=n(23),i=n(10),a=n(2),l=n(26),u=n(46).KEY,s=n(16),c=n(41),f=n(44),d=n(33),p=n(4),h=n(91),m=n(144),v=n(145),y=n(77),g=n(11),b=n(8),w=n(14),T=n(18),E=n(31),k=n(32),x=n(43),S=n(92),C=n(25),_=n(42),P=n(13),O=n(30),R=C.f,I=P.f,N=S.f,D=r.Symbol,M=r.JSON,A=M&&M.stringify,F="prototype",L=p("_hidden"),j=p("toPrimitive"),z={}.propertyIsEnumerable,U=c("symbol-registry"),B=c("symbols"),W=c("op-symbols"),V=Object[F],H="function"==typeof D&&!!_.f,q=r.QObject,$=!q||!q[F]||!q[F].findChild,Q=i&&s((function(){return 7!=x(I({},"a",{get:function(){return I(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=R(V,t);r&&delete V[t],I(e,t,n),r&&e!==V&&I(V,t,r)}:I,G=function(e){var t=B[e]=x(D[F]);return t._k=e,t},Y=H&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},K=function(e,t,n){return e===V&&K(W,t,n),g(e),t=E(t,!0),g(n),o(B,t)?(n.enumerable?(o(e,L)&&e[L][t]&&(e[L][t]=!1),n=x(n,{enumerable:k(0,!1)})):(o(e,L)||I(e,L,k(1,{})),e[L][t]=!0),Q(e,t,n)):I(e,t,n)},X=function(e,t){g(e);for(var n,r=v(t=T(t)),o=0,i=r.length;i>o;)K(e,n=r[o++],t[n]);return e},Z=function(e){var t=z.call(this,e=E(e,!0));return!(this===V&&o(B,e)&&!o(W,e))&&(!(t||!o(this,e)||!o(B,e)||o(this,L)&&this[L][e])||t)},J=function(e,t){if(e=T(e),t=E(t,!0),e!==V||!o(B,t)||o(W,t)){var n=R(e,t);return!n||!o(B,t)||o(e,L)&&e[L][t]||(n.enumerable=!0),n}},ee=function(e){for(var t,n=N(T(e)),r=[],i=0;n.length>i;)o(B,t=n[i++])||t==L||t==u||r.push(t);return r},te=function(e){for(var t,n=e===V,r=N(n?W:T(e)),i=[],a=0;r.length>a;)!o(B,t=r[a++])||n&&!o(V,t)||i.push(B[t]);return i};H||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===V&&t.call(W,n),o(this,L)&&o(this[L],e)&&(this[L][e]=!1),Q(this,e,k(1,n))};return i&&$&&Q(V,e,{configurable:!0,set:t}),G(e)},l(D[F],"toString",(function(){return this._k})),C.f=J,P.f=K,n(56).f=S.f=ee,n(35).f=Z,_.f=te,i&&!n(27)&&l(V,"propertyIsEnumerable",Z,!0),h.f=function(e){return G(p(e))}),a(a.G+a.W+a.F*!H,{Symbol:D});for(var ne="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ne.length>re;)p(ne[re++]);for(var oe=O(p.store),ie=0;oe.length>ie;)m(oe[ie++]);a(a.S+a.F*!H,"Symbol",{for:function(e){return o(U,e+="")?U[e]:U[e]=D(e)},keyFor:function(e){if(!Y(e))throw TypeError(e+" is not a symbol!");for(var t in U)if(U[t]===e)return t},useSetter:function(){$=!0},useSimple:function(){$=!1}}),a(a.S+a.F*!H,"Object",{create:function(e,t){return void 0===t?x(e):X(x(e),t)},defineProperty:K,defineProperties:X,getOwnPropertyDescriptor:J,getOwnPropertyNames:ee,getOwnPropertySymbols:te});var ae=s((function(){_.f(1)}));a(a.S+a.F*ae,"Object",{getOwnPropertySymbols:function(e){return _.f(w(e))}}),M&&a(a.S+a.F*(!H||s((function(){var e=D();return"[null]"!=A([e])||"{}"!=A({a:e})||"{}"!=A(Object(e))}))),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(b(t)||void 0!==e)&&!Y(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Y(t))return t}),r[1]=t,A.apply(M,r)}}),D[F][j]||n(22)(D[F],j,D[F].valueOf),f(D,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(9),o=n(3),i=n(27),a=n(91),l=n(13).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||l(t,e,{value:a.f(e)})}},function(e,t,n){var r=n(30),o=n(42),i=n(35);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,l=n(e),u=i.f,s=0;l.length>s;)u.call(e,a=l[s++])&&t.push(a);return t}},function(e,t,n){var r=n(2);r(r.S,"Object",{create:n(43)})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperty:n(13).f})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperties:n(79)})},function(e,t,n){var r=n(18),o=n(25).f;n(17)("getOwnPropertyDescriptor",(function(){return function(e,t){return o(r(e),t)}}))},function(e,t,n){var r=n(14),o=n(45);n(17)("getPrototypeOf",(function(){return function(e){return o(r(e))}}))},function(e,t,n){var r=n(14),o=n(30);n(17)("keys",(function(){return function(e){return o(r(e))}}))},function(e,t,n){n(17)("getOwnPropertyNames",(function(){return n(92).f}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("freeze",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("seal",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("preventExtensions",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8);n(17)("isFrozen",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isSealed",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isExtensible",(function(e){return function(t){return!!r(t)&&(!e||e(t))}}))},function(e,t,n){var r=n(2);r(r.S,"Object",{setPrototypeOf:n(160).set})},function(e,t,n){var r=n(8),o=n(11),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n(24)(Function.call,n(25).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},function(e,t,n){"use strict";var r=n(36),o={};o[n(4)("toStringTag")]="z",o+""!="[object z]"&&n(26)(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},function(e,t,n){var r=n(2),o=n(93),i=n(18),a=n(25),l=n(83);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),u=a.f,s=o(r),c={},f=0;s.length>f;)void 0!==(n=u(r,t=s[f++]))&&l(c,t,n);return c}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(28),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineGetter__:function(e,t){a.f(o(this),e,{get:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(28),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineSetter__:function(e,t){a.f(o(this),e,{set:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(31),a=n(45),l=n(25).f;n(10)&&r(r.P+n(47),"Object",{__lookupGetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.get}while(n=a(n))}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(31),a=n(45),l=n(25).f;n(10)&&r(r.P+n(47),"Object",{__lookupSetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.set}while(n=a(n))}})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{isObject:n(8)})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{classof:n(36)})},function(e,t,n){var r=n(2),o=n(94);r(r.S+r.F,"Object",{define:o})},function(e,t,n){var r=n(2),o=n(94),i=n(43);r(r.S+r.F,"Object",{make:function(e,t){return o(i(e),t)}})},function(e,t,n){n(172),e.exports=n(3).String.startsWith},function(e,t,n){"use strict";var r=n(2),o=n(19),i=n(173),a="startsWith",l=""[a];r(r.P+r.F*n(174)(a),"String",{startsWith:function(e){var t=i(this,e,a),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return l?l.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){var r=n(95),o=n(21);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(4)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,n){"use strict";n(96),n(182),e.exports=n(3).Promise.finally},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(24),o=n(81),i=n(82),a=n(11),l=n(19),u=n(84),s={},c={};(t=e.exports=function(e,t,n,f,d){var p,h,m,v,y=d?function(){return e}:u(e),g=r(n,f,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=l(e.length);p>b;b++)if((v=t?g(a(h=e[b])[0],h[1]):g(e[b]))===s||v===c)return v}else for(m=y.call(e);!(h=m.next()).done;)if((v=o(m,g,h.value,t))===s||v===c)return v}).BREAK=s,t.RETURN=c},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(9),o=n(97).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,u="process"==n(29)(a);e.exports=function(){var e,t,n,s=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(s)};else if(!i||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var c=l.resolve(void 0);n=function(){c.then(s)}}else n=function(){o.call(r,s)};else{var f=!0,d=document.createTextNode("");new i(s).observe(d,{characterData:!0}),n=function(){d.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){var r=n(26);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";var r=n(9),o=n(13),i=n(10),a=n(4)("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(9),a=n(57),l=n(99);r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,o.Promise||i.Promise),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}})},function(e,t,n){"use strict";n(96),n(184);var r=n(3).Promise,o=r.try;e.exports={try:function(e){return o.call("function"==typeof this?this:r,e)}}.try},function(e,t,n){"use strict";var r=n(2),o=n(58),i=n(98);r(r.S,"Promise",{try:function(e){var t=o.f(this),n=i(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){n(186);var r=n(60);e.exports=function(e){return r.call(e)}},function(e,t,n){n(10)&&"g"!=/./g.flags&&n(13).f(RegExp.prototype,"flags",{configurable:!0,get:n(60)})},function(e,t,n){n(188);var r=n(4)("match");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(19),i=n(61),a=n(48);n(49)("match",1,(function(e,t,n,l){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=l(n,e,this);if(t.done)return t.value;var u=r(e),s=String(this);if(!u.global)return a(u,s);var c=u.unicode;u.lastIndex=0;for(var f,d=[],p=0;null!==(f=a(u,s));){var h=String(f[0]);d[p]=h,""===h&&(u.lastIndex=i(s,o(u.lastIndex),c)),p++}return 0===p?null:d}]}))},function(e,t,n){"use strict";var r=n(62);n(2)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(e,t,n){n(191);var r=n(4)("replace");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(11),o=n(14),i=n(19),a=n(34),l=n(61),u=n(48),s=Math.max,c=Math.min,f=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;n(49)("replace",2,(function(e,t,n,h){return[function(r,o){var i=e(this),a=null==r?void 0:r[t];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},function(e,t){var o=h(n,e,this,t);if(o.done)return o.value;var f=r(e),d=String(this),p="function"==typeof t;p||(t=String(t));var v=f.global;if(v){var y=f.unicode;f.lastIndex=0}for(var g=[];;){var b=u(f,d);if(null===b)break;if(g.push(b),!v)break;""===String(b[0])&&(f.lastIndex=l(d,i(f.lastIndex),y))}for(var w,T="",E=0,k=0;k=E&&(T+=d.slice(E,S)+R,E=S+x.length)}return T+d.slice(E)}];function m(e,t,r,i,a,l){var u=r+e.length,s=i.length,c=p;return void 0!==a&&(a=o(a),c=d),n.call(l,c,(function(n,o){var l;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,r);case"'":return t.slice(u);case"<":l=a[o.slice(1,-1)];break;default:var c=+o;if(0===c)return n;if(c>s){var d=f(c/10);return 0===d?n:d<=s?void 0===i[d-1]?o.charAt(1):i[d-1]+o.charAt(1):n}l=i[c-1]}return void 0===l?"":l}))}}))},function(e,t,n){n(193);var r=n(4)("search");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(90),i=n(48);n(49)("search",1,(function(e,t,n,a){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=a(n,e,this);if(t.done)return t.value;var l=r(e),u=String(this),s=l.lastIndex;o(s,0)||(l.lastIndex=0);var c=i(l,u);return o(l.lastIndex,s)||(l.lastIndex=s),null===c?-1:c.index}]}))},function(e,t,n){n(195);var r=n(4)("split");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(95),o=n(11),i=n(57),a=n(61),l=n(19),u=n(48),s=n(62),c=n(16),f=Math.min,d=[].push,p="split",h="length",m="lastIndex",v=4294967295,y=!c((function(){RegExp(v,"y")}));n(49)("split",2,(function(e,t,n,c){var g;return g="c"=="abbc"[p](/(b)*/)[1]||4!="test"[p](/(?:)/,-1)[h]||2!="ab"[p](/(?:ab)*/)[h]||4!="."[p](/(.?)(.?)/)[h]||"."[p](/()()/)[h]>1||""[p](/.?/)[h]?function(e,t){var o=String(this);if(void 0===e&&0===t)return[];if(!r(e))return n.call(o,e,t);for(var i,a,l,u=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,p=void 0===t?v:t>>>0,y=new RegExp(e.source,c+"g");(i=s.call(y,o))&&!((a=y[m])>f&&(u.push(o.slice(f,i.index)),i[h]>1&&i.index=p));)y[m]===i.index&&y[m]++;return f===o[h]?!l&&y.test("")||u.push(""):u.push(o.slice(f)),u[h]>p?u.slice(0,p):u}:"0"[p](void 0,0)[h]?function(e,t){return void 0===e&&0===t?[]:n.call(this,e,t)}:n,[function(n,r){var o=e(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):g.call(String(o),n,r)},function(e,t){var r=c(g,e,this,t,g!==n);if(r.done)return r.value;var s=o(e),d=String(this),p=i(s,RegExp),h=s.unicode,m=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(y?"y":"g"),b=new p(y?s:"^(?:"+s.source+")",m),w=void 0===t?v:t>>>0;if(0===w)return[];if(0===d.length)return null===u(b,d)?[d]:[];for(var T=0,E=0,k=[];E1?arguments[1]:void 0,!1)}})},function(e,t,n){"use strict";var r=n(34),o=n(21);e.exports=function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t,n){n(200),e.exports=n(3).String.padStart},function(e,t,n){"use strict";var r=n(2),o=n(100),i=n(59),a=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i);r(r.P+r.F*a,"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){n(202),e.exports=n(3).String.trimRight},function(e,t,n){"use strict";n(101)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,t){e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(e,t,n){n(205),e.exports=n(3).String.trimLeft},function(e,t,n){"use strict";n(101)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,t,n){n(207),e.exports=n(3).Number.isNaN},function(e,t,n){var r=n(2);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){(function(e){!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},r=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},o=function(e){return decodeURIComponent(String(e).replace(/\+/g," "))};(function(){try{var t=e.URLSearchParams;return"a=1"===new t("?a=1").toString()&&"function"==typeof t.prototype.set&&"function"==typeof t.prototype.entries}catch(e){return!1}})()||function(){var o=function(e){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var t=typeof e;if("undefined"===t);else if("string"===t)""!==e&&this._fromString(e);else if(e instanceof o){var n=this;e.forEach((function(e,t){n.append(t,e)}))}else{if(null===e||"object"!==t)throw new TypeError("Unsupported input's type for URLSearchParams");if("[object Array]"===Object.prototype.toString.call(e))for(var r=0;rt[0]?1:0})),e._entries&&(e._entries={});for(var n=0;n1?o(r[1]):"")}})}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this),function(e){if(function(){try{var t=new e.URL("b","http://a");return t.pathname="c d","http://a/c%20d"===t.href&&t.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t)),n&&"string"!=typeof n&&(n=String(n));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){n=n.toLowerCase(),(r=(o=document.implementation.createHTMLDocument("")).createElement("base")).href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var i=o.createElement("a");i.href=t,r&&(o.body.appendChild(i),i.href=i.href);var a=o.createElement("input");if(a.type="url",a.value=t,":"===i.protocol||!/:/.test(i.href)||!a.checkValidity()&&!n)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:i});var l=new e.URLSearchParams(this.search),u=!0,s=!0,c=this;["append","delete","set"].forEach((function(e){var t=l[e];l[e]=function(){t.apply(l,arguments),u&&(s=!1,c.search=l.toString(),s=!0)}})),Object.defineProperty(this,"searchParams",{value:l,enumerable:!0});var f=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==f&&(f=this.search,s&&(u=!1,this.searchParams._fromString(this.search),u=!0))}})},r=n.prototype;["hash","host","hostname","port","protocol"].forEach((function(e){!function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)})),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval((function(){e.location.origin=t()}),100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this)}).call(t,n(103))},function(e,t){!function(){"use strict";if("object"==typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var e=function(e){for(var t=window.document,n=o(t);n;)n=o(t=n.ownerDocument);return t}(),t=[],n=null,r=null;a.prototype.THROTTLE_TIMEOUT=100,a.prototype.POLL_INTERVAL=null,a.prototype.USE_MUTATION_OBSERVER=!0,a._setupCrossOriginUpdater=function(){return n||(n=function(e,n){r=e&&n?f(e,n):{top:0,bottom:0,left:0,right:0,width:0,height:0},t.forEach((function(e){e._checkForIntersections()}))}),n},a._resetCrossOriginUpdater=function(){n=null,r=null},a.prototype.observe=function(e){if(!this._observationTargets.some((function(t){return t.element==e}))){if(!e||1!=e.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:e,entry:null}),this._monitorIntersections(e.ownerDocument),this._checkForIntersections()}},a.prototype.unobserve=function(e){this._observationTargets=this._observationTargets.filter((function(t){return t.element!=e})),this._unmonitorIntersections(e.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},a.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},a.prototype.takeRecords=function(){var e=this._queuedEntries.slice();return this._queuedEntries=[],e},a.prototype._initThresholds=function(e){var t=e||[0];return Array.isArray(t)||(t=[t]),t.sort().filter((function(e,t,n){if("number"!=typeof e||isNaN(e)||e<0||e>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return e!==n[t-1]}))},a.prototype._parseRootMargin=function(e){var t=(e||"0px").split(/\s+/).map((function(e){var t=/^(-?\d*\.?\d+)(px|%)$/.exec(e);if(!t)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(t[1]),unit:t[2]}}));return t[1]=t[1]||t[0],t[2]=t[2]||t[0],t[3]=t[3]||t[1],t},a.prototype._monitorIntersections=function(t){var n=t.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(t)){var r=this._checkForIntersections,i=null,a=null;if(this.POLL_INTERVAL?i=n.setInterval(r,this.POLL_INTERVAL):(l(n,"resize",r,!0),l(t,"scroll",r,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(a=new n.MutationObserver(r)).observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(t),this._monitoringUnsubscribes.push((function(){var e=t.defaultView;e&&(i&&e.clearInterval(i),u(e,"resize",r,!0)),u(t,"scroll",r,!0),a&&a.disconnect()})),t!=(this.root&&this.root.ownerDocument||e)){var s=o(t);s&&this._monitorIntersections(s.ownerDocument)}}},a.prototype._unmonitorIntersections=function(t){var n=this._monitoringDocuments.indexOf(t);if(-1!=n){var r=this.root&&this.root.ownerDocument||e,i=this._observationTargets.some((function(e){var n=e.element.ownerDocument;if(n==t)return!0;for(;n&&n!=r;){var i=o(n);if((n=i&&i.ownerDocument)==t)return!0}return!1}));if(!i){var a=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),a(),t!=r){var l=o(t);l&&this._unmonitorIntersections(l.ownerDocument)}}}},a.prototype._unmonitorAllIntersections=function(){var e=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var t=0;t=0&&v>=0&&{top:u,bottom:c,left:d,right:h,width:m,height:v}||null),!y)break;g=g&&p(g)}return y}},a.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var n=e.documentElement,r=e.body;t={top:0,left:0,right:n.clientWidth||r.clientWidth,width:n.clientWidth||r.clientWidth,bottom:n.clientHeight||r.clientHeight,height:n.clientHeight||r.clientHeight}}return this._expandRectByRootMargin(t)},a.prototype._expandRectByRootMargin=function(e){var t=this._rootMarginValues.map((function(t,n){return"px"==t.unit?t.value:t.value*(n%2?e.width:e.height)/100})),n={top:e.top-t[0],right:e.right+t[1],bottom:e.bottom+t[2],left:e.left-t[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},a.prototype._hasCrossedThreshold=function(e,t){var n=e&&e.isIntersecting?e.intersectionRatio||0:-1,r=t.isIntersecting?t.intersectionRatio||0:-1;if(n!==r)for(var o=0;o>>>>>> dab6229 (feat(mwpw-145210): added role=tablist for carousels/accessibility)
+!function(e){"use strict";var t=e.URLSearchParams?e.URLSearchParams:null,n=t&&"a=1"===new t({a:1}).toString(),r=t&&"+"===new t("s=%2B").get("s"),o="__URLSearchParams__",i=s.prototype,a=!(!e.Symbol||!e.Symbol.iterator);if(!(t&&n&&r)){i.append=function(e,t){h(this[o],e,t)},i.delete=function(e){delete this[o][e]},i.get=function(e){var t=this[o];return e in t?t[e][0]:null},i.getAll=function(e){var t=this[o];return e in t?t[e].slice(0):[]},i.has=function(e){return e in this[o]},i.set=function(e,t){this[o][e]=[""+t]},i.toString=function(){var e,t,n,r,i=this[o],a=[];for(t in i)for(n=c(t),e=0,r=i[t];e=_.DESKTOP_MIN_WIDTH,we=z.toLowerCase().trim()===_.FILTER_TYPES.XOR,Te=fe===_.LAYOUT_CONTAINER.CAROUSEL,Ee=fe!==_.LAYOUT_CONTAINER.CAROUSEL,ke=fe===_.LAYOUT_CONTAINER.CATEGORIES,xe=n("filterPanel","categories"),Se=ke?(Y=xe,K=j.filter((function(e){return e.id.includes("caas:product-categories")})).map((function(e){return e.id})).map((function(e){return Y&&Y.filter((function(t){return t.id===e}))[0]})),[{group:"All Topics",title:"All Topics",id:"",items:[]}].concat(N(K))):[],Ce=(0,i.useState)([]),_e=o(Ce,2),Pe=_e[0],Oe=(_e[1],(0,i.useState)(0)),Re=o(Oe,2),Ie=(Re[0],Re[1],a.default.useState()),Ne=o(Ie,2)[1],De=(0,i.useRef)(null),Me=a.default.useCallback((function(){return Ne({})}),[]),Ae=(0,S.useURLState)(),Fe=o(Ae,3),Le=Fe[0],je=Fe[1],ze=Fe[2],Ue=(0,i.useState)(null),Be=o(Ue,2),We=Be[0],Ve=Be[1],He=(0,i.useState)((0,p.readBookmarksFromLocalStorage)()),qe=o(He,2),$e=qe[0],Qe=qe[1],Ge=(0,i.useState)((0,p.readInclusionsFromLocalStorage)()),Ye=o(Ge,1)[0],Ke=(0,i.useState)(+Le.page||1),Xe=o(Ke,2),Ze=Xe[0],Je=Xe[1],et=(0,i.useState)([]),tt=o(et,2),nt=tt[0],rt=tt[1],ot=(0,i.useState)([]),it=o(ot,2),at=it[0],lt=it[1],ut=(0,i.useState)(""),st=o(ut,2),ct=st[0],ft=st[1],dt=(0,i.useState)(""),pt=o(dt,2),ht=pt[0],mt=pt[1],vt=(0,i.useState)(!1),yt=o(vt,2),gt=yt[0],bt=yt[1],wt=(0,i.useState)($),Tt=o(wt,2),Et=Tt[0],kt=Tt[1];Et.sort===_.SORT_TYPES.RANDOM&&(U=B);var xt=(0,S.useWindowDimensions)().width,St=(0,i.useState)(!1),Ct=o(St,2),_t=Ct[0],Pt=Ct[1],Ot=(0,i.useState)(!1),Rt=o(Ot,2),It=Rt[0],Nt=Rt[1],Dt=(0,i.useState)("top"===D),Mt=o(Dt,2),At=Mt[0],Ft=Mt[1],Lt=(0,i.useState)([]),jt=o(Lt,2),zt=jt[0],Ut=jt[1],Bt=(0,i.useState)(!1),Wt=o(Bt,2),Vt=Wt[0],Ht=Wt[1],qt=(0,i.useState)(!1),$t=o(qt,2),Qt=$t[0],Gt=$t[1],Yt=(0,i.useState)(null),Kt=o(Yt,2),Xt=Kt[0],Zt=Kt[1],Jt=(0,i.useState)(!0),en=o(Jt,2),tn=en[0],nn=en[1],rn=(0,i.useState)(),on=o(rn,2),an=on[0],ln=on[1],un=(0,i.useState)(!1),sn=o(un,2),cn=sn[0],fn=sn[1],dn=(0,i.createRef)(),pn=(0,i.createRef)();function hn(e){for(var t=e.length;"/"!==e[t]&&t>=0;)t--;return[e.substring(0,t),e.substring(t+1)]}function mn(e,t){if(!e)return"";for(var n=Math.pow(10,t)+7,r=0,o=1,i=0;i1&&void 0!==arguments[1]?arguments[1]:"";rt((function(t){var n=function(e,t){return t.map((function(t){return t.id!==e?t:r({},t,{items:t.items.map((function(e){return r({},e,{selected:!1})}))})}))}(e,t);return n}));var n=new URLSearchParams(window.location.search);ze(),n.forEach((function(n,r){var o=r.toLowerCase().replace("ch_","").replace(/ /g,"-");(0===r.indexOf(u)||e.toLowerCase().includes(o))&&t.toLowerCase().replace(/ /g,"-").includes(o)||je(r,n.replace(/%20/g," "))}))},yn=function(){rt((function(e){return e.map((function(e){return r({},e,{items:e.items.map((function(e){return r({},e,{selected:!1})}))})}))}));var e=new URLSearchParams(window.location.search);ze(),e.forEach((function(e,t){0!==t.indexOf(u)&&je(t,e)}))},gn=function(){yn(),ft("");var e=new URLSearchParams(window.location.search);ze(),e.forEach((function(e,t){-1===t.indexOf(u)&&-1===t.indexOf(h)&&je(t,e)})),Nt(!1)},bn=function(e){kt(e),bt(!1),nn(!1)},wn=function(e){ft(e),Je(1),je(h,e)},Tn=function(e){rt((function(t){var n=void 0;return t.map((function(t){return n=t.id===e?!t.opened:t.opened,r({},t,{opened:n})}))}))},En=function(e,t,n){we&&n&&yn(),rt((function(n){return n.map((function(n){return n.id!==e?n:r({},n,{items:n.items.map((function(e){return r({},e,{selected:e.id===t?!e.selected:e.selected})}))})}))})),Je(1),function(e,t,n){var r=nt.find((function(t){return t.id===e})),o=r.group,i=r.items.find((function(e){return e.id===t})).label,a=Le[u+o]||[];"string"==typeof a&&(a=a.split(","));var l=n?[].concat(N(a),[i]):a.filter((function(e){return e!==i}));je(u+o,l)}(e,t,n)},kn=function(){return Pt((function(e){return!e}))},xn=function(e){var t=$e.find((function(t){return t===e}));Qe(t?function(t){return t.filter((function(t){return t!==e}))}:function(t){return[].concat(N(t),[e])})},Sn=function(e){"Escape"!==e.key&&"Esc"!==e.key||Pt(!1)};(0,i.useEffect)((function(){rt(j.map((function(e){return r({},e,{opened:!!be&&e.openedOnLoad,items:e.items.map((function(e){return r({},e,{selected:!1})}))})})))}),[]),(0,i.useEffect)((function(){rt((function(e){return e.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))}));var e=Le[h];e&&ft(e[0])}),[]),(0,i.useEffect)((function(){Zt(Math.floor(1e13*Math.random()))}),[]),(0,i.useEffect)((function(){je("page",1===Ze?"":Ze)}),[Ze]);(0,i.useEffect)((function(){if(!(ie&&an||ie&&!cn)){var e,t=window.__satelliteLoadedPromise,i=n("collection","endpoint"),a=n("collection","fallbackEndpoint"),l=void 0;l=new RegExp("^(?:[a-z]+:)?//","i").test(i)?new URL(i):new URL(i,window.location.origin),a||(l.searchParams.set("flatFile",!1),i=l.toString()),Ht(!0),ue&&t&&f(t),ue&&!t&&(e=0,function t(){setTimeout((function(){if(e>=20)return Ht(!1),void Gt(!0);var n=window.__satelliteLoadedPromise;n&&f(n),!n&&e<20&&t(),e+=1}),100)}()),ue||c()}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i,t=Date.now();return window.fetch(e,{credentials:"include",headers:ge}).then((function(t){var n=t.ok,r=t.status,o=t.statusText,i=t.url;return n?t.json().then((function(t){return Object.keys(t).length?t:((0,s.logLana)({message:"no valid response data from "+e,tags:"collection"}),Promise.reject(new Error("no valid reponse data")))})):((0,s.logLana)({message:"failure for call to "+i,tags:"collection",errorMessage:r+": "+o}),Promise.reject(new Error(r+": "+o+", failure for call to "+i)))})).then((function(n){if((0,s.logLana)({message:"response took "+(Date.now()-t)/1e3+"s",tags:"collection"}),Ht(!1),nn(!0),(0,p.getByPath)(n,"cards.length")){if(n.isHashed){var i=!0,a=!1,l=void 0;try{for(var c,f=j[Symbol.iterator]();!(i=(c=f.next()).done);i=!0){var d=c.value;d.id=mn(d.id,6);var h=!0,m=!1,v=void 0;try{for(var y,g=d.items[Symbol.iterator]();!(h=(y=g.next()).done);h=!0){var b=y.value,w=hn(b.id),T=o(w,2),E=T[0],k=T[1];b.id=mn(E,6)+"/"+mn(k,6)}}catch(e){m=!0,v=e}finally{try{!h&&g.return&&g.return()}finally{if(m)throw v}}}}catch(e){a=!0,l=e}finally{try{!i&&f.return&&f.return()}finally{if(a)throw l}}var S=[],C=!0,P=!1,O=void 0;try{for(var R,I=X[Symbol.iterator]();!(C=(R=I.next()).done);C=!0){var D=hn(R.value),M=o(D,2);E=M[0],k=M[1];""!==E&&""!==k&&S.push(mn(E,6)+"/"+mn(k,6))}}catch(e){P=!0,O=e}finally{try{!C&&I.return&&I.return()}finally{if(P)throw O}}X=S}var A=new x.default(n.cards).removeDuplicateCards().addCardMetaData(_.TRUNCATE_TEXT_QTY,L,$e,G,X).processedCards,z=void 0===A?[]:A;rt(ke?function(e){return e.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))}:function(){return j.map((function(e){var t=e.group,n=e.items,o=Le[u+t];if(!o)return e;var i=o.split(",");return r({},e,{opened:!0,items:n.map((function(e){return r({},e,{selected:i.includes(String(e.label))})}))})}))});var U=(0,p.getTransitions)(z);if("eventsort"===Et.sort.toLowerCase())for(;U.size()>0;)setTimeout((function(){Me()}),U.dequeue().priority+_.ONE_SECOND_DELAY);Ut(z),de||rt((function(e){return t=e,n=z,i=(o=[]).concat.apply(o,N(n.map((function(e){return e.tags.map((function(e){return e.id}))})))),a=[_.EVENT_TIMING_IDS.LIVE,_.EVENT_TIMING_IDS.ONDEMAND,_.EVENT_TIMING_IDS.UPCOMING],t.map((function(e){return r({},e,{items:e.items.filter((function(e){return i.includes(e.id)||i.includes(e.label)||i.toString().includes("/"+e.id)||a.includes(e.id)}))})})).filter((function(e){return e.items.length>0}));var t,n,o,i,a})),setTimeout((function(){if(De.current&&0!==z.length&&1!==Ze){var e=z.slice(0,F*Ze),t=F*Ze-F;if(!(e.length0,Bn=nt.length>0&&xt<_.TABLET_MIN_WIDTH?_.SORT_POPUP_LOCATION.LEFT:_.SORT_POPUP_LOCATION.RIGHT,Wn=be?_.PAGINATION_COUNT.DESKTOP:_.PAGINATION_COUNT.MOBILE,Vn=D===_.FILTER_PANEL.TOP,Hn=D===_.FILTER_PANEL.LEFT,qn=I||he||me||A,$n="";nt.forEach((function(e){e.items.filter((function(e){return e.selected})).forEach((function(e){$n+=e.label+", "}))}));var Qn=(0,l.default)({"consonant-u-themeLight":ce===_.THEME_TYPE.LIGHT,"consonant-u-themeDark":ce===_.THEME_TYPE.DARK,"consonant-u-themeDarkest":ce===_.THEME_TYPE.DARKEST});function Gn(){if(!Se)return[];var e=[],t=!0,n=!1,r=void 0;try{for(var o,i=Se[Symbol.iterator]();!(t=(o=i.next()).done);t=!0){var a=o.value;if(a&&a.items){var l=!0,u=!1,s=void 0;try{for(var c,f=a.items[Symbol.iterator]();!(l=(c=f.next()).done);l=!0){c.value.fromCategory=!0}}catch(e){u=!0,s=e}finally{try{!l&&f.return&&f.return()}finally{if(u)throw s}}e=e.concat(a.items)}}}catch(e){n=!0,r=e}finally{try{!t&&i.return&&i.return()}finally{if(n)throw r}}return{group:"All products",id:"caas:all-products",items:e}}function Yn(e){return j.filter((function(t){return t.id===e.id})).map((function(e){return e.icon})).toString()||e.icon||""}var Kn=(le?le+" | ":"")+"Card Collection | Filters: "+(An?$n:"No Filters")+"| Search Query: "+(ct||"None"),Xn=(0,l.default)({"consonant-Wrapper":!0,"consonant-Wrapper--32MarginContainer":fe===_.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,"consonant-Wrapper--83PercentContainier":fe===_.LAYOUT_CONTAINER.SIZE_83_VW,"consonant-Wrapper--1200MaxWidth":fe===_.LAYOUT_CONTAINER.SIZE_1200_PX,"consonant-Wrapper--1600MaxWidth":fe===_.LAYOUT_CONTAINER.SIZE_1600_PX,"consonant-Wrapper--1200MaxWidth Categories":ke,"consonant-Wrapper--carousel":Te,"consonant-Wrapper--withLeftFilter":I&&Hn});return(0,i.useEffect)((function(){ke&&rt((function(e){return e.concat(Gn())}))}),[]),a.default.createElement(P.ConfigContext.Provider,{value:t},a.default.createElement(P.ExpandableContext.Provider,{value:{value:We,setValue:Ve}},a.default.createElement("section",{ref:Cn,role:"group","aria-label":ye,"daa-lh":Kn,"daa-im":String(ae),onClick:function(){Ve(null)},className:Xn+" "+Qn},a.default.createElement("div",{className:"consonant-Wrapper-inner"},ke&&a.default.createElement(i.Fragment,null,a.default.createElement("h2",{"data-testid":"consonant-TopFilters-categoriesTitle",className:"consonant-TopFilters-categoriesTitle"},ye),a.default.createElement("div",{className:"filters-category"},Se.map((function(e){if(!e)return null;var t="";return e.id===ht&&(t="selected"),a.default.createElement("button",{onClick:function(){!function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,l=e[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;n.push(u.id)}}catch(e){o=!0,i=e}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}lt(n),rt((function(e){e.pop();var n=Se.filter((function(e){return e.id===t}))[0];return n.items.length?(e.push(n),e):e.concat(Gn())})),mt(t),Je(1)}(e.items,e.id)},"data-selected":t,"data-group":e.group.replaceAll(" ","").toLowerCase()},a.default.createElement("img",{className:"filters-category--icon",src:Yn(e),alt:e.icon&&"Category icon"}),e.title)})))),zn&&Ee&&a.default.createElement("div",{className:"consonant-Wrapper-leftFilterWrapper"},a.default.createElement(k.default,{filters:nt,selectedFiltersQty:An,windowWidth:xt,onFilterClick:Tn,onClearAllFilters:gn,onClearFilterItems:vn,onCheckboxClick:En,onMobileFiltersToggleClick:kn,onSelectedFilterClick:En,showMobileFilters:_t,resQty:Nn.length,bookmarkComponent:a.default.createElement(g.default,{showBookmarks:It,onClick:function(e){e.stopPropagation(),Nt((function(e){return!e})),Je(1)},savedCardsCount:$e.length}),searchComponent:a.default.createElement(f.default,{placeholderText:Z,name:"filtersSideSearch",value:ct,autofocus:!1,onSearch:wn}),ref:dn})),a.default.createElement("div",{className:"consonant-Wrapper-collection"+(Vt?" is-loading":"")},Vn&&Ee&&a.default.createElement(E.default,{filterPanelEnabled:I,filters:nt,windowWidth:xt,resQty:Nn.length,onCheckboxClick:En,onFilterClick:Tn,onClearFilterItems:vn,categories:at,onClearAllFilters:gn,showLimitedFiltersQty:At,searchComponent:a.default.createElement(f.default,{placeholderText:J,name:"filtersTopSearch",value:ct,autofocus:be,onSearch:wn}),sortComponent:a.default.createElement(c.default,{opened:gt,id:"sort",val:Et,values:H,onSelect:bn,name:"filtersTopSelect",autoWidth:!0,optionsAlignment:Bn}),onShowAllClick:function(){Ft((function(e){return!e}))}}),Hn&&Ee&&a.default.createElement(C.Info,{enabled:I,filtersQty:nt.length,filters:nt,cardsQty:Nn.length,selectedFiltersQty:An,windowWidth:xt,onMobileFiltersToggleClick:kn,searchComponent:a.default.createElement(f.default,{placeholderText:ee,name:"searchFiltersInfo",value:ct,autofocus:!1,onSearch:wn}),sortComponent:a.default.createElement(c.default,{opened:gt,id:"sort",val:Et,values:H,onSelect:bn,autoWidth:!1,optionsAlignment:"right"}),sortOptions:H,ref:pn}),Un&&Ee&&a.default.createElement(i.Fragment,null,a.default.createElement(w.default,{resultsPerPage:F,pages:Ze,cards:Nn,forwardedRef:De,onCardBookmark:xn,isAriaLiveActive:qn}),Ln&&a.default.createElement(y.default,{onClick:function(){Je((function(e){return e+1})),window.scrollTo(0,window.pageYOffset)},show:Mn,total:Nn.length}),jn&&a.default.createElement(b.default,{pageCount:Wn,currentPageNumber:Ze,totalPages:Dn,showItemsPerPage:F,totalResults:Nn.length,onClick:Je})),Un&&Te&&!("custom-card"===ve)&&a.default.createElement(m.default,{resQty:Nn.length,cards:Nn,role:"tablist",onCardBookmark:xn}),Un&&Te&&"custom-card"===ve&&a.default.createElement(v.default,{title:"Not Supported",description:"Using custom cards within a carousel layout is currently not supported. Please re-author the component",replaceValue:""}),Vt&&!Un&&a.default.createElement(d.default,{size:_.LOADER_SIZE.BIG,hidden:!U,absolute:!0}),!Qt&&!Un&&!Vt&&a.default.createElement(v.default,{title:te,description:ne,replaceValue:ct}),Qt&&a.default.createElement(v.default,{title:re,description:oe,replaceValue:""}))))))};D.propTypes={config:(0,u.shape)(h.configType)},D.defaultProps={config:{}},t.default=D},function(e,t,n){"use strict";(function(t){"production"===t.env.NODE_ENV?e.exports=n(228):e.exports=n(229)}).call(t,n(12))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeConfigGetter=t.getNumSelectedFilterItems=void 0,t.getDefaultSortOption=function(e,t){var n=i(e)("sort","options"),r=o.SORT_TYPES[t.toUpperCase()];return n.find((function(e){return e.sort===t}))||{label:r||"Featured",sort:r||"featured"}};var r=n(6),o=n(15),i=(t.getNumSelectedFilterItems=function(e){var t=(0,r.chainFromIterable)(e.map((function(e){return e.items})));return(0,r.getSelectedItemsCount)(t)},t.makeConfigGetter=function(e){return function(t,n){var i=n?t+"."+n:t,a=(0,r.getByPath)(o.DEFAULT_CONFIG,i),l=(0,r.getByPath)(e,i);return(0,r.isNullish)(l)?a:l}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigContext=t.ExpandableContext=t.noOp=void 0;var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=t.noOp=function(){};t.ExpandableContext=i.default.createContext({value:null,setValue:a}),t.ConfigContext=i.default.createContext({})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t0&&o.default.createElement("div",{ref:m,"data-card-style":y,"data-testid":"consonant-CardsGrid",className:O,role:"tablist","aria-live":h?"polite":"off"},D.map((function(e,t){var n=(0,s.getByPath)(e,"styles.typeOverride"),i=y||n,u=e.contentArea,c=(u=void 0===u?{}:u).title,p=void 0===c?"":c,h=e.id,m=t+1,v=function(e,t){return!(!e.hideCtaId&&!e.hideCtaTags&&"hidden"!==t)}(e,C);return i===d.CARD_STYLES.CUSTOM?(0,l.default)(P(e)):o.default.createElement(f.default,r({cardStyle:i,lh:"Card "+m+" | "+A(p)+" | "+h,key:e.id},e,{bannerMap:R,onClick:a,dateFormat:k,locale:x,renderBorder:w,renderDivider:T,renderOverlay:E,hideCTA:v,onFocus:function(){return function(e){e&&document.getElementById(e).scrollIntoView({block:"nearest"})}(e.id)}}))})))};v.propTypes=h,v.defaultProps=m,t.default=v},function(e,t,n){var r=n(240),o=n(114);function i(e){return r.possibleStandardNames[e]}e.exports=function(e){var t,n,a,l,u,s={},c=(e=e||{}).type&&{reset:!0,submit:!0}[e.type];for(t in e)if(a=e[t],r.isCustomAttribute(t))s[t]=a;else if(l=i(n=t.toLowerCase()))switch(u=r.getPropertyInfo(l),"checked"!==l&&"value"!==l||c||(l=i("default"+n)),s[l]=a,u&&u.type){case r.BOOLEAN:s[l]=!0;break;case r.OVERLOADED_BOOLEAN:""===a&&(s[l]=!0)}else o.PRESERVE_CUSTOM_ATTRIBUTES&&(s[t]=a);return o.setStyleProp(e.style,s),s}},function(e,t,n){var r=n(0),o=n(242).default;var i={reactCompat:!0};var a=r.version.split(".")[0]>=16,l=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:a,invertObject:function(e,t){if(!e||"object"!=typeof e)throw new TypeError("First argument must be an object");var n,r,o="function"==typeof t,i={},a={};for(n in e)r=e[n],o&&(i=t(n,r))&&2===i.length?a[i[0]]=i[1]:"string"==typeof r&&(a[r]=n);return a},isCustomComponent:function(e,t){if(-1===e.indexOf("-"))return t&&"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}},setStyleProp:function(e,t){if(null!=e)try{t.style=o(e,i)}catch(e){t.style={}}},canTextBeChildOfNode:function(e){return!l.has(e.name)},elementsWithNoTextChildren:l}},function(e,t,n){for(var r,o=n(249),i=n(250),a=o.CASE_SENSITIVE_TAG_NAMES,l=i.Comment,u=i.Element,s=i.ProcessingInstruction,c=i.Text,f={},d=0,p=a.length;d0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(u);t.NodeWithChildren=p;var h=function(e){function t(t){return e.call(this,a.ElementType.Root,t)||this}return o(t,e),t}(p);t.Document=h;var m=function(e){function t(t,n,r,o){void 0===r&&(r=[]),void 0===o&&(o="script"===t?a.ElementType.Script:"style"===t?a.ElementType.Style:a.ElementType.Tag);var i=e.call(this,o,r)||this;return i.name=t,i.attribs=n,i}return o(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(p);function v(e){return(0,a.isTag)(e)}function y(e){return e.type===a.ElementType.CDATA}function g(e){return e.type===a.ElementType.Text}function b(e){return e.type===a.ElementType.Comment}function w(e){return e.type===a.ElementType.Directive}function T(e){return e.type===a.ElementType.Root}function E(e,t){var n;if(void 0===t&&(t=!1),g(e))n=new c(e.data);else if(b(e))n=new f(e.data);else if(v(e)){var r=t?k(e.children):[],o=new m(e.name,i({},e.attribs),r);r.forEach((function(e){return e.parent=o})),null!=e.namespace&&(o.namespace=e.namespace),e["x-attribsNamespace"]&&(o["x-attribsNamespace"]=i({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(o["x-attribsPrefix"]=i({},e["x-attribsPrefix"])),n=o}else if(y(e)){r=t?k(e.children):[];var l=new p(a.ElementType.CDATA,r);r.forEach((function(e){return e.parent=l})),n=l}else if(T(e)){r=t?k(e.children):[];var u=new h(r);r.forEach((function(e){return e.parent=u})),e["x-mode"]&&(u["x-mode"]=e["x-mode"]),n=u}else{if(!w(e))throw new Error("Not implemented yet: ".concat(e.type));var s=new d(e.name,e.data);null!=e["x-name"]&&(s["x-name"]=e["x-name"],s["x-publicId"]=e["x-publicId"],s["x-systemId"]=e["x-systemId"]),n=s}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function k(e){for(var t=e.map((function(e){return E(e,!0)})),n=1;n0}(e)&&(h=e,d.render(c.default))})),t.default=p},function(e,t,n){"use strict";n(122),n(126),n(128),n(132),n(134),n(139),n(140),n(141),n(142),n(171),n(175),n(183),n(185),n(187),n(190),n(192),n(194),n(196),n(199),n(201),n(204),n(206),n(102),n(208),n(209)},function(e,t,n){n(123),e.exports=n(3).Array.includes},function(e,t,n){"use strict";var r=n(2),o=n(73)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)("includes")},function(e,t,n){e.exports=n(41)("native-function-to-string",Function.toString)},function(e,t,n){var r=n(35),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t,n){n(74),e.exports=n(3).Object.assign},function(e,t,n){"use strict";var r=n(10),o=n(31),i=n(42),a=n(36),l=n(14),u=n(51),s=Object.assign;e.exports=!s||n(16)((function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=r}))?function(e,t){for(var n=l(e),s=arguments.length,c=1,f=i.f,d=a.f;s>c;)for(var p,h=u(arguments[c++]),m=f?o(h).concat(f(h)):o(h),v=m.length,y=0;v>y;)p=m[y++],r&&!d.call(h,p)||(n[p]=h[p]);return n}:s},function(e,t,n){n(129),e.exports=n(3).Array.findIndex},function(e,t,n){"use strict";var r=n(2),o=n(76)(6),i="findIndex",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){var r=n(131);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(8),o=n(77),i=n(4)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){n(133),e.exports=n(3).Array.find},function(e,t,n){"use strict";var r=n(2),o=n(76)(5),i="find",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r(r.P+r.F*a,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(52)(i)},function(e,t,n){n(135),n(138),e.exports=n(3).Array.from},function(e,t,n){"use strict";var r=n(78)(!0);n(136)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r=n(28),o=n(2),i=n(27),a=n(23),l=n(55),u=n(137),s=n(44),c=n(45),f=n(4)("iterator"),d=!([].keys&&"next"in[].keys()),p="keys",h="values",m=function(){return this};e.exports=function(e,t,n,v,y,g,b){u(n,t,v);var w,T,E,k=function(e){if(!d&&e in _)return _[e];switch(e){case p:case h:return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",S=y==h,C=!1,_=e.prototype,P=_[f]||_["@@iterator"]||y&&_[y],O=P||k(y),R=y?S?k("entries"):O:void 0,I="Array"==t&&_.entries||P;if(I&&(E=c(I.call(new e)))!==Object.prototype&&E.next&&(s(E,x,!0),r||"function"==typeof E[f]||a(E,f,m)),S&&P&&P.name!==h&&(C=!0,O=function(){return P.call(this)}),r&&!b||!d&&!C&&_[f]||a(_,f,O),l[t]=O,l[x]=m,y)if(w={values:S?O:k(h),keys:g?O:k(p),entries:R},b)for(T in w)T in _||i(_,T,w[T]);else o(o.P+o.F*(d||C),t,w);return w}},function(e,t,n){"use strict";var r=n(43),o=n(33),i=n(44),a={};n(23)(a,n(4)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){"use strict";var r=n(25),o=n(2),i=n(14),a=n(81),l=n(82),u=n(19),s=n(83),c=n(84);o(o.S+o.F*!n(85)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,o,f,d=i(e),p="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,g=c(d);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),null==g||p==Array&&l(g))for(n=new p(t=u(d.length));t>y;y++)s(n,y,v?m(d[y],y):d[y]);else for(f=g.call(d),n=new p;!(o=f.next()).done;y++)s(n,y,v?a(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){n(86),e.exports=n(3).Object.entries},function(e,t,n){n(88),e.exports=n(3).Object.values},function(e,t,n){n(89),e.exports=n(3).Object.is},function(e,t,n){n(143),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(154),n(155),n(156),n(157),n(158),n(74),n(89),n(159),n(161),n(162),n(88),n(86),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),e.exports=n(3).Object},function(e,t,n){"use strict";var r=n(9),o=n(24),i=n(10),a=n(2),l=n(27),u=n(46).KEY,s=n(16),c=n(41),f=n(44),d=n(34),p=n(4),h=n(91),m=n(144),v=n(145),y=n(77),g=n(11),b=n(8),w=n(14),T=n(18),E=n(32),k=n(33),x=n(43),S=n(92),C=n(26),_=n(42),P=n(13),O=n(31),R=C.f,I=P.f,N=S.f,D=r.Symbol,M=r.JSON,A=M&&M.stringify,F="prototype",L=p("_hidden"),j=p("toPrimitive"),z={}.propertyIsEnumerable,U=c("symbol-registry"),B=c("symbols"),W=c("op-symbols"),V=Object[F],H="function"==typeof D&&!!_.f,q=r.QObject,$=!q||!q[F]||!q[F].findChild,Q=i&&s((function(){return 7!=x(I({},"a",{get:function(){return I(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=R(V,t);r&&delete V[t],I(e,t,n),r&&e!==V&&I(V,t,r)}:I,G=function(e){var t=B[e]=x(D[F]);return t._k=e,t},Y=H&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},K=function(e,t,n){return e===V&&K(W,t,n),g(e),t=E(t,!0),g(n),o(B,t)?(n.enumerable?(o(e,L)&&e[L][t]&&(e[L][t]=!1),n=x(n,{enumerable:k(0,!1)})):(o(e,L)||I(e,L,k(1,{})),e[L][t]=!0),Q(e,t,n)):I(e,t,n)},X=function(e,t){g(e);for(var n,r=v(t=T(t)),o=0,i=r.length;i>o;)K(e,n=r[o++],t[n]);return e},Z=function(e){var t=z.call(this,e=E(e,!0));return!(this===V&&o(B,e)&&!o(W,e))&&(!(t||!o(this,e)||!o(B,e)||o(this,L)&&this[L][e])||t)},J=function(e,t){if(e=T(e),t=E(t,!0),e!==V||!o(B,t)||o(W,t)){var n=R(e,t);return!n||!o(B,t)||o(e,L)&&e[L][t]||(n.enumerable=!0),n}},ee=function(e){for(var t,n=N(T(e)),r=[],i=0;n.length>i;)o(B,t=n[i++])||t==L||t==u||r.push(t);return r},te=function(e){for(var t,n=e===V,r=N(n?W:T(e)),i=[],a=0;r.length>a;)!o(B,t=r[a++])||n&&!o(V,t)||i.push(B[t]);return i};H||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function(n){this===V&&t.call(W,n),o(this,L)&&o(this[L],e)&&(this[L][e]=!1),Q(this,e,k(1,n))};return i&&$&&Q(V,e,{configurable:!0,set:t}),G(e)},l(D[F],"toString",(function(){return this._k})),C.f=J,P.f=K,n(56).f=S.f=ee,n(36).f=Z,_.f=te,i&&!n(28)&&l(V,"propertyIsEnumerable",Z,!0),h.f=function(e){return G(p(e))}),a(a.G+a.W+a.F*!H,{Symbol:D});for(var ne="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ne.length>re;)p(ne[re++]);for(var oe=O(p.store),ie=0;oe.length>ie;)m(oe[ie++]);a(a.S+a.F*!H,"Symbol",{for:function(e){return o(U,e+="")?U[e]:U[e]=D(e)},keyFor:function(e){if(!Y(e))throw TypeError(e+" is not a symbol!");for(var t in U)if(U[t]===e)return t},useSetter:function(){$=!0},useSimple:function(){$=!1}}),a(a.S+a.F*!H,"Object",{create:function(e,t){return void 0===t?x(e):X(x(e),t)},defineProperty:K,defineProperties:X,getOwnPropertyDescriptor:J,getOwnPropertyNames:ee,getOwnPropertySymbols:te});var ae=s((function(){_.f(1)}));a(a.S+a.F*ae,"Object",{getOwnPropertySymbols:function(e){return _.f(w(e))}}),M&&a(a.S+a.F*(!H||s((function(){var e=D();return"[null]"!=A([e])||"{}"!=A({a:e})||"{}"!=A(Object(e))}))),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(b(t)||void 0!==e)&&!Y(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Y(t))return t}),r[1]=t,A.apply(M,r)}}),D[F][j]||n(23)(D[F],j,D[F].valueOf),f(D,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(9),o=n(3),i=n(28),a=n(91),l=n(13).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||l(t,e,{value:a.f(e)})}},function(e,t,n){var r=n(31),o=n(42),i=n(36);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,l=n(e),u=i.f,s=0;l.length>s;)u.call(e,a=l[s++])&&t.push(a);return t}},function(e,t,n){var r=n(2);r(r.S,"Object",{create:n(43)})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperty:n(13).f})},function(e,t,n){var r=n(2);r(r.S+r.F*!n(10),"Object",{defineProperties:n(79)})},function(e,t,n){var r=n(18),o=n(26).f;n(17)("getOwnPropertyDescriptor",(function(){return function(e,t){return o(r(e),t)}}))},function(e,t,n){var r=n(14),o=n(45);n(17)("getPrototypeOf",(function(){return function(e){return o(r(e))}}))},function(e,t,n){var r=n(14),o=n(31);n(17)("keys",(function(){return function(e){return o(r(e))}}))},function(e,t,n){n(17)("getOwnPropertyNames",(function(){return n(92).f}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("freeze",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("seal",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8),o=n(46).onFreeze;n(17)("preventExtensions",(function(e){return function(t){return e&&r(t)?e(o(t)):t}}))},function(e,t,n){var r=n(8);n(17)("isFrozen",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isSealed",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,n){var r=n(8);n(17)("isExtensible",(function(e){return function(t){return!!r(t)&&(!e||e(t))}}))},function(e,t,n){var r=n(2);r(r.S,"Object",{setPrototypeOf:n(160).set})},function(e,t,n){var r=n(8),o=n(11),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n(25)(Function.call,n(26).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},function(e,t,n){"use strict";var r=n(37),o={};o[n(4)("toStringTag")]="z",o+""!="[object z]"&&n(27)(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},function(e,t,n){var r=n(2),o=n(93),i=n(18),a=n(26),l=n(83);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),u=a.f,s=o(r),c={},f=0;s.length>f;)void 0!==(n=u(r,t=s[f++]))&&l(c,t,n);return c}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(29),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineGetter__:function(e,t){a.f(o(this),e,{get:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(29),a=n(13);n(10)&&r(r.P+n(47),"Object",{__defineSetter__:function(e,t){a.f(o(this),e,{set:i(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(32),a=n(45),l=n(26).f;n(10)&&r(r.P+n(47),"Object",{__lookupGetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.get}while(n=a(n))}})},function(e,t,n){"use strict";var r=n(2),o=n(14),i=n(32),a=n(45),l=n(26).f;n(10)&&r(r.P+n(47),"Object",{__lookupSetter__:function(e){var t,n=o(this),r=i(e,!0);do{if(t=l(n,r))return t.set}while(n=a(n))}})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{isObject:n(8)})},function(e,t,n){var r=n(2);r(r.S+r.F,"Object",{classof:n(37)})},function(e,t,n){var r=n(2),o=n(94);r(r.S+r.F,"Object",{define:o})},function(e,t,n){var r=n(2),o=n(94),i=n(43);r(r.S+r.F,"Object",{make:function(e,t){return o(i(e),t)}})},function(e,t,n){n(172),e.exports=n(3).String.startsWith},function(e,t,n){"use strict";var r=n(2),o=n(19),i=n(173),a="startsWith",l=""[a];r(r.P+r.F*n(174)(a),"String",{startsWith:function(e){var t=i(this,e,a),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return l?l.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){var r=n(95),o=n(21);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(4)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,n){"use strict";n(96),n(182),e.exports=n(3).Promise.finally},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(25),o=n(81),i=n(82),a=n(11),l=n(19),u=n(84),s={},c={};(t=e.exports=function(e,t,n,f,d){var p,h,m,v,y=d?function(){return e}:u(e),g=r(n,f,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=l(e.length);p>b;b++)if((v=t?g(a(h=e[b])[0],h[1]):g(e[b]))===s||v===c)return v}else for(m=y.call(e);!(h=m.next()).done;)if((v=o(m,g,h.value,t))===s||v===c)return v}).BREAK=s,t.RETURN=c},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(9),o=n(97).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,u="process"==n(30)(a);e.exports=function(){var e,t,n,s=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(s)};else if(!i||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var c=l.resolve(void 0);n=function(){c.then(s)}}else n=function(){o.call(r,s)};else{var f=!0,d=document.createTextNode("");new i(s).observe(d,{characterData:!0}),n=function(){d.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){var r=n(27);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";var r=n(9),o=n(13),i=n(10),a=n(4)("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(9),a=n(57),l=n(99);r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,o.Promise||i.Promise),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}})},function(e,t,n){"use strict";n(96),n(184);var r=n(3).Promise,o=r.try;e.exports={try:function(e){return o.call("function"==typeof this?this:r,e)}}.try},function(e,t,n){"use strict";var r=n(2),o=n(58),i=n(98);r(r.S,"Promise",{try:function(e){var t=o.f(this),n=i(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){n(186);var r=n(60);e.exports=function(e){return r.call(e)}},function(e,t,n){n(10)&&"g"!=/./g.flags&&n(13).f(RegExp.prototype,"flags",{configurable:!0,get:n(60)})},function(e,t,n){n(188);var r=n(4)("match");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(19),i=n(61),a=n(48);n(49)("match",1,(function(e,t,n,l){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=l(n,e,this);if(t.done)return t.value;var u=r(e),s=String(this);if(!u.global)return a(u,s);var c=u.unicode;u.lastIndex=0;for(var f,d=[],p=0;null!==(f=a(u,s));){var h=String(f[0]);d[p]=h,""===h&&(u.lastIndex=i(s,o(u.lastIndex),c)),p++}return 0===p?null:d}]}))},function(e,t,n){"use strict";var r=n(62);n(2)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(e,t,n){n(191);var r=n(4)("replace");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(11),o=n(14),i=n(19),a=n(35),l=n(61),u=n(48),s=Math.max,c=Math.min,f=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;n(49)("replace",2,(function(e,t,n,h){return[function(r,o){var i=e(this),a=null==r?void 0:r[t];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},function(e,t){var o=h(n,e,this,t);if(o.done)return o.value;var f=r(e),d=String(this),p="function"==typeof t;p||(t=String(t));var v=f.global;if(v){var y=f.unicode;f.lastIndex=0}for(var g=[];;){var b=u(f,d);if(null===b)break;if(g.push(b),!v)break;""===String(b[0])&&(f.lastIndex=l(d,i(f.lastIndex),y))}for(var w,T="",E=0,k=0;k=E&&(T+=d.slice(E,S)+R,E=S+x.length)}return T+d.slice(E)}];function m(e,t,r,i,a,l){var u=r+e.length,s=i.length,c=p;return void 0!==a&&(a=o(a),c=d),n.call(l,c,(function(n,o){var l;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,r);case"'":return t.slice(u);case"<":l=a[o.slice(1,-1)];break;default:var c=+o;if(0===c)return n;if(c>s){var d=f(c/10);return 0===d?n:d<=s?void 0===i[d-1]?o.charAt(1):i[d-1]+o.charAt(1):n}l=i[c-1]}return void 0===l?"":l}))}}))},function(e,t,n){n(193);var r=n(4)("search");e.exports=function(e,t){return RegExp.prototype[r].call(e,t)}},function(e,t,n){"use strict";var r=n(11),o=n(90),i=n(48);n(49)("search",1,(function(e,t,n,a){return[function(n){var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},function(e){var t=a(n,e,this);if(t.done)return t.value;var l=r(e),u=String(this),s=l.lastIndex;o(s,0)||(l.lastIndex=0);var c=i(l,u);return o(l.lastIndex,s)||(l.lastIndex=s),null===c?-1:c.index}]}))},function(e,t,n){n(195);var r=n(4)("split");e.exports=function(e,t,n){return RegExp.prototype[r].call(e,t,n)}},function(e,t,n){"use strict";var r=n(95),o=n(11),i=n(57),a=n(61),l=n(19),u=n(48),s=n(62),c=n(16),f=Math.min,d=[].push,p="split",h="length",m="lastIndex",v=4294967295,y=!c((function(){RegExp(v,"y")}));n(49)("split",2,(function(e,t,n,c){var g;return g="c"=="abbc"[p](/(b)*/)[1]||4!="test"[p](/(?:)/,-1)[h]||2!="ab"[p](/(?:ab)*/)[h]||4!="."[p](/(.?)(.?)/)[h]||"."[p](/()()/)[h]>1||""[p](/.?/)[h]?function(e,t){var o=String(this);if(void 0===e&&0===t)return[];if(!r(e))return n.call(o,e,t);for(var i,a,l,u=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,p=void 0===t?v:t>>>0,y=new RegExp(e.source,c+"g");(i=s.call(y,o))&&!((a=y[m])>f&&(u.push(o.slice(f,i.index)),i[h]>1&&i.index=p));)y[m]===i.index&&y[m]++;return f===o[h]?!l&&y.test("")||u.push(""):u.push(o.slice(f)),u[h]>p?u.slice(0,p):u}:"0"[p](void 0,0)[h]?function(e,t){return void 0===e&&0===t?[]:n.call(this,e,t)}:n,[function(n,r){var o=e(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):g.call(String(o),n,r)},function(e,t){var r=c(g,e,this,t,g!==n);if(r.done)return r.value;var s=o(e),d=String(this),p=i(s,RegExp),h=s.unicode,m=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(y?"y":"g"),b=new p(y?s:"^(?:"+s.source+")",m),w=void 0===t?v:t>>>0;if(0===w)return[];if(0===d.length)return null===u(b,d)?[d]:[];for(var T=0,E=0,k=[];E1?arguments[1]:void 0,!1)}})},function(e,t,n){"use strict";var r=n(35),o=n(21);e.exports=function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t,n){n(200),e.exports=n(3).String.padStart},function(e,t,n){"use strict";var r=n(2),o=n(100),i=n(59),a=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i);r(r.P+r.F*a,"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){n(202),e.exports=n(3).String.trimRight},function(e,t,n){"use strict";n(101)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,t){e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(e,t,n){n(205),e.exports=n(3).String.trimLeft},function(e,t,n){"use strict";n(101)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,t,n){n(207),e.exports=n(3).Number.isNaN},function(e,t,n){var r=n(2);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){(function(e){!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},r=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},o=function(e){return decodeURIComponent(String(e).replace(/\+/g," "))};(function(){try{var t=e.URLSearchParams;return"a=1"===new t("?a=1").toString()&&"function"==typeof t.prototype.set&&"function"==typeof t.prototype.entries}catch(e){return!1}})()||function(){var o=function(e){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var t=typeof e;if("undefined"===t);else if("string"===t)""!==e&&this._fromString(e);else if(e instanceof o){var n=this;e.forEach((function(e,t){n.append(t,e)}))}else{if(null===e||"object"!==t)throw new TypeError("Unsupported input's type for URLSearchParams");if("[object Array]"===Object.prototype.toString.call(e))for(var r=0;rt[0]?1:0})),e._entries&&(e._entries={});for(var n=0;n1?o(r[1]):"")}})}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this),function(e){if(function(){try{var t=new e.URL("b","http://a");return t.pathname="c d","http://a/c%20d"===t.href&&t.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t)),n&&"string"!=typeof n&&(n=String(n));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){n=n.toLowerCase(),(r=(o=document.implementation.createHTMLDocument("")).createElement("base")).href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var i=o.createElement("a");i.href=t,r&&(o.body.appendChild(i),i.href=i.href);var a=o.createElement("input");if(a.type="url",a.value=t,":"===i.protocol||!/:/.test(i.href)||!a.checkValidity()&&!n)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:i});var l=new e.URLSearchParams(this.search),u=!0,s=!0,c=this;["append","delete","set"].forEach((function(e){var t=l[e];l[e]=function(){t.apply(l,arguments),u&&(s=!1,c.search=l.toString(),s=!0)}})),Object.defineProperty(this,"searchParams",{value:l,enumerable:!0});var f=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==f&&(f=this.search,s&&(u=!1,this.searchParams._fromString(this.search),u=!0))}})},r=n.prototype;["hash","host","hostname","port","protocol"].forEach((function(e){!function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)})),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval((function(){e.location.origin=t()}),100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this)}).call(t,n(103))},function(e,t){!function(){"use strict";if("object"==typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var e=function(e){for(var t=window.document,n=o(t);n;)n=o(t=n.ownerDocument);return t}(),t=[],n=null,r=null;a.prototype.THROTTLE_TIMEOUT=100,a.prototype.POLL_INTERVAL=null,a.prototype.USE_MUTATION_OBSERVER=!0,a._setupCrossOriginUpdater=function(){return n||(n=function(e,n){r=e&&n?f(e,n):{top:0,bottom:0,left:0,right:0,width:0,height:0},t.forEach((function(e){e._checkForIntersections()}))}),n},a._resetCrossOriginUpdater=function(){n=null,r=null},a.prototype.observe=function(e){if(!this._observationTargets.some((function(t){return t.element==e}))){if(!e||1!=e.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:e,entry:null}),this._monitorIntersections(e.ownerDocument),this._checkForIntersections()}},a.prototype.unobserve=function(e){this._observationTargets=this._observationTargets.filter((function(t){return t.element!=e})),this._unmonitorIntersections(e.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},a.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},a.prototype.takeRecords=function(){var e=this._queuedEntries.slice();return this._queuedEntries=[],e},a.prototype._initThresholds=function(e){var t=e||[0];return Array.isArray(t)||(t=[t]),t.sort().filter((function(e,t,n){if("number"!=typeof e||isNaN(e)||e<0||e>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return e!==n[t-1]}))},a.prototype._parseRootMargin=function(e){var t=(e||"0px").split(/\s+/).map((function(e){var t=/^(-?\d*\.?\d+)(px|%)$/.exec(e);if(!t)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(t[1]),unit:t[2]}}));return t[1]=t[1]||t[0],t[2]=t[2]||t[0],t[3]=t[3]||t[1],t},a.prototype._monitorIntersections=function(t){var n=t.defaultView;if(n&&-1==this._monitoringDocuments.indexOf(t)){var r=this._checkForIntersections,i=null,a=null;if(this.POLL_INTERVAL?i=n.setInterval(r,this.POLL_INTERVAL):(l(n,"resize",r,!0),l(t,"scroll",r,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in n&&(a=new n.MutationObserver(r)).observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(t),this._monitoringUnsubscribes.push((function(){var e=t.defaultView;e&&(i&&e.clearInterval(i),u(e,"resize",r,!0)),u(t,"scroll",r,!0),a&&a.disconnect()})),t!=(this.root&&this.root.ownerDocument||e)){var s=o(t);s&&this._monitorIntersections(s.ownerDocument)}}},a.prototype._unmonitorIntersections=function(t){var n=this._monitoringDocuments.indexOf(t);if(-1!=n){var r=this.root&&this.root.ownerDocument||e,i=this._observationTargets.some((function(e){var n=e.element.ownerDocument;if(n==t)return!0;for(;n&&n!=r;){var i=o(n);if((n=i&&i.ownerDocument)==t)return!0}return!1}));if(!i){var a=this._monitoringUnsubscribes[n];if(this._monitoringDocuments.splice(n,1),this._monitoringUnsubscribes.splice(n,1),a(),t!=r){var l=o(t);l&&this._unmonitorIntersections(l.ownerDocument)}}}},a.prototype._unmonitorAllIntersections=function(){var e=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var t=0;t=0&&v>=0&&{top:u,bottom:c,left:d,right:h,width:m,height:v}||null),!y)break;g=g&&p(g)}return y}},a.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var n=e.documentElement,r=e.body;t={top:0,left:0,right:n.clientWidth||r.clientWidth,width:n.clientWidth||r.clientWidth,bottom:n.clientHeight||r.clientHeight,height:n.clientHeight||r.clientHeight}}return this._expandRectByRootMargin(t)},a.prototype._expandRectByRootMargin=function(e){var t=this._rootMarginValues.map((function(t,n){return"px"==t.unit?t.value:t.value*(n%2?e.width:e.height)/100})),n={top:e.top-t[0],right:e.right+t[1],bottom:e.bottom+t[2],left:e.left-t[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},a.prototype._hasCrossedThreshold=function(e,t){var n=e&&e.isIntersecting?e.intersectionRatio||0:-1,r=t.isIntersecting?t.intersectionRatio||0:-1;if(n!==r)for(var o=0;o\n * )\n */\nvar Container = function Container(props) {\n var config = props.config;\n\n var getConfig = (0, _consonant.makeConfigGetter)(config);\n var filterGroupPrefix = 'ch_';\n var searchPrefix = 'sh_';\n var CARD_HASH_LENGTH = 10;\n\n /**\n **** Authored Configs ****\n */\n var filterPanelEnabled = getConfig('filterPanel', 'enabled');\n var filterPanelType = getConfig('filterPanel', 'type');\n var paginationType = getConfig('pagination', 'type');\n var paginationIsEnabled = getConfig('pagination', 'enabled');\n var resultsPerPage = getConfig('collection', 'resultsPerPage');\n var onlyShowBookmarks = getConfig('bookmarks', 'leftFilterPanel.bookmarkOnlyCollection');\n var authoredFilters = getConfig('filterPanel', 'filters');\n var filterLogic = getConfig('filterPanel', 'filterLogic').toLowerCase().trim();\n var totalCardLimit = getConfig('collection', 'totalCardsToShow');\n var sampleSize = getConfig('collection', 'reservoir.sample');\n var reservoirSize = getConfig('collection', 'reservoir.pool');\n var searchFields = getConfig('search', 'searchFields');\n var sortOptions = getConfig('sort', 'options');\n var defaultSort = getConfig('sort', 'defaultSort');\n var defaultSortOption = (0, _consonant.getDefaultSortOption)(config, defaultSort);\n var featuredCards = getConfig('featuredCards', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define,max-len\n featuredCards = featuredCards.concat(featuredCards.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaIds = getConfig('hideCtaIds', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define\n hideCtaIds = hideCtaIds.concat(hideCtaIds.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaTags = getConfig('hideCtaTags', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n var leftPanelSearchPlaceholder = getConfig('search', 'i18n.leftFilterPanel.searchPlaceholderText');\n var topPanelSearchPlaceholder = getConfig('search', 'i18n.topFilterPanel.searchPlaceholderText');\n var searchPlaceholderText = getConfig('search', 'i18n.filterInfo.searchPlaceholderText');\n var noResultsTitle = getConfig('search', 'i18n.noResultsTitle');\n var noResultsDescription = getConfig('search', 'i18n.noResultsDescription');\n var apiFailureTitle = getConfig('collection', 'i18n.onErrorTitle');\n var apiFailureDescription = getConfig('collection', 'i18n.onErrorDescription');\n var isLazy = getConfig('collection', 'lazyload');\n var trackImpressions = getConfig('analytics', 'trackImpressions');\n var collectionIdentifier = getConfig('analytics', 'collectionIdentifier');\n var targetEnabled = getConfig('target', 'enabled');\n var useLastViewedSession = getConfig('target', 'lastViewedSession');\n var authoredMode = getConfig('collection', 'mode');\n var authoredLayoutContainer = getConfig('collection', 'layout.container');\n var showEmptyFilters = getConfig('filterPanel', 'showEmptyFilters');\n var eventFilter = getConfig('filterPanel', 'eventFilter');\n var searchEnabled = getConfig('search', 'enabled');\n var sortEnabled = getConfig('sort', 'enabled');\n var cardStyle = getConfig('collection', 'cardStyle');\n var title = getConfig('collection', 'i18n.title');\n var headers = getConfig('headers', '');\n\n /**\n **** Constants ****\n */\n var DESKTOP_SCREEN_SIZE = window.innerWidth >= _constants.DESKTOP_MIN_WIDTH;\n var isXorFilter = filterLogic.toLowerCase().trim() === _constants.FILTER_TYPES.XOR;\n var isCarouselContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isStandardContainer = authoredLayoutContainer !== _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isCategoriesContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CATEGORIES;\n\n // eslint-disable-next-line no-use-before-define\n var categories = getConfig('filterPanel', 'categories');\n // eslint-disable-next-line no-use-before-define, max-len\n var authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : [];\n\n /**\n **** Hooks ****\n */\n /**\n * @typedef {Array} timedCollection - result of Timed Event Sort\n * @description — As an alternative/iteration on filtered cards for timed\n * collections\n * @typedef {Function} setTimedCollection\n * @description - Sets timedCollection after setTimeout triggers\n *\n * @type {[Array, Function]} timedCollection\n */\n /* eslint-disable no-unused-vars */\n\n var _useState = (0, _react.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n timedCollection = _useState2[0],\n setTimedCollection = _useState2[1];\n /**\n * @typedef {Number} transition - MS to next transition\n * @description — set by eventSort, from cardFilteret.nextTransitionMs\n * @typedef {Function} setTransition\n * @description - next Transition trigger\n *\n * @type {[Number, Function]} transition\n */\n /* eslint-disable no-unused-vars */\n\n\n var _useState3 = (0, _react.useState)(0),\n _useState4 = _slicedToArray(_useState3, 2),\n transition = _useState4[0],\n setTransition = _useState4[1];\n\n var _React$useState = _react2.default.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n updateState = _React$useState2[1];\n\n var scrollElementRef = (0, _react.useRef)(null);\n var nextTransition = _react2.default.useCallback(function () {\n return updateState({});\n }, []);\n /**\n * @typedef {Object} urlState\n * @description — object with url query values\n *\n * @typedef {Function} setUrlState\n * @description - set url query value by key\n *\n * @typedef {Function} clearUrlState\n * @description - clear whole url query state\n *\n * @type {[Object, Function, Function]} OpenDropdown\n */\n\n var _useURLState = (0, _hooks.useURLState)(),\n _useURLState2 = _slicedToArray(_useURLState, 3),\n urlState = _useURLState2[0],\n setUrlState = _useURLState2[1],\n clearUrlState = _useURLState2[2];\n\n /**\n * @typedef {Number} OpenDropdownState - Id of a selected dropdown\n * @description — Passed in Context Provider So All Nested Components can be in sync\n *\n * @typedef {Function} OpenDropdownStateSetter\n * @description\n *\n * @type {[Number, Function]} OpenDropdown\n */\n\n\n var _useState5 = (0, _react.useState)(null),\n _useState6 = _slicedToArray(_useState5, 2),\n openDropdown = _useState6[0],\n setOpenDropdown = _useState6[1];\n\n /**\n * @typedef {Array} BookmarkedCardIdsState — Initiailzed From Local Storage\n *\n * @typedef {Function} BookmarkedCardIdsSetter — Sets internal state of saved bookmarks\n *\n * @type {[Array, Function]} BookmarkedCardIds\n */\n\n\n var _useState7 = (0, _react.useState)((0, _general.readBookmarksFromLocalStorage)()),\n _useState8 = _slicedToArray(_useState7, 2),\n bookmarkedCardIds = _useState8[0],\n setBookmarkedCardIds = _useState8[1];\n\n var _useState9 = (0, _react.useState)((0, _general.readInclusionsFromLocalStorage)()),\n _useState10 = _slicedToArray(_useState9, 1),\n inclusionIds = _useState10[0];\n\n /**\n * @typedef {Number} CurrentPageState — Initialized to the first page\n * @description Same page state for 'Load More' or 'Paginator'\n *\n * @typedef {Function} CurrentPageStateSetter — Sets page as user navigates through pages\n *\n * @type {[Number, Function]} CurrentPage\n */\n\n\n var _useState11 = (0, _react.useState)(+urlState.page || 1),\n _useState12 = _slicedToArray(_useState11, 2),\n currentPage = _useState12[0],\n setCurrentPage = _useState12[1];\n\n /**\n * @typedef {Array} FiltersState — Contains Filters For Filter Panel\n * @description Same Filter state for Left or Top\n *\n * @typedef {Function} FiltersStateSetter — Sets Authored Filters as State\n *\n * @type {[Array, Function]} Filters\n */\n\n\n var _useState13 = (0, _react.useState)([]),\n _useState14 = _slicedToArray(_useState13, 2),\n filters = _useState14[0],\n setFilters = _useState14[1];\n // window.filters = filters;\n\n\n var _useState15 = (0, _react.useState)([]),\n _useState16 = _slicedToArray(_useState15, 2),\n currCategories = _useState16[0],\n setCategories = _useState16[1];\n\n /**\n * @typedef {String} SearchQueryState — Will be used to search through cards\n * @typedef {Function} SearchQueryStateSetter — Sets user search query\n *\n * @type {[String, Function]} SearchQuery\n */\n\n\n var _useState17 = (0, _react.useState)(''),\n _useState18 = _slicedToArray(_useState17, 2),\n searchQuery = _useState18[0],\n setSearchQuery = _useState18[1];\n\n var _useState19 = (0, _react.useState)(''),\n _useState20 = _slicedToArray(_useState19, 2),\n selectedCategory = _useState20[0],\n setSelectedCategory = _useState20[1];\n\n /**\n * @typedef {String} SortOpenedState — Toggles Sort Popup Opened Or Closed\n * @typedef {Function} SortOpenedStateSetter — Sets Sort Option\n *\n * @type {[Boolean, Function]} SortOpened\n */\n\n\n var _useState21 = (0, _react.useState)(false),\n _useState22 = _slicedToArray(_useState21, 2),\n sortOpened = _useState22[0],\n setSortOpened = _useState22[1];\n\n /**\n * @typedef {String} SortOptionState — Can be one of a range of types\n * @description 'Title (A-Z)', 'Title (Z-A), Date (New to Old), Date (Old to New), Featured\n *\n * @typedef {Function} SortOptionStateSetter — Sets Sort Option\n *\n * @type {[String, Function]} SortOption\n */\n\n\n var _useState23 = (0, _react.useState)(defaultSortOption),\n _useState24 = _slicedToArray(_useState23, 2),\n sortOption = _useState24[0],\n setSortOption = _useState24[1];\n\n if (sortOption.sort === _constants.SORT_TYPES.RANDOM) {\n totalCardLimit = sampleSize;\n }\n\n /**\n * @typedef {Boolean} WindowWidthState — Can either be true or false\n * @description Used to toggle between mobile and desktop layouts\n *\n * @typedef {Function} WindowWidthStateSetter — Updates window width\n *\n * @type {[Number]} WindowWidth\n */\n\n var _useWindowDimensions = (0, _hooks.useWindowDimensions)(),\n windowWidth = _useWindowDimensions.width;\n\n /**\n * @typedef {Boolean} ShowMobileFiltersState — Can either be true or false\n * @description When true mobile filters will appear on the page\n *\n * @typedef {Function} ShowMobileFiltersStateSetter\n * @description Toggles mobile filter header/footer to show or hide\n *\n * @type {[Boolean, Function]} ShowMobileFilters\n */\n\n\n var _useState25 = (0, _react.useState)(false),\n _useState26 = _slicedToArray(_useState25, 2),\n showMobileFilters = _useState26[0],\n setShowMobileFilters = _useState26[1];\n\n /**\n * @typedef {Boolean} ShowBookmarkState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} ShowBookmarkStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} ShowBookmarks\n */\n\n\n var _useState27 = (0, _react.useState)(false),\n _useState28 = _slicedToArray(_useState27, 2),\n showBookmarks = _useState28[0],\n setShowBookmarks = _useState28[1];\n\n /**\n * @typedef {Boolean} LimitFilterQuantityState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} LimitFilterQuantityStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} LimitFilterQuantity\n */\n\n\n var _useState29 = (0, _react.useState)(filterPanelType === 'top'),\n _useState30 = _slicedToArray(_useState29, 2),\n showLimitedFiltersQty = _useState30[0],\n setShowLimitedFiltersQty = _useState30[1];\n\n /**\n * @typedef {Array} CardState\n * @description sets cards retrieved either server side render or API call\n *\n * @typedef {Function} CardStateSetter\n * @description E.g. Render Featured Cards Server side, While collection cards from API call\n *\n * @type {[Array, Function]} Cards\n */\n\n\n var _useState31 = (0, _react.useState)([]),\n _useState32 = _slicedToArray(_useState31, 2),\n cards = _useState32[0],\n setCards = _useState32[1];\n\n /**\n * @typedef {Boolean} LoadingState — Can either be true or false\n * @description When true a loading spinner will appear on the page\n *\n * @typedef {Function} LoadingStateSetter — Sets loader true or false\n * @description True while waiting for API response. False on cards retrieved or api failure\n *\n * @type {[Boolean, Function]} Loading\n */\n\n\n var _useState33 = (0, _react.useState)(false),\n _useState34 = _slicedToArray(_useState33, 2),\n isLoading = _useState34[0],\n setLoading = _useState34[1];\n\n /**\n * @typedef {Boolean} ApiFailureState — Can either be true or false\n * @description When true an API error has occured\n *\n * @typedef {Function} ApiFailureStateSetter — Sets API failure flag true or false\n * @description True when retrieved or api failure. False otherwise\n *\n * @type {[Boolean, Function]} ApiFailure\n */\n\n\n var _useState35 = (0, _react.useState)(false),\n _useState36 = _slicedToArray(_useState35, 2),\n isApiFailure = _useState36[0],\n setApiFailure = _useState36[1];\n\n var _useState37 = (0, _react.useState)(null),\n _useState38 = _slicedToArray(_useState37, 2),\n randomSortId = _useState38[0],\n setRandomSortId = _useState38[1];\n\n var _useState39 = (0, _react.useState)(true),\n _useState40 = _slicedToArray(_useState39, 2),\n isFirstLoad = _useState40[0],\n setIsFirstLoad = _useState40[1];\n\n var _useState41 = (0, _react.useState)(),\n _useState42 = _slicedToArray(_useState41, 2),\n visibleStamp = _useState42[0],\n setVisibleStamp = _useState42[1];\n\n var _useState43 = (0, _react.useState)(false),\n _useState44 = _slicedToArray(_useState43, 2),\n hasFetched = _useState44[0],\n setHasFetched = _useState44[1];\n\n /**\n * Creates a DOM reference to first filter item\n * @returns {Object} - filter item DOM reference\n */\n\n\n var filterItemRef = (0, _react.createRef)();\n\n /**\n * Creates a DOM reference to filter info button\n * @returns {Object} - filter info DOM reference\n */\n var filterInfoRef = (0, _react.createRef)();\n\n /**\n **** Helper Methods ****\n */\n\n function getParentChild(id) {\n var i = id.length;\n while (id[i] !== '/' && i >= 0) {\n i--;\n }\n return [id.substring(0, i), id.substring(i + 1)];\n }\n\n function rollingHash(s, l) {\n if (!s) {\n return '';\n }\n var BASE = 53;\n var MOD = Math.pow(10, l) + 7;\n var hash = 0;\n var basePower = 1;\n for (var i = 0; i < s.length; i++) {\n hash = (hash + (s.charCodeAt(i) - 97 + 1) * basePower) % MOD;\n basePower = basePower * BASE % MOD;\n }\n return ((hash + MOD) % MOD).toString(36);\n }\n\n /**\n * For a given group of filters, it will unselect all of them\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getAllFiltersClearedState = function getAllFiltersClearedState(filterGroups) {\n return filterGroups.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * For a given group of filters, it will unselect the one with a given id\n * @param {Number} id - the id of an individual filter item\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getFilterItemClearedState = function getFilterItemClearedState(id, filterGroups) {\n return filterGroups.map(function (filterGroup) {\n if (filterGroup.id !== id) {\n return filterGroup;\n }\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * Will uncheck a filter with a given id\n * @param {Number} id - the id of an individual filter item\n * @returns {Void} - an updated state\n */\n var clearFilterItem = function clearFilterItem(id) {\n var group = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n setFilters(function (prevFilters) {\n var filterClearedState = getFilterItemClearedState(id, prevFilters);\n return filterClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n // actually clear the url state\n urlParams.forEach(function (value, key) {\n var chFilter = key.toLowerCase().replace('ch_', '').replace(/ /g, '-');\n if (key.indexOf(filterGroupPrefix) !== 0 && !id.toLowerCase().includes(chFilter) || !group.toLowerCase().replace(/ /g, '-').includes(chFilter)) {\n setUrlState(key, value.replace(/%20/g, ' '));\n }\n });\n };\n\n /**\n * Will uncheck all filter items\n * @returns {Void} - an updated state\n */\n var clearAllFilters = function clearAllFilters() {\n setFilters(function (prevFilters) {\n var allFiltersClearedState = getAllFiltersClearedState(prevFilters);\n return allFiltersClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) !== 0) setUrlState(key, value);\n });\n };\n\n /**\n * Resets filters, and search to empty. Hides bookmark filter\n * @returns {Void} - an updated state\n */\n var resetFiltersSearchAndBookmarks = function resetFiltersSearchAndBookmarks() {\n clearAllFilters();\n setSearchQuery('');\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) === -1 && key.indexOf(searchPrefix) === -1) setUrlState(key, value);\n });\n setShowBookmarks(false);\n };\n\n /**\n **** EVENT HANDLERS ****\n */\n\n /**\n * On Load More Button Click, Increment Page Cuonter By 1\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var onLoadMoreClick = function onLoadMoreClick() {\n setCurrentPage(function (prevState) {\n return prevState + 1;\n });\n window.scrollTo(0, window.pageYOffset);\n };\n\n /**\n * Takes sort user selects and sets it so cards are sorted\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleSortChange = function handleSortChange(option) {\n setSortOption(option);\n setSortOpened(false);\n setIsFirstLoad(false);\n };\n\n /**\n * Handles whenever the search box is clicked or input field\n * changes\n *\n * @param {ClickEvent, ChangeEvent} e\n * @listens ClickEvent, ChangeEvent\n */\n var handleSearchInputChange = function handleSearchInputChange(val) {\n setSearchQuery(val);\n setCurrentPage(1);\n setUrlState(searchPrefix, val);\n };\n\n /**\n * Handles when a group of filters is clicked. Behavior should be\n * to toggle group open or closed\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleFilterGroupClick = function handleFilterGroupClick(filterId) {\n setFilters(function (prevFilters) {\n var opened = void 0;\n return prevFilters.map(function (el) {\n if (el.id === filterId) {\n opened = !el.opened;\n } else {\n // eslint-disable-next-line prefer-destructuring\n opened = el.opened;\n }\n return _extends({}, el, { opened: opened });\n });\n });\n };\n\n /**\n * Will find and set needed filter to url\n *\n * @param {string} filterId - selected filter group id\n * @param {string} itemId - selected filter item id\n * @param {boolean} isChecked\n * @returns {Void} - an updated url\n */\n var changeUrlState = function changeUrlState(filterId, itemId, isChecked) {\n var _filters$find = filters.find(function (_ref) {\n var id = _ref.id;\n return id === filterId;\n }),\n group = _filters$find.group,\n items = _filters$find.items;\n\n var _items$find = items.find(function (_ref2) {\n var id = _ref2.id;\n return id === itemId;\n }),\n label = _items$find.label;\n\n var urlStateValue = urlState[filterGroupPrefix + group] || [];\n if (typeof urlStateValue === 'string') {\n urlStateValue = urlStateValue.split(',');\n }\n\n var value = isChecked ? [].concat(_toConsumableArray(urlStateValue), [label]) : urlStateValue.filter(function (item) {\n return item !== label;\n });\n\n setUrlState(filterGroupPrefix + group, value);\n };\n\n /**\n * Handles what happens when a specific filter item (checkbox)\n * is clicked\n *\n * @param {CheckboxClickEvent} e\n * @listens CheckboxClickEvent\n */\n var handleCheckBoxChange = function handleCheckBoxChange(filterId, itemId, isChecked) {\n if (isXorFilter && isChecked) {\n clearAllFilters();\n }\n\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n if (filter.id !== filterId) return filter;\n\n return _extends({}, filter, {\n items: filter.items.map(function (item) {\n return _extends({}, item, {\n selected: item.id === itemId ? !item.selected : item.selected\n });\n })\n });\n });\n });\n setCurrentPage(1);\n changeUrlState(filterId, itemId, isChecked);\n };\n\n /**\n * Shows/Hides Mobile Filter Panel\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleMobileFiltersToggle = function handleMobileFiltersToggle() {\n return setShowMobileFilters(function (prev) {\n return !prev;\n });\n };\n\n /**\n * When a card's bookmark icon is clicked, save the card\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleCardBookmarking = function handleCardBookmarking(id) {\n // Update bookmarked IDs\n var cardIsBookmarked = bookmarkedCardIds.find(function (card) {\n return card === id;\n });\n\n if (cardIsBookmarked) {\n setBookmarkedCardIds(function (prev) {\n return prev.filter(function (el) {\n return el !== id;\n });\n });\n } else {\n setBookmarkedCardIds(function (prev) {\n return [].concat(_toConsumableArray(prev), [id]);\n });\n }\n };\n\n /**\n * Will show or hide all saved bookmarks when clicked\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowBookmarksFilterClick = function handleShowBookmarksFilterClick(e) {\n e.stopPropagation();\n setShowBookmarks(function (prev) {\n return !prev;\n });\n setCurrentPage(1);\n };\n\n /**\n * If top filter panel, toggle or hide more button\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowAllTopFilters = function handleShowAllTopFilters() {\n setShowLimitedFiltersQty(function (prev) {\n return !prev;\n });\n };\n\n /**\n * On window click, all dropdowns should hide\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleWindowClick = function handleWindowClick() {\n setOpenDropdown(null);\n };\n\n /**\n * Handles escape for mobile filter dialog\n *\n * @param event\n */\n var handleMobileFilterEscape = function handleMobileFilterEscape(event) {\n if (event.key !== 'Escape' && event.key !== 'Esc') return;\n\n setShowMobileFilters(false);\n };\n\n /**\n **** Effects ****\n */\n\n /**\n * Sets authored filters as state\n * @returns {Void} - an updated state\n */\n\n (0, _react.useEffect)(function () {\n setFilters(authoredFilters.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n opened: DESKTOP_SCREEN_SIZE ? filterGroup.openedOnLoad : false,\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n }));\n }, []);\n\n /**\n * Sets filters from url as state\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n setFilters(function (origin) {\n return origin.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n\n if (!urlStateValue) return filter;\n\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n var urlSearchValue = urlState[searchPrefix];\n if (urlSearchValue) {\n setSearchQuery(urlSearchValue[0]);\n }\n }, []);\n\n (0, _react.useEffect)(function () {\n setRandomSortId(Math.floor(Math.random() * 10e12));\n }, []);\n\n /**\n * Trigger after button load more click\n * @returns {Void} - an updated url page\n */\n (0, _react.useEffect)(function () {\n setUrlState('page', currentPage === 1 ? '' : currentPage);\n }, [currentPage]);\n\n var removeEmptyFilters = function removeEmptyFilters(allFilters, cardsFromJson) {\n var _ref3;\n\n var tags = (_ref3 = []).concat.apply(_ref3, _toConsumableArray(cardsFromJson.map(function (card) {\n return card.tags.map(function (tag) {\n return tag.id;\n });\n })));\n\n var timingTags = [_constants.EVENT_TIMING_IDS.LIVE, _constants.EVENT_TIMING_IDS.ONDEMAND, _constants.EVENT_TIMING_IDS.UPCOMING];\n\n return allFilters.map(function (filter) {\n return _extends({}, filter, {\n items: filter.items.filter(function (item) {\n return tags.includes(item.id) || tags.includes(item.label) || tags.toString().includes('/' + item.id) // ***** FIX HERE *****\n || timingTags.includes(item.id);\n })\n });\n }).filter(function (filter) {\n return filter.items.length > 0;\n });\n };\n\n /**\n * This handles getting Cards, there are some conditions:\n * - If target is not enabled a simple request is made without mods or delay.\n * - If target is enabled & tVisitor API is present add values from Visitor\n * - If target is enabled & the Visitor API is not present setTimeout with\n * counter to recheck for the Visitor API. If 20 attempts are made w/o\n * success fail the request.\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (isLazy && visibleStamp || isLazy && !hasFetched) {\n return;\n }\n var _window = window,\n visitorPromise = _window.__satelliteLoadedPromise;\n\n\n var collectionEndpoint = getConfig('collection', 'endpoint');\n var fallbackEndpoint = getConfig('collection', 'fallbackEndpoint');\n\n var r = new RegExp('^(?:[a-z]+:)?//', 'i');\n var collectionEndpointURI = void 0;\n if (r.test(collectionEndpoint)) {\n collectionEndpointURI = new URL(collectionEndpoint);\n } else {\n collectionEndpointURI = new URL(collectionEndpoint, window.location.origin);\n }\n\n if (!fallbackEndpoint) {\n collectionEndpointURI.searchParams.set('flatFile', false);\n collectionEndpoint = collectionEndpointURI.toString();\n }\n\n setLoading(true);\n\n /**\n * @func getCards\n * @desc wraps fetch with function to make it reusable\n *\n * @param {String} endPoint, URL with params for card request\n * @returns {Void} - an updated state\n */\n function getCards() {\n var endPoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : collectionEndpoint;\n\n var start = Date.now();\n return window.fetch(endPoint, {\n credentials: 'include',\n headers: headers\n }).then(function (resp) {\n var ok = resp.ok,\n status = resp.status,\n statusText = resp.statusText,\n url = resp.url;\n\n\n if (ok) {\n return resp.json().then(function (json) {\n var validData = !!Object.keys(json).length;\n\n if (validData) return json;\n\n (0, _lana.logLana)({ message: 'no valid response data from ' + endPoint, tags: 'collection' });\n return Promise.reject(new Error('no valid reponse data'));\n });\n }\n (0, _lana.logLana)({ message: 'failure for call to ' + url, tags: 'collection', errorMessage: status + ': ' + statusText });\n return Promise.reject(new Error(status + ': ' + statusText + ', failure for call to ' + url));\n }).then(function (payload) {\n (0, _lana.logLana)({ message: 'response took ' + (Date.now() - start) / 1000 + 's', tags: 'collection' });\n setLoading(false);\n setIsFirstLoad(true);\n if (!(0, _general.getByPath)(payload, 'cards.length')) {\n (0, _lana.logLana)({ message: 'no cards return by query to this endpoint: ' + endPoint, tags: 'collection' });\n return;\n }\n if (payload.isHashed) {\n var TAG_HASH_LENGTH = 6;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = authoredFilters[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var group = _step.value;\n\n group.id = rollingHash(group.id, TAG_HASH_LENGTH);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = group.items[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var filterItem = _step3.value;\n\n var _getParentChild = getParentChild(filterItem.id),\n _getParentChild2 = _slicedToArray(_getParentChild, 2),\n parent = _getParentChild2[0],\n child = _getParentChild2[1];\n\n filterItem.id = rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var temp = [];\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = hideCtaTags[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var tag = _step2.value;\n\n var _getParentChild3 = getParentChild(tag),\n _getParentChild4 = _slicedToArray(_getParentChild3, 2),\n parent = _getParentChild4[0],\n child = _getParentChild4[1];\n\n if (parent !== '' && child !== '') {\n temp.push(rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH));\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n hideCtaTags = temp;\n }\n\n var _removeDuplicateCards = new _JsonProcessor2.default(payload.cards).removeDuplicateCards().addCardMetaData(_constants.TRUNCATE_TEXT_QTY, onlyShowBookmarks, bookmarkedCardIds, hideCtaIds, hideCtaTags),\n _removeDuplicateCards2 = _removeDuplicateCards.processedCards,\n processedCards = _removeDuplicateCards2 === undefined ? [] : _removeDuplicateCards2;\n\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n } else {\n setFilters(function () {\n return authoredFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n }\n\n var transitions = (0, _general.getTransitions)(processedCards);\n if (sortOption.sort.toLowerCase() === 'eventsort') {\n while (transitions.size() > 0) {\n setTimeout(function () {\n nextTransition();\n }, transitions.dequeue().priority + _constants.ONE_SECOND_DELAY);\n }\n }\n\n setCards(processedCards);\n if (!showEmptyFilters) {\n setFilters(function (prevFilters) {\n return removeEmptyFilters(prevFilters, processedCards);\n });\n }\n setTimeout(function () {\n if (!scrollElementRef.current) return;\n if (processedCards.length === 0) return;\n if (currentPage === 1) return;\n var cardsToshow = processedCards.slice(0, resultsPerPage * currentPage);\n var getLastPageID = resultsPerPage * currentPage - resultsPerPage;\n if (cardsToshow.length < getLastPageID) return;\n var lastID = scrollElementRef.current.children[getLastPageID];\n lastID.scrollIntoView();\n }, 100);\n }).catch(function () {\n if (endPoint === collectionEndpoint && fallbackEndpoint) {\n getCards(fallbackEndpoint);\n return;\n }\n (0, _lana.logLana)({ message: 'failed to return processed cards', tags: 'collection' });\n setLoading(false);\n setApiFailure(true);\n });\n }\n /**\n * @func getVisitorData\n * @desc wraps fetching Visitor API data in a function for reuse, also if\n * last used session is checked, update currentEntityId with targetValueRevealID\n *\n * @param {Promise} visitorApi, window.__satelliteLoadedPromise when accessed\n * @returns {Void} - an updated state, thru calling getCards\n */\n function getVisitorData(visitorApi) {\n var collectionURI = new URL(collectionEndpoint);\n\n if (useLastViewedSession) {\n var targetRevealId = localStorage.getItem('targetValueRevealID');\n if (targetRevealId) {\n collectionURI.searchParams.set('currentEntityId', targetRevealId);\n }\n }\n\n visitorApi.then(function (result) {\n if (window.alloy && window.edgeConfigId) {\n window.alloy('getIdentity').then(function (res) {\n collectionURI.searchParams.set('mcgvid', res.identity.ECID);\n collectionURI.searchParams.set('mboxMCGLH', res.edge.regionId);\n getCards(collectionURI.toString());\n });\n } else {\n var visitor = result.getVisitorId();\n collectionURI.searchParams.set('mcgvid', visitor.getMarketingCloudVisitorID());\n collectionURI.searchParams.set('sdid', visitor.getSupplementalDataID());\n collectionURI.searchParams.set('mboxAAMB', visitor.getAudienceManagerBlob());\n collectionURI.searchParams.set('mboxMCGLH', visitor.getAudienceManagerLocationHint());\n getCards(collectionURI.toString());\n }\n });\n }\n\n /**\n * @func visitorRetry\n * @desc Visitor API is late loading often, this sets a recursive call\n * in a setTimeout to run 20 times, and then fail the request.\n *\n * @returns {Void} - an updated state, thru calling getVisitorData which\n * calls getCards\n */\n function visitorRetry() {\n var retryCount = 0;\n\n var timedRetry = function timedRetry() {\n setTimeout(function () {\n if (retryCount >= 20) {\n setLoading(false);\n\n setApiFailure(true);\n\n return;\n }\n\n var _window2 = window,\n visitorPromiseRetry = _window2.__satelliteLoadedPromise;\n\n\n if (visitorPromiseRetry) {\n getVisitorData(visitorPromiseRetry);\n }\n\n if (!visitorPromiseRetry && retryCount < 20) {\n timedRetry();\n }\n\n retryCount += 1;\n }, 100);\n };\n\n timedRetry();\n }\n\n if (targetEnabled && visitorPromise) {\n getVisitorData(visitorPromise);\n }\n\n if (targetEnabled && !visitorPromise) {\n visitorRetry();\n }\n\n if (!targetEnabled) {\n getCards();\n }\n }, [visibleStamp, hasFetched]);\n\n /**\n * Saves cards to local storage and updates card w/ bookmarked data\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n (0, _general.saveBookmarksToLocalStorage)(bookmarkedCardIds);\n setCards((0, _Helpers.getUpdatedCardBookmarkData)(cards, bookmarkedCardIds));\n }, [bookmarkedCardIds]);\n\n /**\n * Handles clearing state on showBookmarks\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (showBookmarks) {\n clearAllFilters();\n setSearchQuery('');\n }\n }, [showBookmarks]);\n\n /**\n * Handles focus and escape on mobile filter toggle\n * @returns {Void}\n */\n (0, _react.useEffect)(function () {\n if (showMobileFilters) {\n if (filterItemRef && filterItemRef.current) {\n filterItemRef.current.focusMobTitle();\n }\n document.addEventListener('keydown', handleMobileFilterEscape);\n } else {\n if (filterInfoRef && filterInfoRef.current) {\n filterInfoRef.current.focus();\n }\n document.removeEventListener('keydown', handleMobileFilterEscape);\n }\n\n return function () {\n document.removeEventListener('keydown', handleMobileFilterEscape);\n };\n }, [showMobileFilters]);\n\n var box = (0, _react.useRef)();\n\n (0, _react.useEffect)(function () {\n if (box && !visibleStamp && isLazy) {\n var io = new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0) return;\n setHasFetched(true);\n setVisibleStamp(new Date().getTime());\n });\n io.observe(box.current);\n }\n }, [box]);\n\n /**\n **** Derived State ****\n */\n\n /**\n * Array of filters chosen by the user\n * @type {Array}\n */\n var activeFilterIds = (0, _Helpers.getActiveFilterIds)(filters);\n\n /**\n * Array of filters panels (groupings) created by the author\n * @type {Array}\n */\n var activePanels = (0, _Helpers.getActivePanels)(activeFilterIds) || new Set();\n\n /**\n * Instance of CardFilterer class that handles returning subset of cards\n * based off user interactions\n *\n * @type {Object}\n */\n var cardFilterer = new _CardFilterer2.default(cards, randomSortId, sampleSize, reservoirSize, featuredCards);\n\n /**\n * @type {Function} getFilteredCollection\n * @desc Closure around CardFilterer for reuse within context\n * @returns {Object}\n * */\n var getFilteredCollection = function getFilteredCollection() {\n return cardFilterer.sortCards(sortOption, eventFilter, featuredCards, hideCtaIds, isFirstLoad).keepBookmarkedCardsOnly(onlyShowBookmarks, bookmarkedCardIds, showBookmarks).keepCardsWithinDateRange().filterCards(activeFilterIds, activePanels, filterLogic, _constants.FILTER_TYPES, currCategories).truncateList(totalCardLimit).searchCards(searchQuery, searchFields, cardStyle).removeCards(inclusionIds);\n };\n\n /**\n * @type {Array} filteredCards: Filtered cards based off current state of page\n * @type {Number} nextTransitionMs: Number for timed event sort transition\n */\n /* eslint-disable no-unused-vars */\n\n var _getFilteredCollectio = getFilteredCollection(),\n _getFilteredCollectio2 = _getFilteredCollectio.filteredCards,\n filteredCards = _getFilteredCollectio2 === undefined ? [] : _getFilteredCollectio2,\n _getFilteredCollectio3 = _getFilteredCollectio.nextTransitionMs,\n nextTransitionMs = _getFilteredCollectio3 === undefined ? 0 : _getFilteredCollectio3;\n\n /**\n * Subset of cards to show the user\n * @type {Array}\n */\n\n\n var gridCards = timedCollection.length ? timedCollection : filteredCards;\n\n /**\n * Total pages (used by Paginator Component)\n * @type {Number}\n */\n var totalPages = (0, _Helpers.getTotalPages)(resultsPerPage, gridCards.length);\n\n /**\n * Number of cards to show (used by Load More component)\n * @type {Number}\n */\n var numCardsToShow = (0, _Helpers.getNumCardsToShow)(resultsPerPage, currentPage, gridCards.length);\n\n /**\n * How many filters were selected - (used by Left Filter Panel)\n * @type {Number}\n */\n var selectedFiltersItemsQty = (0, _consonant.getNumSelectedFilterItems)(filters);\n\n /**\n * Conditions to Display A Form Of Pagination\n * @type {Boolean}\n */\n var displayPagination = (0, _Helpers.shouldDisplayPaginator)(paginationIsEnabled, totalCardLimit, gridCards.length);\n /**\n * Conditions to display the Load More Button\n * @type {Boolean}\n */\n var displayLoadMore = displayPagination && paginationType === 'loadMore';\n\n /**\n * Conditions to display the Paginator Component\n * @type {Boolean}\n */\n var displayPaginator = displayPagination && paginationType === 'paginator';\n\n /**\n * Conditions to display the Left Filter Panel Component\n * @type {Boolean}\n */\n var displayLeftFilterPanel = filterPanelEnabled && filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Whether at lease one card was returned by Card Filterer\n * @type {Boolean}\n */\n var atLeastOneCard = gridCards.length > 0;\n\n /**\n * Where to place the Sort Popup (either left or right)\n * @type {String} - Location of Sort Popup in Top Filter Panel View\n */\n var topPanelSortPopupLocation = filters.length > 0 && windowWidth < _constants.TABLET_MIN_WIDTH ? _constants.SORT_POPUP_LOCATION.LEFT : _constants.SORT_POPUP_LOCATION.RIGHT;\n\n /**\n * How Long Paginator Component Should Be\n * @type {Number} - Location of Sort Popup in Top Filter Panel View\n */\n var paginatorCount = DESKTOP_SCREEN_SIZE ? _constants.PAGINATION_COUNT.DESKTOP : _constants.PAGINATION_COUNT.MOBILE;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isTopFilterPanel = filterPanelType === _constants.FILTER_PANEL.TOP;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isLeftFilterPanel = filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Ui options that cause grid to rerender necessitate the aria attribute being set\n * @type {Boolean}\n */\n var isGridAreaLive = filterPanelEnabled || searchEnabled || sortEnabled || paginationIsEnabled;\n\n var filterNames = '';\n filters.forEach(function (el) {\n el.items.filter(function (item) {\n return item.selected;\n }).forEach(function (item) {\n filterNames += item.label + ', ';\n });\n });\n\n /**\n **** Class names ****\n */\n\n /**\n * Class name for the authored theme:\n * light, dark, darkest;\n * @type {String}\n */\n var themeClass = (0, _classnames2.default)({\n 'consonant-u-themeLight': authoredMode === _constants.THEME_TYPE.LIGHT,\n 'consonant-u-themeDark': authoredMode === _constants.THEME_TYPE.DARK,\n 'consonant-u-themeDarkest': authoredMode === _constants.THEME_TYPE.DARKEST\n });\n\n /**\n * @param {*} filterList\n * @param {*} categoryList\n * @returns List of categories for the top pills\n * Prepends the \"All Topics\" pill to the list of categories\n */\n function getAuthoredCategories(filterList, categoryList) {\n var categoryIds = filterList.filter(function (filter) {\n return filter.id.includes('caas:product-categories');\n }).map(function (item) {\n return item.id;\n });\n\n // Sorts category list based on authored order\n var selectedCategories = categoryIds.map(function (id) {\n return categoryList && categoryList.filter(function (category) {\n return category.id === id;\n })[0];\n });\n\n return [{\n group: 'All Topics',\n title: 'All Topics',\n id: '',\n items: []\n }].concat(_toConsumableArray(selectedCategories));\n }\n\n /**\n * @returns List of all products from all categories for the 'All products' menu\n * Prepends the \"All products\" label to the list of categories\n */\n function getAllCategoryProducts() {\n if (!authoredCategories) return [];\n var allCategories = [];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = authoredCategories[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var category = _step4.value;\n\n if (category && category.items) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = category.items[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var item = _step5.value;\n\n item.fromCategory = true;\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n allCategories = allCategories.concat(category.items);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return {\n group: 'All products',\n id: 'caas:all-products',\n items: allCategories\n };\n }\n\n /**\n * @param {*} selectedCategories\n * @param {*} groupId\n * Sets the categories and filters based on the selected category\n */\n function categoryHandler(selectedCategories, groupId) {\n var temp = [];\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = selectedCategories[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var category = _step6.value;\n\n temp.push(category.id);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n setCategories(temp);\n setFilters(function (prevFilters) {\n prevFilters.pop();\n var newGroup = authoredCategories.filter(function (category) {\n return category.id === groupId;\n })[0];\n if (!newGroup.items.length) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n }\n prevFilters.push(newGroup);\n return prevFilters;\n });\n setSelectedCategory(groupId);\n setCurrentPage(1);\n }\n\n /**\n * @param {*} category\n * @returns The Authored icon for the category if exists,\n * otherwise returns the default icon from the tags or an empty string\n */\n function getCategoryIcon(category) {\n var authoredIcon = authoredFilters.filter(function (filter) {\n return filter.id === category.id;\n }).map(function (filter) {\n return filter.icon;\n }).toString();\n return authoredIcon || category.icon || '';\n }\n\n var collectionStr = collectionIdentifier ? collectionIdentifier + ' | ' : '';\n var filterStr = selectedFiltersItemsQty ? filterNames : 'No Filters';\n var searchQueryStr = searchQuery || 'None';\n var collectionAnalytics = collectionStr + 'Card Collection | Filters: ' + filterStr + '| Search Query: ' + searchQueryStr;\n /**\n * Class name for the consonant wrapper:\n * whether consonant wrapper contains left filter;\n * @type {String}\n */\n var wrapperClass = (0, _classnames2.default)({\n 'consonant-Wrapper': true,\n 'consonant-Wrapper--32MarginContainer': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,\n 'consonant-Wrapper--83PercentContainier': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_83_VW,\n 'consonant-Wrapper--1200MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1200_PX,\n 'consonant-Wrapper--1600MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1600_PX,\n 'consonant-Wrapper--1200MaxWidth Categories': isCategoriesContainer,\n 'consonant-Wrapper--carousel': isCarouselContainer,\n 'consonant-Wrapper--withLeftFilter': filterPanelEnabled && isLeftFilterPanel\n });\n\n (0, _react.useEffect)(function () {\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n });\n }\n }, []);\n\n return _react2.default.createElement(\n _contexts.ConfigContext.Provider,\n { value: config },\n _react2.default.createElement(\n _contexts.ExpandableContext.Provider,\n { value: { value: openDropdown, setValue: setOpenDropdown } },\n _react2.default.createElement(\n 'section',\n {\n ref: box,\n role: 'group',\n 'aria-label': title,\n 'daa-lh': collectionAnalytics,\n 'daa-im': String(trackImpressions),\n onClick: handleWindowClick,\n className: wrapperClass + ' ' + themeClass },\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-inner' },\n isCategoriesContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(\n 'h2',\n { 'data-testid': 'consonant-TopFilters-categoriesTitle', className: 'consonant-TopFilters-categoriesTitle' },\n title\n ),\n _react2.default.createElement(\n 'div',\n { className: 'filters-category' },\n authoredCategories.map(function (category) {\n if (!category) return null;\n var selected = '';\n if (category.id === selectedCategory) {\n selected = 'selected';\n }\n return _react2.default.createElement(\n 'button',\n {\n onClick: function onClick() {\n categoryHandler(category.items, category.id);\n },\n 'data-selected': selected,\n 'data-group': category.group.replaceAll(' ', '').toLowerCase() },\n _react2.default.createElement('img', { className: 'filters-category--icon', src: getCategoryIcon(category), alt: category.icon && 'Category icon' }),\n category.title\n );\n })\n )\n ),\n displayLeftFilterPanel && isStandardContainer && _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-leftFilterWrapper' },\n _react2.default.createElement(_Panel4.default, {\n filters: filters,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onFilterClick: handleFilterGroupClick,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n onClearFilterItems: clearFilterItem,\n onCheckboxClick: handleCheckBoxChange,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n onSelectedFilterClick: handleCheckBoxChange,\n showMobileFilters: showMobileFilters,\n resQty: gridCards.length,\n bookmarkComponent: _react2.default.createElement(_Bookmarks2.default, {\n showBookmarks: showBookmarks,\n onClick: handleShowBookmarksFilterClick,\n savedCardsCount: bookmarkedCardIds.length }),\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: leftPanelSearchPlaceholder,\n name: 'filtersSideSearch',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n ref: filterItemRef })\n ),\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-collection' + (isLoading ? ' is-loading' : '') },\n isTopFilterPanel && isStandardContainer && _react2.default.createElement(_Panel2.default, {\n filterPanelEnabled: filterPanelEnabled,\n filters: filters,\n windowWidth: windowWidth,\n resQty: gridCards.length,\n onCheckboxClick: handleCheckBoxChange,\n onFilterClick: handleFilterGroupClick,\n onClearFilterItems: clearFilterItem,\n categories: currCategories,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n showLimitedFiltersQty: showLimitedFiltersQty,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: topPanelSearchPlaceholder,\n name: 'filtersTopSearch',\n value: searchQuery,\n autofocus: DESKTOP_SCREEN_SIZE,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n name: 'filtersTopSelect',\n autoWidth: true,\n optionsAlignment: topPanelSortPopupLocation }),\n onShowAllClick: handleShowAllTopFilters }),\n isLeftFilterPanel && isStandardContainer && _react2.default.createElement(_Info.Info, {\n enabled: filterPanelEnabled,\n filtersQty: filters.length,\n filters: filters,\n cardsQty: gridCards.length,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: searchPlaceholderText,\n name: 'searchFiltersInfo',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n autoWidth: false,\n optionsAlignment: 'right' }),\n sortOptions: sortOptions,\n ref: filterInfoRef }),\n atLeastOneCard && isStandardContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(_Grid2.default, {\n resultsPerPage: resultsPerPage,\n pages: currentPage,\n cards: gridCards,\n forwardedRef: scrollElementRef,\n onCardBookmark: handleCardBookmarking,\n isAriaLiveActive: isGridAreaLive }),\n displayLoadMore && _react2.default.createElement(_LoadMore2.default, {\n onClick: onLoadMoreClick,\n show: numCardsToShow,\n total: gridCards.length }),\n displayPaginator && _react2.default.createElement(_Paginator2.default, {\n pageCount: paginatorCount,\n currentPageNumber: currentPage,\n totalPages: totalPages,\n showItemsPerPage: resultsPerPage,\n totalResults: gridCards.length,\n onClick: setCurrentPage })\n ),\n atLeastOneCard && isCarouselContainer && !(cardStyle === 'custom-card') && _react2.default.createElement(_CardsCarousel2.default, {\n resQty: gridCards.length,\n cards: gridCards,\n onCardBookmark: handleCardBookmarking }),\n atLeastOneCard && isCarouselContainer && cardStyle === 'custom-card' && _react2.default.createElement(_View2.default, {\n title: 'Not Supported',\n description: 'Using custom cards within a carousel layout is currently not supported. Please re-author the component',\n replaceValue: '' }),\n isLoading && !atLeastOneCard && _react2.default.createElement(_Loader2.default, {\n size: _constants.LOADER_SIZE.BIG,\n hidden: !totalCardLimit,\n absolute: true }),\n !isApiFailure && !atLeastOneCard && !isLoading && _react2.default.createElement(_View2.default, {\n title: noResultsTitle,\n description: noResultsDescription,\n replaceValue: searchQuery }),\n isApiFailure && _react2.default.createElement(_View2.default, {\n title: apiFailureTitle,\n description: apiFailureDescription,\n replaceValue: '' })\n )\n )\n )\n )\n );\n};\n\nContainer.propTypes = {\n config: (0, _propTypes.shape)(_config.configType)\n};\n\nContainer.defaultProps = {\n config: {}\n};\n\nexports.default = Container;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZWFjdC9zcmMvanMvY29tcG9uZW50cy9Db25zb25hbnQvQ29udGFpbmVyL0NvbnRhaW5lci5qc3g/YzY0MCJdLCJuYW1lcyI6WyJDb250YWluZXIiLCJwcm9wcyIsImNvbmZpZyIsImdldENvbmZpZyIsImZpbHRlckdyb3VwUHJlZml4Iiwic2VhcmNoUHJlZml4IiwiQ0FSRF9IQVNIX0xFTkdUSCIsImZpbHRlclBhbmVsRW5hYmxlZCIsImZpbHRlclBhbmVsVHlwZSIsInBhZ2luYXRpb25UeXBlIiwicGFnaW5hdGlvbklzRW5hYmxlZCIsInJlc3VsdHNQZXJQYWdlIiwib25seVNob3dCb29rbWFya3MiLCJhdXRob3JlZEZpbHRlcnMiLCJmaWx0ZXJMb2dpYyIsInRvTG93ZXJDYXNlIiwidHJpbSIsInRvdGFsQ2FyZExpbWl0Iiwic2FtcGxlU2l6ZSIsInJlc2Vydm9pclNpemUiLCJzZWFyY2hGaWVsZHMiLCJzb3J0T3B0aW9ucyIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdFNvcnRPcHRpb24iLCJmZWF0dXJlZENhcmRzIiwidG9TdHJpbmciLCJyZXBsYWNlIiwic3BsaXQiLCJjb25jYXQiLCJtYXAiLCJyb2xsaW5nSGFzaCIsImlkIiwiaGlkZUN0YUlkcyIsImhpZGVDdGFUYWdzIiwibGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIiLCJ0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyIiwic2VhcmNoUGxhY2Vob2xkZXJUZXh0Iiwibm9SZXN1bHRzVGl0bGUiLCJub1Jlc3VsdHNEZXNjcmlwdGlvbiIsImFwaUZhaWx1cmVUaXRsZSIsImFwaUZhaWx1cmVEZXNjcmlwdGlvbiIsImlzTGF6eSIsInRyYWNrSW1wcmVzc2lvbnMiLCJjb2xsZWN0aW9uSWRlbnRpZmllciIsInRhcmdldEVuYWJsZWQiLCJ1c2VMYXN0Vmlld2VkU2Vzc2lvbiIsImF1dGhvcmVkTW9kZSIsImF1dGhvcmVkTGF5b3V0Q29udGFpbmVyIiwic2hvd0VtcHR5RmlsdGVycyIsImV2ZW50RmlsdGVyIiwic2VhcmNoRW5hYmxlZCIsInNvcnRFbmFibGVkIiwiY2FyZFN0eWxlIiwidGl0bGUiLCJoZWFkZXJzIiwiREVTS1RPUF9TQ1JFRU5fU0laRSIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJERVNLVE9QX01JTl9XSURUSCIsImlzWG9yRmlsdGVyIiwiRklMVEVSX1RZUEVTIiwiWE9SIiwiaXNDYXJvdXNlbENvbnRhaW5lciIsIkxBWU9VVF9DT05UQUlORVIiLCJDQVJPVVNFTCIsImlzU3RhbmRhcmRDb250YWluZXIiLCJpc0NhdGVnb3JpZXNDb250YWluZXIiLCJDQVRFR09SSUVTIiwiY2F0ZWdvcmllcyIsImF1dGhvcmVkQ2F0ZWdvcmllcyIsImdldEF1dGhvcmVkQ2F0ZWdvcmllcyIsInRpbWVkQ29sbGVjdGlvbiIsInNldFRpbWVkQ29sbGVjdGlvbiIsInRyYW5zaXRpb24iLCJzZXRUcmFuc2l0aW9uIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInVwZGF0ZVN0YXRlIiwic2Nyb2xsRWxlbWVudFJlZiIsIm5leHRUcmFuc2l0aW9uIiwidXNlQ2FsbGJhY2siLCJ1cmxTdGF0ZSIsInNldFVybFN0YXRlIiwiY2xlYXJVcmxTdGF0ZSIsIm9wZW5Ecm9wZG93biIsInNldE9wZW5Ecm9wZG93biIsImJvb2ttYXJrZWRDYXJkSWRzIiwic2V0Qm9va21hcmtlZENhcmRJZHMiLCJpbmNsdXNpb25JZHMiLCJwYWdlIiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsImZpbHRlcnMiLCJzZXRGaWx0ZXJzIiwiY3VyckNhdGVnb3JpZXMiLCJzZXRDYXRlZ29yaWVzIiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJzZXRTZWxlY3RlZENhdGVnb3J5Iiwic29ydE9wZW5lZCIsInNldFNvcnRPcGVuZWQiLCJzb3J0T3B0aW9uIiwic2V0U29ydE9wdGlvbiIsInNvcnQiLCJTT1JUX1RZUEVTIiwiUkFORE9NIiwid2luZG93V2lkdGgiLCJ3aWR0aCIsInNob3dNb2JpbGVGaWx0ZXJzIiwic2V0U2hvd01vYmlsZUZpbHRlcnMiLCJzaG93Qm9va21hcmtzIiwic2V0U2hvd0Jvb2ttYXJrcyIsInNob3dMaW1pdGVkRmlsdGVyc1F0eSIsInNldFNob3dMaW1pdGVkRmlsdGVyc1F0eSIsImNhcmRzIiwic2V0Q2FyZHMiLCJpc0xvYWRpbmciLCJzZXRMb2FkaW5nIiwiaXNBcGlGYWlsdXJlIiwic2V0QXBpRmFpbHVyZSIsInJhbmRvbVNvcnRJZCIsInNldFJhbmRvbVNvcnRJZCIsImlzRmlyc3RMb2FkIiwic2V0SXNGaXJzdExvYWQiLCJ2aXNpYmxlU3RhbXAiLCJzZXRWaXNpYmxlU3RhbXAiLCJoYXNGZXRjaGVkIiwic2V0SGFzRmV0Y2hlZCIsImZpbHRlckl0ZW1SZWYiLCJmaWx0ZXJJbmZvUmVmIiwiZ2V0UGFyZW50Q2hpbGQiLCJpIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwicyIsImwiLCJCQVNFIiwiTU9EIiwiaGFzaCIsImJhc2VQb3dlciIsImNoYXJDb2RlQXQiLCJnZXRBbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlIiwiZmlsdGVyR3JvdXBzIiwiZmlsdGVyR3JvdXAiLCJpdGVtcyIsImZpbHRlckl0ZW0iLCJzZWxlY3RlZCIsImdldEZpbHRlckl0ZW1DbGVhcmVkU3RhdGUiLCJjbGVhckZpbHRlckl0ZW0iLCJncm91cCIsInByZXZGaWx0ZXJzIiwiZmlsdGVyQ2xlYXJlZFN0YXRlIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJjaEZpbHRlciIsImluZGV4T2YiLCJpbmNsdWRlcyIsImNsZWFyQWxsRmlsdGVycyIsImFsbEZpbHRlcnNDbGVhcmVkU3RhdGUiLCJyZXNldEZpbHRlcnNTZWFyY2hBbmRCb29rbWFya3MiLCJvbkxvYWRNb3JlQ2xpY2siLCJwcmV2U3RhdGUiLCJzY3JvbGxUbyIsInBhZ2VZT2Zmc2V0IiwiaGFuZGxlU29ydENoYW5nZSIsIm9wdGlvbiIsImhhbmRsZVNlYXJjaElucHV0Q2hhbmdlIiwidmFsIiwiaGFuZGxlRmlsdGVyR3JvdXBDbGljayIsImZpbHRlcklkIiwib3BlbmVkIiwiZWwiLCJjaGFuZ2VVcmxTdGF0ZSIsIml0ZW1JZCIsImlzQ2hlY2tlZCIsImZpbmQiLCJsYWJlbCIsInVybFN0YXRlVmFsdWUiLCJmaWx0ZXIiLCJpdGVtIiwiaGFuZGxlQ2hlY2tCb3hDaGFuZ2UiLCJoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlIiwicHJldiIsImhhbmRsZUNhcmRCb29rbWFya2luZyIsImNhcmRJc0Jvb2ttYXJrZWQiLCJjYXJkIiwiaGFuZGxlU2hvd0Jvb2ttYXJrc0ZpbHRlckNsaWNrIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVNob3dBbGxUb3BGaWx0ZXJzIiwiaGFuZGxlV2luZG93Q2xpY2siLCJoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUiLCJldmVudCIsIm9wZW5lZE9uTG9hZCIsIm9yaWdpbiIsInVybFN0YXRlQXJyYXkiLCJTdHJpbmciLCJ1cmxTZWFyY2hWYWx1ZSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInJlbW92ZUVtcHR5RmlsdGVycyIsImFsbEZpbHRlcnMiLCJjYXJkc0Zyb21Kc29uIiwidGFncyIsInRhZyIsInRpbWluZ1RhZ3MiLCJFVkVOVF9USU1JTkdfSURTIiwiTElWRSIsIk9OREVNQU5EIiwiVVBDT01JTkciLCJ2aXNpdG9yUHJvbWlzZSIsIl9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZSIsImNvbGxlY3Rpb25FbmRwb2ludCIsImZhbGxiYWNrRW5kcG9pbnQiLCJyIiwiUmVnRXhwIiwiY29sbGVjdGlvbkVuZHBvaW50VVJJIiwidGVzdCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsImdldENhcmRzIiwiZW5kUG9pbnQiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwidGhlbiIsInJlc3AiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJ1cmwiLCJqc29uIiwidmFsaWREYXRhIiwiT2JqZWN0Iiwia2V5cyIsIm1lc3NhZ2UiLCJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJwYXlsb2FkIiwiaXNIYXNoZWQiLCJUQUdfSEFTSF9MRU5HVEgiLCJwYXJlbnQiLCJjaGlsZCIsInRlbXAiLCJwdXNoIiwiSnNvblByb2Nlc3NvciIsInJlbW92ZUR1cGxpY2F0ZUNhcmRzIiwiYWRkQ2FyZE1ldGFEYXRhIiwiVFJVTkNBVEVfVEVYVF9RVFkiLCJwcm9jZXNzZWRDYXJkcyIsInRyYW5zaXRpb25zIiwic2l6ZSIsInNldFRpbWVvdXQiLCJkZXF1ZXVlIiwicHJpb3JpdHkiLCJPTkVfU0VDT05EX0RFTEFZIiwiY3VycmVudCIsImNhcmRzVG9zaG93Iiwic2xpY2UiLCJnZXRMYXN0UGFnZUlEIiwibGFzdElEIiwiY2hpbGRyZW4iLCJzY3JvbGxJbnRvVmlldyIsImNhdGNoIiwiZ2V0VmlzaXRvckRhdGEiLCJ2aXNpdG9yQXBpIiwiY29sbGVjdGlvblVSSSIsInRhcmdldFJldmVhbElkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInJlc3VsdCIsImFsbG95IiwiZWRnZUNvbmZpZ0lkIiwicmVzIiwiaWRlbnRpdHkiLCJFQ0lEIiwiZWRnZSIsInJlZ2lvbklkIiwidmlzaXRvciIsImdldFZpc2l0b3JJZCIsImdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEIiwiZ2V0U3VwcGxlbWVudGFsRGF0YUlEIiwiZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYiIsImdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCIsInZpc2l0b3JSZXRyeSIsInJldHJ5Q291bnQiLCJ0aW1lZFJldHJ5IiwidmlzaXRvclByb21pc2VSZXRyeSIsImZvY3VzTW9iVGl0bGUiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb2N1cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJib3giLCJpbyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImludGVyc2VjdGlvblJhdGlvIiwiZ2V0VGltZSIsIm9ic2VydmUiLCJhY3RpdmVGaWx0ZXJJZHMiLCJhY3RpdmVQYW5lbHMiLCJTZXQiLCJjYXJkRmlsdGVyZXIiLCJDYXJkRmlsdGVyZXIiLCJnZXRGaWx0ZXJlZENvbGxlY3Rpb24iLCJzb3J0Q2FyZHMiLCJrZWVwQm9va21hcmtlZENhcmRzT25seSIsImtlZXBDYXJkc1dpdGhpbkRhdGVSYW5nZSIsImZpbHRlckNhcmRzIiwidHJ1bmNhdGVMaXN0Iiwic2VhcmNoQ2FyZHMiLCJyZW1vdmVDYXJkcyIsImZpbHRlcmVkQ2FyZHMiLCJuZXh0VHJhbnNpdGlvbk1zIiwiZ3JpZENhcmRzIiwidG90YWxQYWdlcyIsIm51bUNhcmRzVG9TaG93Iiwic2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHkiLCJkaXNwbGF5UGFnaW5hdGlvbiIsImRpc3BsYXlMb2FkTW9yZSIsImRpc3BsYXlQYWdpbmF0b3IiLCJkaXNwbGF5TGVmdEZpbHRlclBhbmVsIiwiRklMVEVSX1BBTkVMIiwiTEVGVCIsImF0TGVhc3RPbmVDYXJkIiwidG9wUGFuZWxTb3J0UG9wdXBMb2NhdGlvbiIsIlRBQkxFVF9NSU5fV0lEVEgiLCJTT1JUX1BPUFVQX0xPQ0FUSU9OIiwiUklHSFQiLCJwYWdpbmF0b3JDb3VudCIsIlBBR0lOQVRJT05fQ09VTlQiLCJERVNLVE9QIiwiTU9CSUxFIiwiaXNUb3BGaWx0ZXJQYW5lbCIsIlRPUCIsImlzTGVmdEZpbHRlclBhbmVsIiwiaXNHcmlkQXJlYUxpdmUiLCJmaWx0ZXJOYW1lcyIsInRoZW1lQ2xhc3MiLCJUSEVNRV9UWVBFIiwiTElHSFQiLCJEQVJLIiwiREFSS0VTVCIsImZpbHRlckxpc3QiLCJjYXRlZ29yeUxpc3QiLCJjYXRlZ29yeUlkcyIsInNlbGVjdGVkQ2F0ZWdvcmllcyIsImNhdGVnb3J5IiwiZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cyIsImFsbENhdGVnb3JpZXMiLCJmcm9tQ2F0ZWdvcnkiLCJjYXRlZ29yeUhhbmRsZXIiLCJncm91cElkIiwicG9wIiwibmV3R3JvdXAiLCJuZXh0RmlsdGVycyIsImdldENhdGVnb3J5SWNvbiIsImF1dGhvcmVkSWNvbiIsImljb24iLCJjb2xsZWN0aW9uU3RyIiwiZmlsdGVyU3RyIiwic2VhcmNoUXVlcnlTdHIiLCJjb2xsZWN0aW9uQW5hbHl0aWNzIiwid3JhcHBlckNsYXNzIiwiU0laRV8xMDBfVldfMzJfTUFSR0lOIiwiU0laRV84M19WVyIsIlNJWkVfMTIwMF9QWCIsIlNJWkVfMTYwMF9QWCIsInNldFZhbHVlIiwicmVwbGFjZUFsbCIsIkxPQURFUl9TSVpFIiwiQklHIiwicHJvcFR5cGVzIiwiY29uZmlnVHlwZSIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7O0FBT0E7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFPQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOztBQUNBOztBQWVBOztBQUlBOztBQU1BOzs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxJQUFNQSxZQUFZLFNBQVpBLFNBQVksQ0FBQ0MsS0FBRCxFQUFXO0FBQUEsUUFDakJDLE1BRGlCLEdBQ05ELEtBRE0sQ0FDakJDLE1BRGlCOztBQUV6QixRQUFNQyxZQUFZLGlDQUFpQkQsTUFBakIsQ0FBbEI7QUFDQSxRQUFNRSxvQkFBb0IsS0FBMUI7QUFDQSxRQUFNQyxlQUFlLEtBQXJCO0FBQ0EsUUFBTUMsbUJBQW1CLEVBQXpCOztBQUVBOzs7QUFHQSxRQUFNQyxxQkFBcUJKLFVBQVUsYUFBVixFQUF5QixTQUF6QixDQUEzQjtBQUNBLFFBQU1LLGtCQUFrQkwsVUFBVSxhQUFWLEVBQXlCLE1BQXpCLENBQXhCO0FBQ0EsUUFBTU0saUJBQWlCTixVQUFVLFlBQVYsRUFBd0IsTUFBeEIsQ0FBdkI7QUFDQSxRQUFNTyxzQkFBc0JQLFVBQVUs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O0FBR0ksMENBQWMwRCxXQUhsQixHQTdHSjtBQWtITXVCLHdDQUNGLDhCQUFDLGNBQUQ7QUFDSSxtQ0FBT2hGLGVBRFg7QUFFSSx5Q0FBYUMscUJBRmpCO0FBR0ksMENBQWEsRUFIakI7QUFuSEo7QUE3REo7QUFSSjtBQUhKO0FBREosS0FESjtBQXdNSCxDQTc2Q0Q7O0FBKzZDQXhDLFVBQVVpWSxTQUFWLEdBQXNCO0FBQ2xCL1gsWUFBUSxzQkFBTWdZLGtCQUFOO0FBRFUsQ0FBdEI7O0FBSUFsWSxVQUFVbVksWUFBVixHQUF5QjtBQUNyQmpZLFlBQVE7QUFEYSxDQUF6Qjs7a0JBSWVGLFMiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gICAgRnJhZ21lbnQsXG4gICAgdXNlRWZmZWN0LFxuICAgIHVzZVJlZixcbiAgICB1c2VTdGF0ZSxcbiAgICBjcmVhdGVSZWYsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgc2hhcGUgfSBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAnd2hhdHdnLWZldGNoJztcbmltcG9ydCB7IGxvZ0xhbmEgfSBmcm9tICcuLi9IZWxwZXJzL2xhbmEnO1xuaW1wb3J0IFBvcHVwIGZyb20gJy4uL1NvcnQvUG9wdXAnO1xuaW1wb3J0IFNlYXJjaCBmcm9tICcuLi9TZWFyY2gvU2VhcmNoJztcbmltcG9ydCBMb2FkZXIgZnJvbSAnLi4vTG9hZGVyL0xvYWRlcic7XG5pbXBvcnQge1xuICAgIGdldEJ5UGF0aCxcbiAgICBzYXZlQm9va21hcmtzVG9Mb2NhbFN0b3JhZ2UsXG4gICAgcmVhZEJvb2ttYXJrc0Zyb21Mb2NhbFN0b3JhZ2UsXG4gICAgcmVhZEluY2x1c2lvbnNGcm9tTG9jYWxTdG9yYWdlLFxuICAgIGdldFRyYW5zaXRpb25zLFxufSBmcm9tICcuLi9IZWxwZXJzL2dlbmVyYWwnO1xuaW1wb3J0IHsgY29uZmlnVHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZyc7XG5pbXBvcnQgQ2FyZHNDYXJvdXNlbCBmcm9tICcuLi9DYXJkc0Nhcm91c2VsL0NhcmRzQ2Fyb3VzZWwnO1xuaW1wb3J0IE5vUmVzdWx0c1ZpZXcgZnJvbSAnLi4vTm9SZXN1bHRzL1ZpZXcnO1xuaW1wb3J0IExvYWRNb3JlIGZyb20gJy4uL1BhZ2luYXRpb24vTG9hZE1vcmUnO1xuaW1wb3J0IEJvb2ttYXJrcyBmcm9tICcuLi9Cb29rbWFya3MvQm9va21hcmtzJztcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSAnLi4vUGFnaW5hdGlvbi9QYWdpbmF0b3InO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi4vR3JpZC9HcmlkJztcbmltcG9ydCBDYXJkRmlsdGVyZXIgZnJvbSAnLi4vSGVscGVycy9DYXJkRmlsdGVyZXInO1xuaW1wb3J0IEZpbHRlcnNQYW5lbFRvcCBmcm9tICcuLi9GaWx0ZXJzL1RvcC9QYW5lbCc7XG5pbXBvcnQgTGVmdEZpbHRlclBhbmVsIGZyb20gJy4uL0ZpbHRlcnMvTGVmdC9QYW5lbCc7XG5pbXBvcnQgSnNvblByb2Nlc3NvciBmcm9tICcuLi9IZWxwZXJzL0pzb25Qcm9jZXNzb3InO1xuaW1wb3J0IHsgdXNlV2luZG93RGltZW5zaW9ucywgdXNlVVJMU3RhdGUgfSBmcm9tICcuLi9IZWxwZXJzL2hvb2tzJztcbmltcG9ydCB7IEluZm8gYXMgTGVmdEluZm8gfSBmcm9tICcuLi9GaWx0ZXJzL0xlZnQvSW5mbyc7XG5pbXBvcnQge1xuICAgIERFU0tUT1BfTUlOX1dJRFRILFxuICAgIEZJTFRFUl9UWVBFUyxcbiAgICBGSUxURVJfUEFORUwsXG4gICAgTE9BREVSX1NJWkUsXG4gICAgUEFHSU5BVElPTl9DT1VOVCxcbiAgICBUQUJMRVRfTUlOX1dJRFRILFxuICAgIFRSVU5DQVRFX1RFWFRfUVRZLFxuICAgIFNPUlRfUE9QVVBfTE9DQVRJT04sXG4gICAgVEhFTUVfVFlQRSxcbiAgICBMQVlPVVRfQ09OVEFJTkVSLFxuICAgIE9ORV9TRUNPTkRfREVMQVksXG4gICAgU09SVF9UWVBFUyxcbiAgICBFVkVOVF9USU1JTkdfSURTLFxufSBmcm9tICcuLi9IZWxwZXJzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIENvbmZpZ0NvbnRleHQsXG4gICAgRXhwYW5kYWJsZUNvbnRleHQsXG59IGZyb20gJy4uL0hlbHBlcnMvY29udGV4dHMnO1xuaW1wb3J0IHtcbiAgICBnZXREZWZhdWx0U29ydE9wdGlvbixcbiAgICBnZXROdW1TZWxlY3RlZEZpbHRlckl0ZW1zLFxuICAgIG1ha2VDb25maWdHZXR0ZXIsXG59IGZyb20gJy4uL0hlbHBlcnMvY29uc29uYW50JztcblxuaW1wb3J0IHtcbiAgICBzaG91bGREaXNwbGF5UGFnaW5hdG9yLFxuICAgIGdldE51bUNhcmRzVG9TaG93LFxuICAgIGdldFRvdGFsUGFnZXMsXG4gICAgZ2V0QWN0aXZlRmlsdGVySWRzLFxuICAgIGdldEFjdGl2ZVBhbmVscyxcbiAgICBnZXRVcGRhdGVkQ2FyZEJvb2ttYXJrRGF0YSxcbn0gZnJvbSAnLi4vSGVscGVycy9IZWxwZXJzJztcblxuXG4vKipcbiAqIENvbnNvbmFudCBDYXJkIENvbGxlY3Rpb25cbiAqIENvbmZpZyBpcyBpbXBsaWNpdGx5IHBvcHVsYXRlZCBieSBhdXRob3JzXG4gKlxuICogQGNvbXBvbmVudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBjb2xsZWN0aW9uOiB7fSxcbiAgICBmZWF0dXJlZENhcmRzOiBbe31dLFxuICAgIGZpbHRlclBhbmVsOiB7fSxcbiAgICBoaWRlQ3RhSWRzOiBbe31dLFxuICAgIGhpZGVDdGFUYWdzOiBbe31dLFxuICAgIHNvcnQ6IHt9LFxuICAgIHBhZ2luYXRpb246IHt9LFxuICAgIGJvb2ttYXJrczoge30sXG4gICAgc2VhcmNoOiB7fSxcbiAgICBsYW5ndWFnZTogJydcbiAqIH1cbiAqIHJldHVybiAoXG4gKiAgIDxDb250YWluZXIgY29uZmlnPXtjb25maWd9Lz5cbiAqIClcbiAqL1xuY29uc3QgQ29udGFpbmVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHByb3BzO1xuICAgIGNvbnN0IGdldENvbmZpZyA9IG1ha2VDb25maWdHZXR0ZXIoY29uZmlnKTtcbiAgICBjb25zdCBmaWx0ZXJHcm91cFByZWZpeCA9ICdjaF8nO1xuICAgIGNvbnN0IHNlYXJjaFByZWZpeCA9ICdzaF8nO1xuICAgIGNvbnN0IENBUkRfSEFTSF9MRU5HVEggPSAxMDtcblxuICAgIC8qKlxuICAgICAqKioqIEF1dGhvcmVkIENvbmZpZ3MgKioqKlxuICAgICAqL1xuICAgIGNvbnN0IGZpbHRlclBhbmVsRW5hYmxlZCA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IGZpbHRlclBhbmVsVHlwZSA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAndHlwZScpO1xuICAgIGNvbnN0IHBhZ2luYXRpb25UeXBlID0gZ2V0Q29uZmlnKCdwYWdpbmF0aW9uJywgJ3R5cGUnKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uSXNFbmFibGVkID0gZ2V0Q29uZmlnKCdwYWdpbmF0aW9uJywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCByZXN1bHRzUGVyUGFnZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdyZXN1bHRzUGVyUGFnZScpO1xuICAgIGNvbnN0IG9ubHlTaG93Qm9va21hcmtzID0gZ2V0Q29uZmlnKCdib29rbWFya3MnLCAnbGVmdEZpbHRlclBhbmVsLmJvb2ttYXJrT25seUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBhdXRob3JlZEZpbHRlcnMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2ZpbHRlcnMnKTtcbiAgICBjb25zdCBmaWx0ZXJMb2dpYyA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZmlsdGVyTG9naWMnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBsZXQgdG90YWxDYXJkTGltaXQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAndG90YWxDYXJkc1RvU2hvdycpO1xuICAgIGNvbnN0IHNhbXBsZVNpemUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncmVzZXJ2b2lyLnNhbXBsZScpO1xuICAgIGNvbnN0IHJlc2Vydm9pclNpemUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncmVzZXJ2b2lyLnBvb2wnKTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdzZWFyY2hGaWVsZHMnKTtcbiAgICBjb25zdCBzb3J0T3B0aW9ucyA9IGdldENvbmZpZygnc29ydCcsICdvcHRpb25zJyk7XG4gICAgY29uc3QgZGVmYXVsdFNvcnQgPSBnZXRDb25maWcoJ3NvcnQnLCAnZGVmYXVsdFNvcnQnKTtcbiAgICBjb25zdCBkZWZhdWx0U29ydE9wdGlvbiA9IGdldERlZmF1bHRTb3J0T3B0aW9uKGNvbmZpZywgZGVmYXVsdFNvcnQpO1xuICAgIGxldCBmZWF0dXJlZENhcmRzID0gZ2V0Q29uZmlnKCdmZWF0dXJlZENhcmRzJywgJycpXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXFt8XFxdL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvYC9nLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lLG1heC1sZW5cbiAgICBmZWF0dXJlZENhcmRzID0gZmVhdHVyZWRDYXJkcy5jb25jYXQoZmVhdHVyZWRDYXJkcy5tYXAoaWQgPT4gcm9sbGluZ0hhc2goaWQsIENBUkRfSEFTSF9MRU5HVEgpKSk7XG4gICAgbGV0IGhpZGVDdGFJZHMgPSBnZXRDb25maWcoJ2hpZGVDdGFJZHMnLCAnJylcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcW3xcXF0vZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9gL2csICcnKVxuICAgICAgICAuc3BsaXQoJywnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBoaWRlQ3RhSWRzID0gaGlkZUN0YUlkcy5jb25jYXQoaGlkZUN0YUlkcy5tYXAoaWQgPT4gcm9sbGluZ0hhc2goaWQsIENBUkRfSEFTSF9MRU5HVEgpKSk7XG4gICAgbGV0IGhpZGVDdGFUYWdzID0gZ2V0Q29uZmlnKCdoaWRlQ3RhVGFncycsICcnKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucmVwbGFjZSgvXFxbfFxcXS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL2AvZywgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGxlZnRQYW5lbFNlYXJjaFBsYWNlaG9sZGVyID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5sZWZ0RmlsdGVyUGFuZWwuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Jyk7XG4gICAgY29uc3QgdG9wUGFuZWxTZWFyY2hQbGFjZWhvbGRlciA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4udG9wRmlsdGVyUGFuZWwuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Jyk7XG4gICAgY29uc3Qgc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5maWx0ZXJJbmZvLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCcpO1xuICAgIGNvbnN0IG5vUmVzdWx0c1RpdGxlID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5ub1Jlc3VsdHNUaXRsZScpO1xuICAgIGNvbnN0IG5vUmVzdWx0c0Rlc2NyaXB0aW9uID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5ub1Jlc3VsdHNEZXNjcmlwdGlvbicpO1xuICAgIGNvbnN0IGFwaUZhaWx1cmVUaXRsZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdpMThuLm9uRXJyb3JUaXRsZScpO1xuICAgIGNvbnN0IGFwaUZhaWx1cmVEZXNjcmlwdGlvbiA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdpMThuLm9uRXJyb3JEZXNjcmlwdGlvbicpO1xuICAgIGNvbnN0IGlzTGF6eSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdsYXp5bG9hZCcpO1xuICAgIGNvbnN0IHRyYWNrSW1wcmVzc2lvbnMgPSBnZXRDb25maWcoJ2FuYWx5dGljcycsICd0cmFja0ltcHJlc3Npb25zJyk7XG4gICAgY29uc3QgY29sbGVjdGlvbklkZW50aWZpZXIgPSBnZXRDb25maWcoJ2FuYWx5dGljcycsICdjb2xsZWN0aW9uSWRlbnRpZmllcicpO1xuICAgIGNvbnN0IHRhcmdldEVuYWJsZWQgPSBnZXRDb25maWcoJ3RhcmdldCcsICdlbmFibGVkJyk7XG4gICAgY29uc3QgdXNlTGFzdFZpZXdlZFNlc3Npb24gPSBnZXRDb25maWcoJ3RhcmdldCcsICdsYXN0Vmlld2VkU2Vzc2lvbicpO1xuICAgIGNvbnN0IGF1dGhvcmVkTW9kZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdtb2RlJyk7XG4gICAgY29uc3QgYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnbGF5b3V0LmNvbnRhaW5lcicpO1xuICAgIGNvbnN0IHNob3dFbXB0eUZpbHRlcnMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ3Nob3dFbXB0eUZpbHRlcnMnKTtcbiAgICBjb25zdCBldmVudEZpbHRlciA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZXZlbnRGaWx0ZXInKTtcbiAgICBjb25zdCBzZWFyY2hFbmFibGVkID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IHNvcnRFbmFibGVkID0gZ2V0Q29uZmlnKCdzb3J0JywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCBjYXJkU3R5bGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnY2FyZFN0eWxlJyk7XG4gICAgY29uc3QgdGl0bGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnaTE4bi50aXRsZScpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRDb25maWcoJ2hlYWRlcnMnLCAnJyk7XG5cbiAgICAvKipcbiAgICAgKioqKiBDb25zdGFudHMgKioqKlxuICAgICAqL1xuICAgIGNvbnN0IERFU0tUT1BfU0NSRUVOX1NJWkUgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSBERVNLVE9QX01JTl9XSURUSDtcbiAgICBjb25zdCBpc1hvckZpbHRlciA9IGZpbHRlckxvZ2ljLnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSBGSUxURVJfVFlQRVMuWE9SO1xuICAgIGNvbnN0IGlzQ2Fyb3VzZWxDb250YWluZXIgPSBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5DQVJPVVNFTDtcbiAgICBjb25zdCBpc1N0YW5kYXJkQ29udGFpbmVyID0gYXV0aG9yZWRMYXlvdXRDb250YWluZXIgIT09IExBWU9VVF9DT05UQUlORVIuQ0FST1VTRUw7XG4gICAgY29uc3QgaXNDYXRlZ29yaWVzQ29udGFpbmVyID0gYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuQ0FURUdPUklFUztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2NhdGVnb3JpZXMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmUsIG1heC1sZW5cbiAgICBjb25zdCBhdXRob3JlZENhdGVnb3JpZXMgPSBpc0NhdGVnb3JpZXNDb250YWluZXIgPyBnZXRBdXRob3JlZENhdGVnb3JpZXMoYXV0aG9yZWRGaWx0ZXJzLCBjYXRlZ29yaWVzKSA6IFtdO1xuXG4gICAgLyoqXG4gICAgICoqKiogSG9va3MgKioqKlxuICAgICAqL1xuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtBcnJheX0gdGltZWRDb2xsZWN0aW9uIC0gcmVzdWx0IG9mIFRpbWVkIEV2ZW50IFNvcnRcbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUIEFzIGFuIGFsdGVybmF0aXZlL2l0ZXJhdGlvbiBvbiBmaWx0ZXJlZCBjYXJkcyBmb3IgdGltZWRcbiAgICAgKiBjb2xsZWN0aW9uc1xuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gc2V0VGltZWRDb2xsZWN0aW9uXG4gICAgICogQGRlc2NyaXB0aW9uIC0gU2V0cyB0aW1lZENvbGxlY3Rpb24gYWZ0ZXIgc2V0VGltZW91dCB0cmlnZ2Vyc1xuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSB0aW1lZENvbGxlY3Rpb25cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgIGNvbnN0IFt0aW1lZENvbGxlY3Rpb24sIHNldFRpbWVkQ29sbGVjdGlvbl0gPSB1c2VTdGF0ZShbXSk7XG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge051bWJlcn0gdHJhbnNpdGlvbiAtIE1TIHRvIG5leHQgdHJhbnNpdGlvblxuICAgICAqIEBkZXNjcmlwdGlvbiDigJQgIHNldCBieSBldmVudFNvcnQsIGZyb20gY2FyZEZpbHRlcmV0Lm5leHRUcmFuc2l0aW9uTXNcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IHNldFRyYW5zaXRpb25cbiAgICAgKiBAZGVzY3JpcHRpb24gLSBuZXh0IFRyYW5zaXRpb24gdHJpZ2dlclxuICAgICAqXG4gICAgICogQHR5cGUge1tOdW1iZXIsIEZ1bmN0aW9uXX0gdHJhbnNpdGlvblxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3QgW3RyYW5zaXRpb24sIHNldFRyYW5zaXRpb25dID0gdXNlU3RhdGUoMCk7XG5cbiAgICBjb25zdCBbLCB1cGRhdGVTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgbmV4dFRyYW5zaXRpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB1cGRhdGVTdGF0ZSh7fSksIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7T2JqZWN0fSB1cmxTdGF0ZVxuICAgICAqIEBkZXNjcmlwdGlvbiDigJQgb2JqZWN0IHdpdGggdXJsIHF1ZXJ5IHZhbHVlc1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBzZXRVcmxTdGF0ZVxuICAgICAqIEBkZXNjcmlwdGlvbiAtIHNldCB1cmwgcXVlcnkgdmFsdWUgYnkga2V5XG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IGNsZWFyVXJsU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24gLSBjbGVhciB3aG9sZSB1cmwgcXVlcnkgc3RhdGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbT2JqZWN0LCBGdW5jdGlvbiwgRnVuY3Rpb25dfSBPcGVuRHJvcGRvd25cbiAgICAgKi9cbiAgICBjb25zdCBbdXJsU3RhdGUsIHNldFVybFN0YXRlLCBjbGVhclVybFN0YXRlXSA9IHVzZVVSTFN0YXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7TnVtYmVyfSBPcGVuRHJvcGRvd25TdGF0ZSAtIElkIG9mIGEgc2VsZWN0ZWQgZHJvcGRvd25cbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUIFBhc3NlZCBpbiBDb250ZXh0IFByb3ZpZGVyIFNvIEFsbCBOZXN0ZWQgQ29tcG9uZW50cyBjYW4gYmUgaW4gc3luY1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBPcGVuRHJvcGRvd25TdGF0ZVNldHRlclxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqXG4gICAgICogQHR5cGUge1tOdW1iZXIsIEZ1bmN0aW9uXX0gT3BlbkRyb3Bkb3duXG4gICAgICovXG4gICAgY29uc3QgW29wZW5Ecm9wZG93biwgc2V0T3BlbkRyb3Bkb3duXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0FycmF5fSBCb29rbWFya2VkQ2FyZElkc1N0YXRlIOKAlCBJbml0aWFpbHplZCBGcm9tIExvY2FsIFN0b3JhZ2VcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQm9va21hcmtlZENhcmRJZHNTZXR0ZXIg4oCUIFNldHMgaW50ZXJuYWwgc3RhdGUgb2Ygc2F2ZWQgYm9va21hcmtzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0FycmF5LCBGdW5jdGlvbl19IEJvb2ttYXJrZWRDYXJkSWRzXG4gICAgICovXG4gICAgY29uc3QgW2Jvb2ttYXJrZWRDYXJkSWRzLCBzZXRCb29rbWFya2VkQ2FyZElkc10gPSB1c2VTdGF0ZShyZWFkQm9va21hcmtzRnJvbUxvY2FsU3RvcmFnZSgpKTtcbiAgICBjb25zdCBbaW5jbHVzaW9uSWRzXSA9IHVzZVN0YXRlKHJlYWRJbmNsdXNpb25zRnJvbUxvY2FsU3RvcmFnZSgpKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtOdW1iZXJ9IEN1cnJlbnRQYWdlU3RhdGUg4oCUIEluaXRpYWxpemVkIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICogQGRlc2NyaXB0aW9uIFNhbWUgcGFnZSBzdGF0ZSBmb3IgJ0xvYWQgTW9yZScgb3IgJ1BhZ2luYXRvcidcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQ3VycmVudFBhZ2VTdGF0ZVNldHRlciDigJQgU2V0cyBwYWdlIGFzIHVzZXIgbmF2aWdhdGVzIHRocm91Z2ggcGFnZXNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyLCBGdW5jdGlvbl19IEN1cnJlbnRQYWdlXG4gICAgICovXG4gICAgY29uc3QgW2N1cnJlbnRQYWdlLCBzZXRDdXJyZW50UGFnZV0gPSB1c2VTdGF0ZSgrdXJsU3RhdGUucGFnZSB8fCAxKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtBcnJheX0gRmlsdGVyc1N0YXRlIOKAlCBDb250YWlucyBGaWx0ZXJzIEZvciBGaWx0ZXIgUGFuZWxcbiAgICAgKiBAZGVzY3JpcHRpb24gU2FtZSBGaWx0ZXIgc3RhdGUgZm9yIExlZnQgb3IgVG9wXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEZpbHRlcnNTdGF0ZVNldHRlciDigJQgU2V0cyBBdXRob3JlZCBGaWx0ZXJzIGFzIFN0YXRlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0FycmF5LCBGdW5jdGlvbl19IEZpbHRlcnNcbiAgICAgKi9cbiAgICBjb25zdCBbZmlsdGVycywgc2V0RmlsdGVyc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgLy8gd2luZG93LmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIGNvbnN0IFtjdXJyQ2F0ZWdvcmllcywgc2V0Q2F0ZWdvcmllc10gPSB1c2VTdGF0ZShbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7U3RyaW5nfSBTZWFyY2hRdWVyeVN0YXRlIOKAlCBXaWxsIGJlIHVzZWQgdG8gc2VhcmNoIHRocm91Z2ggY2FyZHNcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNlYXJjaFF1ZXJ5U3RhdGVTZXR0ZXIg4oCUIFNldHMgdXNlciBzZWFyY2ggcXVlcnlcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbU3RyaW5nLCBGdW5jdGlvbl19IFNlYXJjaFF1ZXJ5XG4gICAgICovXG4gICAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW3NlbGVjdGVkQ2F0ZWdvcnksIHNldFNlbGVjdGVkQ2F0ZWdvcnldID0gdXNlU3RhdGUoJycpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge1N0cmluZ30gU29ydE9wZW5lZFN0YXRlIOKAlCBUb2dnbGVzIFNvcnQgUG9wdXAgT3BlbmVkIE9yIENsb3NlZFxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU29ydE9wZW5lZFN0YXRlU2V0dGVyIOKAlCBTZXRzIFNvcnQgT3B0aW9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gU29ydE9wZW5lZFxuICAgICAqL1xuICAgIGNvbnN0IFtzb3J0T3BlbmVkLCBzZXRTb3J0T3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtTdHJpbmd9IFNvcnRPcHRpb25TdGF0ZSDigJQgQ2FuIGJlIG9uZSBvZiBhIHJhbmdlIG9mIHR5cGVzXG4gICAgICogQGRlc2NyaXB0aW9uICdUaXRsZSAoQS1aKScsICdUaXRsZSAoWi1BKSwgRGF0ZSAoTmV3IHRvIE9sZCksIERhdGUgKE9sZCB0byBOZXcpLCBGZWF0dXJlZFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTb3J0T3B0aW9uU3RhdGVTZXR0ZXIg4oCUIFNldHMgU29ydCBPcHRpb25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtbU3RyaW5nLCBGdW5jdGlvbl19IFNvcnRPcHRpb25cbiAgICAgKi9cbiAgICBjb25zdCBbc29ydE9wdGlvbiwgc2V0U29ydE9wdGlvbl0gPSB1c2VTdGF0ZShkZWZhdWx0U29ydE9wdGlvbik7XG5cbiAgICBpZiAoc29ydE9wdGlvbi5zb3J0ID09PSBTT1JUX1RZUEVTLlJBTkRPTSkge1xuICAgICAgICB0b3RhbENhcmRMaW1pdCA9IHNhbXBsZVNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IFdpbmRvd1dpZHRoU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIHRvZ2dsZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBsYXlvdXRzXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFdpbmRvd1dpZHRoU3RhdGVTZXR0ZXIg4oCUIFVwZGF0ZXMgd2luZG93IHdpZHRoXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W051bWJlcl19IFdpbmRvd1dpZHRoXG4gICAgICovXG4gICAgY29uc3QgeyB3aWR0aDogd2luZG93V2lkdGggfSA9IHVzZVdpbmRvd0RpbWVuc2lvbnMoKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBTaG93TW9iaWxlRmlsdGVyc1N0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiB0cnVlIG1vYmlsZSBmaWx0ZXJzIHdpbGwgYXBwZWFyIG9uIHRoZSBwYWdlXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNob3dNb2JpbGVGaWx0ZXJzU3RhdGVTZXR0ZXJcbiAgICAgKiBAZGVzY3JpcHRpb24gVG9nZ2xlcyBtb2JpbGUgZmlsdGVyIGhlYWRlci9mb290ZXIgdG8gc2hvdyBvciBoaWRlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gU2hvd01vYmlsZUZpbHRlcnNcbiAgICAgKi9cbiAgICBjb25zdCBbc2hvd01vYmlsZUZpbHRlcnMsIHNldFNob3dNb2JpbGVGaWx0ZXJzXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBTaG93Qm9va21hcmtTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIEZvciBUb3AgRmlsdGVyIFBhbmVsLCB0aGVyZSBpcyBhIGxpbWl0IHRvIGhvdyBtYW55IGZpbHRlciBncm91cHMgY2FuIHNob3dcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU2hvd0Jvb2ttYXJrU3RhdGVTZXR0ZXIg4oCUIFNldHMgbGltaXQgb24gZmlsdGVyIHF1YW50aXR5XG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gb3ZlciBhbGxvd2VkIEZpbHRlciBHcm91cCBRdWFudGl0eSAtIEEgXCJNb3JlICtcIiBidXR0b24gYXBwZWFyc1xuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IFNob3dCb29rbWFya3NcbiAgICAgKi9cbiAgICBjb25zdCBbc2hvd0Jvb2ttYXJrcywgc2V0U2hvd0Jvb2ttYXJrc10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gTGltaXRGaWx0ZXJRdWFudGl0eVN0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gRm9yIFRvcCBGaWx0ZXIgUGFuZWwsIHRoZXJlIGlzIGEgbGltaXQgdG8gaG93IG1hbnkgZmlsdGVyIGdyb3VwcyBjYW4gc2hvd1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBMaW1pdEZpbHRlclF1YW50aXR5U3RhdGVTZXR0ZXIg4oCUIFNldHMgbGltaXQgb24gZmlsdGVyIHF1YW50aXR5XG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gb3ZlciBhbGxvd2VkIEZpbHRlciBHcm91cCBRdWFudGl0eSAtIEEgXCJNb3JlICtcIiBidXR0b24gYXBwZWFyc1xuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IExpbWl0RmlsdGVyUXVhbnRpdHlcbiAgICAgKi9cbiAgICBjb25zdCBbc2hvd0xpbWl0ZWRGaWx0ZXJzUXR5LCBzZXRTaG93TGltaXRlZEZpbHRlcnNRdHldID0gdXNlU3RhdGUoZmlsdGVyUGFuZWxUeXBlID09PSAndG9wJyk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IENhcmRTdGF0ZVxuICAgICAqIEBkZXNjcmlwdGlvbiBzZXRzIGNhcmRzIHJldHJpZXZlZCBlaXRoZXIgc2VydmVyIHNpZGUgcmVuZGVyIG9yIEFQSSBjYWxsXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IENhcmRTdGF0ZVNldHRlclxuICAgICAqIEBkZXNjcmlwdGlvbiBFLmcuIFJlbmRlciBGZWF0dXJlZCBDYXJkcyBTZXJ2ZXIgc2lkZSwgV2hpbGUgY29sbGVjdGlvbiBjYXJkcyBmcm9tIEFQSSBjYWxsXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0FycmF5LCBGdW5jdGlvbl19IENhcmRzXG4gICAgICovXG4gICAgY29uc3QgW2NhcmRzLCBzZXRDYXJkc10gPSB1c2VTdGF0ZShbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gTG9hZGluZ1N0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiB0cnVlIGEgbG9hZGluZyBzcGlubmVyIHdpbGwgYXBwZWFyIG9uIHRoZSBwYWdlXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IExvYWRpbmdTdGF0ZVNldHRlciDigJQgU2V0cyBsb2FkZXIgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBUcnVlIHdoaWxlIHdhaXRpbmcgZm9yIEFQSSByZXNwb25zZS4gRmFsc2Ugb24gY2FyZHMgcmV0cmlldmVkIG9yIGFwaSBmYWlsdXJlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gTG9hZGluZ1xuICAgICAqL1xuICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IEFwaUZhaWx1cmVTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gdHJ1ZSBhbiBBUEkgZXJyb3IgaGFzIG9jY3VyZWRcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQXBpRmFpbHVyZVN0YXRlU2V0dGVyIOKAlCBTZXRzIEFQSSBmYWlsdXJlIGZsYWcgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBUcnVlIHdoZW4gcmV0cmlldmVkIG9yIGFwaSBmYWlsdXJlLiBGYWxzZSBvdGhlcndpc2VcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBBcGlGYWlsdXJlXG4gICAgICovXG4gICAgY29uc3QgW2lzQXBpRmFpbHVyZSwgc2V0QXBpRmFpbHVyZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JhbmRvbVNvcnRJZCwgc2V0UmFuZG9tU29ydElkXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtpc0ZpcnN0TG9hZCwgc2V0SXNGaXJzdExvYWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW3Zpc2libGVTdGFtcCwgc2V0VmlzaWJsZVN0YW1wXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2hhc0ZldGNoZWQsIHNldEhhc0ZldGNoZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERPTSByZWZlcmVuY2UgdG8gZmlyc3QgZmlsdGVyIGl0ZW1cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIGZpbHRlciBpdGVtIERPTSByZWZlcmVuY2VcbiAgICAgKi9cbiAgICBjb25zdCBmaWx0ZXJJdGVtUmVmID0gY3JlYXRlUmVmKCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgRE9NIHJlZmVyZW5jZSB0byBmaWx0ZXIgaW5mbyBidXR0b25cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIGZpbHRlciBpbmZvIERPTSByZWZlcmVuY2VcbiAgICAgKi9cbiAgICBjb25zdCBmaWx0ZXJJbmZvUmVmID0gY3JlYXRlUmVmKCk7XG5cbiAgICAvKipcbiAgICAgKioqKiBIZWxwZXIgTWV0aG9kcyAqKioqXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRDaGlsZChpZCkge1xuICAgICAgICBsZXQgaSA9IGlkLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGlkW2ldICE9PSAnLycgJiYgaSA+PSAwKSB7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtpZC5zdWJzdHJpbmcoMCwgaSksIGlkLnN1YnN0cmluZyhpICsgMSldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJvbGxpbmdIYXNoKHMsIGwpIHtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQkFTRSA9IDUzO1xuICAgICAgICBjb25zdCBNT0QgPSAxMCAqKiBsICsgNztcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBsZXQgYmFzZVBvd2VyID0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoYXNoID0gKGhhc2ggKyAocy5jaGFyQ29kZUF0KGkpIC0gOTcgKyAxKSAqIGJhc2VQb3dlcikgJSBNT0Q7XG4gICAgICAgICAgICBiYXNlUG93ZXIgPSAoYmFzZVBvd2VyICogQkFTRSkgJSBNT0Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgoaGFzaCArIE1PRCkgJSBNT0QpLnRvU3RyaW5nKDM2KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgYSBnaXZlbiBncm91cCBvZiBmaWx0ZXJzLCBpdCB3aWxsIHVuc2VsZWN0IGFsbCBvZiB0aGVtXG4gICAgICogQHBhcmFtIHtBcnJheX0gZmlsdGVyR3JvdXBzIC0gYSBncm91cCBvZiBmaWx0ZXJzXG4gICAgICogQHJldHVybnMge0FycmF5fSBmaXRsZXJHcm91cHMgLSB0aGUgdXBkYXRlZCBncm91cCBvZiBmaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgZ2V0QWxsRmlsdGVyc0NsZWFyZWRTdGF0ZSA9IGZpbHRlckdyb3VwcyA9PiBmaWx0ZXJHcm91cHMubWFwKGZpbHRlckdyb3VwID0+ICh7XG4gICAgICAgIC4uLmZpbHRlckdyb3VwLFxuICAgICAgICBpdGVtczogZmlsdGVyR3JvdXAuaXRlbXMubWFwKGZpbHRlckl0ZW0gPT4gKHtcbiAgICAgICAgICAgIC4uLmZpbHRlckl0ZW0sXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIH0pKSxcbiAgICB9KSk7XG5cbiAgICAvKipcbiAgICAgKiBGb3IgYSBnaXZlbiBncm91cCBvZiBmaWx0ZXJzLCBpdCB3aWxsIHVuc2VsZWN0IHRoZSBvbmUgd2l0aCBhIGdpdmVuIGlkXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIC0gdGhlIGlkIG9mIGFuIGluZGl2aWR1YWwgZmlsdGVyIGl0ZW1cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXJHcm91cHMgLSBhIGdyb3VwIG9mIGZpbHRlcnNcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGZpdGxlckdyb3VwcyAtIHRoZSB1cGRhdGVkIGdyb3VwIG9mIGZpbHRlcnNcbiAgICAgKi9cbiAgICBjb25zdCBnZXRGaWx0ZXJJdGVtQ2xlYXJlZFN0YXRlID0gKGlkLCBmaWx0ZXJHcm91cHMpID0+IGZpbHRlckdyb3Vwcy5tYXAoKGZpbHRlckdyb3VwKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXJHcm91cC5pZCAhPT0gaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJHcm91cDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZmlsdGVyR3JvdXAsXG4gICAgICAgICAgICBpdGVtczogZmlsdGVyR3JvdXAuaXRlbXMubWFwKGZpbHRlckl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJJdGVtLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgdW5jaGVjayBhIGZpbHRlciB3aXRoIGEgZ2l2ZW4gaWRcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gaWQgLSB0aGUgaWQgb2YgYW4gaW5kaXZpZHVhbCBmaWx0ZXIgaXRlbVxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICBjb25zdCBjbGVhckZpbHRlckl0ZW0gPSAoaWQsIGdyb3VwID0gJycpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckNsZWFyZWRTdGF0ZSA9IGdldEZpbHRlckl0ZW1DbGVhcmVkU3RhdGUoaWQsIHByZXZGaWx0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJDbGVhcmVkU3RhdGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIGNsZWFyVXJsU3RhdGUoKTtcbiAgICAgICAgLy8gYWN0dWFsbHkgY2xlYXIgdGhlIHVybCBzdGF0ZVxuICAgICAgICB1cmxQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hGaWx0ZXIgPSBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdjaF8nLCAnJykucmVwbGFjZSgvIC9nLCAnLScpO1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGZpbHRlckdyb3VwUHJlZml4KSAhPT0gMFxuICAgICAgICAgICAgICAgICYmICFpZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNoRmlsdGVyKVxuICAgICAgICAgICAgICAgIHx8ICFncm91cC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyAvZywgJy0nKS5pbmNsdWRlcyhjaEZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBzZXRVcmxTdGF0ZShrZXksIHZhbHVlLnJlcGxhY2UoLyUyMC9nLCAnICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgdW5jaGVjayBhbGwgZmlsdGVyIGl0ZW1zXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIGNvbnN0IGNsZWFyQWxsRmlsdGVycyA9ICgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbEZpbHRlcnNDbGVhcmVkU3RhdGUgPSBnZXRBbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlKHByZXZGaWx0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBhbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgICAgIGNsZWFyVXJsU3RhdGUoKTtcbiAgICAgICAgdXJsUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihmaWx0ZXJHcm91cFByZWZpeCkgIT09IDApIHNldFVybFN0YXRlKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIGZpbHRlcnMsIGFuZCBzZWFyY2ggdG8gZW1wdHkuIEhpZGVzIGJvb2ttYXJrIGZpbHRlclxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICBjb25zdCByZXNldEZpbHRlcnNTZWFyY2hBbmRCb29rbWFya3MgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyQWxsRmlsdGVycygpO1xuICAgICAgICBzZXRTZWFyY2hRdWVyeSgnJyk7XG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIGNsZWFyVXJsU3RhdGUoKTtcbiAgICAgICAgdXJsUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihmaWx0ZXJHcm91cFByZWZpeCkgPT09IC0xXG4gICAgICAgICAgICAgICAgJiYga2V5LmluZGV4T2Yoc2VhcmNoUHJlZml4KSA9PT0gLTEpIHNldFVybFN0YXRlKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd0Jvb2ttYXJrcyhmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqKioqIEVWRU5UIEhBTkRMRVJTICoqKipcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIE9uIExvYWQgTW9yZSBCdXR0b24gQ2xpY2ssIEluY3JlbWVudCBQYWdlIEN1b250ZXIgQnkgMVxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IG9uTG9hZE1vcmVDbGljayA9ICgpID0+IHtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UocHJldlN0YXRlID0+IHByZXZTdGF0ZSArIDEpO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgd2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGFrZXMgc29ydCB1c2VyIHNlbGVjdHMgYW5kIHNldHMgaXQgc28gY2FyZHMgYXJlIHNvcnRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlIC0gVGhlIG9ic2VydmFibGUgZXZlbnQuXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNvcnRDaGFuZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICAgIHNldFNvcnRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgc2V0U29ydE9wZW5lZChmYWxzZSk7XG4gICAgICAgIHNldElzRmlyc3RMb2FkKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB3aGVuZXZlciB0aGUgc2VhcmNoIGJveCBpcyBjbGlja2VkIG9yIGlucHV0IGZpZWxkXG4gICAgICogY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50LCBDaGFuZ2VFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnQsIENoYW5nZUV2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UgPSAodmFsKSA9PiB7XG4gICAgICAgIHNldFNlYXJjaFF1ZXJ5KHZhbCk7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgICAgICBzZXRVcmxTdGF0ZShzZWFyY2hQcmVmaXgsIHZhbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgd2hlbiBhIGdyb3VwIG9mIGZpbHRlcnMgaXMgY2xpY2tlZC4gQmVoYXZpb3Igc2hvdWxkIGJlXG4gICAgICogdG8gdG9nZ2xlIGdyb3VwIG9wZW4gb3IgY2xvc2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGUgLSBUaGUgb2JzZXJ2YWJsZSBldmVudC5cbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlRmlsdGVyR3JvdXBDbGljayA9IChmaWx0ZXJJZCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgbGV0IG9wZW5lZDtcbiAgICAgICAgICAgIHJldHVybiBwcmV2RmlsdGVycy5tYXAoKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmlkID09PSBmaWx0ZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBvcGVuZWQgPSAhZWwub3BlbmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgICAgICAgICAgICBvcGVuZWQgPSBlbC5vcGVuZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmVsLCBvcGVuZWQgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2lsbCBmaW5kIGFuZCBzZXQgbmVlZGVkIGZpbHRlciB0byB1cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWx0ZXJJZCAtIHNlbGVjdGVkIGZpbHRlciBncm91cCBpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtSWQgLSBzZWxlY3RlZCBmaWx0ZXIgaXRlbSBpZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNDaGVja2VkXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCB1cmxcbiAgICAgKi9cbiAgICBjb25zdCBjaGFuZ2VVcmxTdGF0ZSA9IChmaWx0ZXJJZCwgaXRlbUlkLCBpc0NoZWNrZWQpID0+IHtcbiAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcnMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gZmlsdGVySWQpO1xuICAgICAgICBjb25zdCB7IGxhYmVsIH0gPSBpdGVtcy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBpdGVtSWQpO1xuXG4gICAgICAgIGxldCB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVbZmlsdGVyR3JvdXBQcmVmaXggKyBncm91cF0gfHwgW107XG4gICAgICAgIGlmICh0eXBlb2YgdXJsU3RhdGVWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQ2hlY2tlZFxuICAgICAgICAgICAgPyBbLi4udXJsU3RhdGVWYWx1ZSwgbGFiZWxdXG4gICAgICAgICAgICA6IHVybFN0YXRlVmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbGFiZWwpO1xuXG4gICAgICAgIHNldFVybFN0YXRlKGZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXAsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB3aGF0IGhhcHBlbnMgd2hlbiBhIHNwZWNpZmljIGZpbHRlciBpdGVtIChjaGVja2JveClcbiAgICAgKiBpcyBjbGlja2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NoZWNrYm94Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENoZWNrYm94Q2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUNoZWNrQm94Q2hhbmdlID0gKGZpbHRlcklkLCBpdGVtSWQsIGlzQ2hlY2tlZCkgPT4ge1xuICAgICAgICBpZiAoaXNYb3JGaWx0ZXIgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEZpbHRlcnMocHJldkZpbHRlcnMgPT4gcHJldkZpbHRlcnMubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuaWQgIT09IGZpbHRlcklkKSByZXR1cm4gZmlsdGVyO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICBpdGVtczogZmlsdGVyLml0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpdGVtLmlkID09PSBpdGVtSWQgPyAhaXRlbS5zZWxlY3RlZCA6IGl0ZW0uc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgY2hhbmdlVXJsU3RhdGUoZmlsdGVySWQsIGl0ZW1JZCwgaXNDaGVja2VkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2hvd3MvSGlkZXMgTW9iaWxlIEZpbHRlciBQYW5lbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGUgPSAoKSA9PiBzZXRTaG93TW9iaWxlRmlsdGVycyhwcmV2ID0+ICFwcmV2KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBjYXJkJ3MgYm9va21hcmsgaWNvbiBpcyBjbGlja2VkLCBzYXZlIHRoZSBjYXJkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlQ2FyZEJvb2ttYXJraW5nID0gKGlkKSA9PiB7XG4gICAgICAgIC8vIFVwZGF0ZSBib29rbWFya2VkIElEc1xuICAgICAgICBjb25zdCBjYXJkSXNCb29rbWFya2VkID0gYm9va21hcmtlZENhcmRJZHMuZmluZChjYXJkID0+IGNhcmQgPT09IGlkKTtcblxuICAgICAgICBpZiAoY2FyZElzQm9va21hcmtlZCkge1xuICAgICAgICAgICAgc2V0Qm9va21hcmtlZENhcmRJZHMocHJldiA9PiBwcmV2LmZpbHRlcihlbCA9PiBlbCAhPT0gaWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldEJvb2ttYXJrZWRDYXJkSWRzKHByZXYgPT4gWy4uLnByZXYsIGlkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2lsbCBzaG93ICBvciBoaWRlIGFsbCBzYXZlZCBib29rbWFya3Mgd2hlbiBjbGlja2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU2hvd0Jvb2ttYXJrc0ZpbHRlckNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0U2hvd0Jvb2ttYXJrcyhwcmV2ID0+ICFwcmV2KTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIElmIHRvcCBmaWx0ZXIgcGFuZWwsIHRvZ2dsZSBvciBoaWRlIG1vcmUgYnV0dG9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU2hvd0FsbFRvcEZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldFNob3dMaW1pdGVkRmlsdGVyc1F0eShwcmV2ID0+ICFwcmV2KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gd2luZG93IGNsaWNrLCBhbGwgZHJvcGRvd25zIHNob3VsZCBoaWRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlV2luZG93Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHNldE9wZW5Ecm9wZG93bihudWxsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBlc2NhcGUgZm9yIG1vYmlsZSBmaWx0ZXIgZGlhbG9nXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VzY2FwZScgJiYgZXZlbnQua2V5ICE9PSAnRXNjJykgcmV0dXJuO1xuXG4gICAgICAgIHNldFNob3dNb2JpbGVGaWx0ZXJzKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICoqKiogRWZmZWN0cyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGF1dGhvcmVkIGZpbHRlcnMgYXMgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJzKGF1dGhvcmVkRmlsdGVycy5tYXAoZmlsdGVyR3JvdXAgPT4gKHtcbiAgICAgICAgICAgIC4uLmZpbHRlckdyb3VwLFxuICAgICAgICAgICAgb3BlbmVkOiBERVNLVE9QX1NDUkVFTl9TSVpFID8gZmlsdGVyR3JvdXAub3BlbmVkT25Mb2FkIDogZmFsc2UsXG4gICAgICAgICAgICBpdGVtczogZmlsdGVyR3JvdXAuaXRlbXMubWFwKGZpbHRlckl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJJdGVtLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpKTtcbiAgICB9LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGZpbHRlcnMgZnJvbSB1cmwgYXMgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycyhvcmlnaW4gPT4gb3JpZ2luLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdyb3VwLCBpdGVtcyB9ID0gZmlsdGVyO1xuICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdO1xuXG4gICAgICAgICAgICBpZiAoIXVybFN0YXRlVmFsdWUpIHJldHVybiBmaWx0ZXI7XG5cbiAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlQXJyYXkgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB1cmxTdGF0ZUFycmF5LmluY2x1ZGVzKFN0cmluZyhpdGVtLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCB1cmxTZWFyY2hWYWx1ZSA9IHVybFN0YXRlW3NlYXJjaFByZWZpeF07XG4gICAgICAgIGlmICh1cmxTZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkodXJsU2VhcmNoVmFsdWVbMF0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0UmFuZG9tU29ydElkKE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMGUxMikpKTtcbiAgICB9LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGFmdGVyIGJ1dHRvbiBsb2FkIG1vcmUgY2xpY2tcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHVybCBwYWdlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0VXJsU3RhdGUoJ3BhZ2UnLCBjdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogY3VycmVudFBhZ2UpO1xuICAgIH0sIFtjdXJyZW50UGFnZV0pO1xuXG4gICAgY29uc3QgcmVtb3ZlRW1wdHlGaWx0ZXJzID0gKGFsbEZpbHRlcnMsIGNhcmRzRnJvbUpzb24pID0+IHtcbiAgICAgICAgY29uc3QgdGFncyA9IFtdLmNvbmNhdCguLi5jYXJkc0Zyb21Kc29uLm1hcChjYXJkID0+IGNhcmQudGFncy5tYXAodGFnID0+IHRhZy5pZCkpKTtcblxuICAgICAgICBjb25zdCB0aW1pbmdUYWdzID0gW1xuICAgICAgICAgICAgRVZFTlRfVElNSU5HX0lEUy5MSVZFLFxuICAgICAgICAgICAgRVZFTlRfVElNSU5HX0lEUy5PTkRFTUFORCxcbiAgICAgICAgICAgIEVWRU5UX1RJTUlOR19JRFMuVVBDT01JTkcsXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIGFsbEZpbHRlcnMubWFwKGZpbHRlciA9PiAoe1xuICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlci5pdGVtcy5maWx0ZXIoaXRlbSA9PiB0YWdzLmluY2x1ZGVzKGl0ZW0uaWQpXG4gICAgICAgICAgICB8fCB0YWdzLmluY2x1ZGVzKGl0ZW0ubGFiZWwpXG4gICAgICAgICAgICB8fCB0YWdzLnRvU3RyaW5nKCkuaW5jbHVkZXMoYC8ke2l0ZW0uaWR9YCkgLy8gKioqKiogRklYICBIRVJFICoqKioqXG4gICAgICAgICAgICB8fCB0aW1pbmdUYWdzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgfSkpLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLml0ZW1zLmxlbmd0aCA+IDApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhhbmRsZXMgZ2V0dGluZyBDYXJkcywgdGhlcmUgYXJlIHNvbWUgY29uZGl0aW9uczpcbiAgICAgKiAtIElmIHRhcmdldCBpcyBub3QgZW5hYmxlZCBhIHNpbXBsZSByZXF1ZXN0IGlzIG1hZGUgd2l0aG91dCBtb2RzIG9yIGRlbGF5LlxuICAgICAqIC0gSWYgdGFyZ2V0IGlzIGVuYWJsZWQgJiB0VmlzaXRvciBBUEkgaXMgcHJlc2VudCBhZGQgdmFsdWVzIGZyb20gVmlzaXRvclxuICAgICAqIC0gSWYgdGFyZ2V0IGlzIGVuYWJsZWQgJiB0aGUgVmlzaXRvciBBUEkgaXMgbm90IHByZXNlbnQgc2V0VGltZW91dCB3aXRoXG4gICAgICogY291bnRlciB0byByZWNoZWNrIGZvciB0aGUgVmlzaXRvciBBUEkuIElmIDIwIGF0dGVtcHRzIGFyZSBtYWRlIHcvb1xuICAgICAqIHN1Y2Nlc3MgZmFpbCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKChpc0xhenkgJiYgdmlzaWJsZVN0YW1wKSB8fCAoaXNMYXp5ICYmICFoYXNGZXRjaGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlOiB2aXNpdG9yUHJvbWlzZSB9ID0gd2luZG93O1xuXG4gICAgICAgIGxldCBjb2xsZWN0aW9uRW5kcG9pbnQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnZW5kcG9pbnQnKTtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tFbmRwb2ludCA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdmYWxsYmFja0VuZHBvaW50Jyk7XG5cbiAgICAgICAgY29uc3QgciA9IG5ldyBSZWdFeHAoJ14oPzpbYS16XSs6KT8vLycsICdpJyk7XG4gICAgICAgIGxldCBjb2xsZWN0aW9uRW5kcG9pbnRVUkk7XG4gICAgICAgIGlmIChyLnRlc3QoY29sbGVjdGlvbkVuZHBvaW50KSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmYWxsYmFja0VuZHBvaW50KSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW5kcG9pbnRVUkkuc2VhcmNoUGFyYW1zLnNldCgnZmxhdEZpbGUnLCBmYWxzZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW5kcG9pbnQgPSBjb2xsZWN0aW9uRW5kcG9pbnRVUkkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jIGdldENhcmRzXG4gICAgICAgICAqIEBkZXNjIHdyYXBzIGZldGNoIHdpdGggZnVuY3Rpb24gdG8gbWFrZSBpdCByZXVzYWJsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW5kUG9pbnQsIFVSTCB3aXRoIHBhcmFtcyBmb3IgY2FyZCByZXF1ZXN0XG4gICAgICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldENhcmRzKGVuZFBvaW50ID0gY29sbGVjdGlvbkVuZHBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmZldGNoKGVuZFBvaW50LCB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgIH0gPSByZXNwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZERhdGEgPSAhIU9iamVjdC5rZXlzKGpzb24pLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZERhdGEpIHJldHVybiBqc29uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBubyB2YWxpZCByZXNwb25zZSBkYXRhIGZyb20gJHtlbmRQb2ludH1gLCB0YWdzOiAnY29sbGVjdGlvbicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm8gdmFsaWQgcmVwb25zZSBkYXRhJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBmYWlsdXJlIGZvciBjYWxsIHRvICR7dXJsfWAsIHRhZ3M6ICdjb2xsZWN0aW9uJywgZXJyb3JNZXNzYWdlOiBgJHtzdGF0dXN9OiAke3N0YXR1c1RleHR9YCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgJHtzdGF0dXN9OiAke3N0YXR1c1RleHR9LCBmYWlsdXJlIGZvciBjYWxsIHRvICR7dXJsfWApKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgcmVzcG9uc2UgdG9vayAkeyhEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMH1zYCwgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNGaXJzdExvYWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0QnlQYXRoKHBheWxvYWQsICdjYXJkcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBubyBjYXJkcyByZXR1cm4gYnkgcXVlcnkgdG8gdGhpcyBlbmRwb2ludDogJHtlbmRQb2ludH1gLCB0YWdzOiAnY29sbGVjdGlvbicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaXNIYXNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRBR19IQVNIX0xFTkdUSCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGF1dGhvcmVkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmlkID0gcm9sbGluZ0hhc2goZ3JvdXAuaWQsIFRBR19IQVNIX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJJdGVtIG9mIGdyb3VwLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwYXJlbnQsIGNoaWxkXSA9IGdldFBhcmVudENoaWxkKGZpbHRlckl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJJdGVtLmlkID0gYCR7cm9sbGluZ0hhc2gocGFyZW50LCBUQUdfSEFTSF9MRU5HVEgpfS8ke3JvbGxpbmdIYXNoKGNoaWxkLCBUQUdfSEFTSF9MRU5HVEgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgaGlkZUN0YVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyZW50LCBjaGlsZF0gPSBnZXRQYXJlbnRDaGlsZCh0YWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgIT09ICcnICYmIGNoaWxkICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goYCR7cm9sbGluZ0hhc2gocGFyZW50LCBUQUdfSEFTSF9MRU5HVEgpfS8ke3JvbGxpbmdIYXNoKGNoaWxkLCBUQUdfSEFTSF9MRU5HVEgpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDdGFUYWdzID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc2VkQ2FyZHMgPSBbXSB9ID0gbmV3IEpzb25Qcm9jZXNzb3IocGF5bG9hZC5jYXJkcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVEdXBsaWNhdGVDYXJkcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2FyZE1ldGFEYXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVU5DQVRFX1RFWFRfUVRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlTaG93Qm9va21hcmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrZWRDYXJkSWRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDdGFJZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUN0YVRhZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDYXRlZ29yaWVzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJzKHByZXZGaWx0ZXJzID0+IHByZXZGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVbZmlsdGVyR3JvdXBQcmVmaXggKyBncm91cF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmxTdGF0ZVZhbHVlKSByZXR1cm4gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlQXJyYXkgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB1cmxTdGF0ZUFycmF5LmluY2x1ZGVzKFN0cmluZyhpdGVtLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVycygoKSA9PiBhdXRob3JlZEZpbHRlcnMubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGdyb3VwLCBpdGVtcyB9ID0gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVtmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVybFN0YXRlVmFsdWUpIHJldHVybiBmaWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVBcnJheSA9IHVybFN0YXRlVmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHVybFN0YXRlQXJyYXkuaW5jbHVkZXMoU3RyaW5nKGl0ZW0ubGFiZWwpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9ucyA9IGdldFRyYW5zaXRpb25zKHByb2Nlc3NlZENhcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRPcHRpb24uc29ydC50b0xvd2VyQ2FzZSgpID09PSAnZXZlbnRzb3J0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRyYW5zaXRpb25zLnNpemUoKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cmFuc2l0aW9ucy5kZXF1ZXVlKCkucHJpb3JpdHkgKyBPTkVfU0VDT05EX0RFTEFZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldENhcmRzKHByb2Nlc3NlZENhcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG93RW1wdHlGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJzKHByZXZGaWx0ZXJzID0+IHJlbW92ZUVtcHR5RmlsdGVycyhwcmV2RmlsdGVycywgcHJvY2Vzc2VkQ2FyZHMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2Nyb2xsRWxlbWVudFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkQ2FyZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRzVG9zaG93ID0gcHJvY2Vzc2VkQ2FyZHMuc2xpY2UoMCwgcmVzdWx0c1BlclBhZ2UgKiBjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRMYXN0UGFnZUlEID0gKHJlc3VsdHNQZXJQYWdlICogY3VycmVudFBhZ2UpIC0gcmVzdWx0c1BlclBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZHNUb3Nob3cubGVuZ3RoIDwgZ2V0TGFzdFBhZ2VJRCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdElEID0gc2Nyb2xsRWxlbWVudFJlZi5jdXJyZW50LmNoaWxkcmVuW2dldExhc3RQYWdlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdElELnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPT09IGNvbGxlY3Rpb25FbmRwb2ludCAmJiBmYWxsYmFja0VuZHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXJkcyhmYWxsYmFja0VuZHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2dMYW5hKHsgbWVzc2FnZTogJ2ZhaWxlZCB0byByZXR1cm4gcHJvY2Vzc2VkIGNhcmRzJywgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBpRmFpbHVyZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmMgZ2V0VmlzaXRvckRhdGFcbiAgICAgICAgICogQGRlc2Mgd3JhcHMgZmV0Y2hpbmcgVmlzaXRvciBBUEkgZGF0YSBpbiBhIGZ1bmN0aW9uIGZvciByZXVzZSwgYWxzbyBpZlxuICAgICAgICAgKiBsYXN0IHVzZWQgc2Vzc2lvbiBpcyBjaGVja2VkLCB1cGRhdGUgY3VycmVudEVudGl0eUlkIHdpdGggdGFyZ2V0VmFsdWVSZXZlYWxJRFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1Byb21pc2V9IHZpc2l0b3JBcGksIHdpbmRvdy5fX3NhdGVsbGl0ZUxvYWRlZFByb21pc2Ugd2hlbiBhY2Nlc3NlZFxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlLCB0aHJ1IGNhbGxpbmcgZ2V0Q2FyZHNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldFZpc2l0b3JEYXRhKHZpc2l0b3JBcGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25VUkkgPSBuZXcgVVJMKGNvbGxlY3Rpb25FbmRwb2ludCk7XG5cbiAgICAgICAgICAgIGlmICh1c2VMYXN0Vmlld2VkU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFJldmVhbElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RhcmdldFZhbHVlUmV2ZWFsSUQnKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UmV2ZWFsSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdjdXJyZW50RW50aXR5SWQnLCB0YXJnZXRSZXZlYWxJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2aXNpdG9yQXBpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuYWxsb3kgJiYgd2luZG93LmVkZ2VDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxsb3koJ2dldElkZW50aXR5JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ21jZ3ZpZCcsIHJlcy5pZGVudGl0eS5FQ0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ21ib3hNQ0dMSCcsIHJlcy5lZGdlLnJlZ2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXJkcyhjb2xsZWN0aW9uVVJJLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvciA9IHJlc3VsdC5nZXRWaXNpdG9ySWQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtY2d2aWQnLCB2aXNpdG9yLmdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ3NkaWQnLCB2aXNpdG9yLmdldFN1cHBsZW1lbnRhbERhdGFJRCgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94QUFNQicsIHZpc2l0b3IuZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYigpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94TUNHTEgnLCB2aXNpdG9yLmdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCgpKTtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoY29sbGVjdGlvblVSSS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuYyB2aXNpdG9yUmV0cnlcbiAgICAgICAgICogQGRlc2MgVmlzaXRvciBBUEkgaXMgbGF0ZSBsb2FkaW5nIG9mdGVuLCB0aGlzIHNldHMgYSByZWN1cnNpdmUgY2FsbFxuICAgICAgICAgKiBpbiBhIHNldFRpbWVvdXQgdG8gcnVuIDIwIHRpbWVzLCBhbmQgdGhlbiBmYWlsIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlLCB0aHJ1IGNhbGxpbmcgZ2V0VmlzaXRvckRhdGEgd2hpY2hcbiAgICAgICAgICogY2FsbHMgZ2V0Q2FyZHNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHZpc2l0b3JSZXRyeSgpIHtcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgdGltZWRSZXRyeSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcGlGYWlsdXJlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZTogdmlzaXRvclByb21pc2VSZXRyeSB9ID0gd2luZG93O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yUHJvbWlzZVJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWaXNpdG9yRGF0YSh2aXNpdG9yUHJvbWlzZVJldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRvclByb21pc2VSZXRyeSAmJiByZXRyeUNvdW50IDwgMjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkUmV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGltZWRSZXRyeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldEVuYWJsZWQgJiYgdmlzaXRvclByb21pc2UpIHtcbiAgICAgICAgICAgIGdldFZpc2l0b3JEYXRhKHZpc2l0b3JQcm9taXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRFbmFibGVkICYmICF2aXNpdG9yUHJvbWlzZSkge1xuICAgICAgICAgICAgdmlzaXRvclJldHJ5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhcmdldEVuYWJsZWQpIHtcbiAgICAgICAgICAgIGdldENhcmRzKCk7XG4gICAgICAgIH1cbiAgICB9LCBbdmlzaWJsZVN0YW1wLCBoYXNGZXRjaGVkXSk7XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBjYXJkcyB0byBsb2NhbCBzdG9yYWdlIGFuZCB1cGRhdGVzIGNhcmQgdy8gYm9va21hcmtlZCBkYXRhXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNhdmVCb29rbWFya3NUb0xvY2FsU3RvcmFnZShib29rbWFya2VkQ2FyZElkcyk7XG4gICAgICAgIHNldENhcmRzKGdldFVwZGF0ZWRDYXJkQm9va21hcmtEYXRhKGNhcmRzLCBib29rbWFya2VkQ2FyZElkcykpO1xuICAgIH0sIFtib29rbWFya2VkQ2FyZElkc10pO1xuXG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGNsZWFyaW5nIHN0YXRlIG9uIHNob3dCb29rbWFya3NcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNob3dCb29rbWFya3MpIHtcbiAgICAgICAgICAgIGNsZWFyQWxsRmlsdGVycygpO1xuICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICB9XG4gICAgfSwgW3Nob3dCb29rbWFya3NdKTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZm9jdXMgYW5kIGVzY2FwZSBvbiBtb2JpbGUgZmlsdGVyIHRvZ2dsZVxuICAgICAqIEByZXR1cm5zIHtWb2lkfVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzaG93TW9iaWxlRmlsdGVycykge1xuICAgICAgICAgICAgaWYgKGZpbHRlckl0ZW1SZWYgJiYgZmlsdGVySXRlbVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgZmlsdGVySXRlbVJlZi5jdXJyZW50LmZvY3VzTW9iVGl0bGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZpbHRlckluZm9SZWYgJiYgZmlsdGVySW5mb1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgZmlsdGVySW5mb1JlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbc2hvd01vYmlsZUZpbHRlcnNdKTtcblxuICAgIGNvbnN0IGJveCA9IHVzZVJlZigpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGJveCAmJiAhdmlzaWJsZVN0YW1wICYmIGlzTGF6eSkge1xuICAgICAgICAgICAgY29uc3QgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbyA8PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0SGFzRmV0Y2hlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlU3RhbXAobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpby5vYnNlcnZlKGJveC5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtib3hdKTtcblxuICAgIC8qKlxuICAgICAqKioqIERlcml2ZWQgU3RhdGUgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZmlsdGVycyBjaG9zZW4gYnkgdGhlIHVzZXJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgY29uc3QgYWN0aXZlRmlsdGVySWRzID0gZ2V0QWN0aXZlRmlsdGVySWRzKGZpbHRlcnMpO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZmlsdGVycyBwYW5lbHMgKGdyb3VwaW5ncykgY3JlYXRlZCBieSB0aGUgYXV0aG9yXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIGNvbnN0IGFjdGl2ZVBhbmVscyA9IGdldEFjdGl2ZVBhbmVscyhhY3RpdmVGaWx0ZXJJZHMpIHx8IG5ldyBTZXQoKTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIENhcmRGaWx0ZXJlciBjbGFzcyB0aGF0IGhhbmRsZXMgcmV0dXJuaW5nIHN1YnNldCBvZiBjYXJkc1xuICAgICAqIGJhc2VkIG9mZiB1c2VyIGludGVyYWN0aW9uc1xuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBjb25zdCBjYXJkRmlsdGVyZXIgPSBuZXcgQ2FyZEZpbHRlcmVyKFxuICAgICAgICBjYXJkcyxcbiAgICAgICAgcmFuZG9tU29ydElkLFxuICAgICAgICBzYW1wbGVTaXplLFxuICAgICAgICByZXNlcnZvaXJTaXplLFxuICAgICAgICBmZWF0dXJlZENhcmRzLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259IGdldEZpbHRlcmVkQ29sbGVjdGlvblxuICAgICAqIEBkZXNjIENsb3N1cmUgYXJvdW5kIENhcmRGaWx0ZXJlciBmb3IgcmV1c2Ugd2l0aGluIGNvbnRleHRcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAqICovXG4gICAgY29uc3QgZ2V0RmlsdGVyZWRDb2xsZWN0aW9uID0gKCkgPT4gY2FyZEZpbHRlcmVyXG4gICAgICAgIC5zb3J0Q2FyZHMoc29ydE9wdGlvbiwgZXZlbnRGaWx0ZXIsIGZlYXR1cmVkQ2FyZHMsIGhpZGVDdGFJZHMsIGlzRmlyc3RMb2FkKVxuICAgICAgICAua2VlcEJvb2ttYXJrZWRDYXJkc09ubHkob25seVNob3dCb29rbWFya3MsIGJvb2ttYXJrZWRDYXJkSWRzLCBzaG93Qm9va21hcmtzKVxuICAgICAgICAua2VlcENhcmRzV2l0aGluRGF0ZVJhbmdlKClcbiAgICAgICAgLmZpbHRlckNhcmRzKGFjdGl2ZUZpbHRlcklkcywgYWN0aXZlUGFuZWxzLCBmaWx0ZXJMb2dpYywgRklMVEVSX1RZUEVTLCBjdXJyQ2F0ZWdvcmllcylcbiAgICAgICAgLnRydW5jYXRlTGlzdCh0b3RhbENhcmRMaW1pdClcbiAgICAgICAgLnNlYXJjaENhcmRzKHNlYXJjaFF1ZXJ5LCBzZWFyY2hGaWVsZHMsIGNhcmRTdHlsZSlcbiAgICAgICAgLnJlbW92ZUNhcmRzKGluY2x1c2lvbklkcyk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QXJyYXl9IGZpbHRlcmVkQ2FyZHM6IEZpbHRlcmVkIGNhcmRzIGJhc2VkIG9mZiBjdXJyZW50IHN0YXRlIG9mIHBhZ2VcbiAgICAgKiBAdHlwZSB7TnVtYmVyfSBuZXh0VHJhbnNpdGlvbk1zOiBOdW1iZXIgZm9yIHRpbWVkIGV2ZW50IHNvcnQgdHJhbnNpdGlvblxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3QgeyBmaWx0ZXJlZENhcmRzID0gW10sIG5leHRUcmFuc2l0aW9uTXMgPSAwIH0gPSBnZXRGaWx0ZXJlZENvbGxlY3Rpb24oKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnNldCBvZiBjYXJkcyB0byBzaG93IHRoZSB1c2VyXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIGNvbnN0IGdyaWRDYXJkcyA9IHRpbWVkQ29sbGVjdGlvbi5sZW5ndGggPyB0aW1lZENvbGxlY3Rpb24gOiBmaWx0ZXJlZENhcmRzO1xuXG4gICAgLyoqXG4gICAgICogVG90YWwgcGFnZXMgKHVzZWQgYnkgUGFnaW5hdG9yIENvbXBvbmVudClcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBnZXRUb3RhbFBhZ2VzKHJlc3VsdHNQZXJQYWdlLCBncmlkQ2FyZHMubGVuZ3RoKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBjYXJkcyB0byBzaG93ICh1c2VkIGJ5IExvYWQgTW9yZSBjb21wb25lbnQpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBudW1DYXJkc1RvU2hvdyA9IGdldE51bUNhcmRzVG9TaG93KHJlc3VsdHNQZXJQYWdlLCBjdXJyZW50UGFnZSwgZ3JpZENhcmRzLmxlbmd0aCk7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBmaWx0ZXJzIHdlcmUgc2VsZWN0ZWQgLSAodXNlZCBieSBMZWZ0IEZpbHRlciBQYW5lbClcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyc0l0ZW1zUXR5ID0gZ2V0TnVtU2VsZWN0ZWRGaWx0ZXJJdGVtcyhmaWx0ZXJzKTtcblxuICAgIC8qKlxuICAgICAqIENvbmRpdGlvbnMgdG8gRGlzcGxheSBBIEZvcm0gT2YgUGFnaW5hdGlvblxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlQYWdpbmF0aW9uID0gc2hvdWxkRGlzcGxheVBhZ2luYXRvcihcbiAgICAgICAgcGFnaW5hdGlvbklzRW5hYmxlZCxcbiAgICAgICAgdG90YWxDYXJkTGltaXQsXG4gICAgICAgIGdyaWRDYXJkcy5sZW5ndGgsXG4gICAgKTtcbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIGRpc3BsYXkgdGhlIExvYWQgTW9yZSBCdXR0b25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5TG9hZE1vcmUgPSBkaXNwbGF5UGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uVHlwZSA9PT0gJ2xvYWRNb3JlJztcblxuICAgIC8qKlxuICAgICAqIENvbmRpdGlvbnMgdG8gZGlzcGxheSB0aGUgUGFnaW5hdG9yIENvbXBvbmVudFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlQYWdpbmF0b3IgPSBkaXNwbGF5UGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uVHlwZSA9PT0gJ3BhZ2luYXRvcic7XG5cbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIGRpc3BsYXkgdGhlIExlZnQgRmlsdGVyIFBhbmVsIENvbXBvbmVudFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlMZWZ0RmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbEVuYWJsZWQgJiYgZmlsdGVyUGFuZWxUeXBlID09PSBGSUxURVJfUEFORUwuTEVGVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYXQgbGVhc2Ugb25lIGNhcmQgd2FzIHJldHVybmVkIGJ5IENhcmQgRmlsdGVyZXJcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBhdExlYXN0T25lQ2FyZCA9IGdyaWRDYXJkcy5sZW5ndGggPiAwO1xuXG4gICAgLyoqXG4gICAgICogV2hlcmUgdG8gcGxhY2UgdGhlIFNvcnQgUG9wdXAgKGVpdGhlciBsZWZ0IG9yIHJpZ2h0KVxuICAgICAqIEB0eXBlIHtTdHJpbmd9IC0gTG9jYXRpb24gb2YgU29ydCBQb3B1cCBpbiBUb3AgRmlsdGVyIFBhbmVsIFZpZXdcbiAgICAgKi9cbiAgICBjb25zdCB0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9uID0gZmlsdGVycy5sZW5ndGggPiAwICYmIHdpbmRvd1dpZHRoIDwgVEFCTEVUX01JTl9XSURUSCA/XG4gICAgICAgIFNPUlRfUE9QVVBfTE9DQVRJT04uTEVGVCA6IFNPUlRfUE9QVVBfTE9DQVRJT04uUklHSFQ7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgTG9uZyBQYWdpbmF0b3IgQ29tcG9uZW50IFNob3VsZCBCZVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9IC0gTG9jYXRpb24gb2YgU29ydCBQb3B1cCBpbiBUb3AgRmlsdGVyIFBhbmVsIFZpZXdcbiAgICAgKi9cbiAgICBjb25zdCBwYWdpbmF0b3JDb3VudCA9IERFU0tUT1BfU0NSRUVOX1NJWkUgPyBQQUdJTkFUSU9OX0NPVU5ULkRFU0tUT1AgOiBQQUdJTkFUSU9OX0NPVU5ULk1PQklMRTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSB0b3AgZmlsdGVyIHBhbmVsIG9yIG5vdFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGlzVG9wRmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbFR5cGUgPT09IEZJTFRFUl9QQU5FTC5UT1A7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgdG9wIGZpbHRlciBwYW5lbCBvciBub3RcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBpc0xlZnRGaWx0ZXJQYW5lbCA9IGZpbHRlclBhbmVsVHlwZSA9PT0gRklMVEVSX1BBTkVMLkxFRlQ7XG5cbiAgICAvKipcbiAgICAgKiBVaSBvcHRpb25zIHRoYXQgY2F1c2UgZ3JpZCB0byByZXJlbmRlciBuZWNlc3NpdGF0ZSB0aGUgYXJpYSBhdHRyaWJ1dGUgYmVpbmcgc2V0XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgaXNHcmlkQXJlYUxpdmUgPVxuICAgICAgICBmaWx0ZXJQYW5lbEVuYWJsZWQgfHxcbiAgICAgICAgc2VhcmNoRW5hYmxlZCB8fFxuICAgICAgICBzb3J0RW5hYmxlZCB8fFxuICAgICAgICBwYWdpbmF0aW9uSXNFbmFibGVkO1xuXG4gICAgbGV0IGZpbHRlck5hbWVzID0gJyc7XG4gICAgZmlsdGVycy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBlbC5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJOYW1lcyArPSBgJHtpdGVtLmxhYmVsfSwgYDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKioqKiBDbGFzcyBuYW1lcyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBuYW1lIGZvciB0aGUgYXV0aG9yZWQgdGhlbWU6XG4gICAgICogbGlnaHQsIGRhcmssIGRhcmtlc3Q7XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCB0aGVtZUNsYXNzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICdjb25zb25hbnQtdS10aGVtZUxpZ2h0JzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkxJR0hULFxuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVEYXJrJzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkRBUkssXG4gICAgICAgICdjb25zb25hbnQtdS10aGVtZURhcmtlc3QnOiBhdXRob3JlZE1vZGUgPT09IFRIRU1FX1RZUEUuREFSS0VTVCxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gZmlsdGVyTGlzdFxuICAgICAqIEBwYXJhbSB7Kn0gY2F0ZWdvcnlMaXN0XG4gICAgICogQHJldHVybnMgTGlzdCBvZiBjYXRlZ29yaWVzIGZvciB0aGUgdG9wIHBpbGxzXG4gICAgICogICAgICAgICAgUHJlcGVuZHMgdGhlIFwiQWxsIFRvcGljc1wiIHBpbGwgdG8gdGhlIGxpc3Qgb2YgY2F0ZWdvcmllc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEF1dGhvcmVkQ2F0ZWdvcmllcyhmaWx0ZXJMaXN0LCBjYXRlZ29yeUxpc3QpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZHMgPSBmaWx0ZXJMaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuaWQuaW5jbHVkZXMoJ2NhYXM6cHJvZHVjdC1jYXRlZ29yaWVzJykpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG5cbiAgICAgICAgLy8gU29ydHMgY2F0ZWdvcnkgbGlzdCBiYXNlZCBvbiBhdXRob3JlZCBvcmRlclxuICAgICAgICBjb25zdCBzZWxlY3RlZENhdGVnb3JpZXMgPSBjYXRlZ29yeUlkc1xuICAgICAgICAgICAgLm1hcChpZCA9PiBjYXRlZ29yeUxpc3QgJiYgY2F0ZWdvcnlMaXN0LmZpbHRlcihjYXRlZ29yeSA9PiBjYXRlZ29yeS5pZCA9PT0gaWQpWzBdKTtcblxuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIGdyb3VwOiAnQWxsIFRvcGljcycsXG4gICAgICAgICAgICB0aXRsZTogJ0FsbCBUb3BpY3MnLFxuICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICB9LCAuLi5zZWxlY3RlZENhdGVnb3JpZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIHByb2R1Y3RzIGZyb20gYWxsIGNhdGVnb3JpZXMgZm9yIHRoZSAnQWxsIHByb2R1Y3RzJyBtZW51XG4gICAgICogICAgICAgICAgUHJlcGVuZHMgdGhlIFwiQWxsIHByb2R1Y3RzXCIgbGFiZWwgdG8gdGhlIGxpc3Qgb2YgY2F0ZWdvcmllc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbENhdGVnb3J5UHJvZHVjdHMoKSB7XG4gICAgICAgIGlmICghYXV0aG9yZWRDYXRlZ29yaWVzKSByZXR1cm4gW107XG4gICAgICAgIGxldCBhbGxDYXRlZ29yaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgYXV0aG9yZWRDYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkgJiYgY2F0ZWdvcnkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2F0ZWdvcnkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5mcm9tQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5jb25jYXQoY2F0ZWdvcnkuaXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdyb3VwOiAnQWxsIHByb2R1Y3RzJyxcbiAgICAgICAgICAgIGlkOiAnY2FhczphbGwtcHJvZHVjdHMnLFxuICAgICAgICAgICAgaXRlbXM6IGFsbENhdGVnb3JpZXMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsqfSBzZWxlY3RlZENhdGVnb3JpZXNcbiAgICAgKiBAcGFyYW0geyp9IGdyb3VwSWRcbiAgICAgKiBTZXRzIHRoZSBjYXRlZ29yaWVzIGFuZCBmaWx0ZXJzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjYXRlZ29yeVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhdGVnb3J5SGFuZGxlcihzZWxlY3RlZENhdGVnb3JpZXMsIGdyb3VwSWQpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIHNlbGVjdGVkQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgdGVtcC5wdXNoKGNhdGVnb3J5LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDYXRlZ29yaWVzKHRlbXApO1xuICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgcHJldkZpbHRlcnMucG9wKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cCA9IGF1dGhvcmVkQ2F0ZWdvcmllcy5maWx0ZXIoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuaWQgPT09IGdyb3VwSWQpWzBdO1xuICAgICAgICAgICAgaWYgKCFuZXdHcm91cC5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RmlsdGVycyA9IHByZXZGaWx0ZXJzLmNvbmNhdChnZXRBbGxDYXRlZ29yeVByb2R1Y3RzKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0RmlsdGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZGaWx0ZXJzLnB1c2gobmV3R3JvdXApO1xuICAgICAgICAgICAgcmV0dXJuIHByZXZGaWx0ZXJzO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2VsZWN0ZWRDYXRlZ29yeShncm91cElkKTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsqfSBjYXRlZ29yeVxuICAgICAqIEByZXR1cm5zIFRoZSBBdXRob3JlZCBpY29uIGZvciB0aGUgY2F0ZWdvcnkgaWYgZXhpc3RzLFxuICAgICAqICAgICAgICAgIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGljb24gZnJvbSB0aGUgdGFncyBvciBhbiBlbXB0eSBzdHJpbmdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRDYXRlZ29yeUljb24oY2F0ZWdvcnkpIHtcbiAgICAgICAgY29uc3QgYXV0aG9yZWRJY29uID0gYXV0aG9yZWRGaWx0ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuaWQgPT09IGNhdGVnb3J5LmlkKVxuICAgICAgICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLmljb24pXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGF1dGhvcmVkSWNvbiB8fCBjYXRlZ29yeS5pY29uIHx8ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25TdHIgPSBjb2xsZWN0aW9uSWRlbnRpZmllciA/IGAke2NvbGxlY3Rpb25JZGVudGlmaWVyfSB8IGAgOiAnJztcbiAgICBjb25zdCBmaWx0ZXJTdHIgPSBzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSA/IGZpbHRlck5hbWVzIDogJ05vIEZpbHRlcnMnO1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5U3RyID0gc2VhcmNoUXVlcnkgfHwgJ05vbmUnO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25BbmFseXRpY3MgPSBgJHtjb2xsZWN0aW9uU3RyfUNhcmQgQ29sbGVjdGlvbiB8IEZpbHRlcnM6ICR7ZmlsdGVyU3RyfXwgU2VhcmNoIFF1ZXJ5OiAke3NlYXJjaFF1ZXJ5U3RyfWA7XG4gICAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBmb3IgdGhlIGNvbnNvbmFudCB3cmFwcGVyOlxuICAgICAqIHdoZXRoZXIgY29uc29uYW50IHdyYXBwZXIgY29udGFpbnMgbGVmdCBmaWx0ZXI7XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCB3cmFwcGVyQ2xhc3MgPSBjbGFzc05hbWVzKHtcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyJzogdHJ1ZSxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0zMk1hcmdpbkNvbnRhaW5lcic6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfMTAwX1ZXXzMyX01BUkdJTixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS04M1BlcmNlbnRDb250YWluaWVyJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV84M19WVyxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0xMjAwTWF4V2lkdGgnOiBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5TSVpFXzEyMDBfUFgsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMTYwME1heFdpZHRoJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV8xNjAwX1BYLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLTEyMDBNYXhXaWR0aCBDYXRlZ29yaWVzJzogaXNDYXRlZ29yaWVzQ29udGFpbmVyLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLWNhcm91c2VsJzogaXNDYXJvdXNlbENvbnRhaW5lcixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS13aXRoTGVmdEZpbHRlcic6IGZpbHRlclBhbmVsRW5hYmxlZCAmJiBpc0xlZnRGaWx0ZXJQYW5lbCxcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpc0NhdGVnb3JpZXNDb250YWluZXIpIHtcbiAgICAgICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZpbHRlcnMgPSBwcmV2RmlsdGVycy5jb25jYXQoZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEZpbHRlcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxDb25maWdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb25maWd9PlxuICAgICAgICAgICAgPEV4cGFuZGFibGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IHZhbHVlOiBvcGVuRHJvcGRvd24sIHNldFZhbHVlOiBzZXRPcGVuRHJvcGRvd24gfX0gPlxuICAgICAgICAgICAgICAgIHsvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAqL31cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zLGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi99XG4gICAgICAgICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgcmVmPXtib3h9XG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBkYWEtbGg9e2NvbGxlY3Rpb25BbmFseXRpY3N9XG4gICAgICAgICAgICAgICAgICAgIGRhYS1pbT17U3RyaW5nKHRyYWNrSW1wcmVzc2lvbnMpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXaW5kb3dDbGlja31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHt3cmFwcGVyQ2xhc3N9ICR7dGhlbWVDbGFzc31gfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25zb25hbnQtV3JhcHBlci1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0NhdGVnb3JpZXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgZGF0YS10ZXN0aWQ9XCJjb25zb25hbnQtVG9wRmlsdGVycy1jYXRlZ29yaWVzVGl0bGVcIiBjbGFzc05hbWU9XCJjb25zb25hbnQtVG9wRmlsdGVycy1jYXRlZ29yaWVzVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJzLWNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcmVkQ2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmlkID09PSBzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gJ3NlbGVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5SGFuZGxlcihjYXRlZ29yeS5pdGVtcywgY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ncm91cD17Y2F0ZWdvcnkuZ3JvdXAucmVwbGFjZUFsbCgnICcsICcnKS50b0xvd2VyQ2FzZSgpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwiZmlsdGVycy1jYXRlZ29yeS0taWNvblwiIHNyYz17Z2V0Q2F0ZWdvcnlJY29uKGNhdGVnb3J5KX0gYWx0PXtjYXRlZ29yeS5pY29uICYmICdDYXRlZ29yeSBpY29uJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXRlZ29yeS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGRpc3BsYXlMZWZ0RmlsdGVyUGFuZWwgJiYgaXNTdGFuZGFyZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25zb25hbnQtV3JhcHBlci1sZWZ0RmlsdGVyV3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMZWZ0RmlsdGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzUXR5PXtzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93V2lkdGg9e3dpbmRvd1dpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlckNsaWNrPXtoYW5kbGVGaWx0ZXJHcm91cENsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyQWxsRmlsdGVycz17cmVzZXRGaWx0ZXJzU2VhcmNoQW5kQm9va21hcmtzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyRmlsdGVySXRlbXM9e2NsZWFyRmlsdGVySXRlbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2JveENsaWNrPXtoYW5kbGVDaGVja0JveENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb2JpbGVGaWx0ZXJzVG9nZ2xlQ2xpY2s9e2hhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRGaWx0ZXJDbGljaz17aGFuZGxlQ2hlY2tCb3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dNb2JpbGVGaWx0ZXJzPXtzaG93TW9iaWxlRmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzUXR5PXtncmlkQ2FyZHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFya0NvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm9va21hcmtzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Jvb2ttYXJrcz17c2hvd0Jvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaG93Qm9va21hcmtzRmlsdGVyQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRDYXJkc0NvdW50PXtib29rbWFya2VkQ2FyZElkcy5sZW5ndGh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e2xlZnRQYW5lbFNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzU2lkZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaElucHV0Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsdGVySXRlbVJlZn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Bjb25zb25hbnQtV3JhcHBlci1jb2xsZWN0aW9uJHtpc0xvYWRpbmcgPyAnIGlzLWxvYWRpbmcnIDogJyd9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc1RvcEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsdGVyc1BhbmVsVG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhbmVsRW5hYmxlZD17ZmlsdGVyUGFuZWxFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dXaWR0aD17d2luZG93V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2JveENsaWNrPXtoYW5kbGVDaGVja0JveENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXJDbGljaz17aGFuZGxlRmlsdGVyR3JvdXBDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckZpbHRlckl0ZW1zPXtjbGVhckZpbHRlckl0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXM9e2N1cnJDYXRlZ29yaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyQWxsRmlsdGVycz17cmVzZXRGaWx0ZXJzU2VhcmNoQW5kQm9va21hcmtzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TGltaXRlZEZpbHRlcnNRdHk9e3Nob3dMaW1pdGVkRmlsdGVyc1F0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e3RvcFBhbmVsU2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNUb3BTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXM9e0RFU0tUT1BfU0NSRUVOX1NJWkV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaElucHV0Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRDb21wb25lbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkPXtzb3J0T3BlbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsPXtzb3J0T3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17c29ydE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNvcnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNUb3BTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNBbGlnbm1lbnQ9e3RvcFBhbmVsU29ydFBvcHVwTG9jYXRpb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TaG93QWxsQ2xpY2s9e2hhbmRsZVNob3dBbGxUb3BGaWx0ZXJzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzTGVmdEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGVmdEluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17ZmlsdGVyUGFuZWxFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzUXR5PXtmaWx0ZXJzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZHNRdHk9e2dyaWRDYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyc1F0eT17c2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1dpZHRoPXt3aW5kb3dXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb2JpbGVGaWx0ZXJzVG9nZ2xlQ2xpY2s9e2hhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbXBvbmVudD17KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dD17c2VhcmNoUGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWFyY2hGaWx0ZXJzSW5mb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaElucHV0Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Q29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZD17c29ydE9wZW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbD17c29ydE9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3NvcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTb3J0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0FsaWdubWVudD1cInJpZ2h0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0T3B0aW9ucz17c29ydE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsdGVySW5mb1JlZn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc1N0YW5kYXJkQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1BlclBhZ2U9e3Jlc3VsdHNQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXM9e2N1cnJlbnRQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZHM9e2dyaWRDYXJkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRlZFJlZj17c2Nyb2xsRWxlbWVudFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FyZEJvb2ttYXJrPXtoYW5kbGVDYXJkQm9va21hcmtpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FyaWFMaXZlQWN0aXZlPXtpc0dyaWRBcmVhTGl2ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rpc3BsYXlMb2FkTW9yZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9hZE1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uTG9hZE1vcmVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c9e251bUNhcmRzVG9TaG93fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw9e2dyaWRDYXJkcy5sZW5ndGh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rpc3BsYXlQYWdpbmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBhZ2luYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvdW50PXtwYWdpbmF0b3JDb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyPXtjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93SXRlbXNQZXJQYWdlPXtyZXN1bHRzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUmVzdWx0cz17Z3JpZENhcmRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3NldEN1cnJlbnRQYWdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc0Nhcm91c2VsQ29udGFpbmVyICYmICEoY2FyZFN0eWxlID09PSAnY3VzdG9tLWNhcmQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkc0Nhcm91c2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZHM9e2dyaWRDYXJkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYXJkQm9va21hcms9e2hhbmRsZUNhcmRCb29rbWFya2luZ30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc0Nhcm91c2VsQ29udGFpbmVyICYmIChjYXJkU3R5bGUgPT09ICdjdXN0b20tY2FyZCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5vUmVzdWx0c1ZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOb3QgU3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJVc2luZyBjdXN0b20gY2FyZHMgd2l0aGluIGEgY2Fyb3VzZWwgbGF5b3V0IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiBQbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXV0aG9yIHRoZSBjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzTG9hZGluZyAmJiAhYXRMZWFzdE9uZUNhcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9e0xPQURFUl9TSVpFLkJJR31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPXshdG90YWxDYXJkTGltaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIWlzQXBpRmFpbHVyZSAmJiAhYXRMZWFzdE9uZUNhcmQgJiYgIWlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtub1Jlc3VsdHNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e25vUmVzdWx0c0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9e3NlYXJjaFF1ZXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzQXBpRmFpbHVyZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXthcGlGYWlsdXJlVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXthcGlGYWlsdXJlRGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWYWx1ZT1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvRXhwYW5kYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQ29uZmlnQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufTtcblxuQ29udGFpbmVyLnByb3BUeXBlcyA9IHtcbiAgICBjb25maWc6IHNoYXBlKGNvbmZpZ1R5cGUpLFxufTtcblxuQ29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBjb25maWc6IHt9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVhY3Qvc3JjL2pzL2NvbXBvbmVudHMvQ29uc29uYW50L0NvbnRhaW5lci9Db250YWluZXIuanN4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///108\n");
+eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(5);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _propTypes = __webpack_require__(1);\n\n__webpack_require__(232);\n\nvar _lana = __webpack_require__(68);\n\nvar _Popup = __webpack_require__(233);\n\nvar _Popup2 = _interopRequireDefault(_Popup);\n\nvar _Search = __webpack_require__(234);\n\nvar _Search2 = _interopRequireDefault(_Search);\n\nvar _Loader = __webpack_require__(235);\n\nvar _Loader2 = _interopRequireDefault(_Loader);\n\nvar _general = __webpack_require__(6);\n\nvar _config = __webpack_require__(20);\n\nvar _CardsCarousel = __webpack_require__(236);\n\nvar _CardsCarousel2 = _interopRequireDefault(_CardsCarousel);\n\nvar _View = __webpack_require__(288);\n\nvar _View2 = _interopRequireDefault(_View);\n\nvar _LoadMore = __webpack_require__(289);\n\nvar _LoadMore2 = _interopRequireDefault(_LoadMore);\n\nvar _Bookmarks = __webpack_require__(290);\n\nvar _Bookmarks2 = _interopRequireDefault(_Bookmarks);\n\nvar _Paginator = __webpack_require__(291);\n\nvar _Paginator2 = _interopRequireDefault(_Paginator);\n\nvar _Grid = __webpack_require__(112);\n\nvar _Grid2 = _interopRequireDefault(_Grid);\n\nvar _CardFilterer = __webpack_require__(292);\n\nvar _CardFilterer2 = _interopRequireDefault(_CardFilterer);\n\nvar _Panel = __webpack_require__(294);\n\nvar _Panel2 = _interopRequireDefault(_Panel);\n\nvar _Panel3 = __webpack_require__(299);\n\nvar _Panel4 = _interopRequireDefault(_Panel3);\n\nvar _JsonProcessor = __webpack_require__(309);\n\nvar _JsonProcessor2 = _interopRequireDefault(_JsonProcessor);\n\nvar _hooks = __webpack_require__(7);\n\nvar _Info = __webpack_require__(310);\n\nvar _constants = __webpack_require__(15);\n\nvar _contexts = __webpack_require__(111);\n\nvar _consonant = __webpack_require__(110);\n\nvar _Helpers = __webpack_require__(22);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/**\n * Consonant Card Collection\n * Config is implicitly populated by authors\n *\n * @component\n * @example\n * const config = {\n collection: {},\n featuredCards: [{}],\n filterPanel: {},\n hideCtaIds: [{}],\n hideCtaTags: [{}],\n sort: {},\n pagination: {},\n bookmarks: {},\n search: {},\n language: ''\n * }\n * return (\n * \n * )\n */\nvar Container = function Container(props) {\n var config = props.config;\n\n var getConfig = (0, _consonant.makeConfigGetter)(config);\n var filterGroupPrefix = 'ch_';\n var searchPrefix = 'sh_';\n var CARD_HASH_LENGTH = 10;\n\n /**\n **** Authored Configs ****\n */\n var filterPanelEnabled = getConfig('filterPanel', 'enabled');\n var filterPanelType = getConfig('filterPanel', 'type');\n var paginationType = getConfig('pagination', 'type');\n var paginationIsEnabled = getConfig('pagination', 'enabled');\n var resultsPerPage = getConfig('collection', 'resultsPerPage');\n var onlyShowBookmarks = getConfig('bookmarks', 'leftFilterPanel.bookmarkOnlyCollection');\n var authoredFilters = getConfig('filterPanel', 'filters');\n var filterLogic = getConfig('filterPanel', 'filterLogic').toLowerCase().trim();\n var totalCardLimit = getConfig('collection', 'totalCardsToShow');\n var sampleSize = getConfig('collection', 'reservoir.sample');\n var reservoirSize = getConfig('collection', 'reservoir.pool');\n var searchFields = getConfig('search', 'searchFields');\n var sortOptions = getConfig('sort', 'options');\n var defaultSort = getConfig('sort', 'defaultSort');\n var defaultSortOption = (0, _consonant.getDefaultSortOption)(config, defaultSort);\n var featuredCards = getConfig('featuredCards', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define,max-len\n featuredCards = featuredCards.concat(featuredCards.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaIds = getConfig('hideCtaIds', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define\n hideCtaIds = hideCtaIds.concat(hideCtaIds.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaTags = getConfig('hideCtaTags', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n var leftPanelSearchPlaceholder = getConfig('search', 'i18n.leftFilterPanel.searchPlaceholderText');\n var topPanelSearchPlaceholder = getConfig('search', 'i18n.topFilterPanel.searchPlaceholderText');\n var searchPlaceholderText = getConfig('search', 'i18n.filterInfo.searchPlaceholderText');\n var noResultsTitle = getConfig('search', 'i18n.noResultsTitle');\n var noResultsDescription = getConfig('search', 'i18n.noResultsDescription');\n var apiFailureTitle = getConfig('collection', 'i18n.onErrorTitle');\n var apiFailureDescription = getConfig('collection', 'i18n.onErrorDescription');\n var isLazy = getConfig('collection', 'lazyload');\n var trackImpressions = getConfig('analytics', 'trackImpressions');\n var collectionIdentifier = getConfig('analytics', 'collectionIdentifier');\n var targetEnabled = getConfig('target', 'enabled');\n var useLastViewedSession = getConfig('target', 'lastViewedSession');\n var authoredMode = getConfig('collection', 'mode');\n var authoredLayoutContainer = getConfig('collection', 'layout.container');\n var showEmptyFilters = getConfig('filterPanel', 'showEmptyFilters');\n var eventFilter = getConfig('filterPanel', 'eventFilter');\n var searchEnabled = getConfig('search', 'enabled');\n var sortEnabled = getConfig('sort', 'enabled');\n var cardStyle = getConfig('collection', 'cardStyle');\n var title = getConfig('collection', 'i18n.title');\n var headers = getConfig('headers', '');\n\n /**\n **** Constants ****\n */\n var DESKTOP_SCREEN_SIZE = window.innerWidth >= _constants.DESKTOP_MIN_WIDTH;\n var isXorFilter = filterLogic.toLowerCase().trim() === _constants.FILTER_TYPES.XOR;\n var isCarouselContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isStandardContainer = authoredLayoutContainer !== _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isCategoriesContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CATEGORIES;\n\n // eslint-disable-next-line no-use-before-define\n var categories = getConfig('filterPanel', 'categories');\n // eslint-disable-next-line no-use-before-define, max-len\n var authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : [];\n\n /**\n **** Hooks ****\n */\n /**\n * @typedef {Array} timedCollection - result of Timed Event Sort\n * @description — As an alternative/iteration on filtered cards for timed\n * collections\n * @typedef {Function} setTimedCollection\n * @description - Sets timedCollection after setTimeout triggers\n *\n * @type {[Array, Function]} timedCollection\n */\n /* eslint-disable no-unused-vars */\n\n var _useState = (0, _react.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n timedCollection = _useState2[0],\n setTimedCollection = _useState2[1];\n /**\n * @typedef {Number} transition - MS to next transition\n * @description — set by eventSort, from cardFilteret.nextTransitionMs\n * @typedef {Function} setTransition\n * @description - next Transition trigger\n *\n * @type {[Number, Function]} transition\n */\n /* eslint-disable no-unused-vars */\n\n\n var _useState3 = (0, _react.useState)(0),\n _useState4 = _slicedToArray(_useState3, 2),\n transition = _useState4[0],\n setTransition = _useState4[1];\n\n var _React$useState = _react2.default.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n updateState = _React$useState2[1];\n\n var scrollElementRef = (0, _react.useRef)(null);\n var nextTransition = _react2.default.useCallback(function () {\n return updateState({});\n }, []);\n /**\n * @typedef {Object} urlState\n * @description — object with url query values\n *\n * @typedef {Function} setUrlState\n * @description - set url query value by key\n *\n * @typedef {Function} clearUrlState\n * @description - clear whole url query state\n *\n * @type {[Object, Function, Function]} OpenDropdown\n */\n\n var _useURLState = (0, _hooks.useURLState)(),\n _useURLState2 = _slicedToArray(_useURLState, 3),\n urlState = _useURLState2[0],\n setUrlState = _useURLState2[1],\n clearUrlState = _useURLState2[2];\n\n /**\n * @typedef {Number} OpenDropdownState - Id of a selected dropdown\n * @description — Passed in Context Provider So All Nested Components can be in sync\n *\n * @typedef {Function} OpenDropdownStateSetter\n * @description\n *\n * @type {[Number, Function]} OpenDropdown\n */\n\n\n var _useState5 = (0, _react.useState)(null),\n _useState6 = _slicedToArray(_useState5, 2),\n openDropdown = _useState6[0],\n setOpenDropdown = _useState6[1];\n\n /**\n * @typedef {Array} BookmarkedCardIdsState — Initiailzed From Local Storage\n *\n * @typedef {Function} BookmarkedCardIdsSetter — Sets internal state of saved bookmarks\n *\n * @type {[Array, Function]} BookmarkedCardIds\n */\n\n\n var _useState7 = (0, _react.useState)((0, _general.readBookmarksFromLocalStorage)()),\n _useState8 = _slicedToArray(_useState7, 2),\n bookmarkedCardIds = _useState8[0],\n setBookmarkedCardIds = _useState8[1];\n\n var _useState9 = (0, _react.useState)((0, _general.readInclusionsFromLocalStorage)()),\n _useState10 = _slicedToArray(_useState9, 1),\n inclusionIds = _useState10[0];\n\n /**\n * @typedef {Number} CurrentPageState — Initialized to the first page\n * @description Same page state for 'Load More' or 'Paginator'\n *\n * @typedef {Function} CurrentPageStateSetter — Sets page as user navigates through pages\n *\n * @type {[Number, Function]} CurrentPage\n */\n\n\n var _useState11 = (0, _react.useState)(+urlState.page || 1),\n _useState12 = _slicedToArray(_useState11, 2),\n currentPage = _useState12[0],\n setCurrentPage = _useState12[1];\n\n /**\n * @typedef {Array} FiltersState — Contains Filters For Filter Panel\n * @description Same Filter state for Left or Top\n *\n * @typedef {Function} FiltersStateSetter — Sets Authored Filters as State\n *\n * @type {[Array, Function]} Filters\n */\n\n\n var _useState13 = (0, _react.useState)([]),\n _useState14 = _slicedToArray(_useState13, 2),\n filters = _useState14[0],\n setFilters = _useState14[1];\n // window.filters = filters;\n\n\n var _useState15 = (0, _react.useState)([]),\n _useState16 = _slicedToArray(_useState15, 2),\n currCategories = _useState16[0],\n setCategories = _useState16[1];\n\n /**\n * @typedef {String} SearchQueryState — Will be used to search through cards\n * @typedef {Function} SearchQueryStateSetter — Sets user search query\n *\n * @type {[String, Function]} SearchQuery\n */\n\n\n var _useState17 = (0, _react.useState)(''),\n _useState18 = _slicedToArray(_useState17, 2),\n searchQuery = _useState18[0],\n setSearchQuery = _useState18[1];\n\n var _useState19 = (0, _react.useState)(''),\n _useState20 = _slicedToArray(_useState19, 2),\n selectedCategory = _useState20[0],\n setSelectedCategory = _useState20[1];\n\n /**\n * @typedef {String} SortOpenedState — Toggles Sort Popup Opened Or Closed\n * @typedef {Function} SortOpenedStateSetter — Sets Sort Option\n *\n * @type {[Boolean, Function]} SortOpened\n */\n\n\n var _useState21 = (0, _react.useState)(false),\n _useState22 = _slicedToArray(_useState21, 2),\n sortOpened = _useState22[0],\n setSortOpened = _useState22[1];\n\n /**\n * @typedef {String} SortOptionState — Can be one of a range of types\n * @description 'Title (A-Z)', 'Title (Z-A), Date (New to Old), Date (Old to New), Featured\n *\n * @typedef {Function} SortOptionStateSetter — Sets Sort Option\n *\n * @type {[String, Function]} SortOption\n */\n\n\n var _useState23 = (0, _react.useState)(defaultSortOption),\n _useState24 = _slicedToArray(_useState23, 2),\n sortOption = _useState24[0],\n setSortOption = _useState24[1];\n\n if (sortOption.sort === _constants.SORT_TYPES.RANDOM) {\n totalCardLimit = sampleSize;\n }\n\n /**\n * @typedef {Boolean} WindowWidthState — Can either be true or false\n * @description Used to toggle between mobile and desktop layouts\n *\n * @typedef {Function} WindowWidthStateSetter — Updates window width\n *\n * @type {[Number]} WindowWidth\n */\n\n var _useWindowDimensions = (0, _hooks.useWindowDimensions)(),\n windowWidth = _useWindowDimensions.width;\n\n /**\n * @typedef {Boolean} ShowMobileFiltersState — Can either be true or false\n * @description When true mobile filters will appear on the page\n *\n * @typedef {Function} ShowMobileFiltersStateSetter\n * @description Toggles mobile filter header/footer to show or hide\n *\n * @type {[Boolean, Function]} ShowMobileFilters\n */\n\n\n var _useState25 = (0, _react.useState)(false),\n _useState26 = _slicedToArray(_useState25, 2),\n showMobileFilters = _useState26[0],\n setShowMobileFilters = _useState26[1];\n\n /**\n * @typedef {Boolean} ShowBookmarkState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} ShowBookmarkStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} ShowBookmarks\n */\n\n\n var _useState27 = (0, _react.useState)(false),\n _useState28 = _slicedToArray(_useState27, 2),\n showBookmarks = _useState28[0],\n setShowBookmarks = _useState28[1];\n\n /**\n * @typedef {Boolean} LimitFilterQuantityState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} LimitFilterQuantityStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} LimitFilterQuantity\n */\n\n\n var _useState29 = (0, _react.useState)(filterPanelType === 'top'),\n _useState30 = _slicedToArray(_useState29, 2),\n showLimitedFiltersQty = _useState30[0],\n setShowLimitedFiltersQty = _useState30[1];\n\n /**\n * @typedef {Array} CardState\n * @description sets cards retrieved either server side render or API call\n *\n * @typedef {Function} CardStateSetter\n * @description E.g. Render Featured Cards Server side, While collection cards from API call\n *\n * @type {[Array, Function]} Cards\n */\n\n\n var _useState31 = (0, _react.useState)([]),\n _useState32 = _slicedToArray(_useState31, 2),\n cards = _useState32[0],\n setCards = _useState32[1];\n\n /**\n * @typedef {Boolean} LoadingState — Can either be true or false\n * @description When true a loading spinner will appear on the page\n *\n * @typedef {Function} LoadingStateSetter — Sets loader true or false\n * @description True while waiting for API response. False on cards retrieved or api failure\n *\n * @type {[Boolean, Function]} Loading\n */\n\n\n var _useState33 = (0, _react.useState)(false),\n _useState34 = _slicedToArray(_useState33, 2),\n isLoading = _useState34[0],\n setLoading = _useState34[1];\n\n /**\n * @typedef {Boolean} ApiFailureState — Can either be true or false\n * @description When true an API error has occured\n *\n * @typedef {Function} ApiFailureStateSetter — Sets API failure flag true or false\n * @description True when retrieved or api failure. False otherwise\n *\n * @type {[Boolean, Function]} ApiFailure\n */\n\n\n var _useState35 = (0, _react.useState)(false),\n _useState36 = _slicedToArray(_useState35, 2),\n isApiFailure = _useState36[0],\n setApiFailure = _useState36[1];\n\n var _useState37 = (0, _react.useState)(null),\n _useState38 = _slicedToArray(_useState37, 2),\n randomSortId = _useState38[0],\n setRandomSortId = _useState38[1];\n\n var _useState39 = (0, _react.useState)(true),\n _useState40 = _slicedToArray(_useState39, 2),\n isFirstLoad = _useState40[0],\n setIsFirstLoad = _useState40[1];\n\n var _useState41 = (0, _react.useState)(),\n _useState42 = _slicedToArray(_useState41, 2),\n visibleStamp = _useState42[0],\n setVisibleStamp = _useState42[1];\n\n var _useState43 = (0, _react.useState)(false),\n _useState44 = _slicedToArray(_useState43, 2),\n hasFetched = _useState44[0],\n setHasFetched = _useState44[1];\n\n /**\n * Creates a DOM reference to first filter item\n * @returns {Object} - filter item DOM reference\n */\n\n\n var filterItemRef = (0, _react.createRef)();\n\n /**\n * Creates a DOM reference to filter info button\n * @returns {Object} - filter info DOM reference\n */\n var filterInfoRef = (0, _react.createRef)();\n\n /**\n **** Helper Methods ****\n */\n\n function getParentChild(id) {\n var i = id.length;\n while (id[i] !== '/' && i >= 0) {\n i--;\n }\n return [id.substring(0, i), id.substring(i + 1)];\n }\n\n function rollingHash(s, l) {\n if (!s) {\n return '';\n }\n var BASE = 53;\n var MOD = Math.pow(10, l) + 7;\n var hash = 0;\n var basePower = 1;\n for (var i = 0; i < s.length; i++) {\n hash = (hash + (s.charCodeAt(i) - 97 + 1) * basePower) % MOD;\n basePower = basePower * BASE % MOD;\n }\n return ((hash + MOD) % MOD).toString(36);\n }\n\n /**\n * For a given group of filters, it will unselect all of them\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getAllFiltersClearedState = function getAllFiltersClearedState(filterGroups) {\n return filterGroups.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * For a given group of filters, it will unselect the one with a given id\n * @param {Number} id - the id of an individual filter item\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getFilterItemClearedState = function getFilterItemClearedState(id, filterGroups) {\n return filterGroups.map(function (filterGroup) {\n if (filterGroup.id !== id) {\n return filterGroup;\n }\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * Will uncheck a filter with a given id\n * @param {Number} id - the id of an individual filter item\n * @returns {Void} - an updated state\n */\n var clearFilterItem = function clearFilterItem(id) {\n var group = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n setFilters(function (prevFilters) {\n var filterClearedState = getFilterItemClearedState(id, prevFilters);\n return filterClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n // actually clear the url state\n urlParams.forEach(function (value, key) {\n var chFilter = key.toLowerCase().replace('ch_', '').replace(/ /g, '-');\n if (key.indexOf(filterGroupPrefix) !== 0 && !id.toLowerCase().includes(chFilter) || !group.toLowerCase().replace(/ /g, '-').includes(chFilter)) {\n setUrlState(key, value.replace(/%20/g, ' '));\n }\n });\n };\n\n /**\n * Will uncheck all filter items\n * @returns {Void} - an updated state\n */\n var clearAllFilters = function clearAllFilters() {\n setFilters(function (prevFilters) {\n var allFiltersClearedState = getAllFiltersClearedState(prevFilters);\n return allFiltersClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) !== 0) setUrlState(key, value);\n });\n };\n\n /**\n * Resets filters, and search to empty. Hides bookmark filter\n * @returns {Void} - an updated state\n */\n var resetFiltersSearchAndBookmarks = function resetFiltersSearchAndBookmarks() {\n clearAllFilters();\n setSearchQuery('');\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) === -1 && key.indexOf(searchPrefix) === -1) setUrlState(key, value);\n });\n setShowBookmarks(false);\n };\n\n /**\n **** EVENT HANDLERS ****\n */\n\n /**\n * On Load More Button Click, Increment Page Cuonter By 1\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var onLoadMoreClick = function onLoadMoreClick() {\n setCurrentPage(function (prevState) {\n return prevState + 1;\n });\n window.scrollTo(0, window.pageYOffset);\n };\n\n /**\n * Takes sort user selects and sets it so cards are sorted\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleSortChange = function handleSortChange(option) {\n setSortOption(option);\n setSortOpened(false);\n setIsFirstLoad(false);\n };\n\n /**\n * Handles whenever the search box is clicked or input field\n * changes\n *\n * @param {ClickEvent, ChangeEvent} e\n * @listens ClickEvent, ChangeEvent\n */\n var handleSearchInputChange = function handleSearchInputChange(val) {\n setSearchQuery(val);\n setCurrentPage(1);\n setUrlState(searchPrefix, val);\n };\n\n /**\n * Handles when a group of filters is clicked. Behavior should be\n * to toggle group open or closed\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleFilterGroupClick = function handleFilterGroupClick(filterId) {\n setFilters(function (prevFilters) {\n var opened = void 0;\n return prevFilters.map(function (el) {\n if (el.id === filterId) {\n opened = !el.opened;\n } else {\n // eslint-disable-next-line prefer-destructuring\n opened = el.opened;\n }\n return _extends({}, el, { opened: opened });\n });\n });\n };\n\n /**\n * Will find and set needed filter to url\n *\n * @param {string} filterId - selected filter group id\n * @param {string} itemId - selected filter item id\n * @param {boolean} isChecked\n * @returns {Void} - an updated url\n */\n var changeUrlState = function changeUrlState(filterId, itemId, isChecked) {\n var _filters$find = filters.find(function (_ref) {\n var id = _ref.id;\n return id === filterId;\n }),\n group = _filters$find.group,\n items = _filters$find.items;\n\n var _items$find = items.find(function (_ref2) {\n var id = _ref2.id;\n return id === itemId;\n }),\n label = _items$find.label;\n\n var urlStateValue = urlState[filterGroupPrefix + group] || [];\n if (typeof urlStateValue === 'string') {\n urlStateValue = urlStateValue.split(',');\n }\n\n var value = isChecked ? [].concat(_toConsumableArray(urlStateValue), [label]) : urlStateValue.filter(function (item) {\n return item !== label;\n });\n\n setUrlState(filterGroupPrefix + group, value);\n };\n\n /**\n * Handles what happens when a specific filter item (checkbox)\n * is clicked\n *\n * @param {CheckboxClickEvent} e\n * @listens CheckboxClickEvent\n */\n var handleCheckBoxChange = function handleCheckBoxChange(filterId, itemId, isChecked) {\n if (isXorFilter && isChecked) {\n clearAllFilters();\n }\n\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n if (filter.id !== filterId) return filter;\n\n return _extends({}, filter, {\n items: filter.items.map(function (item) {\n return _extends({}, item, {\n selected: item.id === itemId ? !item.selected : item.selected\n });\n })\n });\n });\n });\n setCurrentPage(1);\n changeUrlState(filterId, itemId, isChecked);\n };\n\n /**\n * Shows/Hides Mobile Filter Panel\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleMobileFiltersToggle = function handleMobileFiltersToggle() {\n return setShowMobileFilters(function (prev) {\n return !prev;\n });\n };\n\n /**\n * When a card's bookmark icon is clicked, save the card\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleCardBookmarking = function handleCardBookmarking(id) {\n // Update bookmarked IDs\n var cardIsBookmarked = bookmarkedCardIds.find(function (card) {\n return card === id;\n });\n\n if (cardIsBookmarked) {\n setBookmarkedCardIds(function (prev) {\n return prev.filter(function (el) {\n return el !== id;\n });\n });\n } else {\n setBookmarkedCardIds(function (prev) {\n return [].concat(_toConsumableArray(prev), [id]);\n });\n }\n };\n\n /**\n * Will show or hide all saved bookmarks when clicked\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowBookmarksFilterClick = function handleShowBookmarksFilterClick(e) {\n e.stopPropagation();\n setShowBookmarks(function (prev) {\n return !prev;\n });\n setCurrentPage(1);\n };\n\n /**\n * If top filter panel, toggle or hide more button\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowAllTopFilters = function handleShowAllTopFilters() {\n setShowLimitedFiltersQty(function (prev) {\n return !prev;\n });\n };\n\n /**\n * On window click, all dropdowns should hide\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleWindowClick = function handleWindowClick() {\n setOpenDropdown(null);\n };\n\n /**\n * Handles escape for mobile filter dialog\n *\n * @param event\n */\n var handleMobileFilterEscape = function handleMobileFilterEscape(event) {\n if (event.key !== 'Escape' && event.key !== 'Esc') return;\n\n setShowMobileFilters(false);\n };\n\n /**\n **** Effects ****\n */\n\n /**\n * Sets authored filters as state\n * @returns {Void} - an updated state\n */\n\n (0, _react.useEffect)(function () {\n setFilters(authoredFilters.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n opened: DESKTOP_SCREEN_SIZE ? filterGroup.openedOnLoad : false,\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n }));\n }, []);\n\n /**\n * Sets filters from url as state\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n setFilters(function (origin) {\n return origin.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n\n if (!urlStateValue) return filter;\n\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n var urlSearchValue = urlState[searchPrefix];\n if (urlSearchValue) {\n setSearchQuery(urlSearchValue[0]);\n }\n }, []);\n\n (0, _react.useEffect)(function () {\n setRandomSortId(Math.floor(Math.random() * 10e12));\n }, []);\n\n /**\n * Trigger after button load more click\n * @returns {Void} - an updated url page\n */\n (0, _react.useEffect)(function () {\n setUrlState('page', currentPage === 1 ? '' : currentPage);\n }, [currentPage]);\n\n var removeEmptyFilters = function removeEmptyFilters(allFilters, cardsFromJson) {\n var _ref3;\n\n var tags = (_ref3 = []).concat.apply(_ref3, _toConsumableArray(cardsFromJson.map(function (card) {\n return card.tags.map(function (tag) {\n return tag.id;\n });\n })));\n\n var timingTags = [_constants.EVENT_TIMING_IDS.LIVE, _constants.EVENT_TIMING_IDS.ONDEMAND, _constants.EVENT_TIMING_IDS.UPCOMING];\n\n return allFilters.map(function (filter) {\n return _extends({}, filter, {\n items: filter.items.filter(function (item) {\n return tags.includes(item.id) || tags.includes(item.label) || tags.toString().includes('/' + item.id) // ***** FIX HERE *****\n || timingTags.includes(item.id);\n })\n });\n }).filter(function (filter) {\n return filter.items.length > 0;\n });\n };\n\n /**\n * This handles getting Cards, there are some conditions:\n * - If target is not enabled a simple request is made without mods or delay.\n * - If target is enabled & tVisitor API is present add values from Visitor\n * - If target is enabled & the Visitor API is not present setTimeout with\n * counter to recheck for the Visitor API. If 20 attempts are made w/o\n * success fail the request.\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (isLazy && visibleStamp || isLazy && !hasFetched) {\n return;\n }\n var _window = window,\n visitorPromise = _window.__satelliteLoadedPromise;\n\n\n var collectionEndpoint = getConfig('collection', 'endpoint');\n var fallbackEndpoint = getConfig('collection', 'fallbackEndpoint');\n\n var r = new RegExp('^(?:[a-z]+:)?//', 'i');\n var collectionEndpointURI = void 0;\n if (r.test(collectionEndpoint)) {\n collectionEndpointURI = new URL(collectionEndpoint);\n } else {\n collectionEndpointURI = new URL(collectionEndpoint, window.location.origin);\n }\n\n if (!fallbackEndpoint) {\n collectionEndpointURI.searchParams.set('flatFile', false);\n collectionEndpoint = collectionEndpointURI.toString();\n }\n\n setLoading(true);\n\n /**\n * @func getCards\n * @desc wraps fetch with function to make it reusable\n *\n * @param {String} endPoint, URL with params for card request\n * @returns {Void} - an updated state\n */\n function getCards() {\n var endPoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : collectionEndpoint;\n\n var start = Date.now();\n return window.fetch(endPoint, {\n credentials: 'include',\n headers: headers\n }).then(function (resp) {\n var ok = resp.ok,\n status = resp.status,\n statusText = resp.statusText,\n url = resp.url;\n\n\n if (ok) {\n return resp.json().then(function (json) {\n var validData = !!Object.keys(json).length;\n\n if (validData) return json;\n\n (0, _lana.logLana)({ message: 'no valid response data from ' + endPoint, tags: 'collection' });\n return Promise.reject(new Error('no valid reponse data'));\n });\n }\n (0, _lana.logLana)({ message: 'failure for call to ' + url, tags: 'collection', errorMessage: status + ': ' + statusText });\n return Promise.reject(new Error(status + ': ' + statusText + ', failure for call to ' + url));\n }).then(function (payload) {\n (0, _lana.logLana)({ message: 'response took ' + (Date.now() - start) / 1000 + 's', tags: 'collection' });\n setLoading(false);\n setIsFirstLoad(true);\n if (!(0, _general.getByPath)(payload, 'cards.length')) {\n (0, _lana.logLana)({ message: 'no cards return by query to this endpoint: ' + endPoint, tags: 'collection' });\n return;\n }\n if (payload.isHashed) {\n var TAG_HASH_LENGTH = 6;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = authoredFilters[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var group = _step.value;\n\n group.id = rollingHash(group.id, TAG_HASH_LENGTH);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = group.items[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var filterItem = _step3.value;\n\n var _getParentChild = getParentChild(filterItem.id),\n _getParentChild2 = _slicedToArray(_getParentChild, 2),\n parent = _getParentChild2[0],\n child = _getParentChild2[1];\n\n filterItem.id = rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var temp = [];\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = hideCtaTags[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var tag = _step2.value;\n\n var _getParentChild3 = getParentChild(tag),\n _getParentChild4 = _slicedToArray(_getParentChild3, 2),\n parent = _getParentChild4[0],\n child = _getParentChild4[1];\n\n if (parent !== '' && child !== '') {\n temp.push(rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH));\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n hideCtaTags = temp;\n }\n\n var _removeDuplicateCards = new _JsonProcessor2.default(payload.cards).removeDuplicateCards().addCardMetaData(_constants.TRUNCATE_TEXT_QTY, onlyShowBookmarks, bookmarkedCardIds, hideCtaIds, hideCtaTags),\n _removeDuplicateCards2 = _removeDuplicateCards.processedCards,\n processedCards = _removeDuplicateCards2 === undefined ? [] : _removeDuplicateCards2;\n\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n } else {\n setFilters(function () {\n return authoredFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n }\n\n var transitions = (0, _general.getTransitions)(processedCards);\n if (sortOption.sort.toLowerCase() === 'eventsort') {\n while (transitions.size() > 0) {\n setTimeout(function () {\n nextTransition();\n }, transitions.dequeue().priority + _constants.ONE_SECOND_DELAY);\n }\n }\n\n setCards(processedCards);\n if (!showEmptyFilters) {\n setFilters(function (prevFilters) {\n return removeEmptyFilters(prevFilters, processedCards);\n });\n }\n setTimeout(function () {\n if (!scrollElementRef.current) return;\n if (processedCards.length === 0) return;\n if (currentPage === 1) return;\n var cardsToshow = processedCards.slice(0, resultsPerPage * currentPage);\n var getLastPageID = resultsPerPage * currentPage - resultsPerPage;\n if (cardsToshow.length < getLastPageID) return;\n var lastID = scrollElementRef.current.children[getLastPageID];\n lastID.scrollIntoView();\n }, 100);\n }).catch(function () {\n if (endPoint === collectionEndpoint && fallbackEndpoint) {\n getCards(fallbackEndpoint);\n return;\n }\n (0, _lana.logLana)({ message: 'failed to return processed cards', tags: 'collection' });\n setLoading(false);\n setApiFailure(true);\n });\n }\n /**\n * @func getVisitorData\n * @desc wraps fetching Visitor API data in a function for reuse, also if\n * last used session is checked, update currentEntityId with targetValueRevealID\n *\n * @param {Promise} visitorApi, window.__satelliteLoadedPromise when accessed\n * @returns {Void} - an updated state, thru calling getCards\n */\n function getVisitorData(visitorApi) {\n var collectionURI = new URL(collectionEndpoint);\n\n if (useLastViewedSession) {\n var targetRevealId = localStorage.getItem('targetValueRevealID');\n if (targetRevealId) {\n collectionURI.searchParams.set('currentEntityId', targetRevealId);\n }\n }\n\n visitorApi.then(function (result) {\n if (window.alloy && window.edgeConfigId) {\n window.alloy('getIdentity').then(function (res) {\n collectionURI.searchParams.set('mcgvid', res.identity.ECID);\n collectionURI.searchParams.set('mboxMCGLH', res.edge.regionId);\n getCards(collectionURI.toString());\n });\n } else {\n var visitor = result.getVisitorId();\n collectionURI.searchParams.set('mcgvid', visitor.getMarketingCloudVisitorID());\n collectionURI.searchParams.set('sdid', visitor.getSupplementalDataID());\n collectionURI.searchParams.set('mboxAAMB', visitor.getAudienceManagerBlob());\n collectionURI.searchParams.set('mboxMCGLH', visitor.getAudienceManagerLocationHint());\n getCards(collectionURI.toString());\n }\n });\n }\n\n /**\n * @func visitorRetry\n * @desc Visitor API is late loading often, this sets a recursive call\n * in a setTimeout to run 20 times, and then fail the request.\n *\n * @returns {Void} - an updated state, thru calling getVisitorData which\n * calls getCards\n */\n function visitorRetry() {\n var retryCount = 0;\n\n var timedRetry = function timedRetry() {\n setTimeout(function () {\n if (retryCount >= 20) {\n setLoading(false);\n\n setApiFailure(true);\n\n return;\n }\n\n var _window2 = window,\n visitorPromiseRetry = _window2.__satelliteLoadedPromise;\n\n\n if (visitorPromiseRetry) {\n getVisitorData(visitorPromiseRetry);\n }\n\n if (!visitorPromiseRetry && retryCount < 20) {\n timedRetry();\n }\n\n retryCount += 1;\n }, 100);\n };\n\n timedRetry();\n }\n\n if (targetEnabled && visitorPromise) {\n getVisitorData(visitorPromise);\n }\n\n if (targetEnabled && !visitorPromise) {\n visitorRetry();\n }\n\n if (!targetEnabled) {\n getCards();\n }\n }, [visibleStamp, hasFetched]);\n\n /**\n * Saves cards to local storage and updates card w/ bookmarked data\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n (0, _general.saveBookmarksToLocalStorage)(bookmarkedCardIds);\n setCards((0, _Helpers.getUpdatedCardBookmarkData)(cards, bookmarkedCardIds));\n }, [bookmarkedCardIds]);\n\n /**\n * Handles clearing state on showBookmarks\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (showBookmarks) {\n clearAllFilters();\n setSearchQuery('');\n }\n }, [showBookmarks]);\n\n /**\n * Handles focus and escape on mobile filter toggle\n * @returns {Void}\n */\n (0, _react.useEffect)(function () {\n if (showMobileFilters) {\n if (filterItemRef && filterItemRef.current) {\n filterItemRef.current.focusMobTitle();\n }\n document.addEventListener('keydown', handleMobileFilterEscape);\n } else {\n if (filterInfoRef && filterInfoRef.current) {\n filterInfoRef.current.focus();\n }\n document.removeEventListener('keydown', handleMobileFilterEscape);\n }\n\n return function () {\n document.removeEventListener('keydown', handleMobileFilterEscape);\n };\n }, [showMobileFilters]);\n\n var box = (0, _react.useRef)();\n\n (0, _react.useEffect)(function () {\n if (box && !visibleStamp && isLazy) {\n var io = new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0) return;\n setHasFetched(true);\n setVisibleStamp(new Date().getTime());\n });\n io.observe(box.current);\n }\n }, [box]);\n\n /**\n **** Derived State ****\n */\n\n /**\n * Array of filters chosen by the user\n * @type {Array}\n */\n var activeFilterIds = (0, _Helpers.getActiveFilterIds)(filters);\n\n /**\n * Array of filters panels (groupings) created by the author\n * @type {Array}\n */\n var activePanels = (0, _Helpers.getActivePanels)(activeFilterIds) || new Set();\n\n /**\n * Instance of CardFilterer class that handles returning subset of cards\n * based off user interactions\n *\n * @type {Object}\n */\n var cardFilterer = new _CardFilterer2.default(cards, randomSortId, sampleSize, reservoirSize, featuredCards);\n\n /**\n * @type {Function} getFilteredCollection\n * @desc Closure around CardFilterer for reuse within context\n * @returns {Object}\n * */\n var getFilteredCollection = function getFilteredCollection() {\n return cardFilterer.sortCards(sortOption, eventFilter, featuredCards, hideCtaIds, isFirstLoad).keepBookmarkedCardsOnly(onlyShowBookmarks, bookmarkedCardIds, showBookmarks).keepCardsWithinDateRange().filterCards(activeFilterIds, activePanels, filterLogic, _constants.FILTER_TYPES, currCategories).truncateList(totalCardLimit).searchCards(searchQuery, searchFields, cardStyle).removeCards(inclusionIds);\n };\n\n /**\n * @type {Array} filteredCards: Filtered cards based off current state of page\n * @type {Number} nextTransitionMs: Number for timed event sort transition\n */\n /* eslint-disable no-unused-vars */\n\n var _getFilteredCollectio = getFilteredCollection(),\n _getFilteredCollectio2 = _getFilteredCollectio.filteredCards,\n filteredCards = _getFilteredCollectio2 === undefined ? [] : _getFilteredCollectio2,\n _getFilteredCollectio3 = _getFilteredCollectio.nextTransitionMs,\n nextTransitionMs = _getFilteredCollectio3 === undefined ? 0 : _getFilteredCollectio3;\n\n /**\n * Subset of cards to show the user\n * @type {Array}\n */\n\n\n var gridCards = timedCollection.length ? timedCollection : filteredCards;\n\n /**\n * Total pages (used by Paginator Component)\n * @type {Number}\n */\n var totalPages = (0, _Helpers.getTotalPages)(resultsPerPage, gridCards.length);\n\n /**\n * Number of cards to show (used by Load More component)\n * @type {Number}\n */\n var numCardsToShow = (0, _Helpers.getNumCardsToShow)(resultsPerPage, currentPage, gridCards.length);\n\n /**\n * How many filters were selected - (used by Left Filter Panel)\n * @type {Number}\n */\n var selectedFiltersItemsQty = (0, _consonant.getNumSelectedFilterItems)(filters);\n\n /**\n * Conditions to Display A Form Of Pagination\n * @type {Boolean}\n */\n var displayPagination = (0, _Helpers.shouldDisplayPaginator)(paginationIsEnabled, totalCardLimit, gridCards.length);\n /**\n * Conditions to display the Load More Button\n * @type {Boolean}\n */\n var displayLoadMore = displayPagination && paginationType === 'loadMore';\n\n /**\n * Conditions to display the Paginator Component\n * @type {Boolean}\n */\n var displayPaginator = displayPagination && paginationType === 'paginator';\n\n /**\n * Conditions to display the Left Filter Panel Component\n * @type {Boolean}\n */\n var displayLeftFilterPanel = filterPanelEnabled && filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Whether at lease one card was returned by Card Filterer\n * @type {Boolean}\n */\n var atLeastOneCard = gridCards.length > 0;\n\n /**\n * Where to place the Sort Popup (either left or right)\n * @type {String} - Location of Sort Popup in Top Filter Panel View\n */\n var topPanelSortPopupLocation = filters.length > 0 && windowWidth < _constants.TABLET_MIN_WIDTH ? _constants.SORT_POPUP_LOCATION.LEFT : _constants.SORT_POPUP_LOCATION.RIGHT;\n\n /**\n * How Long Paginator Component Should Be\n * @type {Number} - Location of Sort Popup in Top Filter Panel View\n */\n var paginatorCount = DESKTOP_SCREEN_SIZE ? _constants.PAGINATION_COUNT.DESKTOP : _constants.PAGINATION_COUNT.MOBILE;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isTopFilterPanel = filterPanelType === _constants.FILTER_PANEL.TOP;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isLeftFilterPanel = filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Ui options that cause grid to rerender necessitate the aria attribute being set\n * @type {Boolean}\n */\n var isGridAreaLive = filterPanelEnabled || searchEnabled || sortEnabled || paginationIsEnabled;\n\n var filterNames = '';\n filters.forEach(function (el) {\n el.items.filter(function (item) {\n return item.selected;\n }).forEach(function (item) {\n filterNames += item.label + ', ';\n });\n });\n\n /**\n **** Class names ****\n */\n\n /**\n * Class name for the authored theme:\n * light, dark, darkest;\n * @type {String}\n */\n var themeClass = (0, _classnames2.default)({\n 'consonant-u-themeLight': authoredMode === _constants.THEME_TYPE.LIGHT,\n 'consonant-u-themeDark': authoredMode === _constants.THEME_TYPE.DARK,\n 'consonant-u-themeDarkest': authoredMode === _constants.THEME_TYPE.DARKEST\n });\n\n /**\n * @param {*} filterList\n * @param {*} categoryList\n * @returns List of categories for the top pills\n * Prepends the \"All Topics\" pill to the list of categories\n */\n function getAuthoredCategories(filterList, categoryList) {\n var categoryIds = filterList.filter(function (filter) {\n return filter.id.includes('caas:product-categories');\n }).map(function (item) {\n return item.id;\n });\n\n // Sorts category list based on authored order\n var selectedCategories = categoryIds.map(function (id) {\n return categoryList && categoryList.filter(function (category) {\n return category.id === id;\n })[0];\n });\n\n return [{\n group: 'All Topics',\n title: 'All Topics',\n id: '',\n items: []\n }].concat(_toConsumableArray(selectedCategories));\n }\n\n /**\n * @returns List of all products from all categories for the 'All products' menu\n * Prepends the \"All products\" label to the list of categories\n */\n function getAllCategoryProducts() {\n if (!authoredCategories) return [];\n var allCategories = [];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = authoredCategories[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var category = _step4.value;\n\n if (category && category.items) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = category.items[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var item = _step5.value;\n\n item.fromCategory = true;\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n allCategories = allCategories.concat(category.items);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return {\n group: 'All products',\n id: 'caas:all-products',\n items: allCategories\n };\n }\n\n /**\n * @param {*} selectedCategories\n * @param {*} groupId\n * Sets the categories and filters based on the selected category\n */\n function categoryHandler(selectedCategories, groupId) {\n var temp = [];\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = selectedCategories[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var category = _step6.value;\n\n temp.push(category.id);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n setCategories(temp);\n setFilters(function (prevFilters) {\n prevFilters.pop();\n var newGroup = authoredCategories.filter(function (category) {\n return category.id === groupId;\n })[0];\n if (!newGroup.items.length) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n }\n prevFilters.push(newGroup);\n return prevFilters;\n });\n setSelectedCategory(groupId);\n setCurrentPage(1);\n }\n\n /**\n * @param {*} category\n * @returns The Authored icon for the category if exists,\n * otherwise returns the default icon from the tags or an empty string\n */\n function getCategoryIcon(category) {\n var authoredIcon = authoredFilters.filter(function (filter) {\n return filter.id === category.id;\n }).map(function (filter) {\n return filter.icon;\n }).toString();\n return authoredIcon || category.icon || '';\n }\n\n var collectionStr = collectionIdentifier ? collectionIdentifier + ' | ' : '';\n var filterStr = selectedFiltersItemsQty ? filterNames : 'No Filters';\n var searchQueryStr = searchQuery || 'None';\n var collectionAnalytics = collectionStr + 'Card Collection | Filters: ' + filterStr + '| Search Query: ' + searchQueryStr;\n /**\n * Class name for the consonant wrapper:\n * whether consonant wrapper contains left filter;\n * @type {String}\n */\n var wrapperClass = (0, _classnames2.default)({\n 'consonant-Wrapper': true,\n 'consonant-Wrapper--32MarginContainer': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,\n 'consonant-Wrapper--83PercentContainier': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_83_VW,\n 'consonant-Wrapper--1200MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1200_PX,\n 'consonant-Wrapper--1600MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1600_PX,\n 'consonant-Wrapper--1200MaxWidth Categories': isCategoriesContainer,\n 'consonant-Wrapper--carousel': isCarouselContainer,\n 'consonant-Wrapper--withLeftFilter': filterPanelEnabled && isLeftFilterPanel\n });\n\n (0, _react.useEffect)(function () {\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n });\n }\n }, []);\n\n return _react2.default.createElement(\n _contexts.ConfigContext.Provider,\n { value: config },\n _react2.default.createElement(\n _contexts.ExpandableContext.Provider,\n { value: { value: openDropdown, setValue: setOpenDropdown } },\n _react2.default.createElement(\n 'section',\n {\n ref: box,\n role: 'group',\n 'aria-label': title,\n 'daa-lh': collectionAnalytics,\n 'daa-im': String(trackImpressions),\n onClick: handleWindowClick,\n className: wrapperClass + ' ' + themeClass },\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-inner' },\n isCategoriesContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(\n 'h2',\n { 'data-testid': 'consonant-TopFilters-categoriesTitle', className: 'consonant-TopFilters-categoriesTitle' },\n title\n ),\n _react2.default.createElement(\n 'div',\n { className: 'filters-category' },\n authoredCategories.map(function (category) {\n if (!category) return null;\n var selected = '';\n if (category.id === selectedCategory) {\n selected = 'selected';\n }\n return _react2.default.createElement(\n 'button',\n {\n onClick: function onClick() {\n categoryHandler(category.items, category.id);\n },\n 'data-selected': selected,\n 'data-group': category.group.replaceAll(' ', '').toLowerCase() },\n _react2.default.createElement('img', { className: 'filters-category--icon', src: getCategoryIcon(category), alt: category.icon && 'Category icon' }),\n category.title\n );\n })\n )\n ),\n displayLeftFilterPanel && isStandardContainer && _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-leftFilterWrapper' },\n _react2.default.createElement(_Panel4.default, {\n filters: filters,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onFilterClick: handleFilterGroupClick,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n onClearFilterItems: clearFilterItem,\n onCheckboxClick: handleCheckBoxChange,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n onSelectedFilterClick: handleCheckBoxChange,\n showMobileFilters: showMobileFilters,\n resQty: gridCards.length,\n bookmarkComponent: _react2.default.createElement(_Bookmarks2.default, {\n showBookmarks: showBookmarks,\n onClick: handleShowBookmarksFilterClick,\n savedCardsCount: bookmarkedCardIds.length }),\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: leftPanelSearchPlaceholder,\n name: 'filtersSideSearch',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n ref: filterItemRef })\n ),\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-collection' + (isLoading ? ' is-loading' : '') },\n isTopFilterPanel && isStandardContainer && _react2.default.createElement(_Panel2.default, {\n filterPanelEnabled: filterPanelEnabled,\n filters: filters,\n windowWidth: windowWidth,\n resQty: gridCards.length,\n onCheckboxClick: handleCheckBoxChange,\n onFilterClick: handleFilterGroupClick,\n onClearFilterItems: clearFilterItem,\n categories: currCategories,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n showLimitedFiltersQty: showLimitedFiltersQty,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: topPanelSearchPlaceholder,\n name: 'filtersTopSearch',\n value: searchQuery,\n autofocus: DESKTOP_SCREEN_SIZE,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n name: 'filtersTopSelect',\n autoWidth: true,\n optionsAlignment: topPanelSortPopupLocation }),\n onShowAllClick: handleShowAllTopFilters }),\n isLeftFilterPanel && isStandardContainer && _react2.default.createElement(_Info.Info, {\n enabled: filterPanelEnabled,\n filtersQty: filters.length,\n filters: filters,\n cardsQty: gridCards.length,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: searchPlaceholderText,\n name: 'searchFiltersInfo',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n autoWidth: false,\n optionsAlignment: 'right' }),\n sortOptions: sortOptions,\n ref: filterInfoRef }),\n atLeastOneCard && isStandardContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(_Grid2.default, {\n resultsPerPage: resultsPerPage,\n pages: currentPage,\n cards: gridCards,\n forwardedRef: scrollElementRef,\n onCardBookmark: handleCardBookmarking,\n isAriaLiveActive: isGridAreaLive }),\n displayLoadMore && _react2.default.createElement(_LoadMore2.default, {\n onClick: onLoadMoreClick,\n show: numCardsToShow,\n total: gridCards.length }),\n displayPaginator && _react2.default.createElement(_Paginator2.default, {\n pageCount: paginatorCount,\n currentPageNumber: currentPage,\n totalPages: totalPages,\n showItemsPerPage: resultsPerPage,\n totalResults: gridCards.length,\n onClick: setCurrentPage })\n ),\n atLeastOneCard && isCarouselContainer && !(cardStyle === 'custom-card') && _react2.default.createElement(_CardsCarousel2.default, {\n resQty: gridCards.length,\n cards: gridCards,\n role: 'tablist',\n onCardBookmark: handleCardBookmarking }),\n atLeastOneCard && isCarouselContainer && cardStyle === 'custom-card' && _react2.default.createElement(_View2.default, {\n title: 'Not Supported',\n description: 'Using custom cards within a carousel layout is currently not supported. Please re-author the component',\n replaceValue: '' }),\n isLoading && !atLeastOneCard && _react2.default.createElement(_Loader2.default, {\n size: _constants.LOADER_SIZE.BIG,\n hidden: !totalCardLimit,\n absolute: true }),\n !isApiFailure && !atLeastOneCard && !isLoading && _react2.default.createElement(_View2.default, {\n title: noResultsTitle,\n description: noResultsDescription,\n replaceValue: searchQuery }),\n isApiFailure && _react2.default.createElement(_View2.default, {\n title: apiFailureTitle,\n description: apiFailureDescription,\n replaceValue: '' })\n )\n )\n )\n )\n );\n};\n\nContainer.propTypes = {\n config: (0, _propTypes.shape)(_config.configType)\n};\n\nContainer.defaultProps = {\n config: {}\n};\n\nexports.default = Container;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZWFjdC9zcmMvanMvY29tcG9uZW50cy9Db25zb25hbnQvQ29udGFpbmVyL0NvbnRhaW5lci5qc3g/YzY0MCJdLCJuYW1lcyI6WyJDb250YWluZXIiLCJwcm9wcyIsImNvbmZpZyIsImdldENvbmZpZyIsImZpbHRlckdyb3VwUHJlZml4Iiwic2VhcmNoUHJlZml4IiwiQ0FSRF9IQVNIX0xFTkdUSCIsImZpbHRlclBhbmVsRW5hYmxlZCIsImZpbHRlclBhbmVsVHlwZSIsInBhZ2luYXRpb25UeXBlIiwicGFnaW5hdGlvbklzRW5hYmxlZCIsInJlc3VsdHNQZXJQYWdlIiwib25seVNob3dCb29rbWFya3MiLCJhdXRob3JlZEZpbHRlcnMiLCJmaWx0ZXJMb2dpYyIsInRvTG93ZXJDYXNlIiwidHJpbSIsInRvdGFsQ2FyZExpbWl0Iiwic2FtcGxlU2l6ZSIsInJlc2Vydm9pclNpemUiLCJzZWFyY2hGaWVsZHMiLCJzb3J0T3B0aW9ucyIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdFNvcnRPcHRpb24iLCJmZWF0dXJlZENhcmRzIiwidG9TdHJpbmciLCJyZXBsYWNlIiwic3BsaXQiLCJjb25jYXQiLCJtYXAiLCJyb2xsaW5nSGFzaCIsImlkIiwiaGlkZUN0YUlkcyIsImhpZGVDdGFUYWdzIiwibGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIiLCJ0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyIiwic2VhcmNoUGxhY2Vob2xkZXJUZXh0Iiwibm9SZXN1bHRzVGl0bGUiLCJub1Jlc3VsdHNEZXNjcmlwdGlvbiIsImFwaUZhaWx1cmVUaXRsZSIsImFwaUZhaWx1cmVEZXNjcmlwdGlvbiIsImlzTGF6eSIsInRyYWNrSW1wcmVzc2lvbnMiLCJjb2xsZWN0aW9uSWRlbnRpZmllciIsInRhcmdldEVuYWJsZWQiLCJ1c2VMYXN0Vmlld2VkU2Vzc2lvbiIsImF1dGhvcmVkTW9kZSIsImF1dGhvcmVkTGF5b3V0Q29udGFpbmVyIiwic2hvd0VtcHR5RmlsdGVycyIsImV2ZW50RmlsdGVyIiwic2VhcmNoRW5hYmxlZCIsInNvcnRFbmFibGVkIiwiY2FyZFN0eWxlIiwidGl0bGUiLCJoZWFkZXJzIiwiREVTS1RPUF9TQ1JFRU5fU0laRSIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJERVNLVE9QX01JTl9XSURUSCIsImlzWG9yRmlsdGVyIiwiRklMVEVSX1RZUEVTIiwiWE9SIiwiaXNDYXJvdXNlbENvbnRhaW5lciIsIkxBWU9VVF9DT05UQUlORVIiLCJDQVJPVVNFTCIsImlzU3RhbmRhcmRDb250YWluZXIiLCJpc0NhdGVnb3JpZXNDb250YWluZXIiLCJDQVRFR09SSUVTIiwiY2F0ZWdvcmllcyIsImF1dGhvcmVkQ2F0ZWdvcmllcyIsImdldEF1dGhvcmVkQ2F0ZWdvcmllcyIsInRpbWVkQ29sbGVjdGlvbiIsInNldFRpbWVkQ29sbGVjdGlvbiIsInRyYW5zaXRpb24iLCJzZXRUcmFuc2l0aW9uIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInVwZGF0ZVN0YXRlIiwic2Nyb2xsRWxlbWVudFJlZiIsIm5leHRUcmFuc2l0aW9uIiwidXNlQ2FsbGJhY2siLCJ1cmxTdGF0ZSIsInNldFVybFN0YXRlIiwiY2xlYXJVcmxTdGF0ZSIsIm9wZW5Ecm9wZG93biIsInNldE9wZW5Ecm9wZG93biIsImJvb2ttYXJrZWRDYXJkSWRzIiwic2V0Qm9va21hcmtlZENhcmRJZHMiLCJpbmNsdXNpb25JZHMiLCJwYWdlIiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsImZpbHRlcnMiLCJzZXRGaWx0ZXJzIiwiY3VyckNhdGVnb3JpZXMiLCJzZXRDYXRlZ29yaWVzIiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJzZXRTZWxlY3RlZENhdGVnb3J5Iiwic29ydE9wZW5lZCIsInNldFNvcnRPcGVuZWQiLCJzb3J0T3B0aW9uIiwic2V0U29ydE9wdGlvbiIsInNvcnQiLCJTT1JUX1RZUEVTIiwiUkFORE9NIiwid2luZG93V2lkdGgiLCJ3aWR0aCIsInNob3dNb2JpbGVGaWx0ZXJzIiwic2V0U2hvd01vYmlsZUZpbHRlcnMiLCJzaG93Qm9va21hcmtzIiwic2V0U2hvd0Jvb2ttYXJrcyIsInNob3dMaW1pdGVkRmlsdGVyc1F0eSIsInNldFNob3dMaW1pdGVkRmlsdGVyc1F0eSIsImNhcmRzIiwic2V0Q2FyZHMiLCJpc0xvYWRpbmciLCJzZXRMb2FkaW5nIiwiaXNBcGlGYWlsdXJlIiwic2V0QXBpRmFpbHVyZSIsInJhbmRvbVNvcnRJZCIsInNldFJhbmRvbVNvcnRJZCIsImlzRmlyc3RMb2FkIiwic2V0SXNGaXJzdExvYWQiLCJ2aXNpYmxlU3RhbXAiLCJzZXRWaXNpYmxlU3RhbXAiLCJoYXNGZXRjaGVkIiwic2V0SGFzRmV0Y2hlZCIsImZpbHRlckl0ZW1SZWYiLCJmaWx0ZXJJbmZvUmVmIiwiZ2V0UGFyZW50Q2hpbGQiLCJpIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwicyIsImwiLCJCQVNFIiwiTU9EIiwiaGFzaCIsImJhc2VQb3dlciIsImNoYXJDb2RlQXQiLCJnZXRBbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlIiwiZmlsdGVyR3JvdXBzIiwiZmlsdGVyR3JvdXAiLCJpdGVtcyIsImZpbHRlckl0ZW0iLCJzZWxlY3RlZCIsImdldEZpbHRlckl0ZW1DbGVhcmVkU3RhdGUiLCJjbGVhckZpbHRlckl0ZW0iLCJncm91cCIsInByZXZGaWx0ZXJzIiwiZmlsdGVyQ2xlYXJlZFN0YXRlIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJjaEZpbHRlciIsImluZGV4T2YiLCJpbmNsdWRlcyIsImNsZWFyQWxsRmlsdGVycyIsImFsbEZpbHRlcnNDbGVhcmVkU3RhdGUiLCJyZXNldEZpbHRlcnNTZWFyY2hBbmRCb29rbWFya3MiLCJvbkxvYWRNb3JlQ2xpY2siLCJwcmV2U3RhdGUiLCJzY3JvbGxUbyIsInBhZ2VZT2Zmc2V0IiwiaGFuZGxlU29ydENoYW5nZSIsIm9wdGlvbiIsImhhbmRsZVNlYXJjaElucHV0Q2hhbmdlIiwidmFsIiwiaGFuZGxlRmlsdGVyR3JvdXBDbGljayIsImZpbHRlcklkIiwib3BlbmVkIiwiZWwiLCJjaGFuZ2VVcmxTdGF0ZSIsIml0ZW1JZCIsImlzQ2hlY2tlZCIsImZpbmQiLCJsYWJlbCIsInVybFN0YXRlVmFsdWUiLCJmaWx0ZXIiLCJpdGVtIiwiaGFuZGxlQ2hlY2tCb3hDaGFuZ2UiLCJoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlIiwicHJldiIsImhhbmRsZUNhcmRCb29rbWFya2luZyIsImNhcmRJc0Jvb2ttYXJrZWQiLCJjYXJkIiwiaGFuZGxlU2hvd0Jvb2ttYXJrc0ZpbHRlckNsaWNrIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVNob3dBbGxUb3BGaWx0ZXJzIiwiaGFuZGxlV2luZG93Q2xpY2siLCJoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUiLCJldmVudCIsIm9wZW5lZE9uTG9hZCIsIm9yaWdpbiIsInVybFN0YXRlQXJyYXkiLCJTdHJpbmciLCJ1cmxTZWFyY2hWYWx1ZSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInJlbW92ZUVtcHR5RmlsdGVycyIsImFsbEZpbHRlcnMiLCJjYXJkc0Zyb21Kc29uIiwidGFncyIsInRhZyIsInRpbWluZ1RhZ3MiLCJFVkVOVF9USU1JTkdfSURTIiwiTElWRSIsIk9OREVNQU5EIiwiVVBDT01JTkciLCJ2aXNpdG9yUHJvbWlzZSIsIl9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZSIsImNvbGxlY3Rpb25FbmRwb2ludCIsImZhbGxiYWNrRW5kcG9pbnQiLCJyIiwiUmVnRXhwIiwiY29sbGVjdGlvbkVuZHBvaW50VVJJIiwidGVzdCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsImdldENhcmRzIiwiZW5kUG9pbnQiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwidGhlbiIsInJlc3AiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJ1cmwiLCJqc29uIiwidmFsaWREYXRhIiwiT2JqZWN0Iiwia2V5cyIsIm1lc3NhZ2UiLCJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJwYXlsb2FkIiwiaXNIYXNoZWQiLCJUQUdfSEFTSF9MRU5HVEgiLCJwYXJlbnQiLCJjaGlsZCIsInRlbXAiLCJwdXNoIiwiSnNvblByb2Nlc3NvciIsInJlbW92ZUR1cGxpY2F0ZUNhcmRzIiwiYWRkQ2FyZE1ldGFEYXRhIiwiVFJVTkNBVEVfVEVYVF9RVFkiLCJwcm9jZXNzZWRDYXJkcyIsInRyYW5zaXRpb25zIiwic2l6ZSIsInNldFRpbWVvdXQiLCJkZXF1ZXVlIiwicHJpb3JpdHkiLCJPTkVfU0VDT05EX0RFTEFZIiwiY3VycmVudCIsImNhcmRzVG9zaG93Iiwic2xpY2UiLCJnZXRMYXN0UGFnZUlEIiwibGFzdElEIiwiY2hpbGRyZW4iLCJzY3JvbGxJbnRvVmlldyIsImNhdGNoIiwiZ2V0VmlzaXRvckRhdGEiLCJ2aXNpdG9yQXBpIiwiY29sbGVjdGlvblVSSSIsInRhcmdldFJldmVhbElkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInJlc3VsdCIsImFsbG95IiwiZWRnZUNvbmZpZ0lkIiwicmVzIiwiaWRlbnRpdHkiLCJFQ0lEIiwiZWRnZSIsInJlZ2lvbklkIiwidmlzaXRvciIsImdldFZpc2l0b3JJZCIsImdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEIiwiZ2V0U3VwcGxlbWVudGFsRGF0YUlEIiwiZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYiIsImdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCIsInZpc2l0b3JSZXRyeSIsInJldHJ5Q291bnQiLCJ0aW1lZFJldHJ5IiwidmlzaXRvclByb21pc2VSZXRyeSIsImZvY3VzTW9iVGl0bGUiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb2N1cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJib3giLCJpbyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImludGVyc2VjdGlvblJhdGlvIiwiZ2V0VGltZSIsIm9ic2VydmUiLCJhY3RpdmVGaWx0ZXJJZHMiLCJhY3RpdmVQYW5lbHMiLCJTZXQiLCJjYXJkRmlsdGVyZXIiLCJDYXJkRmlsdGVyZXIiLCJnZXRGaWx0ZXJlZENvbGxlY3Rpb24iLCJzb3J0Q2FyZHMiLCJrZWVwQm9va21hcmtlZENhcmRzT25seSIsImtlZXBDYXJkc1dpdGhpbkRhdGVSYW5nZSIsImZpbHRlckNhcmRzIiwidHJ1bmNhdGVMaXN0Iiwic2VhcmNoQ2FyZHMiLCJyZW1vdmVDYXJkcyIsImZpbHRlcmVkQ2FyZHMiLCJuZXh0VHJhbnNpdGlvbk1zIiwiZ3JpZENhcmRzIiwidG90YWxQYWdlcyIsIm51bUNhcmRzVG9TaG93Iiwic2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHkiLCJkaXNwbGF5UGFnaW5hdGlvbiIsImRpc3BsYXlMb2FkTW9yZSIsImRpc3BsYXlQYWdpbmF0b3IiLCJkaXNwbGF5TGVmdEZpbHRlclBhbmVsIiwiRklMVEVSX1BBTkVMIiwiTEVGVCIsImF0TGVhc3RPbmVDYXJkIiwidG9wUGFuZWxTb3J0UG9wdXBMb2NhdGlvbiIsIlRBQkxFVF9NSU5fV0lEVEgiLCJTT1JUX1BPUFVQX0xPQ0FUSU9OIiwiUklHSFQiLCJwYWdpbmF0b3JDb3VudCIsIlBBR0lOQVRJT05fQ09VTlQiLCJERVNLVE9QIiwiTU9CSUxFIiwiaXNUb3BGaWx0ZXJQYW5lbCIsIlRPUCIsImlzTGVmdEZpbHRlclBhbmVsIiwiaXNHcmlkQXJlYUxpdmUiLCJmaWx0ZXJOYW1lcyIsInRoZW1lQ2xhc3MiLCJUSEVNRV9UWVBFIiwiTElHSFQiLCJEQVJLIiwiREFSS0VTVCIsImZpbHRlckxpc3QiLCJjYXRlZ29yeUxpc3QiLCJjYXRlZ29yeUlkcyIsInNlbGVjdGVkQ2F0ZWdvcmllcyIsImNhdGVnb3J5IiwiZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cyIsImFsbENhdGVnb3JpZXMiLCJmcm9tQ2F0ZWdvcnkiLCJjYXRlZ29yeUhhbmRsZXIiLCJncm91cElkIiwicG9wIiwibmV3R3JvdXAiLCJuZXh0RmlsdGVycyIsImdldENhdGVnb3J5SWNvbiIsImF1dGhvcmVkSWNvbiIsImljb24iLCJjb2xsZWN0aW9uU3RyIiwiZmlsdGVyU3RyIiwic2VhcmNoUXVlcnlTdHIiLCJjb2xsZWN0aW9uQW5hbHl0aWNzIiwid3JhcHBlckNsYXNzIiwiU0laRV8xMDBfVldfMzJfTUFSR0lOIiwiU0laRV84M19WVyIsIlNJWkVfMTIwMF9QWCIsIlNJWkVfMTYwMF9QWCIsInNldFZhbHVlIiwicmVwbGFjZUFsbCIsIkxPQURFUl9TSVpFIiwiQklHIiwicHJvcFR5cGVzIiwiY29uZmlnVHlwZSIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7O0FBT0E7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFPQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOztBQUNBOztBQWVBOztBQUlBOztBQU1BOzs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxJQUFNQSxZQUFZLFNBQVpBLFNBQVksQ0FBQ0MsS0FBRCxFQUFXO0FBQUEsUUFDakJDLE1BRGlCLEdBQ05ELEtBRE0sQ0FDakJDLE1BRGlCOztBQUV6QixRQUFNQyxZQUFZLGlDQUFpQkQsTUFBakIsQ0FBbEI7QUFDQSxRQUFNRSxvQkFBb0IsS0FBMUI7QUFDQSxRQUFNQyxlQUFlLEtBQXJCO0FBQ0EsUUFBTUMsbUJBQW1CLEVBQXpCOztBQUVBOzs7QUFHQSxRQUFNQyxxQkFBcUJKLFVBQVUsYUFBVixFQUF5QixTQUF6QixDQUEzQjtBQUNBLFFBQU1LLGtCQUFrQkwsVUFBVSxhQUFWLEVBQXlCLE1BQXpCLENBQXhCO0FBQ0EsUUFBTU0saUJBQWlCTixVQUFVLFlBQVYsRUFBd0IsTUFBeEIsQ0FBdkI7QUFDQSxRQUFNTyxzQkFBc0JQLFVBQVUsWUFBVixFQUF3QixTQUF4QixDQUE1QjtBQUNBLFFBQU1RLGlCQUFpQlIsVUFBVSxZQUFWLEVBQXdCLGdCQUF4QixDQUF2QjtBQUNBLFFBQU1TLG9CQUFvQlQsVUFBVSxXQUFWLEVBQXVCLHdDQUF2QixDQUExQjtBQUNBLFFBQU1VLGtCQUFrQlYsVUFBVSxhQUFWLEVBQXlCLFNBQXpCLENBQXhCO0FBQ0EsUUFBTVcsY0FBY1gsVUFBVSxhQUFWLEVBQXlCLGFBQXpCLEVBQXdDWSxXQUF4QyxHQUFzREMsSUFBdEQsRUFBcEI7QUFDQSxRQUFJQyxpQkFBaUJkLFVBQVUsWUFBVixFQUF3QixrQkFBeEIsQ0FBckI7QUFDQSxRQUFNZSxhQUFhZixVQUFVLFlBQVYsRUFBd0Isa0JBQXhCLENBQW5CO0FBQ0EsUUFBTWdCLGdCQUFnQmhCLFVBQVUsWUFBVixFQUF3QixnQkFBeEIsQ0FBdEI7QUFDQSxRQUFNaUIsZUFBZWpCLFVBQVUsUUFBVixFQUFvQixjQUFwQixDQUFyQjtBQUNBLFFBQU1rQixjQUFjbEIsVUFBVSxNQUFWLEVBQWtCLFNBQWxCLENBQXBCO0FBQ0EsUUFBTW1CLGNBQWNuQixVQUFVLE1BQVYsRUFBa0IsYUFBbEIsQ0FBcEI7QUFDQSxRQUFNb0Isb0JBQW9CLHFDQUFxQnJCLE1BQXJCLEVBQTZCb0IsV0FBN0IsQ0FBMUI7QUFDQSxRQUFJRSxnQkFBZ0JyQixVQUFVLGVBQVYsRUFBMkIsRUFBM0IsRUFDZnNCLFFBRGUsR0FFZkMsT0FGZSxDQUVQLFFBRk8sRUFFRyxFQUZILEVBR2ZBLE9BSGUsQ0FHUCxJQUhPLEVBR0QsRUFIQyxFQUlmQyxLQUplLENBSVQsR0FKUyxDQUFwQjtBQUtBO0FBQ0FILG9CQUFnQkEsY0FBY0ksTUFBZCxDQUFxQkosY0FBY0ssR0FBZCxDQUFrQjtBQUFBLGVBQU1DLFlBQVlDLEVBQVosRUFBZ0J6QixnQkFBaEIsQ0FBTjtBQUFBLEtBQWxCLENBQXJCLENBQWhCO0FBQ0EsUUFBSTBCLGFBQWE3QixVQUFVLFlBQVYsRUFBd0IsRUFBeEIsRUFDWnNCLFFBRFksR0FFWkMsT0FGWSxDQUVKLFFBRkksRUFFTSxFQUZOLEVBR1pBLE9BSFksQ0FHSixJQUhJLEVBR0UsRUFIRixFQUlaQyxLQUpZLENBSU4sR0FKTSxDQUFqQjtBQUtBO0FBQ0FLLGlCQUFhQSxXQUFXSixNQUFYLENBQWtCSSxXQUFXSCxHQUFYLENBQWU7QUFBQSxlQUFNQyxZQUFZQyxFQUFaLEVBQWdCekIsZ0JBQWhCLENBQU47QUFBQSxLQUFmLENBQWxCLENBQWI7QUFDQSxRQUFJMkIsY0FBYzlCLFVBQVUsYUFBVixFQUF5QixFQUF6QixFQUNic0IsUUFEYSxHQUViQyxPQUZhLENBRUwsUUFGSyxFQUVLLEVBRkwsRUFHYkEsT0FIYSxDQUdMLElBSEssRUFHQyxFQUhELEVBSWJDLEtBSmEsQ0FJUCxHQUpPLENBQWxCO0FBS0EsUUFBTU8sNkJBQTZCL0IsVUFBVSxRQUFWLEVBQW9CLDRDQUFwQixDQUFuQztBQUNBLFFBQU1nQyw0QkFBNEJoQyxVQUFVLFFBQVYsRUFBb0IsMkNBQXBCLENBQWxDO0FBQ0EsUUFBTWlDLHdCQUF3QmpDLFVBQVUsUUFBVixFQUFvQix1Q0FBcEIsQ0FBOUI7QUFDQSxRQUFNa0MsaUJBQWlCbEMsVUFBVSxRQUFWLEVBQW9CLHFCQUFwQixDQUF2QjtBQUNBLFFBQU1tQyx1QkFBdUJuQyxVQUFVLFFBQVYsRUFBb0IsMkJBQXBCLENBQTdCO0FBQ0EsUUFBTW9DLGtCQUFrQnBDLFVBQVUsWUFBVixFQUF3QixtQkFBeEIsQ0FBeEI7QUFDQSxRQUFNcUMsd0JBQXdCckMsVUFBVSxZQUFWLEVBQXdCLHlCQUF4QixDQUE5QjtBQUNBLFFBQU1zQyxTQUFTdEMsVUFBVSxZQUFWLEVBQXdCLFVBQXhCLENBQWY7QUFDQSxRQUFNdUMsbUJBQW1CdkMsVUFBVSxXQUFWLEVBQXVCLGtCQUF2QixDQUF6QjtBQUNBLFFBQU13Qyx1QkFBdUJ4QyxVQUFVLFdBQVYsRUFBdUIsc0JBQXZCLENBQTdCO0FBQ0EsUUFBTXlDLGdCQUFnQnpDLFVBQVUsUUFBVixFQUFvQixTQUFwQixDQUF0QjtBQUNBLFFBQU0wQyx1QkFBdUIxQyxVQUFVLFFBQVYsRUFBb0IsbUJBQXBCLENBQTdCO0FBQ0EsUUFBTTJDLGVBQWUzQyxVQUFVLFlBQVYsRUFBd0IsTUFBeEIsQ0FBckI7QUFDQSxRQUFNNEMsMEJBQTBCNUMsVUFBVSxZQUFWLEVBQXdCLGtCQUF4QixDQUFoQztBQUNBLFFBQU02QyxtQkFBbUI3QyxVQUFVLGFBQVYsRUFBeUIsa0JBQXpCLENBQXpCO0FBQ0EsUUFBTThDLGNBQWM5QyxVQUFVLGFBQVYsRUFBeUIsYUFBekIsQ0FBcEI7QUFDQSxRQUFNK0MsZ0JBQWdCL0MsVUFBVSxRQUFWLEVBQW9CLFNBQXBCLENBQXRCO0FBQ0EsUUFBTWdELGNBQWNoRCxVQUFVLE1BQVYsRUFBa0IsU0FBbEIsQ0FBcEI7QUFDQSxRQUFNaUQsWUFBWWpELFVBQVUsWUFBVixFQUF3QixXQUF4QixDQUFsQjtBQUNBLFFBQU1rRCxRQUFRbEQsVUFBVSxZQUFWLEVBQXdCLFlBQXhCLENBQWQ7QUFDQSxRQUFNbUQsVUFBVW5ELFVBQVUsU0FBVixFQUFxQixFQUFyQixDQUFoQjs7QUFFQTs7O0FBR0EsUUFBTW9ELHNCQUFzQkMsT0FBT0MsVUFBUCxJQUFxQkMsNEJBQWpEO0FBQ0EsUUFBTUMsY0FBYzdDLFlBQVlDLFdBQVosR0FBMEJDLElBQTFCLE9BQXFDNEMsd0JBQWFDLEdBQXRFO0FBQ0EsUUFBTUMsc0JBQXNCZiw0QkFBNEJnQiw0QkFBaUJDLFFBQXpFO0FBQ0EsUUFBTUMsc0JBQXNCbEIsNEJBQTRCZ0IsNEJBQWlCQyxRQUF6RTtBQUNBLFFBQU1FLHdCQUF3Qm5CLDRCQUE0QmdCLDRCQUFpQkksVUFBM0U7O0FBRUE7QUFDQSxRQUFNQyxhQUFhakUsVUFBVSxhQUFWLEVBQXlCLFlBQXpCLENBQW5CO0FBQ0E7QUFDQSxRQUFNa0UscUJBQXFCSCx3QkFBd0JJLHNCQUFzQnpELGVBQXRCLEVBQXVDdUQsVUFBdkMsQ0FBeEIsR0FBNkUsRUFBeEc7O0FBRUE7OztBQUdBOzs7Ozs7Ozs7QUFTQTs7QUE1RnlCLG9CQTZGcUIscUJBQVMsRUFBVCxDQTdGckI7QUFBQTtBQUFBLFFBNkZsQkcsZUE3RmtCO0FBQUEsUUE2RkRDLGtCQTdGQztBQThGekI7Ozs7Ozs7O0FBUUE7OztBQXRHeUIscUJBdUdXLHFCQUFTLENBQVQsQ0F2R1g7QUFBQTtBQUFBLFFBdUdsQkMsVUF2R2tCO0FBQUEsUUF1R05DLGFBdkdNOztBQUFBLDBCQXlHREMsZ0JBQU1DLFFBQU4sRUF6R0M7QUFBQTtBQUFBLFFBeUdoQkMsV0F6R2dCOztBQTBHekIsUUFBTUMsbUJBQW1CLG1CQUFPLElBQVAsQ0FBekI7QUFDQSxRQUFNQyxpQkFBaUJKLGdCQUFNSyxXQUFOLENBQWtCO0FBQUEsZUFBTUgsWUFBWSxFQUFaLENBQU47QUFBQSxLQUFsQixFQUF5QyxFQUF6QyxDQUF2QjtBQUNBOzs7Ozs7Ozs7Ozs7O0FBNUd5Qix1QkF3SHNCLHlCQXhIdEI7QUFBQTtBQUFBLFFBd0hsQkksUUF4SGtCO0FBQUEsUUF3SFJDLFdBeEhRO0FBQUEsUUF3SEtDLGFBeEhMOztBQTBIekI7Ozs7Ozs7Ozs7O0FBMUh5QixxQkFtSWUscUJBQVMsSUFBVCxDQW5JZjtBQUFBO0FBQUEsUUFtSWxCQyxZQW5Ja0I7QUFBQSxRQW1JSkMsZUFuSUk7O0FBcUl6Qjs7Ozs7Ozs7O0FBckl5QixxQkE0SXlCLHFCQUFTLDZDQUFULENBNUl6QjtBQUFBO0FBQUEsUUE0SWxCQyxpQkE1SWtCO0FBQUEsUUE0SUNDLG9CQTVJRDs7QUFBQSxxQkE2SUYscUJBQVMsOENBQVQsQ0E3SUU7QUFBQTtBQUFBLFFBNklsQkMsWUE3SWtCOztBQStJekI7Ozs7Ozs7Ozs7QUEvSXlCLHNCQXVKYSxxQkFBUyxDQUFDUCxTQUFTUSxJQUFWLElBQWtCLENBQTNCLENBdkpiO0FBQUE7QUFBQSxRQXVKbEJDLFdBdkprQjtBQUFBLFFBdUpMQyxjQXZKSzs7QUF5SnpCOzs7Ozs7Ozs7O0FBekp5QixzQkFpS0sscUJBQVMsRUFBVCxDQWpLTDtBQUFBO0FBQUEsUUFpS2xCQyxPQWpLa0I7QUFBQSxRQWlLVEMsVUFqS1M7QUFrS3pCOzs7QUFsS3lCLHNCQW1LZSxxQkFBUyxFQUFULENBbktmO0FBQUE7QUFBQSxRQW1LbEJDLGNBbktrQjtBQUFBLFFBbUtGQyxhQW5LRTs7QUFxS3pCOzs7Ozs7OztBQXJLeUIsc0JBMkthLHFCQUFTLEVBQVQsQ0EzS2I7QUFBQTtBQUFBLFFBMktsQkMsV0EzS2tCO0FBQUEsUUEyS0xDLGNBM0tLOztBQUFBLHNCQTRLdUIscUJBQVMsRUFBVCxDQTVLdkI7QUFBQTtBQUFBLFFBNEtsQkMsZ0JBNUtrQjtBQUFBLFFBNEtBQyxtQkE1S0E7O0FBOEt6Qjs7Ozs7Ozs7QUE5S3lCLHNCQW9MVyxxQkFBUyxLQUFULENBcExYO0FBQUE7QUFBQSxRQW9MbEJDLFVBcExrQjtBQUFBLFFBb0xOQyxhQXBMTTs7QUFzTHpCOzs7Ozs7Ozs7O0FBdEx5QixzQkE4TFcscUJBQVM5RSxpQkFBVCxDQTlMWDtBQUFBO0FBQUEsUUE4TGxCK0UsVUE5TGtCO0FBQUEsUUE4TE5DLGFBOUxNOztBQWdNekIsUUFBSUQsV0FBV0UsSUFBWCxLQUFvQkMsc0JBQVdDLE1BQW5DLEVBQTJDO0FBQ3ZDekYseUJBQWlCQyxVQUFqQjtBQUNIOztBQUVEOzs7Ozs7Ozs7QUFwTXlCLCtCQTRNTSxpQ0E1TU47QUFBQSxRQTRNVnlGLFdBNU1VLHdCQTRNakJDLEtBNU1pQjs7QUE4TXpCOzs7Ozs7Ozs7OztBQTlNeUIsc0JBdU55QixxQkFBUyxLQUFULENBdk56QjtBQUFBO0FBQUEsUUF1TmxCQyxpQkF2TmtCO0FBQUEsUUF1TkNDLG9CQXZORDs7QUF5TnpCOzs7Ozs7Ozs7OztBQXpOeUIsc0JBa09pQixxQkFBUyxLQUFULENBbE9qQjtBQUFBO0FBQUEsUUFrT2xCQyxhQWxPa0I7QUFBQSxRQWtPSEMsZ0JBbE9HOztBQW9PekI7Ozs7Ozs7Ozs7O0FBcE95QixzQkE2T2lDLHFCQUFTeEcsb0JBQW9CLEtBQTdCLENBN09qQztBQUFBO0FBQUEsUUE2T2xCeUcscUJBN09rQjtBQUFBLFFBNk9LQyx3QkE3T0w7O0FBK096Qjs7Ozs7Ozs7Ozs7QUEvT3lCLHNCQXdQQyxxQkFBUyxFQUFULENBeFBEO0FBQUE7QUFBQSxRQXdQbEJDLEtBeFBrQjtBQUFBLFFBd1BYQyxRQXhQVzs7QUEwUHpCOzs7Ozs7Ozs7OztBQTFQeUIsc0JBbVFPLHFCQUFTLEtBQVQsQ0FuUVA7QUFBQTtBQUFBLFFBbVFsQkMsU0FuUWtCO0FBQUEsUUFtUVBDLFVBblFPOztBQXFRekI7Ozs7Ozs7Ozs7O0FBclF5QixzQkE4UWEscUJBQVMsS0FBVCxDQTlRYjtBQUFBO0FBQUEsUUE4UWxCQyxZQTlRa0I7QUFBQSxRQThRSkMsYUE5UUk7O0FBQUEsc0JBK1FlLHFCQUFTLElBQVQsQ0EvUWY7QUFBQTtBQUFBLFFBK1FsQkMsWUEvUWtCO0FBQUEsUUErUUpDLGVBL1FJOztBQUFBLHNCQWdSYSxxQkFBUyxJQUFULENBaFJiO0FBQUE7QUFBQSxRQWdSbEJDLFdBaFJrQjtBQUFBLFFBZ1JMQyxjQWhSSzs7QUFBQSxzQkFpUmUsc0JBalJmO0FBQUE7QUFBQSxRQWlSbEJDLFlBalJrQjtBQUFBLFFBaVJKQyxlQWpSSTs7QUFBQSxzQkFrUlcscUJBQVMsS0FBVCxDQWxSWDtBQUFBO0FBQUEsUUFrUmxCQyxVQWxSa0I7QUFBQSxRQWtSTkMsYUFsUk07O0FBb1J6Qjs7Ozs7O0FBSUEsUUFBTUMsZ0JBQWdCLHVCQUF0Qjs7QUFFQTs7OztBQUlBLFFBQU1DLGdCQUFnQix1QkFBdEI7O0FBRUE7Ozs7QUFJQSxhQUFTQyxjQUFULENBQXdCcEcsRUFBeEIsRUFBNEI7QUFDeEIsWUFBSXFHLElBQUlyRyxHQUFHc0csTUFBWDtBQUNBLGVBQU90RyxHQUFHcUcsQ0FBSCxNQUFVLEdBQVYsSUFBaUJBLEtBQUssQ0FBN0IsRUFBZ0M7QUFDNUJBO0FBQ0g7QUFDRCxlQUFPLENBQUNyRyxHQUFHdUcsU0FBSCxDQUFhLENBQWIsRUFBZ0JGLENBQWhCLENBQUQsRUFBcUJyRyxHQUFHdUcsU0FBSCxDQUFhRixJQUFJLENBQWpCLENBQXJCLENBQVA7QUFDSDs7QUFFRCxhQUFTdEcsV0FBVCxDQUFxQnlHLENBQXJCLEVBQXdCQyxDQUF4QixFQUEyQjtBQUN2QixZQUFJLENBQUNELENBQUwsRUFBUTtBQUNKLG1CQUFPLEVBQVA7QUFDSDtBQUNELFlBQU1FLE9BQU8sRUFBYjtBQUNBLFlBQU1DLE1BQU0sYUFBTUYsQ0FBTixJQUFVLENBQXRCO0FBQ0EsWUFBSUcsT0FBTyxDQUFYO0FBQ0EsWUFBSUMsWUFBWSxDQUFoQjtBQUNBLGFBQUssSUFBSVIsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRyxFQUFFRixNQUF0QixFQUE4QkQsR0FBOUIsRUFBbUM7QUFDL0JPLG1CQUFPLENBQUNBLE9BQU8sQ0FBQ0osRUFBRU0sVUFBRixDQUFhVCxDQUFiLElBQWtCLEVBQWxCLEdBQXVCLENBQXhCLElBQTZCUSxTQUFyQyxJQUFrREYsR0FBekQ7QUFDQUUsd0JBQWFBLFlBQVlILElBQWIsR0FBcUJDLEdBQWpDO0FBQ0g7QUFDRCxlQUFPLENBQUMsQ0FBQ0MsT0FBT0QsR0FBUixJQUFlQSxHQUFoQixFQUFxQmpILFFBQXJCLENBQThCLEVBQTlCLENBQVA7QUFDSDs7QUFFRDs7Ozs7QUFLQSxRQUFNcUgsNEJBQTRCLFNBQTVCQSx5QkFBNEI7QUFBQSxlQUFnQkMsYUFBYWxILEdBQWIsQ0FBaUI7QUFBQSxnQ0FDNURtSCxXQUQ0RDtBQUUvREMsdUJBQU9ELFlBQVlDLEtBQVosQ0FBa0JwSCxHQUFsQixDQUFzQjtBQUFBLHdDQUN0QnFILFVBRHNCO0FBRXpCQyxrQ0FBVTtBQUZlO0FBQUEsaUJBQXRCO0FBRndEO0FBQUEsU0FBakIsQ0FBaEI7QUFBQSxLQUFsQzs7QUFRQTs7Ozs7O0FBTUEsUUFBTUMsNEJBQTRCLFNBQTVCQSx5QkFBNEIsQ0FBQ3JILEVBQUQsRUFBS2dILFlBQUw7QUFBQSxlQUFzQkEsYUFBYWxILEdBQWIsQ0FBaUIsVUFBQ21ILFdBQUQsRUFBaUI7QUFDdEYsZ0JBQUlBLFlBQVlqSCxFQUFaLEtBQW1CQSxFQUF2QixFQUEyQjtBQUN2Qix1QkFBT2lILFdBQVA7QUFDSDtBQUNELGdDQUNPQSxXQURQO0FBRUlDLHVCQUFPRCxZQUFZQyxLQUFaLENBQWtCcEgsR0FBbEIsQ0FBc0I7QUFBQSx3Q0FDdEJxSCxVQURzQjtBQUV6QkMsa0NBQVU7QUFGZTtBQUFBLGlCQUF0QjtBQUZYO0FBT0gsU0FYdUQsQ0FBdEI7QUFBQSxLQUFsQzs7QUFhQTs7Ozs7QUFLQSxRQUFNRSxrQkFBa0IsU0FBbEJBLGVBQWtCLENBQUN0SCxFQUFELEVBQW9CO0FBQUEsWUFBZnVILEtBQWUsdUVBQVAsRUFBTzs7QUFDeEN6RCxtQkFBVyxVQUFDMEQsV0FBRCxFQUFpQjtBQUN4QixnQkFBTUMscUJBQXFCSiwwQkFBMEJySCxFQUExQixFQUE4QndILFdBQTlCLENBQTNCO0FBQ0EsbUJBQU9DLGtCQUFQO0FBQ0gsU0FIRDs7QUFLQSxZQUFNQyxZQUFZLElBQUlDLGVBQUosQ0FBb0JsRyxPQUFPbUcsUUFBUCxDQUFnQkMsTUFBcEMsQ0FBbEI7QUFDQXpFO0FBQ0E7QUFDQXNFLGtCQUFVSSxPQUFWLENBQWtCLFVBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFnQjtBQUM5QixnQkFBTUMsV0FBV0QsSUFBSWhKLFdBQUosR0FBa0JXLE9BQWxCLENBQTBCLEtBQTFCLEVBQWlDLEVBQWpDLEVBQXFDQSxPQUFyQyxDQUE2QyxJQUE3QyxFQUFtRCxHQUFuRCxDQUFqQjtBQUNBLGdCQUFJcUksSUFBSUUsT0FBSixDQUFZN0osaUJBQVosTUFBbUMsQ0FBbkMsSUFDRyxDQUFDMkIsR0FBR2hCLFdBQUgsR0FBaUJtSixRQUFqQixDQUEwQkYsUUFBMUIsQ0FESixJQUVHLENBQUNWLE1BQU12SSxXQUFOLEdBQW9CVyxPQUFwQixDQUE0QixJQUE1QixFQUFrQyxHQUFsQyxFQUF1Q3dJLFFBQXZDLENBQWdERixRQUFoRCxDQUZSLEVBRW1FO0FBQy9EOUUsNEJBQVk2RSxHQUFaLEVBQWlCRCxNQUFNcEksT0FBTixDQUFjLE1BQWQsRUFBc0IsR0FBdEIsQ0FBakI7QUFDSDtBQUNKLFNBUEQ7QUFRSCxLQWpCRDs7QUFtQkE7Ozs7QUFJQSxRQUFNeUksa0JBQWtCLFNBQWxCQSxlQUFrQixHQUFNO0FBQzFCdEUsbUJBQVcsVUFBQzBELFdBQUQsRUFBaUI7QUFDeEIsZ0JBQU1hLHlCQUF5QnRCLDBCQUEwQlMsV0FBMUIsQ0FBL0I7QUFDQSxtQkFBT2Esc0JBQVA7QUFDSCxTQUhEOztBQUtBLFlBQU1YLFlBQVksSUFBSUMsZUFBSixDQUFvQmxHLE9BQU9tRyxRQUFQLENBQWdCQyxNQUFwQyxDQUFsQjs7QUFFQXpFO0FBQ0FzRSxrQkFBVUksT0FBVixDQUFrQixVQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBZ0I7QUFDOUIsZ0JBQUlBLElBQUlFLE9BQUosQ0FBWTdKLGlCQUFaLE1BQW1DLENBQXZDLEVBQTBDOEUsWUFBWTZFLEdBQVosRUFBaUJELEtBQWpCO0FBQzdDLFNBRkQ7QUFHSCxLQVpEOztBQWNBOzs7O0FBSUEsUUFBTU8saUNBQWlDLFNBQWpDQSw4QkFBaUMsR0FBTTtBQUN6Q0Y7QUFDQWxFLHVCQUFlLEVBQWY7QUFDQSxZQUFNd0QsWUFBWSxJQUFJQyxlQUFKLENBQW9CbEcsT0FBT21HLFFBQVAsQ0FBZ0JDLE1BQXBDLENBQWxCO0FBQ0F6RTtBQUNBc0Usa0JBQVVJLE9BQVYsQ0FBa0IsVUFBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQzlCLGdCQUFJQSxJQUFJRSxPQUFKLENBQVk3SixpQkFBWixNQUFtQyxDQUFDLENBQXBDLElBQ0cySixJQUFJRSxPQUFKLENBQVk1SixZQUFaLE1BQThCLENBQUMsQ0FEdEMsRUFDeUM2RSxZQUFZNkUsR0FBWixFQUFpQkQsS0FBakI7QUFDNUMsU0FIRDtBQUlBOUMseUJBQWlCLEtBQWpCO0FBQ0gsS0FWRDs7QUFZQTs7OztBQUlBOzs7Ozs7QUFNQSxRQUFNc0Qsa0JBQWtCLFNBQWxCQSxlQUFrQixHQUFNO0FBQzFCM0UsdUJBQWU7QUFBQSxtQkFBYTRFLFlBQVksQ0FBekI7QUFBQSxTQUFmO0FBQ0EvRyxlQUFPZ0gsUUFBUCxDQUFnQixDQUFoQixFQUFtQmhILE9BQU9pSCxXQUExQjtBQUNILEtBSEQ7O0FBS0E7Ozs7OztBQU1BLFFBQU1DLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQUNDLE1BQUQsRUFBWTtBQUNqQ3BFLHNCQUFjb0UsTUFBZDtBQUNBdEUsc0JBQWMsS0FBZDtBQUNBdUIsdUJBQWUsS0FBZjtBQUNILEtBSkQ7O0FBTUE7Ozs7Ozs7QUFPQSxRQUFNZ0QsMEJBQTBCLFNBQTFCQSx1QkFBMEIsQ0FBQ0MsR0FBRCxFQUFTO0FBQ3JDNUUsdUJBQWU0RSxHQUFmO0FBQ0FsRix1QkFBZSxDQUFmO0FBQ0FULG9CQUFZN0UsWUFBWixFQUEwQndLLEdBQTFCO0FBQ0gsS0FKRDs7QUFNQTs7Ozs7OztBQU9BLFFBQU1DLHlCQUF5QixTQUF6QkEsc0JBQXlCLENBQUNDLFFBQUQsRUFBYztBQUN6Q2xGLG1CQUFXLFVBQUMwRCxXQUFELEVBQWlCO0FBQ3hCLGdCQUFJeUIsZUFBSjtBQUNBLG1CQUFPekIsWUFBWTFILEdBQVosQ0FBZ0IsVUFBQ29KLEVBQUQsRUFBUTtBQUMzQixvQkFBSUEsR0FBR2xKLEVBQUgsS0FBVWdKLFFBQWQsRUFBd0I7QUFDcEJDLDZCQUFTLENBQUNDLEdBQUdELE1BQWI7QUFDSCxpQkFGRCxNQUVPO0FBQ0g7QUFDQUEsNkJBQVNDLEdBQUdELE1BQVo7QUFDSDtBQUNELG9DQUFZQyxFQUFaLElBQWdCRCxjQUFoQjtBQUNILGFBUk0sQ0FBUDtBQVNILFNBWEQ7QUFZSCxLQWJEOztBQWVBOzs7Ozs7OztBQVFBLFFBQU1FLGlCQUFpQixTQUFqQkEsY0FBaUIsQ0FBQ0gsUUFBRCxFQUFXSSxNQUFYLEVBQW1CQyxTQUFuQixFQUFpQztBQUFBLDRCQUMzQnhGLFFBQVF5RixJQUFSLENBQWE7QUFBQSxnQkFBR3RKLEVBQUgsUUFBR0EsRUFBSDtBQUFBLG1CQUFZQSxPQUFPZ0osUUFBbkI7QUFBQSxTQUFiLENBRDJCO0FBQUEsWUFDNUN6QixLQUQ0QyxpQkFDNUNBLEtBRDRDO0FBQUEsWUFDckNMLEtBRHFDLGlCQUNyQ0EsS0FEcUM7O0FBQUEsMEJBRWxDQSxNQUFNb0MsSUFBTixDQUFXO0FBQUEsZ0JBQUd0SixFQUFILFNBQUdBLEVBQUg7QUFBQSxtQkFBWUEsT0FBT29KLE1BQW5CO0FBQUEsU0FBWCxDQUZrQztBQUFBLFlBRTVDRyxLQUY0QyxlQUU1Q0EsS0FGNEM7O0FBSXBELFlBQUlDLGdCQUFnQnRHLFNBQVM3RSxvQkFBb0JrSixLQUE3QixLQUF1QyxFQUEzRDtBQUNBLFlBQUksT0FBT2lDLGFBQVAsS0FBeUIsUUFBN0IsRUFBdUM7QUFDbkNBLDRCQUFnQkEsY0FBYzVKLEtBQWQsQ0FBb0IsR0FBcEIsQ0FBaEI7QUFDSDs7QUFFRCxZQUFNbUksUUFBUXNCLHlDQUNKRyxhQURJLElBQ1dELEtBRFgsS0FFUkMsY0FBY0MsTUFBZCxDQUFxQjtBQUFBLG1CQUFRQyxTQUFTSCxLQUFqQjtBQUFBLFNBQXJCLENBRk47O0FBSUFwRyxvQkFBWTlFLG9CQUFvQmtKLEtBQWhDLEVBQXVDUSxLQUF2QztBQUNILEtBZEQ7O0FBZ0JBOzs7Ozs7O0FBT0EsUUFBTTRCLHVCQUF1QixTQUF2QkEsb0JBQXVCLENBQUNYLFFBQUQsRUFBV0ksTUFBWCxFQUFtQkMsU0FBbkIsRUFBaUM7QUFDMUQsWUFBSXpILGVBQWV5SCxTQUFuQixFQUE4QjtBQUMxQmpCO0FBQ0g7O0FBRUR0RSxtQkFBVztBQUFBLG1CQUFlMEQsWUFBWTFILEdBQVosQ0FBZ0IsVUFBQzJKLE1BQUQsRUFBWTtBQUNsRCxvQkFBSUEsT0FBT3pKLEVBQVAsS0FBY2dKLFFBQWxCLEVBQTRCLE9BQU9TLE1BQVA7O0FBRTVCLG9DQUNPQSxNQURQO0FBRUl2QywyQkFBT3VDLE9BQU92QyxLQUFQLENBQWFwSCxHQUFiLENBQWlCO0FBQUEsNENBQ2pCNEosSUFEaUI7QUFFcEJ0QyxzQ0FBVXNDLEtBQUsxSixFQUFMLEtBQVlvSixNQUFaLEdBQXFCLENBQUNNLEtBQUt0QyxRQUEzQixHQUFzQ3NDLEtBQUt0QztBQUZqQztBQUFBLHFCQUFqQjtBQUZYO0FBT0gsYUFWeUIsQ0FBZjtBQUFBLFNBQVg7QUFXQXhELHVCQUFlLENBQWY7QUFDQXVGLHVCQUFlSCxRQUFmLEVBQXlCSSxNQUF6QixFQUFpQ0MsU0FBakM7QUFDSCxLQWxCRDs7QUFvQkE7Ozs7OztBQU1BLFFBQU1PLDRCQUE0QixTQUE1QkEseUJBQTRCO0FBQUEsZUFBTTdFLHFCQUFxQjtBQUFBLG1CQUFRLENBQUM4RSxJQUFUO0FBQUEsU0FBckIsQ0FBTjtBQUFBLEtBQWxDOztBQUVBOzs7Ozs7QUFNQSxRQUFNQyx3QkFBd0IsU0FBeEJBLHFCQUF3QixDQUFDOUosRUFBRCxFQUFRO0FBQ2xDO0FBQ0EsWUFBTStKLG1CQUFtQnhHLGtCQUFrQitGLElBQWxCLENBQXVCO0FBQUEsbUJBQVFVLFNBQVNoSyxFQUFqQjtBQUFBLFNBQXZCLENBQXpCOztBQUVBLFlBQUkrSixnQkFBSixFQUFzQjtBQUNsQnZHLGlDQUFxQjtBQUFBLHVCQUFRcUcsS0FBS0osTUFBTCxDQUFZO0FBQUEsMkJBQU1QLE9BQU9sSixFQUFiO0FBQUEsaUJBQVosQ0FBUjtBQUFBLGFBQXJCO0FBQ0gsU0FGRCxNQUVPO0FBQ0h3RCxpQ0FBcUI7QUFBQSxvREFBWXFHLElBQVosSUFBa0I3SixFQUFsQjtBQUFBLGFBQXJCO0FBQ0g7QUFDSixLQVREOztBQVdBOzs7Ozs7QUFNQSxRQUFNaUssaUNBQWlDLFNBQWpDQSw4QkFBaUMsQ0FBQ0MsQ0FBRCxFQUFPO0FBQzFDQSxVQUFFQyxlQUFGO0FBQ0FsRix5QkFBaUI7QUFBQSxtQkFBUSxDQUFDNEUsSUFBVDtBQUFBLFNBQWpCO0FBQ0FqRyx1QkFBZSxDQUFmO0FBQ0gsS0FKRDs7QUFNQTs7Ozs7O0FBTUEsUUFBTXdHLDBCQUEwQixTQUExQkEsdUJBQTBCLEdBQU07QUFDbENqRixpQ0FBeUI7QUFBQSxtQkFBUSxDQUFDMEUsSUFBVDtBQUFBLFNBQXpCO0FBQ0gsS0FGRDs7QUFJQTs7Ozs7O0FBTUEsUUFBTVEsb0JBQW9CLFNBQXBCQSxpQkFBb0IsR0FBTTtBQUM1Qi9HLHdCQUFnQixJQUFoQjtBQUNILEtBRkQ7O0FBSUE7Ozs7O0FBS0EsUUFBTWdILDJCQUEyQixTQUEzQkEsd0JBQTJCLENBQUNDLEtBQUQsRUFBVztBQUN4QyxZQUFJQSxNQUFNdkMsR0FBTixLQUFjLFFBQWQsSUFBMEJ1QyxNQUFNdkMsR0FBTixLQUFjLEtBQTVDLEVBQW1EOztBQUVuRGpELDZCQUFxQixLQUFyQjtBQUNILEtBSkQ7O0FBTUE7Ozs7QUFJQTs7Ozs7QUFLQSwwQkFBVSxZQUFNO0FBQ1pqQixtQkFBV2hGLGdCQUFnQmdCLEdBQWhCLENBQW9CO0FBQUEsZ0NBQ3hCbUgsV0FEd0I7QUFFM0JnQyx3QkFBUXpILHNCQUFzQnlGLFlBQVl1RCxZQUFsQyxHQUFpRCxLQUY5QjtBQUczQnRELHVCQUFPRCxZQUFZQyxLQUFaLENBQWtCcEgsR0FBbEIsQ0FBc0I7QUFBQSx3Q0FDdEJxSCxVQURzQjtBQUV6QkMsa0NBQVU7QUFGZTtBQUFBLGlCQUF0QjtBQUhvQjtBQUFBLFNBQXBCLENBQVg7QUFRSCxLQVRELEVBU0csRUFUSDs7QUFXQTs7OztBQUlBLDBCQUFVLFlBQU07QUFDWnRELG1CQUFXO0FBQUEsbUJBQVUyRyxPQUFPM0ssR0FBUCxDQUFXLFVBQUMySixNQUFELEVBQVk7QUFBQSxvQkFDaENsQyxLQURnQyxHQUNma0MsTUFEZSxDQUNoQ2xDLEtBRGdDO0FBQUEsb0JBQ3pCTCxLQUR5QixHQUNmdUMsTUFEZSxDQUN6QnZDLEtBRHlCOztBQUV4QyxvQkFBTXNDLGdCQUFnQnRHLFNBQVM3RSxvQkFBb0JrSixLQUE3QixDQUF0Qjs7QUFFQSxvQkFBSSxDQUFDaUMsYUFBTCxFQUFvQixPQUFPQyxNQUFQOztBQUVwQixvQkFBTWlCLGdCQUFnQmxCLGNBQWM1SixLQUFkLENBQW9CLEdBQXBCLENBQXRCO0FBQ0Esb0NBQ082SixNQURQO0FBRUlSLDRCQUFRLElBRlo7QUFHSS9CLDJCQUFPQSxNQUFNcEgsR0FBTixDQUFVO0FBQUEsNENBQ1Y0SixJQURVO0FBRWJ0QyxzQ0FBVXNELGNBQWN2QyxRQUFkLENBQXVCd0MsT0FBT2pCLEtBQUtILEtBQVosQ0FBdkI7QUFGRztBQUFBLHFCQUFWO0FBSFg7QUFRSCxhQWZvQixDQUFWO0FBQUEsU0FBWDtBQWdCQSxZQUFNcUIsaUJBQWlCMUgsU0FBUzVFLFlBQVQsQ0FBdkI7QUFDQSxZQUFJc00sY0FBSixFQUFvQjtBQUNoQjFHLDJCQUFlMEcsZUFBZSxDQUFmLENBQWY7QUFDSDtBQUNKLEtBckJELEVBcUJHLEVBckJIOztBQXVCQSwwQkFBVSxZQUFNO0FBQ1pqRix3QkFBZ0JrRixLQUFLQyxLQUFMLENBQVlELEtBQUtFLE1BQUwsS0FBZ0IsS0FBNUIsQ0FBaEI7QUFDSCxLQUZELEVBRUcsRUFGSDs7QUFJQTs7OztBQUlBLDBCQUFVLFlBQU07QUFDWjVILG9CQUFZLE1BQVosRUFBb0JRLGdCQUFnQixDQUFoQixHQUFvQixFQUFwQixHQUF5QkEsV0FBN0M7QUFDSCxLQUZELEVBRUcsQ0FBQ0EsV0FBRCxDQUZIOztBQUlBLFFBQU1xSCxxQkFBcUIsU0FBckJBLGtCQUFxQixDQUFDQyxVQUFELEVBQWFDLGFBQWIsRUFBK0I7QUFBQTs7QUFDdEQsWUFBTUMsT0FBTyxhQUFHdEwsTUFBSCxpQ0FBYXFMLGNBQWNwTCxHQUFkLENBQWtCO0FBQUEsbUJBQVFrSyxLQUFLbUIsSUFBTCxDQUFVckwsR0FBVixDQUFjO0FBQUEsdUJBQU9zTCxJQUFJcEwsRUFBWDtBQUFBLGFBQWQsQ0FBUjtBQUFBLFNBQWxCLENBQWIsRUFBYjs7QUFFQSxZQUFNcUwsYUFBYSxDQUNmQyw0QkFBaUJDLElBREYsRUFFZkQsNEJBQWlCRSxRQUZGLEVBR2ZGLDRCQUFpQkcsUUFIRixDQUFuQjs7QUFNQSxlQUFPUixXQUFXbkwsR0FBWCxDQUFlO0FBQUEsZ0NBQ2YySixNQURlO0FBRWxCdkMsdUJBQU91QyxPQUFPdkMsS0FBUCxDQUFhdUMsTUFBYixDQUFvQjtBQUFBLDJCQUFRMEIsS0FBS2hELFFBQUwsQ0FBY3VCLEtBQUsxSixFQUFuQixLQUNoQ21MLEtBQUtoRCxRQUFMLENBQWN1QixLQUFLSCxLQUFuQixDQURnQyxJQUVoQzRCLEtBQUt6TCxRQUFMLEdBQWdCeUksUUFBaEIsT0FBNkJ1QixLQUFLMUosRUFBbEMsQ0FGZ0MsQ0FFUTtBQUZSLHVCQUdoQ3FMLFdBQVdsRCxRQUFYLENBQW9CdUIsS0FBSzFKLEVBQXpCLENBSHdCO0FBQUEsaUJBQXBCO0FBRlc7QUFBQSxTQUFmLEVBTUh5SixNQU5HLENBTUk7QUFBQSxtQkFBVUEsT0FBT3ZDLEtBQVAsQ0FBYVosTUFBYixHQUFzQixDQUFoQztBQUFBLFNBTkosQ0FBUDtBQU9ILEtBaEJEOztBQWtCQTs7Ozs7Ozs7O0FBU0EsMEJBQVUsWUFBTTtBQUNaLFlBQUs1RixVQUFVb0YsWUFBWCxJQUE2QnBGLFVBQVUsQ0FBQ3NGLFVBQTVDLEVBQXlEO0FBQ3JEO0FBQ0g7QUFIVyxzQkFJeUN2RSxNQUp6QztBQUFBLFlBSXNCaUssY0FKdEIsV0FJSkMsd0JBSkk7OztBQU1aLFlBQUlDLHFCQUFxQnhOLFVBQVUsWUFBVixFQUF3QixVQUF4QixDQUF6QjtBQUNBLFlBQU15TixtQkFBbUJ6TixVQUFVLFlBQVYsRUFBd0Isa0JBQXhCLENBQXpCOztBQUVBLFlBQU0wTixJQUFJLElBQUlDLE1BQUosQ0FBVyxpQkFBWCxFQUE4QixHQUE5QixDQUFWO0FBQ0EsWUFBSUMsOEJBQUo7QUFDQSxZQUFJRixFQUFFRyxJQUFGLENBQU9MLGtCQUFQLENBQUosRUFBZ0M7QUFDNUJJLG9DQUF3QixJQUFJRSxHQUFKLENBQVFOLGtCQUFSLENBQXhCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hJLG9DQUF3QixJQUFJRSxHQUFKLENBQVFOLGtCQUFSLEVBQTRCbkssT0FBT21HLFFBQVAsQ0FBZ0I2QyxNQUE1QyxDQUF4QjtBQUNIOztBQUVELFlBQUksQ0FBQ29CLGdCQUFMLEVBQXVCO0FBQ25CRyxrQ0FBc0JHLFlBQXRCLENBQW1DQyxHQUFuQyxDQUF1QyxVQUF2QyxFQUFtRCxLQUFuRDtBQUNBUixpQ0FBcUJJLHNCQUFzQnRNLFFBQXRCLEVBQXJCO0FBQ0g7O0FBRUQ2RixtQkFBVyxJQUFYOztBQUVBOzs7Ozs7O0FBT0EsaUJBQVM4RyxRQUFULEdBQWlEO0FBQUEsZ0JBQS9CQyxRQUErQix1RUFBcEJWLGtCQUFvQjs7QUFDN0MsZ0JBQU1XLFFBQVFDLEtBQUtDLEdBQUwsRUFBZDtBQUNBLG1CQUFPaEwsT0FBT2lMLEtBQVAsQ0FBYUosUUFBYixFQUF1QjtBQUMxQkssNkJBQWEsU0FEYTtBQUUxQnBMO0FBRjBCLGFBQXZCLEVBSUZxTCxJQUpFLENBSUcsVUFBQ0MsSUFBRCxFQUFVO0FBQUEsb0JBRVJDLEVBRlEsR0FNUkQsSUFOUSxDQUVSQyxFQUZRO0FBQUEsb0JBR1JDLE1BSFEsR0FNUkYsSUFOUSxDQUdSRSxNQUhRO0FBQUEsb0JBSVJDLFVBSlEsR0FNUkgsSUFOUSxDQUlSRyxVQUpRO0FBQUEsb0JBS1JDLEdBTFEsR0FNUkosSUFOUSxDQUtSSSxHQUxROzs7QUFRWixvQkFBSUgsRUFBSixFQUFRO0FBQ0osMkJBQU9ELEtBQUtLLElBQUwsR0FBWU4sSUFBWixDQUFpQixVQUFDTSxJQUFELEVBQVU7QUFDOUIsNEJBQU1DLFlBQVksQ0FBQyxDQUFDQyxPQUFPQyxJQUFQLENBQVlILElBQVosRUFBa0I1RyxNQUF0Qzs7QUFFQSw0QkFBSTZHLFNBQUosRUFBZSxPQUFPRCxJQUFQOztBQUVmLDJDQUFRLEVBQUVJLDBDQUF3Q2hCLFFBQTFDLEVBQXNEbkIsTUFBTSxZQUE1RCxFQUFSO0FBQ0EsK0JBQU9vQyxRQUFRQyxNQUFSLENBQWUsSUFBSUMsS0FBSixDQUFVLHVCQUFWLENBQWYsQ0FBUDtBQUNILHFCQVBNLENBQVA7QUFRSDtBQUNELG1DQUFRLEVBQUVILGtDQUFnQ0wsR0FBbEMsRUFBeUM5QixNQUFNLFlBQS9DLEVBQTZEdUMsY0FBaUJYLE1BQWpCLFVBQTRCQyxVQUF6RixFQUFSO0FBQ0EsdUJBQU9PLFFBQVFDLE1BQVIsQ0FBZSxJQUFJQyxLQUFKLENBQWFWLE1BQWIsVUFBd0JDLFVBQXhCLDhCQUEyREMsR0FBM0QsQ0FBZixDQUFQO0FBQ0gsYUF4QkUsRUF5QkZMLElBekJFLENBeUJHLFVBQUNlLE9BQUQsRUFBYTtBQUNmLG1DQUFRLEVBQUVMLDRCQUEwQixDQUFDZCxLQUFLQyxHQUFMLEtBQWFGLEtBQWQsSUFBdUIsSUFBakQsTUFBRixFQUE0RHBCLE1BQU0sWUFBbEUsRUFBUjtBQUNBNUYsMkJBQVcsS0FBWDtBQUNBTSwrQkFBZSxJQUFmO0FBQ0Esb0JBQUksQ0FBQyx3QkFBVThILE9BQVYsRUFBbUIsY0FBbkIsQ0FBTCxFQUF5QztBQUNyQyx1Q0FBUSxFQUFFTCx5REFBdURoQixRQUF6RCxFQUFxRW5CLE1BQU0sWUFBM0UsRUFBUjtBQUNBO0FBQ0g7QUFDRCxvQkFBSXdDLFFBQVFDLFFBQVosRUFBc0I7QUFDbEIsd0JBQU1DLGtCQUFrQixDQUF4QjtBQURrQjtBQUFBO0FBQUE7O0FBQUE7QUFFbEIsNkNBQW9CL08sZUFBcEIsOEhBQXFDO0FBQUEsZ0NBQTFCeUksS0FBMEI7O0FBQ2pDQSxrQ0FBTXZILEVBQU4sR0FBV0QsWUFBWXdILE1BQU12SCxFQUFsQixFQUFzQjZOLGVBQXRCLENBQVg7QUFEaUM7QUFBQTtBQUFBOztBQUFBO0FBRWpDLHNEQUF5QnRHLE1BQU1MLEtBQS9CLG1JQUFzQztBQUFBLHdDQUEzQkMsVUFBMkI7O0FBQUEsMERBQ1ZmLGVBQWVlLFdBQVduSCxFQUExQixDQURVO0FBQUE7QUFBQSx3Q0FDM0I4TixNQUQyQjtBQUFBLHdDQUNuQkMsS0FEbUI7O0FBRWxDNUcsK0NBQVduSCxFQUFYLEdBQW1CRCxZQUFZK04sTUFBWixFQUFvQkQsZUFBcEIsQ0FBbkIsU0FBMkQ5TixZQUFZZ08sS0FBWixFQUFtQkYsZUFBbkIsQ0FBM0Q7QUFDSDtBQUxnQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTXBDO0FBUmlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBU2xCLHdCQUFNRyxPQUFPLEVBQWI7QUFUa0I7QUFBQTtBQUFBOztBQUFBO0FBVWxCLDhDQUFrQjlOLFdBQWxCLG1JQUErQjtBQUFBLGdDQUFwQmtMLEdBQW9COztBQUFBLG1EQUNIaEYsZUFBZWdGLEdBQWYsQ0FERztBQUFBO0FBQUEsZ0NBQ3BCMEMsTUFEb0I7QUFBQSxnQ0FDWkMsS0FEWTs7QUFFM0IsZ0NBQUlELFdBQVcsRUFBWCxJQUFpQkMsVUFBVSxFQUEvQixFQUFtQztBQUMvQkMscUNBQUtDLElBQUwsQ0FBYWxPLFlBQVkrTixNQUFaLEVBQW9CRCxlQUFwQixDQUFiLFNBQXFEOU4sWUFBWWdPLEtBQVosRUFBbUJGLGVBQW5CLENBQXJEO0FBQ0g7QUFDSjtBQWZpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdCbEIzTixrQ0FBYzhOLElBQWQ7QUFDSDs7QUF6QmMsNENBMkJpQixJQUFJRSx1QkFBSixDQUFrQlAsUUFBUXZJLEtBQTFCLEVBQzNCK0ksb0JBRDJCLEdBRTNCQyxlQUYyQixDQUd4QkMsNEJBSHdCLEVBSXhCeFAsaUJBSndCLEVBS3hCMEUsaUJBTHdCLEVBTXhCdEQsVUFOd0IsRUFPeEJDLFdBUHdCLENBM0JqQjtBQUFBLG1FQTJCUG9PLGNBM0JPO0FBQUEsb0JBMkJQQSxjQTNCTywwQ0EyQlUsRUEzQlY7O0FBb0NmLG9CQUFJbk0scUJBQUosRUFBMkI7QUFDdkIyQiwrQkFBVztBQUFBLCtCQUFlMEQsWUFBWTFILEdBQVosQ0FBZ0IsVUFBQzJKLE1BQUQsRUFBWTtBQUFBLGdDQUMxQ2xDLEtBRDBDLEdBQ3pCa0MsTUFEeUIsQ0FDMUNsQyxLQUQwQztBQUFBLGdDQUNuQ0wsS0FEbUMsR0FDekJ1QyxNQUR5QixDQUNuQ3ZDLEtBRG1DOztBQUVsRCxnQ0FBTXNDLGdCQUFnQnRHLFNBQVM3RSxvQkFBb0JrSixLQUE3QixDQUF0QjtBQUNBLGdDQUFJLENBQUNpQyxhQUFMLEVBQW9CLE9BQU9DLE1BQVA7QUFDcEIsZ0NBQU1pQixnQkFBZ0JsQixjQUFjNUosS0FBZCxDQUFvQixHQUFwQixDQUF0QjtBQUNBLGdEQUNPNkosTUFEUDtBQUVJUix3Q0FBUSxJQUZaO0FBR0kvQix1Q0FBT0EsTUFBTXBILEdBQU4sQ0FBVTtBQUFBLHdEQUNWNEosSUFEVTtBQUVidEMsa0RBQVVzRCxjQUFjdkMsUUFBZCxDQUF1QndDLE9BQU9qQixLQUFLSCxLQUFaLENBQXZCO0FBRkc7QUFBQSxpQ0FBVjtBQUhYO0FBUUgseUJBYnlCLENBQWY7QUFBQSxxQkFBWDtBQWNILGlCQWZELE1BZU87QUFDSHpGLCtCQUFXO0FBQUEsK0JBQU1oRixnQkFBZ0JnQixHQUFoQixDQUFvQixVQUFDMkosTUFBRCxFQUFZO0FBQUEsZ0NBQ3JDbEMsS0FEcUMsR0FDcEJrQyxNQURvQixDQUNyQ2xDLEtBRHFDO0FBQUEsZ0NBQzlCTCxLQUQ4QixHQUNwQnVDLE1BRG9CLENBQzlCdkMsS0FEOEI7O0FBRTdDLGdDQUFNc0MsZ0JBQWdCdEcsU0FBUzdFLG9CQUFvQmtKLEtBQTdCLENBQXRCO0FBQ0EsZ0NBQUksQ0FBQ2lDLGFBQUwsRUFBb0IsT0FBT0MsTUFBUDtBQUNwQixnQ0FBTWlCLGdCQUFnQmxCLGNBQWM1SixLQUFkLENBQW9CLEdBQXBCLENBQXRCO0FBQ0EsZ0RBQ082SixNQURQO0FBRUlSLHdDQUFRLElBRlo7QUFHSS9CLHVDQUFPQSxNQUFNcEgsR0FBTixDQUFVO0FBQUEsd0RBQ1Y0SixJQURVO0FBRWJ0QyxrREFBVXNELGNBQWN2QyxRQUFkLENBQXVCd0MsT0FBT2pCLEtBQUtILEtBQVosQ0FBdkI7QUFGRztBQUFBLGlDQUFWO0FBSFg7QUFRSCx5QkFiZ0IsQ0FBTjtBQUFBLHFCQUFYO0FBY0g7O0FBRUQsb0JBQU1nRixjQUFjLDZCQUFlRCxjQUFmLENBQXBCO0FBQ0Esb0JBQUkvSixXQUFXRSxJQUFYLENBQWdCekYsV0FBaEIsT0FBa0MsV0FBdEMsRUFBbUQ7QUFDL0MsMkJBQU91UCxZQUFZQyxJQUFaLEtBQXFCLENBQTVCLEVBQStCO0FBQzNCQyxtQ0FBVyxZQUFNO0FBQ2J6TDtBQUNILHlCQUZELEVBRUd1TCxZQUFZRyxPQUFaLEdBQXNCQyxRQUF0QixHQUFpQ0MsMkJBRnBDO0FBR0g7QUFDSjs7QUFFRHZKLHlCQUFTaUosY0FBVDtBQUNBLG9CQUFJLENBQUNyTixnQkFBTCxFQUF1QjtBQUNuQjZDLCtCQUFXO0FBQUEsK0JBQWVrSCxtQkFBbUJ4RCxXQUFuQixFQUFnQzhHLGNBQWhDLENBQWY7QUFBQSxxQkFBWDtBQUNIO0FBQ0RHLDJCQUFXLFlBQU07QUFDYix3QkFBSSxDQUFDMUwsaUJBQWlCOEwsT0FBdEIsRUFBK0I7QUFDL0Isd0JBQUlQLGVBQWVoSSxNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQ2pDLHdCQUFJM0MsZ0JBQWdCLENBQXBCLEVBQXVCO0FBQ3ZCLHdCQUFNbUwsY0FBY1IsZUFBZVMsS0FBZixDQUFxQixDQUFyQixFQUF3Qm5RLGlCQUFpQitFLFdBQXpDLENBQXBCO0FBQ0Esd0JBQU1xTCxnQkFBaUJwUSxpQkFBaUIrRSxXQUFsQixHQUFpQy9FLGNBQXZEO0FBQ0Esd0JBQUlrUSxZQUFZeEksTUFBWixHQUFxQjBJLGFBQXpCLEVBQXdDO0FBQ3hDLHdCQUFNQyxTQUFTbE0saUJBQWlCOEwsT0FBakIsQ0FBeUJLLFFBQXpCLENBQWtDRixhQUFsQyxDQUFmO0FBQ0FDLDJCQUFPRSxjQUFQO0FBQ0gsaUJBVEQsRUFTRyxHQVRIO0FBVUgsYUFwSEUsRUFvSEFDLEtBcEhBLENBb0hNLFlBQU07QUFDWCxvQkFBSTlDLGFBQWFWLGtCQUFiLElBQW1DQyxnQkFBdkMsRUFBeUQ7QUFDckRRLDZCQUFTUixnQkFBVDtBQUNBO0FBQ0g7QUFDRCxtQ0FBUSxFQUFFeUIsU0FBUyxrQ0FBWCxFQUErQ25DLE1BQU0sWUFBckQsRUFBUjtBQUNBNUYsMkJBQVcsS0FBWDtBQUNBRSw4QkFBYyxJQUFkO0FBQ0gsYUE1SEUsQ0FBUDtBQTZISDtBQUNEOzs7Ozs7OztBQVFBLGlCQUFTNEosY0FBVCxDQUF3QkMsVUFBeEIsRUFBb0M7QUFDaEMsZ0JBQU1DLGdCQUFnQixJQUFJckQsR0FBSixDQUFRTixrQkFBUixDQUF0Qjs7QUFFQSxnQkFBSTlLLG9CQUFKLEVBQTBCO0FBQ3RCLG9CQUFNME8saUJBQWlCQyxhQUFhQyxPQUFiLENBQXFCLHFCQUFyQixDQUF2QjtBQUNBLG9CQUFJRixjQUFKLEVBQW9CO0FBQ2hCRCxrQ0FBY3BELFlBQWQsQ0FBMkJDLEdBQTNCLENBQStCLGlCQUEvQixFQUFrRG9ELGNBQWxEO0FBQ0g7QUFDSjs7QUFFREYsdUJBQVcxQyxJQUFYLENBQWdCLFVBQUMrQyxNQUFELEVBQVk7QUFDeEIsb0JBQUlsTyxPQUFPbU8sS0FBUCxJQUFnQm5PLE9BQU9vTyxZQUEzQixFQUF5QztBQUNyQ3BPLDJCQUFPbU8sS0FBUCxDQUFhLGFBQWIsRUFDS2hELElBREwsQ0FDVSxVQUFDa0QsR0FBRCxFQUFTO0FBQ1hQLHNDQUFjcEQsWUFBZCxDQUEyQkMsR0FBM0IsQ0FBK0IsUUFBL0IsRUFBeUMwRCxJQUFJQyxRQUFKLENBQWFDLElBQXREO0FBQ0FULHNDQUFjcEQsWUFBZCxDQUEyQkMsR0FBM0IsQ0FBK0IsV0FBL0IsRUFBNEMwRCxJQUFJRyxJQUFKLENBQVNDLFFBQXJEO0FBQ0E3RCxpQ0FBU2tELGNBQWM3UCxRQUFkLEVBQVQ7QUFDSCxxQkFMTDtBQU1ILGlCQVBELE1BT087QUFDSCx3QkFBTXlRLFVBQVVSLE9BQU9TLFlBQVAsRUFBaEI7QUFDQWIsa0NBQWNwRCxZQUFkLENBQTJCQyxHQUEzQixDQUErQixRQUEvQixFQUF5QytELFFBQVFFLDBCQUFSLEVBQXpDO0FBQ0FkLGtDQUFjcEQsWUFBZCxDQUEyQkMsR0FBM0IsQ0FBK0IsTUFBL0IsRUFBdUMrRCxRQUFRRyxxQkFBUixFQUF2QztBQUNBZixrQ0FBY3BELFlBQWQsQ0FBMkJDLEdBQTNCLENBQStCLFVBQS9CLEVBQTJDK0QsUUFBUUksc0JBQVIsRUFBM0M7QUFDQWhCLGtDQUFjcEQsWUFBZCxDQUEyQkMsR0FBM0IsQ0FBK0IsV0FBL0IsRUFBNEMrRCxRQUFRSyw4QkFBUixFQUE1QztBQUNBbkUsNkJBQVNrRCxjQUFjN1AsUUFBZCxFQUFUO0FBQ0g7QUFDSixhQWhCRDtBQWlCSDs7QUFFRDs7Ozs7Ozs7QUFRQSxpQkFBUytRLFlBQVQsR0FBd0I7QUFDcEIsZ0JBQUlDLGFBQWEsQ0FBakI7O0FBRUEsZ0JBQU1DLGFBQWEsU0FBYkEsVUFBYSxHQUFNO0FBQ3JCbEMsMkJBQVcsWUFBTTtBQUNiLHdCQUFJaUMsY0FBYyxFQUFsQixFQUFzQjtBQUNsQm5MLG1DQUFXLEtBQVg7O0FBRUFFLHNDQUFjLElBQWQ7O0FBRUE7QUFDSDs7QUFQWSxtQ0FTNkNoRSxNQVQ3QztBQUFBLHdCQVNxQm1QLG1CQVRyQixZQVNMakYsd0JBVEs7OztBQVdiLHdCQUFJaUYsbUJBQUosRUFBeUI7QUFDckJ2Qix1Q0FBZXVCLG1CQUFmO0FBQ0g7O0FBRUQsd0JBQUksQ0FBQ0EsbUJBQUQsSUFBd0JGLGFBQWEsRUFBekMsRUFBNkM7QUFDekNDO0FBQ0g7O0FBRURELGtDQUFjLENBQWQ7QUFDSCxpQkFwQkQsRUFvQkcsR0FwQkg7QUFxQkgsYUF0QkQ7O0FBd0JBQztBQUNIOztBQUVELFlBQUk5UCxpQkFBaUI2SyxjQUFyQixFQUFxQztBQUNqQzJELDJCQUFlM0QsY0FBZjtBQUNIOztBQUVELFlBQUk3SyxpQkFBaUIsQ0FBQzZLLGNBQXRCLEVBQXNDO0FBQ2xDK0U7QUFDSDs7QUFFRCxZQUFJLENBQUM1UCxhQUFMLEVBQW9CO0FBQ2hCd0w7QUFDSDtBQUNKLEtBclBELEVBcVBHLENBQUN2RyxZQUFELEVBQWVFLFVBQWYsQ0FyUEg7O0FBdVBBOzs7O0FBSUEsMEJBQVUsWUFBTTtBQUNaLGtEQUE0QnpDLGlCQUE1QjtBQUNBOEIsaUJBQVMseUNBQTJCRCxLQUEzQixFQUFrQzdCLGlCQUFsQyxDQUFUO0FBQ0gsS0FIRCxFQUdHLENBQUNBLGlCQUFELENBSEg7O0FBTUE7Ozs7QUFJQSwwQkFBVSxZQUFNO0FBQ1osWUFBSXlCLGFBQUosRUFBbUI7QUFDZm9EO0FBQ0FsRSwyQkFBZSxFQUFmO0FBQ0g7QUFDSixLQUxELEVBS0csQ0FBQ2MsYUFBRCxDQUxIOztBQU9BOzs7O0FBSUEsMEJBQVUsWUFBTTtBQUNaLFlBQUlGLGlCQUFKLEVBQXVCO0FBQ25CLGdCQUFJb0IsaUJBQWlCQSxjQUFjMkksT0FBbkMsRUFBNEM7QUFDeEMzSSw4QkFBYzJJLE9BQWQsQ0FBc0JnQyxhQUF0QjtBQUNIO0FBQ0RDLHFCQUFTQyxnQkFBVCxDQUEwQixTQUExQixFQUFxQ3pHLHdCQUFyQztBQUNILFNBTEQsTUFLTztBQUNILGdCQUFJbkUsaUJBQWlCQSxjQUFjMEksT0FBbkMsRUFBNEM7QUFDeEMxSSw4QkFBYzBJLE9BQWQsQ0FBc0JtQyxLQUF0QjtBQUNIO0FBQ0RGLHFCQUFTRyxtQkFBVCxDQUE2QixTQUE3QixFQUF3QzNHLHdCQUF4QztBQUNIOztBQUVELGVBQU8sWUFBTTtBQUNUd0cscUJBQVNHLG1CQUFULENBQTZCLFNBQTdCLEVBQXdDM0csd0JBQXhDO0FBQ0gsU0FGRDtBQUdILEtBaEJELEVBZ0JHLENBQUN4RixpQkFBRCxDQWhCSDs7QUFrQkEsUUFBTW9NLE1BQU0sb0JBQVo7O0FBRUEsMEJBQVUsWUFBTTtBQUNaLFlBQUlBLE9BQU8sQ0FBQ3BMLFlBQVIsSUFBd0JwRixNQUE1QixFQUFvQztBQUNoQyxnQkFBTXlRLEtBQUssSUFBSUMsb0JBQUosQ0FBeUIsVUFBQ0MsT0FBRCxFQUFhO0FBQzdDLG9CQUFJQSxRQUFRLENBQVIsRUFBV0MsaUJBQVgsSUFBZ0MsQ0FBcEMsRUFBdUM7QUFDdkNyTCw4QkFBYyxJQUFkO0FBQ0FGLGdDQUFnQixJQUFJeUcsSUFBSixHQUFXK0UsT0FBWCxFQUFoQjtBQUNILGFBSlUsQ0FBWDtBQUtBSixlQUFHSyxPQUFILENBQVdOLElBQUlyQyxPQUFmO0FBQ0g7QUFDSixLQVRELEVBU0csQ0FBQ3FDLEdBQUQsQ0FUSDs7QUFXQTs7OztBQUlBOzs7O0FBSUEsUUFBTU8sa0JBQWtCLGlDQUFtQjVOLE9BQW5CLENBQXhCOztBQUVBOzs7O0FBSUEsUUFBTTZOLGVBQWUsOEJBQWdCRCxlQUFoQixLQUFvQyxJQUFJRSxHQUFKLEVBQXpEOztBQUVBOzs7Ozs7QUFNQSxRQUFNQyxlQUFlLElBQUlDLHNCQUFKLENBQ2pCek0sS0FEaUIsRUFFakJNLFlBRmlCLEVBR2pCdkcsVUFIaUIsRUFJakJDLGFBSmlCLEVBS2pCSyxhQUxpQixDQUFyQjs7QUFRQTs7Ozs7QUFLQSxRQUFNcVMsd0JBQXdCLFNBQXhCQSxxQkFBd0I7QUFBQSxlQUFNRixhQUMvQkcsU0FEK0IsQ0FDckJ4TixVQURxQixFQUNUckQsV0FEUyxFQUNJekIsYUFESixFQUNtQlEsVUFEbkIsRUFDK0IyRixXQUQvQixFQUUvQm9NLHVCQUYrQixDQUVQblQsaUJBRk8sRUFFWTBFLGlCQUZaLEVBRStCeUIsYUFGL0IsRUFHL0JpTix3QkFIK0IsR0FJL0JDLFdBSitCLENBSW5CVCxlQUptQixFQUlGQyxZQUpFLEVBSVkzUyxXQUpaLEVBSXlCOEMsdUJBSnpCLEVBSXVDa0MsY0FKdkMsRUFLL0JvTyxZQUwrQixDQUtsQmpULGNBTGtCLEVBTS9Ca1QsV0FOK0IsQ0FNbkJuTyxXQU5tQixFQU1ONUUsWUFOTSxFQU1RZ0MsU0FOUixFQU8vQmdSLFdBUCtCLENBT25CNU8sWUFQbUIsQ0FBTjtBQUFBLEtBQTlCOztBQVNBOzs7O0FBSUE7O0FBLy9CeUIsZ0NBZ2dDNEJxTyx1QkFoZ0M1QjtBQUFBLHVEQWdnQ2pCUSxhQWhnQ2lCO0FBQUEsUUFnZ0NqQkEsYUFoZ0NpQiwwQ0FnZ0NELEVBaGdDQztBQUFBLHVEQWdnQ0dDLGdCQWhnQ0g7QUFBQSxRQWdnQ0dBLGdCQWhnQ0gsMENBZ2dDc0IsQ0FoZ0N0Qjs7QUFrZ0N6Qjs7Ozs7O0FBSUEsUUFBTUMsWUFBWWhRLGdCQUFnQjhELE1BQWhCLEdBQXlCOUQsZUFBekIsR0FBMkM4UCxhQUE3RDs7QUFFQTs7OztBQUlBLFFBQU1HLGFBQWEsNEJBQWM3VCxjQUFkLEVBQThCNFQsVUFBVWxNLE1BQXhDLENBQW5COztBQUVBOzs7O0FBSUEsUUFBTW9NLGlCQUFpQixnQ0FBa0I5VCxjQUFsQixFQUFrQytFLFdBQWxDLEVBQStDNk8sVUFBVWxNLE1BQXpELENBQXZCOztBQUVBOzs7O0FBSUEsUUFBTXFNLDBCQUEwQiwwQ0FBMEI5TyxPQUExQixDQUFoQzs7QUFFQTs7OztBQUlBLFFBQU0rTyxvQkFBb0IscUNBQ3RCalUsbUJBRHNCLEVBRXRCTyxjQUZzQixFQUd0QnNULFVBQVVsTSxNQUhZLENBQTFCO0FBS0E7Ozs7QUFJQSxRQUFNdU0sa0JBQWtCRCxxQkFBcUJsVSxtQkFBbUIsVUFBaEU7O0FBRUE7Ozs7QUFJQSxRQUFNb1UsbUJBQW1CRixxQkFBcUJsVSxtQkFBbUIsV0FBakU7O0FBRUE7Ozs7QUFJQSxRQUFNcVUseUJBQXlCdlUsc0JBQXNCQyxvQkFBb0J1VSx3QkFBYUMsSUFBdEY7O0FBRUE7Ozs7QUFJQSxRQUFNQyxpQkFBaUJWLFVBQVVsTSxNQUFWLEdBQW1CLENBQTFDOztBQUVBOzs7O0FBSUEsUUFBTTZNLDRCQUE0QnRQLFFBQVF5QyxNQUFSLEdBQWlCLENBQWpCLElBQXNCMUIsY0FBY3dPLDJCQUFwQyxHQUM5QkMsK0JBQW9CSixJQURVLEdBQ0hJLCtCQUFvQkMsS0FEbkQ7O0FBR0E7Ozs7QUFJQSxRQUFNQyxpQkFBaUIvUixzQkFBc0JnUyw0QkFBaUJDLE9BQXZDLEdBQWlERCw0QkFBaUJFLE1BQXpGOztBQUVBOzs7O0FBSUEsUUFBTUMsbUJBQW1CbFYsb0JBQW9CdVUsd0JBQWFZLEdBQTFEOztBQUVBOzs7O0FBSUEsUUFBTUMsb0JBQW9CcFYsb0JBQW9CdVUsd0JBQWFDLElBQTNEOztBQUVBOzs7O0FBSUEsUUFBTWEsaUJBQ0Z0VixzQkFDQTJDLGFBREEsSUFFQUMsV0FGQSxJQUdBekMsbUJBSko7O0FBTUEsUUFBSW9WLGNBQWMsRUFBbEI7QUFDQWxRLFlBQVFpRSxPQUFSLENBQWdCLFVBQUNvQixFQUFELEVBQVE7QUFDcEJBLFdBQUdoQyxLQUFILENBQVN1QyxNQUFULENBQWdCO0FBQUEsbUJBQVFDLEtBQUt0QyxRQUFiO0FBQUEsU0FBaEIsRUFBdUNVLE9BQXZDLENBQStDLFVBQUM0QixJQUFELEVBQVU7QUFDckRxSywyQkFBa0JySyxLQUFLSCxLQUF2QjtBQUNILFNBRkQ7QUFHSCxLQUpEOztBQU1BOzs7O0FBSUE7Ozs7O0FBS0EsUUFBTXlLLGFBQWEsMEJBQVc7QUFDMUIsa0NBQTBCalQsaUJBQWlCa1Qsc0JBQVdDLEtBRDVCO0FBRTFCLGlDQUF5Qm5ULGlCQUFpQmtULHNCQUFXRSxJQUYzQjtBQUcxQixvQ0FBNEJwVCxpQkFBaUJrVCxzQkFBV0c7QUFIOUIsS0FBWCxDQUFuQjs7QUFNQTs7Ozs7O0FBTUEsYUFBUzdSLHFCQUFULENBQStCOFIsVUFBL0IsRUFBMkNDLFlBQTNDLEVBQXlEO0FBQ3JELFlBQU1DLGNBQWNGLFdBQ2Y1SyxNQURlLENBQ1I7QUFBQSxtQkFBVUEsT0FBT3pKLEVBQVAsQ0FBVW1JLFFBQVYsQ0FBbUIseUJBQW5CLENBQVY7QUFBQSxTQURRLEVBRWZySSxHQUZlLENBRVg7QUFBQSxtQkFBUTRKLEtBQUsxSixFQUFiO0FBQUEsU0FGVyxDQUFwQjs7QUFJQTtBQUNBLFlBQU13VSxxQkFBcUJELFlBQ3RCelUsR0FEc0IsQ0FDbEI7QUFBQSxtQkFBTXdVLGdCQUFnQkEsYUFBYTdLLE1BQWIsQ0FBb0I7QUFBQSx1QkFBWWdMLFNBQVN6VSxFQUFULEtBQWdCQSxFQUE1QjtBQUFBLGFBQXBCLEVBQW9ELENBQXBELENBQXRCO0FBQUEsU0FEa0IsQ0FBM0I7O0FBR0EsZ0JBQVE7QUFDSnVILG1CQUFPLFlBREg7QUFFSmpHLG1CQUFPLFlBRkg7QUFHSnRCLGdCQUFJLEVBSEE7QUFJSmtILG1CQUFPO0FBSkgsU0FBUiw0QkFLTXNOLGtCQUxOO0FBTUg7O0FBRUQ7Ozs7QUFJQSxhQUFTRSxzQkFBVCxHQUFrQztBQUM5QixZQUFJLENBQUNwUyxrQkFBTCxFQUF5QixPQUFPLEVBQVA7QUFDekIsWUFBSXFTLGdCQUFnQixFQUFwQjtBQUY4QjtBQUFBO0FBQUE7O0FBQUE7QUFHOUIsa0NBQXVCclMsa0JBQXZCLG1JQUEyQztBQUFBLG9CQUFoQ21TLFFBQWdDOztBQUN2QyxvQkFBSUEsWUFBWUEsU0FBU3ZOLEtBQXpCLEVBQWdDO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQzVCLDhDQUFtQnVOLFNBQVN2TixLQUE1QixtSUFBbUM7QUFBQSxnQ0FBeEJ3QyxJQUF3Qjs7QUFDL0JBLGlDQUFLa0wsWUFBTCxHQUFvQixJQUFwQjtBQUNIO0FBSDJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBSTVCRCxvQ0FBZ0JBLGNBQWM5VSxNQUFkLENBQXFCNFUsU0FBU3ZOLEtBQTlCLENBQWhCO0FBQ0g7QUFDSjtBQVY2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVk5QixlQUFPO0FBQ0hLLG1CQUFPLGNBREo7QUFFSHZILGdCQUFJLG1CQUZEO0FBR0hrSCxtQkFBT3lOO0FBSEosU0FBUDtBQUtIOztBQUVEOzs7OztBQUtBLGFBQVNFLGVBQVQsQ0FBeUJMLGtCQUF6QixFQUE2Q00sT0FBN0MsRUFBc0Q7QUFDbEQsWUFBTTlHLE9BQU8sRUFBYjtBQURrRDtBQUFBO0FBQUE7O0FBQUE7QUFFbEQsa0NBQXVCd0csa0JBQXZCLG1JQUEyQztBQUFBLG9CQUFoQ0MsUUFBZ0M7O0FBQ3ZDekcscUJBQUtDLElBQUwsQ0FBVXdHLFNBQVN6VSxFQUFuQjtBQUNIO0FBSmlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBS2xEZ0Usc0JBQWNnSyxJQUFkO0FBQ0FsSyxtQkFBVyxVQUFDMEQsV0FBRCxFQUFpQjtBQUN4QkEsd0JBQVl1TixHQUFaO0FBQ0EsZ0JBQU1DLFdBQVcxUyxtQkFBbUJtSCxNQUFuQixDQUEwQjtBQUFBLHVCQUFZZ0wsU0FBU3pVLEVBQVQsS0FBZ0I4VSxPQUE1QjtBQUFBLGFBQTFCLEVBQStELENBQS9ELENBQWpCO0FBQ0EsZ0JBQUksQ0FBQ0UsU0FBUzlOLEtBQVQsQ0FBZVosTUFBcEIsRUFBNEI7QUFDeEIsb0JBQU0yTyxjQUFjek4sWUFBWTNILE1BQVosQ0FBbUI2VSx3QkFBbkIsQ0FBcEI7QUFDQSx1QkFBT08sV0FBUDtBQUNIO0FBQ0R6Tix3QkFBWXlHLElBQVosQ0FBaUIrRyxRQUFqQjtBQUNBLG1CQUFPeE4sV0FBUDtBQUNILFNBVEQ7QUFVQXBELDRCQUFvQjBRLE9BQXBCO0FBQ0FsUix1QkFBZSxDQUFmO0FBQ0g7O0FBRUQ7Ozs7O0FBS0EsYUFBU3NSLGVBQVQsQ0FBeUJULFFBQXpCLEVBQW1DO0FBQy9CLFlBQU1VLGVBQWVyVyxnQkFDaEIySyxNQURnQixDQUNUO0FBQUEsbUJBQVVBLE9BQU96SixFQUFQLEtBQWN5VSxTQUFTelUsRUFBakM7QUFBQSxTQURTLEVBRWhCRixHQUZnQixDQUVaO0FBQUEsbUJBQVUySixPQUFPMkwsSUFBakI7QUFBQSxTQUZZLEVBR2hCMVYsUUFIZ0IsRUFBckI7QUFJQSxlQUFPeVYsZ0JBQWdCVixTQUFTVyxJQUF6QixJQUFpQyxFQUF4QztBQUNIOztBQUVELFFBQU1DLGdCQUFnQnpVLHVCQUEwQkEsb0JBQTFCLFdBQXNELEVBQTVFO0FBQ0EsUUFBTTBVLFlBQVkzQywwQkFBMEJvQixXQUExQixHQUF3QyxZQUExRDtBQUNBLFFBQU13QixpQkFBaUJ0UixlQUFlLE1BQXRDO0FBQ0EsUUFBTXVSLHNCQUF5QkgsYUFBekIsbUNBQW9FQyxTQUFwRSx3QkFBZ0dDLGNBQXRHO0FBQ0E7Ozs7O0FBS0EsUUFBTUUsZUFBZSwwQkFBVztBQUM1Qiw2QkFBcUIsSUFETztBQUU1QixnREFBd0N6VSw0QkFBNEJnQiw0QkFBaUIwVCxxQkFGekQ7QUFHNUIsa0RBQTBDMVUsNEJBQTRCZ0IsNEJBQWlCMlQsVUFIM0Q7QUFJNUIsMkNBQW1DM1UsNEJBQTRCZ0IsNEJBQWlCNFQsWUFKcEQ7QUFLNUIsMkNBQW1DNVUsNEJBQTRCZ0IsNEJBQWlCNlQsWUFMcEQ7QUFNNUIsc0RBQThDMVQscUJBTmxCO0FBTzVCLHVDQUErQkosbUJBUEg7QUFRNUIsNkNBQXFDdkQsc0JBQXNCcVY7QUFSL0IsS0FBWCxDQUFyQjs7QUFXQSwwQkFBVSxZQUFNO0FBQ1osWUFBSTFSLHFCQUFKLEVBQTJCO0FBQ3ZCMkIsdUJBQVcsVUFBQzBELFdBQUQsRUFBaUI7QUFDeEIsb0JBQU15TixjQUFjek4sWUFBWTNILE1BQVosQ0FBbUI2VSx3QkFBbkIsQ0FBcEI7QUFDQSx1QkFBT08sV0FBUDtBQUNILGFBSEQ7QUFJSDtBQUNKLEtBUEQsRUFPRyxFQVBIOztBQVNBLFdBQ0k7QUFBQywrQkFBRCxDQUFlLFFBQWY7QUFBQSxVQUF3QixPQUFPOVcsTUFBL0I7QUFDSTtBQUFDLHVDQUFELENBQW1CLFFBQW5CO0FBQUEsY0FBNEIsT0FBTyxFQUFFNEosT0FBTzFFLFlBQVQsRUFBdUJ5UyxVQUFVeFMsZUFBakMsRUFBbkM7QUFHSTtBQUFBO0FBQUE7QUFDSSx5QkFBSzROLEdBRFQ7QUFFSSwwQkFBSyxPQUZUO0FBR0ksa0NBQVk1UCxLQUhoQjtBQUlJLDhCQUFRa1UsbUJBSlo7QUFLSSw4QkFBUTdLLE9BQU9oSyxnQkFBUCxDQUxaO0FBTUksNkJBQVMwSixpQkFOYjtBQU9JLCtCQUFjb0wsWUFBZCxTQUE4QnpCLFVBUGxDO0FBUUk7QUFBQTtBQUFBLHNCQUFLLFdBQVUseUJBQWY7QUFDTTdSLDZDQUNGO0FBQUMsdUNBQUQ7QUFBQTtBQUNJO0FBQUE7QUFBQSw4QkFBSSxlQUFZLHNDQUFoQixFQUF1RCxXQUFVLHNDQUFqRTtBQUNLYjtBQURMLHlCQURKO0FBSUk7QUFBQTtBQUFBLDhCQUFLLFdBQVUsa0JBQWY7QUFFUWdCLCtDQUFtQnhDLEdBQW5CLENBQXVCLFVBQUMyVSxRQUFELEVBQWM7QUFDakMsb0NBQUksQ0FBQ0EsUUFBTCxFQUFlLE9BQU8sSUFBUDtBQUNmLG9DQUFJck4sV0FBVyxFQUFmO0FBQ0Esb0NBQUlxTixTQUFTelUsRUFBVCxLQUFnQm1FLGdCQUFwQixFQUFzQztBQUNsQ2lELCtDQUFXLFVBQVg7QUFDSDtBQUNELHVDQUNJO0FBQUE7QUFBQTtBQUNJLGlEQUFTLG1CQUFNO0FBQ1h5Tiw0REFBZ0JKLFNBQVN2TixLQUF6QixFQUFnQ3VOLFNBQVN6VSxFQUF6QztBQUNILHlDQUhMO0FBSUkseURBQWVvSCxRQUpuQjtBQUtJLHNEQUFZcU4sU0FBU2xOLEtBQVQsQ0FBZXdPLFVBQWYsQ0FBMEIsR0FBMUIsRUFBK0IsRUFBL0IsRUFBbUMvVyxXQUFuQyxFQUxoQjtBQU1JLDJFQUFLLFdBQVUsd0JBQWYsRUFBd0MsS0FBS2tXLGdCQUFnQlQsUUFBaEIsQ0FBN0MsRUFBd0UsS0FBS0EsU0FBU1csSUFBVCxJQUFpQixlQUE5RixHQU5KO0FBT0tYLDZDQUFTblQ7QUFQZCxpQ0FESjtBQVdILDZCQWpCRDtBQUZSO0FBSkoscUJBRko7QUE4Qk15Uiw4Q0FBMEI3USxtQkFBMUIsSUFDRjtBQUFBO0FBQUEsMEJBQUssV0FBVSxxQ0FBZjtBQUNJLHNEQUFDLGVBQUQ7QUFDSSxxQ0FBUzJCLE9BRGI7QUFFSSxnREFBb0I4Tyx1QkFGeEI7QUFHSSx5Q0FBYS9OLFdBSGpCO0FBSUksMkNBQWVtRSxzQkFKbkI7QUFLSSwrQ0FBbUJULDhCQUx2QjtBQU1JLGdEQUFvQmhCLGVBTnhCO0FBT0ksNkNBQWlCcUMsb0JBUHJCO0FBUUksd0RBQTRCQyx5QkFSaEM7QUFTSSxtREFBdUJELG9CQVQzQjtBQVVJLCtDQUFtQjdFLGlCQVZ2QjtBQVdJLG9DQUFRME4sVUFBVWxNLE1BWHRCO0FBWUksK0NBQ0ksOEJBQUMsbUJBQUQ7QUFDSSwrQ0FBZXRCLGFBRG5CO0FBRUkseUNBQVNpRiw4QkFGYjtBQUdJLGlEQUFpQjFHLGtCQUFrQitDLE1BSHZDLEdBYlI7QUFrQkksNkNBQ0ksOEJBQUMsZ0JBQUQ7QUFDSSxpREFBaUJuRywwQkFEckI7QUFFSSxzQ0FBSyxtQkFGVDtBQUdJLHVDQUFPOEQsV0FIWDtBQUlJLDJDQUFXLEtBSmY7QUFLSSwwQ0FBVTRFLHVCQUxkLEdBbkJSO0FBMEJJLGlDQUFLM0MsYUExQlQ7QUFESixxQkEvQko7QUE2REk7QUFBQTtBQUFBLDBCQUFLLDZDQUEwQ1osWUFBWSxhQUFaLEdBQTRCLEVBQXRFLENBQUw7QUFDTXFPLDRDQUFvQnpSLG1CQUFwQixJQUNGLDhCQUFDLGVBQUQ7QUFDSSxnREFBb0IxRCxrQkFEeEI7QUFFSSxxQ0FBU3FGLE9BRmI7QUFHSSx5Q0FBYWUsV0FIakI7QUFJSSxvQ0FBUTROLFVBQVVsTSxNQUp0QjtBQUtJLDZDQUFpQnFELG9CQUxyQjtBQU1JLDJDQUFlWixzQkFObkI7QUFPSSxnREFBb0J6QixlQVB4QjtBQVFJLHdDQUFZdkQsY0FSaEI7QUFTSSwrQ0FBbUJ1RSw4QkFUdkI7QUFVSSxtREFBdUJwRCxxQkFWM0I7QUFXSSw2Q0FDSSw4QkFBQyxnQkFBRDtBQUNJLGlEQUFpQjlFLHlCQURyQjtBQUVJLHNDQUFLLGtCQUZUO0FBR0ksdUNBQU82RCxXQUhYO0FBSUksMkNBQVd6QyxtQkFKZjtBQUtJLDBDQUFVcUgsdUJBTGQsR0FaUjtBQW1CSSwyQ0FDSSw4QkFBQyxlQUFEO0FBQ0ksd0NBQVF4RSxVQURaO0FBRUksb0NBQUcsTUFGUDtBQUdJLHFDQUFLRSxVQUhUO0FBSUksd0NBQVFqRixXQUpaO0FBS0ksMENBQVVxSixnQkFMZDtBQU1JLHNDQUFLLGtCQU5UO0FBT0ksK0NBUEo7QUFRSSxrREFBa0J3Syx5QkFSdEIsR0FwQlI7QUE4QkksNENBQWdCL0ksdUJBOUJwQixHQUZKO0FBa0NNeUosNkNBQXFCM1IsbUJBQXJCLElBQ0YsOEJBQUMsVUFBRDtBQUNJLHFDQUFTMUQsa0JBRGI7QUFFSSx3Q0FBWXFGLFFBQVF5QyxNQUZ4QjtBQUdJLHFDQUFTekMsT0FIYjtBQUlJLHNDQUFVMk8sVUFBVWxNLE1BSnhCO0FBS0ksZ0RBQW9CcU0sdUJBTHhCO0FBTUkseUNBQWEvTixXQU5qQjtBQU9JLHdEQUE0QmdGLHlCQVBoQztBQVFJLDZDQUNJLDhCQUFDLGdCQUFEO0FBQ0ksaURBQWlCdkoscUJBRHJCO0FBRUksc0NBQUssbUJBRlQ7QUFHSSx1Q0FBTzRELFdBSFg7QUFJSSwyQ0FBVyxLQUpmO0FBS0ksMENBQVU0RSx1QkFMZCxHQVRSO0FBZ0JJLDJDQUNJLDhCQUFDLGVBQUQ7QUFDSSx3Q0FBUXhFLFVBRFo7QUFFSSxvQ0FBRyxNQUZQO0FBR0kscUNBQUtFLFVBSFQ7QUFJSSx3Q0FBUWpGLFdBSlo7QUFLSSwwQ0FBVXFKLGdCQUxkO0FBTUksMkNBQVcsS0FOZjtBQU9JLGtEQUFpQixPQVByQixHQWpCUjtBQTBCSSx5Q0FBYXJKLFdBMUJqQjtBQTJCSSxpQ0FBSzZHLGFBM0JULEdBbkNKO0FBZ0VNK00sMENBQWtCaFIsbUJBQWxCLElBQ0Y7QUFBQywyQ0FBRDtBQUFBO0FBQ0ksMERBQUMsY0FBRDtBQUNJLGdEQUFnQnRELGNBRHBCO0FBRUksdUNBQU8rRSxXQUZYO0FBR0ksdUNBQU82TyxTQUhYO0FBSUksOENBQWN6UCxnQkFKbEI7QUFLSSxnREFBZ0IrRyxxQkFMcEI7QUFNSSxrREFBa0JnSyxjQU50QixHQURKO0FBUUtqQiwrQ0FDRCw4QkFBQyxrQkFBRDtBQUNJLHlDQUFTdEssZUFEYjtBQUVJLHNDQUFNbUssY0FGVjtBQUdJLHVDQUFPRixVQUFVbE0sTUFIckIsR0FUSjtBQWNLd00sZ0RBQ0QsOEJBQUMsbUJBQUQ7QUFDSSwyQ0FBV1MsY0FEZjtBQUVJLG1EQUFtQjVQLFdBRnZCO0FBR0ksNENBQVk4TyxVQUhoQjtBQUlJLGtEQUFrQjdULGNBSnRCO0FBS0ksOENBQWM0VCxVQUFVbE0sTUFMNUI7QUFNSSx5Q0FBUzFDLGNBTmI7QUFmSix5QkFqRUo7QUF5Rk1zUCwwQ0FBa0JuUixtQkFBbEIsSUFBeUMsRUFBRVYsY0FBYyxhQUFoQixDQUF6QyxJQUNGLDhCQUFDLHVCQUFEO0FBQ0ksb0NBQVFtUixVQUFVbE0sTUFEdEI7QUFFSSxtQ0FBT2tNLFNBRlg7QUFHSSxrQ0FBSyxTQUhUO0FBSUksNENBQWdCMUkscUJBSnBCLEdBMUZKO0FBZ0dNb0osMENBQWtCblIsbUJBQWxCLElBQTBDVixjQUFjLGFBQXhELElBQ0YsOEJBQUMsY0FBRDtBQUNJLG1DQUFNLGVBRFY7QUFFSSx5Q0FBWSx3R0FGaEI7QUFJSSwwQ0FBYSxFQUpqQixHQWpHSjtBQXVHTWlFLHFDQUFhLENBQUM0TixjQUFkLElBQ0YsOEJBQUMsZ0JBQUQ7QUFDSSxrQ0FBTThDLHVCQUFZQyxHQUR0QjtBQUVJLG9DQUFRLENBQUMvVyxjQUZiO0FBR0ksMENBSEosR0F4R0o7QUE2R00seUJBQUNzRyxZQUFELElBQWlCLENBQUMwTixjQUFsQixJQUFvQyxDQUFDNU4sU0FBckMsSUFDRiw4QkFBQyxjQUFEO0FBQ0ksbUNBQU9oRixjQURYO0FBRUkseUNBQWFDLG9CQUZqQjtBQUdJLDBDQUFjMEQsV0FIbEIsR0E5R0o7QUFtSE11Qix3Q0FDRiw4QkFBQyxjQUFEO0FBQ0ksbUNBQU9oRixlQURYO0FBRUkseUNBQWFDLHFCQUZqQjtBQUdJLDBDQUFhLEVBSGpCO0FBcEhKO0FBN0RKO0FBUko7QUFISjtBQURKLEtBREo7QUF5TUgsQ0E5NkNEOztBQWc3Q0F4QyxVQUFVaVksU0FBVixHQUFzQjtBQUNsQi9YLFlBQVEsc0JBQU1nWSxrQkFBTjtBQURVLENBQXRCOztBQUlBbFksVUFBVW1ZLFlBQVYsR0FBeUI7QUFDckJqWSxZQUFRO0FBRGEsQ0FBekI7O2tCQUllRixTIiwiZmlsZSI6IjEwOC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICAgIEZyYWdtZW50LFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VSZWYsXG4gICAgdXNlU3RhdGUsXG4gICAgY3JlYXRlUmVmLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHNoYXBlIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgJ3doYXR3Zy1mZXRjaCc7XG5pbXBvcnQgeyBsb2dMYW5hIH0gZnJvbSAnLi4vSGVscGVycy9sYW5hJztcbmltcG9ydCBQb3B1cCBmcm9tICcuLi9Tb3J0L1BvcHVwJztcbmltcG9ydCBTZWFyY2ggZnJvbSAnLi4vU2VhcmNoL1NlYXJjaCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJy4uL0xvYWRlci9Mb2FkZXInO1xuaW1wb3J0IHtcbiAgICBnZXRCeVBhdGgsXG4gICAgc2F2ZUJvb2ttYXJrc1RvTG9jYWxTdG9yYWdlLFxuICAgIHJlYWRCb29rbWFya3NGcm9tTG9jYWxTdG9yYWdlLFxuICAgIHJlYWRJbmNsdXNpb25zRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRUcmFuc2l0aW9ucyxcbn0gZnJvbSAnLi4vSGVscGVycy9nZW5lcmFsJztcbmltcG9ydCB7IGNvbmZpZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9jb25maWcnO1xuaW1wb3J0IENhcmRzQ2Fyb3VzZWwgZnJvbSAnLi4vQ2FyZHNDYXJvdXNlbC9DYXJkc0Nhcm91c2VsJztcbmltcG9ydCBOb1Jlc3VsdHNWaWV3IGZyb20gJy4uL05vUmVzdWx0cy9WaWV3JztcbmltcG9ydCBMb2FkTW9yZSBmcm9tICcuLi9QYWdpbmF0aW9uL0xvYWRNb3JlJztcbmltcG9ydCBCb29rbWFya3MgZnJvbSAnLi4vQm9va21hcmtzL0Jvb2ttYXJrcyc7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gJy4uL1BhZ2luYXRpb24vUGFnaW5hdG9yJztcbmltcG9ydCBHcmlkIGZyb20gJy4uL0dyaWQvR3JpZCc7XG5pbXBvcnQgQ2FyZEZpbHRlcmVyIGZyb20gJy4uL0hlbHBlcnMvQ2FyZEZpbHRlcmVyJztcbmltcG9ydCBGaWx0ZXJzUGFuZWxUb3AgZnJvbSAnLi4vRmlsdGVycy9Ub3AvUGFuZWwnO1xuaW1wb3J0IExlZnRGaWx0ZXJQYW5lbCBmcm9tICcuLi9GaWx0ZXJzL0xlZnQvUGFuZWwnO1xuaW1wb3J0IEpzb25Qcm9jZXNzb3IgZnJvbSAnLi4vSGVscGVycy9Kc29uUHJvY2Vzc29yJztcbmltcG9ydCB7IHVzZVdpbmRvd0RpbWVuc2lvbnMsIHVzZVVSTFN0YXRlIH0gZnJvbSAnLi4vSGVscGVycy9ob29rcyc7XG5pbXBvcnQgeyBJbmZvIGFzIExlZnRJbmZvIH0gZnJvbSAnLi4vRmlsdGVycy9MZWZ0L0luZm8nO1xuaW1wb3J0IHtcbiAgICBERVNLVE9QX01JTl9XSURUSCxcbiAgICBGSUxURVJfVFlQRVMsXG4gICAgRklMVEVSX1BBTkVMLFxuICAgIExPQURFUl9TSVpFLFxuICAgIFBBR0lOQVRJT05fQ09VTlQsXG4gICAgVEFCTEVUX01JTl9XSURUSCxcbiAgICBUUlVOQ0FURV9URVhUX1FUWSxcbiAgICBTT1JUX1BPUFVQX0xPQ0FUSU9OLFxuICAgIFRIRU1FX1RZUEUsXG4gICAgTEFZT1VUX0NPTlRBSU5FUixcbiAgICBPTkVfU0VDT05EX0RFTEFZLFxuICAgIFNPUlRfVFlQRVMsXG4gICAgRVZFTlRfVElNSU5HX0lEUyxcbn0gZnJvbSAnLi4vSGVscGVycy9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBDb25maWdDb250ZXh0LFxuICAgIEV4cGFuZGFibGVDb250ZXh0LFxufSBmcm9tICcuLi9IZWxwZXJzL2NvbnRleHRzJztcbmltcG9ydCB7XG4gICAgZ2V0RGVmYXVsdFNvcnRPcHRpb24sXG4gICAgZ2V0TnVtU2VsZWN0ZWRGaWx0ZXJJdGVtcyxcbiAgICBtYWtlQ29uZmlnR2V0dGVyLFxufSBmcm9tICcuLi9IZWxwZXJzL2NvbnNvbmFudCc7XG5cbmltcG9ydCB7XG4gICAgc2hvdWxkRGlzcGxheVBhZ2luYXRvcixcbiAgICBnZXROdW1DYXJkc1RvU2hvdyxcbiAgICBnZXRUb3RhbFBhZ2VzLFxuICAgIGdldEFjdGl2ZUZpbHRlcklkcyxcbiAgICBnZXRBY3RpdmVQYW5lbHMsXG4gICAgZ2V0VXBkYXRlZENhcmRCb29rbWFya0RhdGEsXG59IGZyb20gJy4uL0hlbHBlcnMvSGVscGVycyc7XG5cblxuLyoqXG4gKiBDb25zb25hbnQgQ2FyZCBDb2xsZWN0aW9uXG4gKiBDb25maWcgaXMgaW1wbGljaXRseSBwb3B1bGF0ZWQgYnkgYXV0aG9yc1xuICpcbiAqIEBjb21wb25lbnRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjb25maWcgPSB7XG4gICAgY29sbGVjdGlvbjoge30sXG4gICAgZmVhdHVyZWRDYXJkczogW3t9XSxcbiAgICBmaWx0ZXJQYW5lbDoge30sXG4gICAgaGlkZUN0YUlkczogW3t9XSxcbiAgICBoaWRlQ3RhVGFnczogW3t9XSxcbiAgICBzb3J0OiB7fSxcbiAgICBwYWdpbmF0aW9uOiB7fSxcbiAgICBib29rbWFya3M6IHt9LFxuICAgIHNlYXJjaDoge30sXG4gICAgbGFuZ3VhZ2U6ICcnXG4gKiB9XG4gKiByZXR1cm4gKFxuICogICA8Q29udGFpbmVyIGNvbmZpZz17Y29uZmlnfS8+XG4gKiApXG4gKi9cbmNvbnN0IENvbnRhaW5lciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBwcm9wcztcbiAgICBjb25zdCBnZXRDb25maWcgPSBtYWtlQ29uZmlnR2V0dGVyKGNvbmZpZyk7XG4gICAgY29uc3QgZmlsdGVyR3JvdXBQcmVmaXggPSAnY2hfJztcbiAgICBjb25zdCBzZWFyY2hQcmVmaXggPSAnc2hfJztcbiAgICBjb25zdCBDQVJEX0hBU0hfTEVOR1RIID0gMTA7XG5cbiAgICAvKipcbiAgICAgKioqKiBBdXRob3JlZCBDb25maWdzICoqKipcbiAgICAgKi9cbiAgICBjb25zdCBmaWx0ZXJQYW5lbEVuYWJsZWQgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCBmaWx0ZXJQYW5lbFR5cGUgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ3R5cGUnKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uVHlwZSA9IGdldENvbmZpZygncGFnaW5hdGlvbicsICd0eXBlJyk7XG4gICAgY29uc3QgcGFnaW5hdGlvbklzRW5hYmxlZCA9IGdldENvbmZpZygncGFnaW5hdGlvbicsICdlbmFibGVkJyk7XG4gICAgY29uc3QgcmVzdWx0c1BlclBhZ2UgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncmVzdWx0c1BlclBhZ2UnKTtcbiAgICBjb25zdCBvbmx5U2hvd0Jvb2ttYXJrcyA9IGdldENvbmZpZygnYm9va21hcmtzJywgJ2xlZnRGaWx0ZXJQYW5lbC5ib29rbWFya09ubHlDb2xsZWN0aW9uJyk7XG4gICAgY29uc3QgYXV0aG9yZWRGaWx0ZXJzID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdmaWx0ZXJzJyk7XG4gICAgY29uc3QgZmlsdGVyTG9naWMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2ZpbHRlckxvZ2ljJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IHRvdGFsQ2FyZExpbWl0ID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3RvdGFsQ2FyZHNUb1Nob3cnKTtcbiAgICBjb25zdCBzYW1wbGVTaXplID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3Jlc2Vydm9pci5zYW1wbGUnKTtcbiAgICBjb25zdCByZXNlcnZvaXJTaXplID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3Jlc2Vydm9pci5wb29sJyk7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRzID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnc2VhcmNoRmllbGRzJyk7XG4gICAgY29uc3Qgc29ydE9wdGlvbnMgPSBnZXRDb25maWcoJ3NvcnQnLCAnb3B0aW9ucycpO1xuICAgIGNvbnN0IGRlZmF1bHRTb3J0ID0gZ2V0Q29uZmlnKCdzb3J0JywgJ2RlZmF1bHRTb3J0Jyk7XG4gICAgY29uc3QgZGVmYXVsdFNvcnRPcHRpb24gPSBnZXREZWZhdWx0U29ydE9wdGlvbihjb25maWcsIGRlZmF1bHRTb3J0KTtcbiAgICBsZXQgZmVhdHVyZWRDYXJkcyA9IGdldENvbmZpZygnZmVhdHVyZWRDYXJkcycsICcnKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucmVwbGFjZSgvXFxbfFxcXS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL2AvZywgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZSxtYXgtbGVuXG4gICAgZmVhdHVyZWRDYXJkcyA9IGZlYXR1cmVkQ2FyZHMuY29uY2F0KGZlYXR1cmVkQ2FyZHMubWFwKGlkID0+IHJvbGxpbmdIYXNoKGlkLCBDQVJEX0hBU0hfTEVOR1RIKSkpO1xuICAgIGxldCBoaWRlQ3RhSWRzID0gZ2V0Q29uZmlnKCdoaWRlQ3RhSWRzJywgJycpXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXFt8XFxdL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvYC9nLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgaGlkZUN0YUlkcyA9IGhpZGVDdGFJZHMuY29uY2F0KGhpZGVDdGFJZHMubWFwKGlkID0+IHJvbGxpbmdIYXNoKGlkLCBDQVJEX0hBU0hfTEVOR1RIKSkpO1xuICAgIGxldCBoaWRlQ3RhVGFncyA9IGdldENvbmZpZygnaGlkZUN0YVRhZ3MnLCAnJylcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcW3xcXF0vZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9gL2csICcnKVxuICAgICAgICAuc3BsaXQoJywnKTtcbiAgICBjb25zdCBsZWZ0UGFuZWxTZWFyY2hQbGFjZWhvbGRlciA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4ubGVmdEZpbHRlclBhbmVsLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCcpO1xuICAgIGNvbnN0IHRvcFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdpMThuLnRvcEZpbHRlclBhbmVsLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCcpO1xuICAgIGNvbnN0IHNlYXJjaFBsYWNlaG9sZGVyVGV4dCA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4uZmlsdGVySW5mby5zZWFyY2hQbGFjZWhvbGRlclRleHQnKTtcbiAgICBjb25zdCBub1Jlc3VsdHNUaXRsZSA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4ubm9SZXN1bHRzVGl0bGUnKTtcbiAgICBjb25zdCBub1Jlc3VsdHNEZXNjcmlwdGlvbiA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4ubm9SZXN1bHRzRGVzY3JpcHRpb24nKTtcbiAgICBjb25zdCBhcGlGYWlsdXJlVGl0bGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnaTE4bi5vbkVycm9yVGl0bGUnKTtcbiAgICBjb25zdCBhcGlGYWlsdXJlRGVzY3JpcHRpb24gPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnaTE4bi5vbkVycm9yRGVzY3JpcHRpb24nKTtcbiAgICBjb25zdCBpc0xhenkgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnbGF6eWxvYWQnKTtcbiAgICBjb25zdCB0cmFja0ltcHJlc3Npb25zID0gZ2V0Q29uZmlnKCdhbmFseXRpY3MnLCAndHJhY2tJbXByZXNzaW9ucycpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZGVudGlmaWVyID0gZ2V0Q29uZmlnKCdhbmFseXRpY3MnLCAnY29sbGVjdGlvbklkZW50aWZpZXInKTtcbiAgICBjb25zdCB0YXJnZXRFbmFibGVkID0gZ2V0Q29uZmlnKCd0YXJnZXQnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IHVzZUxhc3RWaWV3ZWRTZXNzaW9uID0gZ2V0Q29uZmlnKCd0YXJnZXQnLCAnbGFzdFZpZXdlZFNlc3Npb24nKTtcbiAgICBjb25zdCBhdXRob3JlZE1vZGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnbW9kZScpO1xuICAgIGNvbnN0IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2xheW91dC5jb250YWluZXInKTtcbiAgICBjb25zdCBzaG93RW1wdHlGaWx0ZXJzID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdzaG93RW1wdHlGaWx0ZXJzJyk7XG4gICAgY29uc3QgZXZlbnRGaWx0ZXIgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2V2ZW50RmlsdGVyJyk7XG4gICAgY29uc3Qgc2VhcmNoRW5hYmxlZCA9IGdldENvbmZpZygnc2VhcmNoJywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCBzb3J0RW5hYmxlZCA9IGdldENvbmZpZygnc29ydCcsICdlbmFibGVkJyk7XG4gICAgY29uc3QgY2FyZFN0eWxlID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2NhcmRTdHlsZScpO1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2kxOG4udGl0bGUnKTtcbiAgICBjb25zdCBoZWFkZXJzID0gZ2V0Q29uZmlnKCdoZWFkZXJzJywgJycpO1xuXG4gICAgLyoqXG4gICAgICoqKiogQ29uc3RhbnRzICoqKipcbiAgICAgKi9cbiAgICBjb25zdCBERVNLVE9QX1NDUkVFTl9TSVpFID0gd2luZG93LmlubmVyV2lkdGggPj0gREVTS1RPUF9NSU5fV0lEVEg7XG4gICAgY29uc3QgaXNYb3JGaWx0ZXIgPSBmaWx0ZXJMb2dpYy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gRklMVEVSX1RZUEVTLlhPUjtcbiAgICBjb25zdCBpc0Nhcm91c2VsQ29udGFpbmVyID0gYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuQ0FST1VTRUw7XG4gICAgY29uc3QgaXNTdGFuZGFyZENvbnRhaW5lciA9IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyICE9PSBMQVlPVVRfQ09OVEFJTkVSLkNBUk9VU0VMO1xuICAgIGNvbnN0IGlzQ2F0ZWdvcmllc0NvbnRhaW5lciA9IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLkNBVEVHT1JJRVM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdjYXRlZ29yaWVzJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBtYXgtbGVuXG4gICAgY29uc3QgYXV0aG9yZWRDYXRlZ29yaWVzID0gaXNDYXRlZ29yaWVzQ29udGFpbmVyID8gZ2V0QXV0aG9yZWRDYXRlZ29yaWVzKGF1dGhvcmVkRmlsdGVycywgY2F0ZWdvcmllcykgOiBbXTtcblxuICAgIC8qKlxuICAgICAqKioqIEhvb2tzICoqKipcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IHRpbWVkQ29sbGVjdGlvbiAtIHJlc3VsdCBvZiBUaW1lZCBFdmVudCBTb3J0XG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCBBcyBhbiBhbHRlcm5hdGl2ZS9pdGVyYXRpb24gb24gZmlsdGVyZWQgY2FyZHMgZm9yIHRpbWVkXG4gICAgICogY29sbGVjdGlvbnNcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IHNldFRpbWVkQ29sbGVjdGlvblxuICAgICAqIEBkZXNjcmlwdGlvbiAtIFNldHMgdGltZWRDb2xsZWN0aW9uIGFmdGVyIHNldFRpbWVvdXQgdHJpZ2dlcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQXJyYXksIEZ1bmN0aW9uXX0gdGltZWRDb2xsZWN0aW9uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCBbdGltZWRDb2xsZWN0aW9uLCBzZXRUaW1lZENvbGxlY3Rpb25dID0gdXNlU3RhdGUoW10pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtOdW1iZXJ9IHRyYW5zaXRpb24gLSBNUyB0byBuZXh0IHRyYW5zaXRpb25cbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUICBzZXQgYnkgZXZlbnRTb3J0LCBmcm9tIGNhcmRGaWx0ZXJldC5uZXh0VHJhbnNpdGlvbk1zXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBzZXRUcmFuc2l0aW9uXG4gICAgICogQGRlc2NyaXB0aW9uIC0gbmV4dCBUcmFuc2l0aW9uIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyLCBGdW5jdGlvbl19IHRyYW5zaXRpb25cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgIGNvbnN0IFt0cmFuc2l0aW9uLCBzZXRUcmFuc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgY29uc3QgWywgdXBkYXRlU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IG5leHRUcmFuc2l0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gdXBkYXRlU3RhdGUoe30pLCBbXSk7XG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge09iamVjdH0gdXJsU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUIG9iamVjdCB3aXRoIHVybCBxdWVyeSB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gc2V0VXJsU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdXJsIHF1ZXJ5IHZhbHVlIGJ5IGtleVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBjbGVhclVybFN0YXRlXG4gICAgICogQGRlc2NyaXB0aW9uIC0gY2xlYXIgd2hvbGUgdXJsIHF1ZXJ5IHN0YXRlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W09iamVjdCwgRnVuY3Rpb24sIEZ1bmN0aW9uXX0gT3BlbkRyb3Bkb3duXG4gICAgICovXG4gICAgY29uc3QgW3VybFN0YXRlLCBzZXRVcmxTdGF0ZSwgY2xlYXJVcmxTdGF0ZV0gPSB1c2VVUkxTdGF0ZSgpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge051bWJlcn0gT3BlbkRyb3Bkb3duU3RhdGUgLSBJZCBvZiBhIHNlbGVjdGVkIGRyb3Bkb3duXG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCBQYXNzZWQgaW4gQ29udGV4dCBQcm92aWRlciBTbyBBbGwgTmVzdGVkIENvbXBvbmVudHMgY2FuIGJlIGluIHN5bmNcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gT3BlbkRyb3Bkb3duU3RhdGVTZXR0ZXJcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyLCBGdW5jdGlvbl19IE9wZW5Ecm9wZG93blxuICAgICAqL1xuICAgIGNvbnN0IFtvcGVuRHJvcGRvd24sIHNldE9wZW5Ecm9wZG93bl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtBcnJheX0gQm9va21hcmtlZENhcmRJZHNTdGF0ZSDigJQgSW5pdGlhaWx6ZWQgRnJvbSBMb2NhbCBTdG9yYWdlXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEJvb2ttYXJrZWRDYXJkSWRzU2V0dGVyIOKAlCBTZXRzIGludGVybmFsIHN0YXRlIG9mIHNhdmVkIGJvb2ttYXJrc1xuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBCb29rbWFya2VkQ2FyZElkc1xuICAgICAqL1xuICAgIGNvbnN0IFtib29rbWFya2VkQ2FyZElkcywgc2V0Qm9va21hcmtlZENhcmRJZHNdID0gdXNlU3RhdGUocmVhZEJvb2ttYXJrc0Zyb21Mb2NhbFN0b3JhZ2UoKSk7XG4gICAgY29uc3QgW2luY2x1c2lvbklkc10gPSB1c2VTdGF0ZShyZWFkSW5jbHVzaW9uc0Zyb21Mb2NhbFN0b3JhZ2UoKSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7TnVtYmVyfSBDdXJyZW50UGFnZVN0YXRlIOKAlCBJbml0aWFsaXplZCB0byB0aGUgZmlyc3QgcGFnZVxuICAgICAqIEBkZXNjcmlwdGlvbiBTYW1lIHBhZ2Ugc3RhdGUgZm9yICdMb2FkIE1vcmUnIG9yICdQYWdpbmF0b3InXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEN1cnJlbnRQYWdlU3RhdGVTZXR0ZXIg4oCUIFNldHMgcGFnZSBhcyB1c2VyIG5hdmlnYXRlcyB0aHJvdWdoIHBhZ2VzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W051bWJlciwgRnVuY3Rpb25dfSBDdXJyZW50UGFnZVxuICAgICAqL1xuICAgIGNvbnN0IFtjdXJyZW50UGFnZSwgc2V0Q3VycmVudFBhZ2VdID0gdXNlU3RhdGUoK3VybFN0YXRlLnBhZ2UgfHwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IEZpbHRlcnNTdGF0ZSDigJQgQ29udGFpbnMgRmlsdGVycyBGb3IgRmlsdGVyIFBhbmVsXG4gICAgICogQGRlc2NyaXB0aW9uIFNhbWUgRmlsdGVyIHN0YXRlIGZvciBMZWZ0IG9yIFRvcFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBGaWx0ZXJzU3RhdGVTZXR0ZXIg4oCUIFNldHMgQXV0aG9yZWQgRmlsdGVycyBhcyBTdGF0ZVxuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBGaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgW2ZpbHRlcnMsIHNldEZpbHRlcnNdID0gdXNlU3RhdGUoW10pO1xuICAgIC8vIHdpbmRvdy5maWx0ZXJzID0gZmlsdGVycztcbiAgICBjb25zdCBbY3VyckNhdGVnb3JpZXMsIHNldENhdGVnb3JpZXNdID0gdXNlU3RhdGUoW10pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge1N0cmluZ30gU2VhcmNoUXVlcnlTdGF0ZSDigJQgV2lsbCBiZSB1c2VkIHRvIHNlYXJjaCB0aHJvdWdoIGNhcmRzXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTZWFyY2hRdWVyeVN0YXRlU2V0dGVyIOKAlCBTZXRzIHVzZXIgc2VhcmNoIHF1ZXJ5XG4gICAgICpcbiAgICAgKiBAdHlwZSB7W1N0cmluZywgRnVuY3Rpb25dfSBTZWFyY2hRdWVyeVxuICAgICAqL1xuICAgIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtzZWxlY3RlZENhdGVnb3J5LCBzZXRTZWxlY3RlZENhdGVnb3J5XSA9IHVzZVN0YXRlKCcnKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtTdHJpbmd9IFNvcnRPcGVuZWRTdGF0ZSDigJQgVG9nZ2xlcyBTb3J0IFBvcHVwIE9wZW5lZCBPciBDbG9zZWRcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNvcnRPcGVuZWRTdGF0ZVNldHRlciDigJQgU2V0cyBTb3J0IE9wdGlvblxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IFNvcnRPcGVuZWRcbiAgICAgKi9cbiAgICBjb25zdCBbc29ydE9wZW5lZCwgc2V0U29ydE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7U3RyaW5nfSBTb3J0T3B0aW9uU3RhdGUg4oCUIENhbiBiZSBvbmUgb2YgYSByYW5nZSBvZiB0eXBlc1xuICAgICAqIEBkZXNjcmlwdGlvbiAnVGl0bGUgKEEtWiknLCAnVGl0bGUgKFotQSksIERhdGUgKE5ldyB0byBPbGQpLCBEYXRlIChPbGQgdG8gTmV3KSwgRmVhdHVyZWRcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU29ydE9wdGlvblN0YXRlU2V0dGVyIOKAlCBTZXRzIFNvcnQgT3B0aW9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W1N0cmluZywgRnVuY3Rpb25dfSBTb3J0T3B0aW9uXG4gICAgICovXG4gICAgY29uc3QgW3NvcnRPcHRpb24sIHNldFNvcnRPcHRpb25dID0gdXNlU3RhdGUoZGVmYXVsdFNvcnRPcHRpb24pO1xuXG4gICAgaWYgKHNvcnRPcHRpb24uc29ydCA9PT0gU09SVF9UWVBFUy5SQU5ET00pIHtcbiAgICAgICAgdG90YWxDYXJkTGltaXQgPSBzYW1wbGVTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBXaW5kb3dXaWR0aFN0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVXNlZCB0byB0b2dnbGUgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbGF5b3V0c1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBXaW5kb3dXaWR0aFN0YXRlU2V0dGVyIOKAlCBVcGRhdGVzIHdpbmRvdyB3aWR0aFxuICAgICAqXG4gICAgICogQHR5cGUge1tOdW1iZXJdfSBXaW5kb3dXaWR0aFxuICAgICAqL1xuICAgIGNvbnN0IHsgd2lkdGg6IHdpbmRvd1dpZHRoIH0gPSB1c2VXaW5kb3dEaW1lbnNpb25zKCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gU2hvd01vYmlsZUZpbHRlcnNTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gdHJ1ZSBtb2JpbGUgZmlsdGVycyB3aWxsIGFwcGVhciBvbiB0aGUgcGFnZVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTaG93TW9iaWxlRmlsdGVyc1N0YXRlU2V0dGVyXG4gICAgICogQGRlc2NyaXB0aW9uIFRvZ2dsZXMgbW9iaWxlIGZpbHRlciBoZWFkZXIvZm9vdGVyIHRvIHNob3cgb3IgaGlkZVxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IFNob3dNb2JpbGVGaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgW3Nob3dNb2JpbGVGaWx0ZXJzLCBzZXRTaG93TW9iaWxlRmlsdGVyc10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gU2hvd0Jvb2ttYXJrU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3IgVG9wIEZpbHRlciBQYW5lbCwgdGhlcmUgaXMgYSBsaW1pdCB0byBob3cgbWFueSBmaWx0ZXIgZ3JvdXBzIGNhbiBzaG93XG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNob3dCb29rbWFya1N0YXRlU2V0dGVyIOKAlCBTZXRzIGxpbWl0IG9uIGZpbHRlciBxdWFudGl0eVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIG92ZXIgYWxsb3dlZCBGaWx0ZXIgR3JvdXAgUXVhbnRpdHkgLSBBIFwiTW9yZSArXCIgYnV0dG9uIGFwcGVhcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBTaG93Qm9va21hcmtzXG4gICAgICovXG4gICAgY29uc3QgW3Nob3dCb29rbWFya3MsIHNldFNob3dCb29rbWFya3NdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IExpbWl0RmlsdGVyUXVhbnRpdHlTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIEZvciBUb3AgRmlsdGVyIFBhbmVsLCB0aGVyZSBpcyBhIGxpbWl0IHRvIGhvdyBtYW55IGZpbHRlciBncm91cHMgY2FuIHNob3dcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gTGltaXRGaWx0ZXJRdWFudGl0eVN0YXRlU2V0dGVyIOKAlCBTZXRzIGxpbWl0IG9uIGZpbHRlciBxdWFudGl0eVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIG92ZXIgYWxsb3dlZCBGaWx0ZXIgR3JvdXAgUXVhbnRpdHkgLSBBIFwiTW9yZSArXCIgYnV0dG9uIGFwcGVhcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBMaW1pdEZpbHRlclF1YW50aXR5XG4gICAgICovXG4gICAgY29uc3QgW3Nob3dMaW1pdGVkRmlsdGVyc1F0eSwgc2V0U2hvd0xpbWl0ZWRGaWx0ZXJzUXR5XSA9IHVzZVN0YXRlKGZpbHRlclBhbmVsVHlwZSA9PT0gJ3RvcCcpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0FycmF5fSBDYXJkU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24gc2V0cyBjYXJkcyByZXRyaWV2ZWQgZWl0aGVyIHNlcnZlciBzaWRlIHJlbmRlciBvciBBUEkgY2FsbFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDYXJkU3RhdGVTZXR0ZXJcbiAgICAgKiBAZGVzY3JpcHRpb24gRS5nLiBSZW5kZXIgRmVhdHVyZWQgQ2FyZHMgU2VydmVyIHNpZGUsIFdoaWxlIGNvbGxlY3Rpb24gY2FyZHMgZnJvbSBBUEkgY2FsbFxuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBDYXJkc1xuICAgICAqL1xuICAgIGNvbnN0IFtjYXJkcywgc2V0Q2FyZHNdID0gdXNlU3RhdGUoW10pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IExvYWRpbmdTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gdHJ1ZSBhIGxvYWRpbmcgc3Bpbm5lciB3aWxsIGFwcGVhciBvbiB0aGUgcGFnZVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBMb2FkaW5nU3RhdGVTZXR0ZXIg4oCUIFNldHMgbG9hZGVyIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVHJ1ZSB3aGlsZSB3YWl0aW5nIGZvciBBUEkgcmVzcG9uc2UuIEZhbHNlIG9uIGNhcmRzIHJldHJpZXZlZCBvciBhcGkgZmFpbHVyZVxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IExvYWRpbmdcbiAgICAgKi9cbiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBBcGlGYWlsdXJlU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRydWUgYW4gQVBJIGVycm9yIGhhcyBvY2N1cmVkXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEFwaUZhaWx1cmVTdGF0ZVNldHRlciDigJQgU2V0cyBBUEkgZmFpbHVyZSBmbGFnIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVHJ1ZSB3aGVuIHJldHJpZXZlZCBvciBhcGkgZmFpbHVyZS4gRmFsc2Ugb3RoZXJ3aXNlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gQXBpRmFpbHVyZVxuICAgICAqL1xuICAgIGNvbnN0IFtpc0FwaUZhaWx1cmUsIHNldEFwaUZhaWx1cmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyYW5kb21Tb3J0SWQsIHNldFJhbmRvbVNvcnRJZF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaXNGaXJzdExvYWQsIHNldElzRmlyc3RMb2FkXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFt2aXNpYmxlU3RhbXAsIHNldFZpc2libGVTdGFtcF0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtoYXNGZXRjaGVkLCBzZXRIYXNGZXRjaGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBET00gcmVmZXJlbmNlIHRvIGZpcnN0IGZpbHRlciBpdGVtXG4gICAgICogQHJldHVybnMge09iamVjdH0gLSBmaWx0ZXIgaXRlbSBET00gcmVmZXJlbmNlXG4gICAgICovXG4gICAgY29uc3QgZmlsdGVySXRlbVJlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERPTSByZWZlcmVuY2UgdG8gZmlsdGVyIGluZm8gYnV0dG9uXG4gICAgICogQHJldHVybnMge09iamVjdH0gLSBmaWx0ZXIgaW5mbyBET00gcmVmZXJlbmNlXG4gICAgICovXG4gICAgY29uc3QgZmlsdGVySW5mb1JlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgLyoqXG4gICAgICoqKiogSGVscGVyIE1ldGhvZHMgKioqKlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50Q2hpbGQoaWQpIHtcbiAgICAgICAgbGV0IGkgPSBpZC5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZFtpXSAhPT0gJy8nICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaWQuc3Vic3RyaW5nKDAsIGkpLCBpZC5zdWJzdHJpbmcoaSArIDEpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByb2xsaW5nSGFzaChzLCBsKSB7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEJBU0UgPSA1MztcbiAgICAgICAgY29uc3QgTU9EID0gMTAgKiogbCArIDc7XG4gICAgICAgIGxldCBoYXNoID0gMDtcbiAgICAgICAgbGV0IGJhc2VQb3dlciA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFzaCA9IChoYXNoICsgKHMuY2hhckNvZGVBdChpKSAtIDk3ICsgMSkgKiBiYXNlUG93ZXIpICUgTU9EO1xuICAgICAgICAgICAgYmFzZVBvd2VyID0gKGJhc2VQb3dlciAqIEJBU0UpICUgTU9EO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKGhhc2ggKyBNT0QpICUgTU9EKS50b1N0cmluZygzNik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgZmlsdGVycywgaXQgd2lsbCB1bnNlbGVjdCBhbGwgb2YgdGhlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGZpbHRlckdyb3VwcyAtIGEgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZml0bGVyR3JvdXBzIC0gdGhlIHVwZGF0ZWQgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqL1xuICAgIGNvbnN0IGdldEFsbEZpbHRlcnNDbGVhcmVkU3RhdGUgPSBmaWx0ZXJHcm91cHMgPT4gZmlsdGVyR3JvdXBzLm1hcChmaWx0ZXJHcm91cCA9PiAoe1xuICAgICAgICAuLi5maWx0ZXJHcm91cCxcbiAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5maWx0ZXJJdGVtLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB9KSksXG4gICAgfSkpO1xuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgZmlsdGVycywgaXQgd2lsbCB1bnNlbGVjdCB0aGUgb25lIHdpdGggYSBnaXZlbiBpZFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpZCAtIHRoZSBpZCBvZiBhbiBpbmRpdmlkdWFsIGZpbHRlciBpdGVtXG4gICAgICogQHBhcmFtIHtBcnJheX0gZmlsdGVyR3JvdXBzIC0gYSBncm91cCBvZiBmaWx0ZXJzXG4gICAgICogQHJldHVybnMge0FycmF5fSBmaXRsZXJHcm91cHMgLSB0aGUgdXBkYXRlZCBncm91cCBvZiBmaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgZ2V0RmlsdGVySXRlbUNsZWFyZWRTdGF0ZSA9IChpZCwgZmlsdGVyR3JvdXBzKSA9PiBmaWx0ZXJHcm91cHMubWFwKChmaWx0ZXJHcm91cCkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyR3JvdXAuaWQgIT09IGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpbHRlckdyb3VwLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVySXRlbSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIHVuY2hlY2sgYSBmaWx0ZXIgd2l0aCBhIGdpdmVuIGlkXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIC0gdGhlIGlkIG9mIGFuIGluZGl2aWR1YWwgZmlsdGVyIGl0ZW1cbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgY29uc3QgY2xlYXJGaWx0ZXJJdGVtID0gKGlkLCBncm91cCA9ICcnKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJDbGVhcmVkU3RhdGUgPSBnZXRGaWx0ZXJJdGVtQ2xlYXJlZFN0YXRlKGlkLCBwcmV2RmlsdGVycyk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyQ2xlYXJlZFN0YXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIC8vIGFjdHVhbGx5IGNsZWFyIHRoZSB1cmwgc3RhdGVcbiAgICAgICAgdXJsUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoRmlsdGVyID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnY2hfJywgJycpLnJlcGxhY2UoLyAvZywgJy0nKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihmaWx0ZXJHcm91cFByZWZpeCkgIT09IDBcbiAgICAgICAgICAgICAgICAmJiAhaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaEZpbHRlcilcbiAgICAgICAgICAgICAgICB8fCAhZ3JvdXAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8gL2csICctJykuaW5jbHVkZXMoY2hGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgc2V0VXJsU3RhdGUoa2V5LCB2YWx1ZS5yZXBsYWNlKC8lMjAvZywgJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIHVuY2hlY2sgYWxsIGZpbHRlciBpdGVtc1xuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICBjb25zdCBjbGVhckFsbEZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlID0gZ2V0QWxsRmlsdGVyc0NsZWFyZWRTdGF0ZShwcmV2RmlsdGVycyk7XG4gICAgICAgICAgICByZXR1cm4gYWxsRmlsdGVyc0NsZWFyZWRTdGF0ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIHVybFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoZmlsdGVyR3JvdXBQcmVmaXgpICE9PSAwKSBzZXRVcmxTdGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBmaWx0ZXJzLCBhbmQgc2VhcmNoIHRvIGVtcHR5LiBIaWRlcyBib29rbWFyayBmaWx0ZXJcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgY29uc3QgcmVzZXRGaWx0ZXJzU2VhcmNoQW5kQm9va21hcmtzID0gKCkgPT4ge1xuICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIHVybFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoZmlsdGVyR3JvdXBQcmVmaXgpID09PSAtMVxuICAgICAgICAgICAgICAgICYmIGtleS5pbmRleE9mKHNlYXJjaFByZWZpeCkgPT09IC0xKSBzZXRVcmxTdGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNob3dCb29rbWFya3MoZmFsc2UpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKioqKiBFVkVOVCBIQU5ETEVSUyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBPbiBMb2FkIE1vcmUgQnV0dG9uIENsaWNrLCBJbmNyZW1lbnQgUGFnZSBDdW9udGVyIEJ5IDFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBvbkxvYWRNb3JlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKHByZXZTdGF0ZSA9PiBwcmV2U3RhdGUgKyAxKTtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRha2VzIHNvcnQgdXNlciBzZWxlY3RzIGFuZCBzZXRzIGl0IHNvIGNhcmRzIGFyZSBzb3J0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZSAtIFRoZSBvYnNlcnZhYmxlIGV2ZW50LlxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVTb3J0Q2hhbmdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgICBzZXRTb3J0T3B0aW9uKG9wdGlvbik7XG4gICAgICAgIHNldFNvcnRPcGVuZWQoZmFsc2UpO1xuICAgICAgICBzZXRJc0ZpcnN0TG9hZChmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgd2hlbmV2ZXIgdGhlIHNlYXJjaCBib3ggaXMgY2xpY2tlZCBvciBpbnB1dCBmaWVsZFxuICAgICAqIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudCwgQ2hhbmdlRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50LCBDaGFuZ2VFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlID0gKHZhbCkgPT4ge1xuICAgICAgICBzZXRTZWFyY2hRdWVyeSh2YWwpO1xuICAgICAgICBzZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgc2V0VXJsU3RhdGUoc2VhcmNoUHJlZml4LCB2YWwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHdoZW4gYSBncm91cCBvZiBmaWx0ZXJzIGlzIGNsaWNrZWQuIEJlaGF2aW9yIHNob3VsZCBiZVxuICAgICAqIHRvIHRvZ2dsZSBncm91cCBvcGVuIG9yIGNsb3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlIC0gVGhlIG9ic2VydmFibGUgZXZlbnQuXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUZpbHRlckdyb3VwQ2xpY2sgPSAoZmlsdGVySWQpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIGxldCBvcGVuZWQ7XG4gICAgICAgICAgICByZXR1cm4gcHJldkZpbHRlcnMubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbC5pZCA9PT0gZmlsdGVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVkID0gIWVsLm9wZW5lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVkID0gZWwub3BlbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5lbCwgb3BlbmVkIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgZmluZCBhbmQgc2V0IG5lZWRlZCBmaWx0ZXIgdG8gdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVySWQgLSBzZWxlY3RlZCBmaWx0ZXIgZ3JvdXAgaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbUlkIC0gc2VsZWN0ZWQgZmlsdGVyIGl0ZW0gaWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQ2hlY2tlZFxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgdXJsXG4gICAgICovXG4gICAgY29uc3QgY2hhbmdlVXJsU3RhdGUgPSAoZmlsdGVySWQsIGl0ZW1JZCwgaXNDaGVja2VkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3JvdXAsIGl0ZW1zIH0gPSBmaWx0ZXJzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGZpbHRlcklkKTtcbiAgICAgICAgY29uc3QgeyBsYWJlbCB9ID0gaXRlbXMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdIHx8IFtdO1xuICAgICAgICBpZiAodHlwZW9mIHVybFN0YXRlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0NoZWNrZWRcbiAgICAgICAgICAgID8gWy4uLnVybFN0YXRlVmFsdWUsIGxhYmVsXVxuICAgICAgICAgICAgOiB1cmxTdGF0ZVZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IGxhYmVsKTtcblxuICAgICAgICBzZXRVcmxTdGF0ZShmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgd2hhdCBoYXBwZW5zIHdoZW4gYSBzcGVjaWZpYyBmaWx0ZXIgaXRlbSAoY2hlY2tib3gpXG4gICAgICogaXMgY2xpY2tlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDaGVja2JveENsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDaGVja2JveENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVDaGVja0JveENoYW5nZSA9IChmaWx0ZXJJZCwgaXRlbUlkLCBpc0NoZWNrZWQpID0+IHtcbiAgICAgICAgaWYgKGlzWG9yRmlsdGVyICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRGaWx0ZXJzKHByZXZGaWx0ZXJzID0+IHByZXZGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmlkICE9PSBmaWx0ZXJJZCkgcmV0dXJuIGZpbHRlcjtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGZpbHRlci5pdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXRlbS5pZCA9PT0gaXRlbUlkID8gIWl0ZW0uc2VsZWN0ZWQgOiBpdGVtLnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIGNoYW5nZVVybFN0YXRlKGZpbHRlcklkLCBpdGVtSWQsIGlzQ2hlY2tlZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNob3dzL0hpZGVzIE1vYmlsZSBGaWx0ZXIgUGFuZWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlID0gKCkgPT4gc2V0U2hvd01vYmlsZUZpbHRlcnMocHJldiA9PiAhcHJldik7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgY2FyZCdzIGJvb2ttYXJrIGljb24gaXMgY2xpY2tlZCwgc2F2ZSB0aGUgY2FyZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUNhcmRCb29rbWFya2luZyA9IChpZCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgYm9va21hcmtlZCBJRHNcbiAgICAgICAgY29uc3QgY2FyZElzQm9va21hcmtlZCA9IGJvb2ttYXJrZWRDYXJkSWRzLmZpbmQoY2FyZCA9PiBjYXJkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKGNhcmRJc0Jvb2ttYXJrZWQpIHtcbiAgICAgICAgICAgIHNldEJvb2ttYXJrZWRDYXJkSWRzKHByZXYgPT4gcHJldi5maWx0ZXIoZWwgPT4gZWwgIT09IGlkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRCb29rbWFya2VkQ2FyZElkcyhwcmV2ID0+IFsuLi5wcmV2LCBpZF0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgc2hvdyAgb3IgaGlkZSBhbGwgc2F2ZWQgYm9va21hcmtzIHdoZW4gY2xpY2tlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNob3dCb29rbWFya3NGaWx0ZXJDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNldFNob3dCb29rbWFya3MocHJldiA9PiAhcHJldik7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJZiB0b3AgZmlsdGVyIHBhbmVsLCB0b2dnbGUgb3IgaGlkZSBtb3JlIGJ1dHRvblxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNob3dBbGxUb3BGaWx0ZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRTaG93TGltaXRlZEZpbHRlcnNRdHkocHJldiA9PiAhcHJldik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIHdpbmRvdyBjbGljaywgYWxsIGRyb3Bkb3ducyBzaG91bGQgaGlkZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVdpbmRvd0NsaWNrID0gKCkgPT4ge1xuICAgICAgICBzZXRPcGVuRHJvcGRvd24obnVsbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZXNjYXBlIGZvciBtb2JpbGUgZmlsdGVyIGRpYWxvZ1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnICYmIGV2ZW50LmtleSAhPT0gJ0VzYycpIHJldHVybjtcblxuICAgICAgICBzZXRTaG93TW9iaWxlRmlsdGVycyhmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqKioqIEVmZmVjdHMgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBhdXRob3JlZCBmaWx0ZXJzIGFzIHN0YXRlXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycyhhdXRob3JlZEZpbHRlcnMubWFwKGZpbHRlckdyb3VwID0+ICh7XG4gICAgICAgICAgICAuLi5maWx0ZXJHcm91cCxcbiAgICAgICAgICAgIG9wZW5lZDogREVTS1RPUF9TQ1JFRU5fU0laRSA/IGZpbHRlckdyb3VwLm9wZW5lZE9uTG9hZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVySXRlbSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0pKSk7XG4gICAgfSwgW10pO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBmaWx0ZXJzIGZyb20gdXJsIGFzIHN0YXRlXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMob3JpZ2luID0+IG9yaWdpbi5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcjtcbiAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVtmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwXTtcblxuICAgICAgICAgICAgaWYgKCF1cmxTdGF0ZVZhbHVlKSByZXR1cm4gZmlsdGVyO1xuXG4gICAgICAgICAgICBjb25zdCB1cmxTdGF0ZUFycmF5ID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdXJsU3RhdGVBcnJheS5pbmNsdWRlcyhTdHJpbmcoaXRlbS5sYWJlbCkpLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgdXJsU2VhcmNoVmFsdWUgPSB1cmxTdGF0ZVtzZWFyY2hQcmVmaXhdO1xuICAgICAgICBpZiAodXJsU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHNldFNlYXJjaFF1ZXJ5KHVybFNlYXJjaFZhbHVlWzBdKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFJhbmRvbVNvcnRJZChNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTBlMTIpKSk7XG4gICAgfSwgW10pO1xuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBhZnRlciBidXR0b24gbG9hZCBtb3JlIGNsaWNrXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCB1cmwgcGFnZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFVybFN0YXRlKCdwYWdlJywgY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IGN1cnJlbnRQYWdlKTtcbiAgICB9LCBbY3VycmVudFBhZ2VdKTtcblxuICAgIGNvbnN0IHJlbW92ZUVtcHR5RmlsdGVycyA9IChhbGxGaWx0ZXJzLCBjYXJkc0Zyb21Kc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBbXS5jb25jYXQoLi4uY2FyZHNGcm9tSnNvbi5tYXAoY2FyZCA9PiBjYXJkLnRhZ3MubWFwKHRhZyA9PiB0YWcuaWQpKSk7XG5cbiAgICAgICAgY29uc3QgdGltaW5nVGFncyA9IFtcbiAgICAgICAgICAgIEVWRU5UX1RJTUlOR19JRFMuTElWRSxcbiAgICAgICAgICAgIEVWRU5UX1RJTUlOR19JRFMuT05ERU1BTkQsXG4gICAgICAgICAgICBFVkVOVF9USU1JTkdfSURTLlVQQ09NSU5HLFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiBhbGxGaWx0ZXJzLm1hcChmaWx0ZXIgPT4gKHtcbiAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgIGl0ZW1zOiBmaWx0ZXIuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gdGFncy5pbmNsdWRlcyhpdGVtLmlkKVxuICAgICAgICAgICAgfHwgdGFncy5pbmNsdWRlcyhpdGVtLmxhYmVsKVxuICAgICAgICAgICAgfHwgdGFncy50b1N0cmluZygpLmluY2x1ZGVzKGAvJHtpdGVtLmlkfWApIC8vICoqKioqIEZJWCAgSEVSRSAqKioqKlxuICAgICAgICAgICAgfHwgdGltaW5nVGFncy5pbmNsdWRlcyhpdGVtLmlkKSksXG4gICAgICAgIH0pKS5maWx0ZXIoZmlsdGVyID0+IGZpbHRlci5pdGVtcy5sZW5ndGggPiAwKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBoYW5kbGVzIGdldHRpbmcgQ2FyZHMsIHRoZXJlIGFyZSBzb21lIGNvbmRpdGlvbnM6XG4gICAgICogLSBJZiB0YXJnZXQgaXMgbm90IGVuYWJsZWQgYSBzaW1wbGUgcmVxdWVzdCBpcyBtYWRlIHdpdGhvdXQgbW9kcyBvciBkZWxheS5cbiAgICAgKiAtIElmIHRhcmdldCBpcyBlbmFibGVkICYgdFZpc2l0b3IgQVBJIGlzIHByZXNlbnQgYWRkIHZhbHVlcyBmcm9tIFZpc2l0b3JcbiAgICAgKiAtIElmIHRhcmdldCBpcyBlbmFibGVkICYgdGhlIFZpc2l0b3IgQVBJIGlzIG5vdCBwcmVzZW50IHNldFRpbWVvdXQgd2l0aFxuICAgICAqIGNvdW50ZXIgdG8gcmVjaGVjayBmb3IgdGhlIFZpc2l0b3IgQVBJLiBJZiAyMCBhdHRlbXB0cyBhcmUgbWFkZSB3L29cbiAgICAgKiBzdWNjZXNzIGZhaWwgdGhlIHJlcXVlc3QuXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICgoaXNMYXp5ICYmIHZpc2libGVTdGFtcCkgfHwgKGlzTGF6eSAmJiAhaGFzRmV0Y2hlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IF9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZTogdmlzaXRvclByb21pc2UgfSA9IHdpbmRvdztcblxuICAgICAgICBsZXQgY29sbGVjdGlvbkVuZHBvaW50ID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2VuZHBvaW50Jyk7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrRW5kcG9pbnQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnZmFsbGJhY2tFbmRwb2ludCcpO1xuXG4gICAgICAgIGNvbnN0IHIgPSBuZXcgUmVnRXhwKCdeKD86W2Etel0rOik/Ly8nLCAnaScpO1xuICAgICAgICBsZXQgY29sbGVjdGlvbkVuZHBvaW50VVJJO1xuICAgICAgICBpZiAoci50ZXN0KGNvbGxlY3Rpb25FbmRwb2ludCkpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbmRwb2ludFVSSSA9IG5ldyBVUkwoY29sbGVjdGlvbkVuZHBvaW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbmRwb2ludFVSSSA9IG5ldyBVUkwoY29sbGVjdGlvbkVuZHBvaW50LCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmFsbGJhY2tFbmRwb2ludCkge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJLnNlYXJjaFBhcmFtcy5zZXQoJ2ZsYXRGaWxlJywgZmFsc2UpO1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50ID0gY29sbGVjdGlvbkVuZHBvaW50VVJJLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuYyBnZXRDYXJkc1xuICAgICAgICAgKiBAZGVzYyB3cmFwcyBmZXRjaCB3aXRoIGZ1bmN0aW9uIHRvIG1ha2UgaXQgcmV1c2FibGVcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVuZFBvaW50LCBVUkwgd2l0aCBwYXJhbXMgZm9yIGNhcmQgcmVxdWVzdFxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRDYXJkcyhlbmRQb2ludCA9IGNvbGxlY3Rpb25FbmRwb2ludCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5mZXRjaChlbmRQb2ludCwge1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICB9ID0gcmVzcDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwLmpzb24oKS50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gISFPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWREYXRhKSByZXR1cm4ganNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgbm8gdmFsaWQgcmVzcG9uc2UgZGF0YSBmcm9tICR7ZW5kUG9pbnR9YCwgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ25vIHZhbGlkIHJlcG9uc2UgZGF0YScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgZmFpbHVyZSBmb3IgY2FsbCB0byAke3VybH1gLCB0YWdzOiAnY29sbGVjdGlvbicsIGVycm9yTWVzc2FnZTogYCR7c3RhdHVzfTogJHtzdGF0dXNUZXh0fWAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYCR7c3RhdHVzfTogJHtzdGF0dXNUZXh0fSwgZmFpbHVyZSBmb3IgY2FsbCB0byAke3VybH1gKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dMYW5hKHsgbWVzc2FnZTogYHJlc3BvbnNlIHRvb2sgJHsoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDB9c2AsIHRhZ3M6ICdjb2xsZWN0aW9uJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldElzRmlyc3RMb2FkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWdldEJ5UGF0aChwYXlsb2FkLCAnY2FyZHMubGVuZ3RoJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgbm8gY2FyZHMgcmV0dXJuIGJ5IHF1ZXJ5IHRvIHRoaXMgZW5kcG9pbnQ6ICR7ZW5kUG9pbnR9YCwgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmlzSGFzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQUdfSEFTSF9MRU5HVEggPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBhdXRob3JlZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5pZCA9IHJvbGxpbmdIYXNoKGdyb3VwLmlkLCBUQUdfSEFTSF9MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVySXRlbSBvZiBncm91cC5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyZW50LCBjaGlsZF0gPSBnZXRQYXJlbnRDaGlsZChmaWx0ZXJJdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVySXRlbS5pZCA9IGAke3JvbGxpbmdIYXNoKHBhcmVudCwgVEFHX0hBU0hfTEVOR1RIKX0vJHtyb2xsaW5nSGFzaChjaGlsZCwgVEFHX0hBU0hfTEVOR1RIKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIGhpZGVDdGFUYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BhcmVudCwgY2hpbGRdID0gZ2V0UGFyZW50Q2hpbGQodGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9PSAnJyAmJiBjaGlsZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGAke3JvbGxpbmdIYXNoKHBhcmVudCwgVEFHX0hBU0hfTEVOR1RIKX0vJHtyb2xsaW5nSGFzaChjaGlsZCwgVEFHX0hBU0hfTEVOR1RIKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ3RhVGFncyA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb2Nlc3NlZENhcmRzID0gW10gfSA9IG5ldyBKc29uUHJvY2Vzc29yKHBheWxvYWQuY2FyZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlRHVwbGljYXRlQ2FyZHMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENhcmRNZXRhRGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVOQ0FURV9URVhUX1FUWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5U2hvd0Jvb2ttYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFya2VkQ2FyZElkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ3RhSWRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDdGFUYWdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2F0ZWdvcmllc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVycyhwcmV2RmlsdGVycyA9PiBwcmV2RmlsdGVycy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXAsIGl0ZW1zIH0gPSBmaWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXJsU3RhdGVWYWx1ZSkgcmV0dXJuIGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZUFycmF5ID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdXJsU3RhdGVBcnJheS5pbmNsdWRlcyhTdHJpbmcoaXRlbS5sYWJlbCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlcnMoKCkgPT4gYXV0aG9yZWRGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVbZmlsdGVyR3JvdXBQcmVmaXggKyBncm91cF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmxTdGF0ZVZhbHVlKSByZXR1cm4gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlQXJyYXkgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB1cmxTdGF0ZUFycmF5LmluY2x1ZGVzKFN0cmluZyhpdGVtLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbnMgPSBnZXRUcmFuc2l0aW9ucyhwcm9jZXNzZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0T3B0aW9uLnNvcnQudG9Mb3dlckNhc2UoKSA9PT0gJ2V2ZW50c29ydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cmFuc2l0aW9ucy5zaXplKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJhbnNpdGlvbnMuZGVxdWV1ZSgpLnByaW9yaXR5ICsgT05FX1NFQ09ORF9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzZXRDYXJkcyhwcm9jZXNzZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvd0VtcHR5RmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVycyhwcmV2RmlsdGVycyA9PiByZW1vdmVFbXB0eUZpbHRlcnMocHJldkZpbHRlcnMsIHByb2Nlc3NlZENhcmRzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjcm9sbEVsZW1lbnRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZENhcmRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlID09PSAxKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkc1Rvc2hvdyA9IHByb2Nlc3NlZENhcmRzLnNsaWNlKDAsIHJlc3VsdHNQZXJQYWdlICogY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0TGFzdFBhZ2VJRCA9IChyZXN1bHRzUGVyUGFnZSAqIGN1cnJlbnRQYWdlKSAtIHJlc3VsdHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcmRzVG9zaG93Lmxlbmd0aCA8IGdldExhc3RQYWdlSUQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJRCA9IHNjcm9sbEVsZW1lbnRSZWYuY3VycmVudC5jaGlsZHJlbltnZXRMYXN0UGFnZUlEXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJRC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFBvaW50ID09PSBjb2xsZWN0aW9uRW5kcG9pbnQgJiYgZmFsbGJhY2tFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoZmFsbGJhY2tFbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6ICdmYWlsZWQgdG8gcmV0dXJuIHByb2Nlc3NlZCBjYXJkcycsIHRhZ3M6ICdjb2xsZWN0aW9uJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEFwaUZhaWx1cmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jIGdldFZpc2l0b3JEYXRhXG4gICAgICAgICAqIEBkZXNjIHdyYXBzIGZldGNoaW5nIFZpc2l0b3IgQVBJIGRhdGEgaW4gYSBmdW5jdGlvbiBmb3IgcmV1c2UsIGFsc28gaWZcbiAgICAgICAgICogbGFzdCB1c2VkIHNlc3Npb24gaXMgY2hlY2tlZCwgdXBkYXRlIGN1cnJlbnRFbnRpdHlJZCB3aXRoIHRhcmdldFZhbHVlUmV2ZWFsSURcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtQcm9taXNlfSB2aXNpdG9yQXBpLCB3aW5kb3cuX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlIHdoZW4gYWNjZXNzZWRcbiAgICAgICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZSwgdGhydSBjYWxsaW5nIGdldENhcmRzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRWaXNpdG9yRGF0YSh2aXNpdG9yQXBpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uVVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQpO1xuXG4gICAgICAgICAgICBpZiAodXNlTGFzdFZpZXdlZFNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRSZXZlYWxJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0YXJnZXRWYWx1ZVJldmVhbElEJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFJldmVhbElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnY3VycmVudEVudGl0eUlkJywgdGFyZ2V0UmV2ZWFsSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlzaXRvckFwaS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmFsbG95ICYmIHdpbmRvdy5lZGdlQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsbG95KCdnZXRJZGVudGl0eScpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtY2d2aWQnLCByZXMuaWRlbnRpdHkuRUNJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94TUNHTEgnLCByZXMuZWRnZS5yZWdpb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoY29sbGVjdGlvblVSSS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3IgPSByZXN1bHQuZ2V0VmlzaXRvcklkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWNndmlkJywgdmlzaXRvci5nZXRNYXJrZXRpbmdDbG91ZFZpc2l0b3JJRCgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdzZGlkJywgdmlzaXRvci5nZXRTdXBwbGVtZW50YWxEYXRhSUQoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWJveEFBTUInLCB2aXNpdG9yLmdldEF1ZGllbmNlTWFuYWdlckJsb2IoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWJveE1DR0xIJywgdmlzaXRvci5nZXRBdWRpZW5jZU1hbmFnZXJMb2NhdGlvbkhpbnQoKSk7XG4gICAgICAgICAgICAgICAgICAgIGdldENhcmRzKGNvbGxlY3Rpb25VUkkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmMgdmlzaXRvclJldHJ5XG4gICAgICAgICAqIEBkZXNjIFZpc2l0b3IgQVBJIGlzIGxhdGUgbG9hZGluZyBvZnRlbiwgdGhpcyBzZXRzIGEgcmVjdXJzaXZlIGNhbGxcbiAgICAgICAgICogaW4gYSBzZXRUaW1lb3V0IHRvIHJ1biAyMCB0aW1lcywgYW5kIHRoZW4gZmFpbCB0aGUgcmVxdWVzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZSwgdGhydSBjYWxsaW5nIGdldFZpc2l0b3JEYXRhIHdoaWNoXG4gICAgICAgICAqIGNhbGxzIGdldENhcmRzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB2aXNpdG9yUmV0cnkoKSB7XG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVkUmV0cnkgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXBpRmFpbHVyZSh0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBfX3NhdGVsbGl0ZUxvYWRlZFByb21pc2U6IHZpc2l0b3JQcm9taXNlUmV0cnkgfSA9IHdpbmRvdztcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvclByb21pc2VSZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VmlzaXRvckRhdGEodmlzaXRvclByb21pc2VSZXRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3JQcm9taXNlUmV0cnkgJiYgcmV0cnlDb3VudCA8IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lZFJldHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRpbWVkUmV0cnkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRFbmFibGVkICYmIHZpc2l0b3JQcm9taXNlKSB7XG4gICAgICAgICAgICBnZXRWaXNpdG9yRGF0YSh2aXNpdG9yUHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0RW5hYmxlZCAmJiAhdmlzaXRvclByb21pc2UpIHtcbiAgICAgICAgICAgIHZpc2l0b3JSZXRyeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YXJnZXRFbmFibGVkKSB7XG4gICAgICAgICAgICBnZXRDYXJkcygpO1xuICAgICAgICB9XG4gICAgfSwgW3Zpc2libGVTdGFtcCwgaGFzRmV0Y2hlZF0pO1xuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgY2FyZHMgdG8gbG9jYWwgc3RvcmFnZSBhbmQgdXBkYXRlcyBjYXJkIHcvIGJvb2ttYXJrZWQgZGF0YVxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzYXZlQm9va21hcmtzVG9Mb2NhbFN0b3JhZ2UoYm9va21hcmtlZENhcmRJZHMpO1xuICAgICAgICBzZXRDYXJkcyhnZXRVcGRhdGVkQ2FyZEJvb2ttYXJrRGF0YShjYXJkcywgYm9va21hcmtlZENhcmRJZHMpKTtcbiAgICB9LCBbYm9va21hcmtlZENhcmRJZHNdKTtcblxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBjbGVhcmluZyBzdGF0ZSBvbiBzaG93Qm9va21hcmtzXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzaG93Qm9va21hcmtzKSB7XG4gICAgICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFF1ZXJ5KCcnKTtcbiAgICAgICAgfVxuICAgIH0sIFtzaG93Qm9va21hcmtzXSk7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGZvY3VzIGFuZCBlc2NhcGUgb24gbW9iaWxlIGZpbHRlciB0b2dnbGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH1cbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2hvd01vYmlsZUZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJJdGVtUmVmICYmIGZpbHRlckl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckl0ZW1SZWYuY3VycmVudC5mb2N1c01vYlRpdGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJJbmZvUmVmICYmIGZpbHRlckluZm9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckluZm9SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSk7XG4gICAgICAgIH07XG4gICAgfSwgW3Nob3dNb2JpbGVGaWx0ZXJzXSk7XG5cbiAgICBjb25zdCBib3ggPSB1c2VSZWYoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChib3ggJiYgIXZpc2libGVTdGFtcCAmJiBpc0xhenkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW8gPD0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldEhhc0ZldGNoZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZVN0YW1wKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW8ub2JzZXJ2ZShib3guY3VycmVudCk7XG4gICAgICAgIH1cbiAgICB9LCBbYm94XSk7XG5cbiAgICAvKipcbiAgICAgKioqKiBEZXJpdmVkIFN0YXRlICoqKipcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGZpbHRlcnMgY2hvc2VuIGJ5IHRoZSB1c2VyXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcklkcyA9IGdldEFjdGl2ZUZpbHRlcklkcyhmaWx0ZXJzKTtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGZpbHRlcnMgcGFuZWxzIChncm91cGluZ3MpIGNyZWF0ZWQgYnkgdGhlIGF1dGhvclxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBjb25zdCBhY3RpdmVQYW5lbHMgPSBnZXRBY3RpdmVQYW5lbHMoYWN0aXZlRmlsdGVySWRzKSB8fCBuZXcgU2V0KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBDYXJkRmlsdGVyZXIgY2xhc3MgdGhhdCBoYW5kbGVzIHJldHVybmluZyBzdWJzZXQgb2YgY2FyZHNcbiAgICAgKiBiYXNlZCBvZmYgdXNlciBpbnRlcmFjdGlvbnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgY29uc3QgY2FyZEZpbHRlcmVyID0gbmV3IENhcmRGaWx0ZXJlcihcbiAgICAgICAgY2FyZHMsXG4gICAgICAgIHJhbmRvbVNvcnRJZCxcbiAgICAgICAgc2FtcGxlU2l6ZSxcbiAgICAgICAgcmVzZXJ2b2lyU2l6ZSxcbiAgICAgICAgZmVhdHVyZWRDYXJkcyxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufSBnZXRGaWx0ZXJlZENvbGxlY3Rpb25cbiAgICAgKiBAZGVzYyBDbG9zdXJlIGFyb3VuZCBDYXJkRmlsdGVyZXIgZm9yIHJldXNlIHdpdGhpbiBjb250ZXh0XG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKiAqL1xuICAgIGNvbnN0IGdldEZpbHRlcmVkQ29sbGVjdGlvbiA9ICgpID0+IGNhcmRGaWx0ZXJlclxuICAgICAgICAuc29ydENhcmRzKHNvcnRPcHRpb24sIGV2ZW50RmlsdGVyLCBmZWF0dXJlZENhcmRzLCBoaWRlQ3RhSWRzLCBpc0ZpcnN0TG9hZClcbiAgICAgICAgLmtlZXBCb29rbWFya2VkQ2FyZHNPbmx5KG9ubHlTaG93Qm9va21hcmtzLCBib29rbWFya2VkQ2FyZElkcywgc2hvd0Jvb2ttYXJrcylcbiAgICAgICAgLmtlZXBDYXJkc1dpdGhpbkRhdGVSYW5nZSgpXG4gICAgICAgIC5maWx0ZXJDYXJkcyhhY3RpdmVGaWx0ZXJJZHMsIGFjdGl2ZVBhbmVscywgZmlsdGVyTG9naWMsIEZJTFRFUl9UWVBFUywgY3VyckNhdGVnb3JpZXMpXG4gICAgICAgIC50cnVuY2F0ZUxpc3QodG90YWxDYXJkTGltaXQpXG4gICAgICAgIC5zZWFyY2hDYXJkcyhzZWFyY2hRdWVyeSwgc2VhcmNoRmllbGRzLCBjYXJkU3R5bGUpXG4gICAgICAgIC5yZW1vdmVDYXJkcyhpbmNsdXNpb25JZHMpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0FycmF5fSBmaWx0ZXJlZENhcmRzOiBGaWx0ZXJlZCBjYXJkcyBiYXNlZCBvZmYgY3VycmVudCBzdGF0ZSBvZiBwYWdlXG4gICAgICogQHR5cGUge051bWJlcn0gbmV4dFRyYW5zaXRpb25NczogTnVtYmVyIGZvciB0aW1lZCBldmVudCBzb3J0IHRyYW5zaXRpb25cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgIGNvbnN0IHsgZmlsdGVyZWRDYXJkcyA9IFtdLCBuZXh0VHJhbnNpdGlvbk1zID0gMCB9ID0gZ2V0RmlsdGVyZWRDb2xsZWN0aW9uKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJzZXQgb2YgY2FyZHMgdG8gc2hvdyB0aGUgdXNlclxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBjb25zdCBncmlkQ2FyZHMgPSB0aW1lZENvbGxlY3Rpb24ubGVuZ3RoID8gdGltZWRDb2xsZWN0aW9uIDogZmlsdGVyZWRDYXJkcztcblxuICAgIC8qKlxuICAgICAqIFRvdGFsIHBhZ2VzICh1c2VkIGJ5IFBhZ2luYXRvciBDb21wb25lbnQpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gZ2V0VG90YWxQYWdlcyhyZXN1bHRzUGVyUGFnZSwgZ3JpZENhcmRzLmxlbmd0aCk7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgY2FyZHMgdG8gc2hvdyAodXNlZCBieSBMb2FkIE1vcmUgY29tcG9uZW50KVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgY29uc3QgbnVtQ2FyZHNUb1Nob3cgPSBnZXROdW1DYXJkc1RvU2hvdyhyZXN1bHRzUGVyUGFnZSwgY3VycmVudFBhZ2UsIGdyaWRDYXJkcy5sZW5ndGgpO1xuXG4gICAgLyoqXG4gICAgICogSG93IG1hbnkgZmlsdGVycyB3ZXJlIHNlbGVjdGVkIC0gKHVzZWQgYnkgTGVmdCBGaWx0ZXIgUGFuZWwpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSA9IGdldE51bVNlbGVjdGVkRmlsdGVySXRlbXMoZmlsdGVycyk7XG5cbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIERpc3BsYXkgQSBGb3JtIE9mIFBhZ2luYXRpb25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5UGFnaW5hdGlvbiA9IHNob3VsZERpc3BsYXlQYWdpbmF0b3IoXG4gICAgICAgIHBhZ2luYXRpb25Jc0VuYWJsZWQsXG4gICAgICAgIHRvdGFsQ2FyZExpbWl0LFxuICAgICAgICBncmlkQ2FyZHMubGVuZ3RoLFxuICAgICk7XG4gICAgLyoqXG4gICAgICogQ29uZGl0aW9ucyB0byBkaXNwbGF5IHRoZSBMb2FkIE1vcmUgQnV0dG9uXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheUxvYWRNb3JlID0gZGlzcGxheVBhZ2luYXRpb24gJiYgcGFnaW5hdGlvblR5cGUgPT09ICdsb2FkTW9yZSc7XG5cbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIGRpc3BsYXkgdGhlIFBhZ2luYXRvciBDb21wb25lbnRcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5UGFnaW5hdG9yID0gZGlzcGxheVBhZ2luYXRpb24gJiYgcGFnaW5hdGlvblR5cGUgPT09ICdwYWdpbmF0b3InO1xuXG4gICAgLyoqXG4gICAgICogQ29uZGl0aW9ucyB0byBkaXNwbGF5IHRoZSBMZWZ0IEZpbHRlciBQYW5lbCBDb21wb25lbnRcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5TGVmdEZpbHRlclBhbmVsID0gZmlsdGVyUGFuZWxFbmFibGVkICYmIGZpbHRlclBhbmVsVHlwZSA9PT0gRklMVEVSX1BBTkVMLkxFRlQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGF0IGxlYXNlIG9uZSBjYXJkIHdhcyByZXR1cm5lZCBieSBDYXJkIEZpbHRlcmVyXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgYXRMZWFzdE9uZUNhcmQgPSBncmlkQ2FyZHMubGVuZ3RoID4gMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBTb3J0IFBvcHVwIChlaXRoZXIgbGVmdCBvciByaWdodClcbiAgICAgKiBAdHlwZSB7U3RyaW5nfSAtIExvY2F0aW9uIG9mIFNvcnQgUG9wdXAgaW4gVG9wIEZpbHRlciBQYW5lbCBWaWV3XG4gICAgICovXG4gICAgY29uc3QgdG9wUGFuZWxTb3J0UG9wdXBMb2NhdGlvbiA9IGZpbHRlcnMubGVuZ3RoID4gMCAmJiB3aW5kb3dXaWR0aCA8IFRBQkxFVF9NSU5fV0lEVEggP1xuICAgICAgICBTT1JUX1BPUFVQX0xPQ0FUSU9OLkxFRlQgOiBTT1JUX1BPUFVQX0xPQ0FUSU9OLlJJR0hUO1xuXG4gICAgLyoqXG4gICAgICogSG93IExvbmcgUGFnaW5hdG9yIENvbXBvbmVudCBTaG91bGQgQmVcbiAgICAgKiBAdHlwZSB7TnVtYmVyfSAtIExvY2F0aW9uIG9mIFNvcnQgUG9wdXAgaW4gVG9wIEZpbHRlciBQYW5lbCBWaWV3XG4gICAgICovXG4gICAgY29uc3QgcGFnaW5hdG9yQ291bnQgPSBERVNLVE9QX1NDUkVFTl9TSVpFID8gUEFHSU5BVElPTl9DT1VOVC5ERVNLVE9QIDogUEFHSU5BVElPTl9DT1VOVC5NT0JJTEU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgdG9wIGZpbHRlciBwYW5lbCBvciBub3RcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBpc1RvcEZpbHRlclBhbmVsID0gZmlsdGVyUGFuZWxUeXBlID09PSBGSUxURVJfUEFORUwuVE9QO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIHRvcCBmaWx0ZXIgcGFuZWwgb3Igbm90XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgaXNMZWZ0RmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbFR5cGUgPT09IEZJTFRFUl9QQU5FTC5MRUZUO1xuXG4gICAgLyoqXG4gICAgICogVWkgb3B0aW9ucyB0aGF0IGNhdXNlIGdyaWQgdG8gcmVyZW5kZXIgbmVjZXNzaXRhdGUgdGhlIGFyaWEgYXR0cmlidXRlIGJlaW5nIHNldFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGlzR3JpZEFyZWFMaXZlID1cbiAgICAgICAgZmlsdGVyUGFuZWxFbmFibGVkIHx8XG4gICAgICAgIHNlYXJjaEVuYWJsZWQgfHxcbiAgICAgICAgc29ydEVuYWJsZWQgfHxcbiAgICAgICAgcGFnaW5hdGlvbklzRW5hYmxlZDtcblxuICAgIGxldCBmaWx0ZXJOYW1lcyA9ICcnO1xuICAgIGZpbHRlcnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgZWwuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgZmlsdGVyTmFtZXMgKz0gYCR7aXRlbS5sYWJlbH0sIGA7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoqKiogQ2xhc3MgbmFtZXMgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBmb3IgdGhlIGF1dGhvcmVkIHRoZW1lOlxuICAgICAqIGxpZ2h0LCBkYXJrLCBkYXJrZXN0O1xuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgY29uc3QgdGhlbWVDbGFzcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVMaWdodCc6IGF1dGhvcmVkTW9kZSA9PT0gVEhFTUVfVFlQRS5MSUdIVCxcbiAgICAgICAgJ2NvbnNvbmFudC11LXRoZW1lRGFyayc6IGF1dGhvcmVkTW9kZSA9PT0gVEhFTUVfVFlQRS5EQVJLLFxuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVEYXJrZXN0JzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkRBUktFU1QsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyp9IGZpbHRlckxpc3RcbiAgICAgKiBAcGFyYW0geyp9IGNhdGVnb3J5TGlzdFxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgY2F0ZWdvcmllcyBmb3IgdGhlIHRvcCBwaWxsc1xuICAgICAqICAgICAgICAgIFByZXBlbmRzIHRoZSBcIkFsbCBUb3BpY3NcIiBwaWxsIHRvIHRoZSBsaXN0IG9mIGNhdGVnb3JpZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBdXRob3JlZENhdGVnb3JpZXMoZmlsdGVyTGlzdCwgY2F0ZWdvcnlMaXN0KSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZmlsdGVyTGlzdFxuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLmlkLmluY2x1ZGVzKCdjYWFzOnByb2R1Y3QtY2F0ZWdvcmllcycpKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuXG4gICAgICAgIC8vIFNvcnRzIGNhdGVnb3J5IGxpc3QgYmFzZWQgb24gYXV0aG9yZWQgb3JkZXJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yaWVzID0gY2F0ZWdvcnlJZHNcbiAgICAgICAgICAgIC5tYXAoaWQgPT4gY2F0ZWdvcnlMaXN0ICYmIGNhdGVnb3J5TGlzdC5maWx0ZXIoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuaWQgPT09IGlkKVswXSk7XG5cbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBncm91cDogJ0FsbCBUb3BpY3MnLFxuICAgICAgICAgICAgdGl0bGU6ICdBbGwgVG9waWNzJyxcbiAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgfSwgLi4uc2VsZWN0ZWRDYXRlZ29yaWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIGFsbCBwcm9kdWN0cyBmcm9tIGFsbCBjYXRlZ29yaWVzIGZvciB0aGUgJ0FsbCBwcm9kdWN0cycgbWVudVxuICAgICAqICAgICAgICAgIFByZXBlbmRzIHRoZSBcIkFsbCBwcm9kdWN0c1wiIGxhYmVsIHRvIHRoZSBsaXN0IG9mIGNhdGVnb3JpZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxDYXRlZ29yeVByb2R1Y3RzKCkge1xuICAgICAgICBpZiAoIWF1dGhvcmVkQ2F0ZWdvcmllcykgcmV0dXJuIFtdO1xuICAgICAgICBsZXQgYWxsQ2F0ZWdvcmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGF1dGhvcmVkQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgaWYgKGNhdGVnb3J5ICYmIGNhdGVnb3J5Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNhdGVnb3J5Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZnJvbUNhdGVnb3J5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWxsQ2F0ZWdvcmllcyA9IGFsbENhdGVnb3JpZXMuY29uY2F0KGNhdGVnb3J5Lml0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm91cDogJ0FsbCBwcm9kdWN0cycsXG4gICAgICAgICAgICBpZDogJ2NhYXM6YWxsLXByb2R1Y3RzJyxcbiAgICAgICAgICAgIGl0ZW1zOiBhbGxDYXRlZ29yaWVzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gc2VsZWN0ZWRDYXRlZ29yaWVzXG4gICAgICogQHBhcmFtIHsqfSBncm91cElkXG4gICAgICogU2V0cyB0aGUgY2F0ZWdvcmllcyBhbmQgZmlsdGVycyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY2F0ZWdvcnlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXRlZ29yeUhhbmRsZXIoc2VsZWN0ZWRDYXRlZ29yaWVzLCBncm91cElkKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBzZWxlY3RlZENhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2F0ZWdvcmllcyh0ZW1wKTtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIHByZXZGaWx0ZXJzLnBvcCgpO1xuICAgICAgICAgICAgY29uc3QgbmV3R3JvdXAgPSBhdXRob3JlZENhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+IGNhdGVnb3J5LmlkID09PSBncm91cElkKVswXTtcbiAgICAgICAgICAgIGlmICghbmV3R3JvdXAuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZpbHRlcnMgPSBwcmV2RmlsdGVycy5jb25jYXQoZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEZpbHRlcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2RmlsdGVycy5wdXNoKG5ld0dyb3VwKTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2RmlsdGVycztcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNlbGVjdGVkQ2F0ZWdvcnkoZ3JvdXBJZCk7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gY2F0ZWdvcnlcbiAgICAgKiBAcmV0dXJucyBUaGUgQXV0aG9yZWQgaWNvbiBmb3IgdGhlIGNhdGVnb3J5IGlmIGV4aXN0cyxcbiAgICAgKiAgICAgICAgICBvdGhlcndpc2UgcmV0dXJucyB0aGUgZGVmYXVsdCBpY29uIGZyb20gdGhlIHRhZ3Mgb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlJY29uKGNhdGVnb3J5KSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcmVkSWNvbiA9IGF1dGhvcmVkRmlsdGVyc1xuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLmlkID09PSBjYXRlZ29yeS5pZClcbiAgICAgICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci5pY29uKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhdXRob3JlZEljb24gfHwgY2F0ZWdvcnkuaWNvbiB8fCAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uU3RyID0gY29sbGVjdGlvbklkZW50aWZpZXIgPyBgJHtjb2xsZWN0aW9uSWRlbnRpZmllcn0gfCBgIDogJyc7XG4gICAgY29uc3QgZmlsdGVyU3RyID0gc2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHkgPyBmaWx0ZXJOYW1lcyA6ICdObyBGaWx0ZXJzJztcbiAgICBjb25zdCBzZWFyY2hRdWVyeVN0ciA9IHNlYXJjaFF1ZXJ5IHx8ICdOb25lJztcbiAgICBjb25zdCBjb2xsZWN0aW9uQW5hbHl0aWNzID0gYCR7Y29sbGVjdGlvblN0cn1DYXJkIENvbGxlY3Rpb24gfCBGaWx0ZXJzOiAke2ZpbHRlclN0cn18IFNlYXJjaCBRdWVyeTogJHtzZWFyY2hRdWVyeVN0cn1gO1xuICAgIC8qKlxuICAgICAqIENsYXNzIG5hbWUgZm9yIHRoZSBjb25zb25hbnQgd3JhcHBlcjpcbiAgICAgKiB3aGV0aGVyIGNvbnNvbmFudCB3cmFwcGVyIGNvbnRhaW5zIGxlZnQgZmlsdGVyO1xuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlckNsYXNzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlcic6IHRydWUsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMzJNYXJnaW5Db250YWluZXInOiBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5TSVpFXzEwMF9WV18zMl9NQVJHSU4sXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tODNQZXJjZW50Q29udGFpbmllcic6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfODNfVlcsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMTIwME1heFdpZHRoJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV8xMjAwX1BYLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLTE2MDBNYXhXaWR0aCc6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfMTYwMF9QWCxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0xMjAwTWF4V2lkdGggQ2F0ZWdvcmllcyc6IGlzQ2F0ZWdvcmllc0NvbnRhaW5lcixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS1jYXJvdXNlbCc6IGlzQ2Fyb3VzZWxDb250YWluZXIsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0td2l0aExlZnRGaWx0ZXInOiBmaWx0ZXJQYW5lbEVuYWJsZWQgJiYgaXNMZWZ0RmlsdGVyUGFuZWwsXG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNDYXRlZ29yaWVzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGaWx0ZXJzID0gcHJldkZpbHRlcnMuY29uY2F0KGdldEFsbENhdGVnb3J5UHJvZHVjdHMoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRGaWx0ZXJzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29uZmlnQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29uZmlnfT5cbiAgICAgICAgICAgIDxFeHBhbmRhYmxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyB2YWx1ZTogb3BlbkRyb3Bkb3duLCBzZXRWYWx1ZTogc2V0T3BlbkRyb3Bkb3duIH19ID5cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW4gKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9ucyxqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovfVxuICAgICAgICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHJlZj17Ym94fVxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZGFhLWxoPXtjb2xsZWN0aW9uQW5hbHl0aWNzfVxuICAgICAgICAgICAgICAgICAgICBkYWEtaW09e1N0cmluZyh0cmFja0ltcHJlc3Npb25zKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlV2luZG93Q2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7d3JhcHBlckNsYXNzfSAke3RoZW1lQ2xhc3N9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uc29uYW50LVdyYXBwZXItaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaXNDYXRlZ29yaWVzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGRhdGEtdGVzdGlkPVwiY29uc29uYW50LVRvcEZpbHRlcnMtY2F0ZWdvcmllc1RpdGxlXCIgY2xhc3NOYW1lPVwiY29uc29uYW50LVRvcEZpbHRlcnMtY2F0ZWdvcmllc1RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVycy1jYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JlZENhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5pZCA9PT0gc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9ICdzZWxlY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeUhhbmRsZXIoY2F0ZWdvcnkuaXRlbXMsIGNhdGVnb3J5LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3JvdXA9e2NhdGVnb3J5Lmdyb3VwLnJlcGxhY2VBbGwoJyAnLCAnJykudG9Mb3dlckNhc2UoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cImZpbHRlcnMtY2F0ZWdvcnktLWljb25cIiBzcmM9e2dldENhdGVnb3J5SWNvbihjYXRlZ29yeSl9IGFsdD17Y2F0ZWdvcnkuaWNvbiAmJiAnQ2F0ZWdvcnkgaWNvbid9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkudGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgeyBkaXNwbGF5TGVmdEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uc29uYW50LVdyYXBwZXItbGVmdEZpbHRlcldyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGVmdEZpbHRlclBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyc1F0eT17c2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1dpZHRoPXt3aW5kb3dXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXJDbGljaz17aGFuZGxlRmlsdGVyR3JvdXBDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckFsbEZpbHRlcnM9e3Jlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckZpbHRlckl0ZW1zPXtjbGVhckZpbHRlckl0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tib3hDbGljaz17aGFuZGxlQ2hlY2tCb3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW9iaWxlRmlsdGVyc1RvZ2dsZUNsaWNrPXtoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdGVkRmlsdGVyQ2xpY2s9e2hhbmRsZUNoZWNrQm94Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TW9iaWxlRmlsdGVycz17c2hvd01vYmlsZUZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9va21hcmtDb21wb25lbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJvb2ttYXJrc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCb29rbWFya3M9e3Nob3dCb29rbWFya3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2hvd0Jvb2ttYXJrc0ZpbHRlckNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkQ2FyZHNDb3VudD17Ym9va21hcmtlZENhcmRJZHMubGVuZ3RofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXtsZWZ0UGFuZWxTZWFyY2hQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZmlsdGVyc1NpZGVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2hJbnB1dENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbHRlckl0ZW1SZWZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgY29uc29uYW50LVdyYXBwZXItY29sbGVjdGlvbiR7aXNMb2FkaW5nID8gJyBpcy1sb2FkaW5nJyA6ICcnfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaXNUb3BGaWx0ZXJQYW5lbCAmJiBpc1N0YW5kYXJkQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbHRlcnNQYW5lbFRvcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYW5lbEVuYWJsZWQ9e2ZpbHRlclBhbmVsRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93V2lkdGg9e3dpbmRvd1dpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNRdHk9e2dyaWRDYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tib3hDbGljaz17aGFuZGxlQ2hlY2tCb3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyQ2xpY2s9e2hhbmRsZUZpbHRlckdyb3VwQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXJJdGVtcz17Y2xlYXJGaWx0ZXJJdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzPXtjdXJyQ2F0ZWdvcmllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckFsbEZpbHRlcnM9e3Jlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xpbWl0ZWRGaWx0ZXJzUXR5PXtzaG93TGltaXRlZEZpbHRlcnNRdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXt0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzVG9wU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPXtERVNLVE9QX1NDUkVFTl9TSVpFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2hJbnB1dENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Q29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZD17c29ydE9wZW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbD17c29ydE9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3NvcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTb3J0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzVG9wU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zQWxpZ25tZW50PXt0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2hvd0FsbENsaWNrPXtoYW5kbGVTaG93QWxsVG9wRmlsdGVyc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0xlZnRGaWx0ZXJQYW5lbCAmJiBpc1N0YW5kYXJkQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExlZnRJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ9e2ZpbHRlclBhbmVsRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1F0eT17ZmlsdGVycy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzUXR5PXtncmlkQ2FyZHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlcnNRdHk9e3NlbGVjdGVkRmlsdGVyc0l0ZW1zUXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dXaWR0aD17d2luZG93V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW9iaWxlRmlsdGVyc1RvZ2dsZUNsaWNrPXtoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb21wb25lbnQ9eyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e3NlYXJjaFBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VhcmNoRmlsdGVyc0luZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2hJbnB1dENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydENvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQ9e3NvcnRPcGVuZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw9e3NvcnRPcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXtzb3J0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU29ydENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvV2lkdGg9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNBbGlnbm1lbnQ9XCJyaWdodFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9wdGlvbnM9e3NvcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbHRlckluZm9SZWZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXRMZWFzdE9uZUNhcmQgJiYgaXNTdGFuZGFyZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNQZXJQYWdlPXtyZXN1bHRzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzPXtjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzPXtncmlkQ2FyZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkZWRSZWY9e3Njcm9sbEVsZW1lbnRSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhcmRCb29rbWFyaz17aGFuZGxlQ2FyZEJvb2ttYXJraW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcmlhTGl2ZUFjdGl2ZT17aXNHcmlkQXJlYUxpdmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5TG9hZE1vcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYWRNb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkxvYWRNb3JlQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93PXtudW1DYXJkc1RvU2hvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsPXtncmlkQ2FyZHMubGVuZ3RofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5UGFnaW5hdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQYWdpbmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnaW5hdG9yQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZU51bWJlcj17Y3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzPXt0b3RhbFBhZ2VzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0l0ZW1zUGVyUGFnZT17cmVzdWx0c1BlclBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFJlc3VsdHM9e2dyaWRDYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtzZXRDdXJyZW50UGFnZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXRMZWFzdE9uZUNhcmQgJiYgaXNDYXJvdXNlbENvbnRhaW5lciAmJiAhKGNhcmRTdHlsZSA9PT0gJ2N1c3RvbS1jYXJkJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZHNDYXJvdXNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNRdHk9e2dyaWRDYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzPXtncmlkQ2FyZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJsaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYXJkQm9va21hcms9e2hhbmRsZUNhcmRCb29rbWFya2luZ30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc0Nhcm91c2VsQ29udGFpbmVyICYmIChjYXJkU3R5bGUgPT09ICdjdXN0b20tY2FyZCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5vUmVzdWx0c1ZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOb3QgU3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJVc2luZyBjdXN0b20gY2FyZHMgd2l0aGluIGEgY2Fyb3VzZWwgbGF5b3V0IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiBQbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXV0aG9yIHRoZSBjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzTG9hZGluZyAmJiAhYXRMZWFzdE9uZUNhcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9e0xPQURFUl9TSVpFLkJJR31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPXshdG90YWxDYXJkTGltaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIWlzQXBpRmFpbHVyZSAmJiAhYXRMZWFzdE9uZUNhcmQgJiYgIWlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtub1Jlc3VsdHNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e25vUmVzdWx0c0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9e3NlYXJjaFF1ZXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzQXBpRmFpbHVyZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXthcGlGYWlsdXJlVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXthcGlGYWlsdXJlRGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWYWx1ZT1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvRXhwYW5kYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQ29uZmlnQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufTtcblxuQ29udGFpbmVyLnByb3BUeXBlcyA9IHtcbiAgICBjb25maWc6IHNoYXBlKGNvbmZpZ1R5cGUpLFxufTtcblxuQ29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBjb25maWc6IHt9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVhY3Qvc3JjL2pzL2NvbXBvbmVudHMvQ29uc29uYW50L0NvbnRhaW5lci9Db250YWluZXIuanN4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///108\n");
/***/ }),
/* 109 */