@touchtech/baselayer-ui 5.4.0-alpha.0 → 5.4.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ConfirmationModal/ConfirmationModal.d.ts +1 -1
- package/dist/components/Dropdown/Clickable.d.ts +3 -3
- package/dist/components/Dropdown/Dropdown.d.ts +0 -1
- package/dist/components/Numpad/Numpad.d.ts +7 -0
- package/dist/components/Numpad/Numpad.stories.d.ts +5 -0
- package/dist/components/Numpad/Numpad.test.d.ts +1 -0
- package/dist/components/Numpad/index.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -25
- package/dist/styles.css +85 -33
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=11)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(20);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(35);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(12);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(14);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(16);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(25);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(30);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(37);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(39);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(41);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(43);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0,a(n(4),t),a(n(5),t),a(n(6),t),a(n(18),t),a(n(23),t),a(n(7),t),a(n(28),t);var o=n(33);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return o.Dropdown}}),a(n(47),t),a(n(50),t),a(n(3),t),a(n(53),t),a(n(56),t),a(n(59),t),a(n(62),t),a(n(9),t),a(n(8),t),a(n(67),t),a(n(2),t),a(n(70),t),a(n(73),t),a(n(78),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(13));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,n])},t)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(15));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.containerRef,d=e.disabled,c=void 0!==d&&d,f=e.inverted,s=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noPadding,b=void 0!==y&&y,g=e.noBorder,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.autoFocus,C=void 0!==k&&k,x=e.offsetSides,S=void 0===x?[]:x,N=e.align,D=void 0===N?"center":N,A=e.size,B=void 0===A?"medium":A,I=e.type;return a.default.createElement("button",{ref:l,className:(0,o.default)([i.default.container,i.default[B],i.default[D],(t={},t[i.default.inverted]=s,t[i.default.rounded]=p,t[i.default.noShadow]=h,t[i.default.noPadding]=b,t[i.default.noBorder]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t[i.default.leftOffset]=p&&S.includes("left"),t[i.default.rightOffset]=p&&S.includes("right"),t),r]),disabled:c,autoFocus:C,onClick:u,type:I,role:"button"},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(17));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,f=e.containerRef,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,x=void 0!==C&&C,S=e.offsetSides,N=void 0===S?[]:S,D=e.align,A=void 0===D?"center":D,B=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:f,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[A],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=P,t[l.default.disabled]=x,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&N.includes("left"),t[l.default.rightOffset]=m&&N.includes("right"),t),d])},B),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(19);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(2),c=i(n(22));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,f=e.className,s=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=s)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,f,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(21));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(24);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(27));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,f=e.canToggle,s=void 0!==f&&f;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){s&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(26));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.onClick,l=e.isSelected,d=void 0!==l&&l;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,(t={},t[i.default.selected]=d,t)]),"data-testid":"color-swatch",onClick:u,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(29);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(8),u=r(n(32));function l(e){var t,n=e.children,r=e.containerRef,l=e.header,d=e.isOpen,c=e.buttonsLeft,f=void 0===c?[]:c,s=e.buttonsRight,v=void 0===s?[]:s,p=e.onClose,m=void 0===p?function(){}:p,h=e.noPadding,y=void 0!==h&&h,b=e.noOverlay,g=void 0!==b&&b,_=e.noShadow,O=void 0!==_&&_,w=e.baseZIndex,P=void 0===w?1019:w;return a.default.createElement(i.Modal,{containerRef:r,isOpen:d,onClose:m,noOverlay:g,noShadow:O,baseZIndex:P},a.default.createElement("div",{className:u.default.container},a.default.createElement("h1",{className:u.default.modalHeader},l),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=y,t)])},n),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},v))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(82),d=i(n(1)),c=i(n(31));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,f=e.transparent,s=void 0!==f&&f,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=s,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var a=n(34);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(81),d=n(5),c=n(3),f=n(2),s=n(9),v=i(n(45)),p=i(n(46));t.default=function(e){var t=e.items,n=e.itemBodyRenderer,r=e.label,a=e.onSelect,o=e.prompt,i=e.selectedItem,m=e.stretchPromptHorizontally,h=void 0===m||m,y=e.stretchPromptVertically,b=void 0!==y&&y,g=e.noPromptPadding,_=void 0!==g&&g,O=e.noPropmptShadow,w=void 0!==O&&O,P=e.noPromptBorder,j=void 0!==P&&P,M=(0,u.useState)(!1),E=M[0],k=M[1],C=(0,l.useOutsideClick)((function(){return k(!1)})),x=i?i.name:o,S=u.default.createElement(d.Button,{align:"left",disabled:!t||0===t.length,onClick:function(){return k(!E)},size:"medium",stretchHorizontally:h,stretchVertically:b,noPadding:_,noShadow:w,noBorder:j},u.default.createElement("div",{className:v.default.prompt},"string"==typeof o?x:o(i),u.default.createElement(c.Icon,{alt:"Dropdown",src:p.default})));return u.default.createElement(s.MenuContainer,{button:r?u.default.createElement(f.Label,{value:r},S):S,placement:{vertical:"bottom",horizontal:"left"},ref:C},u.default.createElement(s.Menu,{isOpen:E},t&&t.map((function(e){return u.default.createElement(s.MenuItem,{isActive:e.id===(null==i?void 0:i.id),key:e.id,onClick:function(){return function(e){a(e),k(!1)}(e)}},n?n({item:e,isSelected:e.id===(null==i?void 0:i.id)}):e.name)}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(36));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,f=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=f,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(38));t.default=function(e){var t,n,r=e.children,u=e.containerRef,l=e.className,d=e.isOpen,c=void 0===d||d,f=e.header,s=e.footer;return c?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.menu,(t={},t[i.default.open]=c,t),l])},a.default.createElement("div",{className:i.default.scrollContainer},f&&c&&a.default.createElement("h3",{className:i.default.header},f),a.default.createElement("ul",null,c&&r)),s&&c&&a.default.createElement("div",{className:(0,o.default)([i.default.footer,(n={},n[i.default.noBorder]=!r,n)])},s))):null}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg==",scrollContainer:"T+bIpal+WHUH-hA0Gw5rVg=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=i(n(40));t.default=(0,u.forwardRef)((function(e,t){var n=e.children,r=e.button,a=e.className,o=e.placement,i=void 0===o?{horizontal:"left",vertical:"bottom"}:o;return u.default.createElement("div",{ref:t,className:(0,l.default)([d.default.container,a])},r,u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[i.horizontal],d.default[i.vertical]])},n))}))},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(42));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,f=e.isActive,s=void 0!==f&&f;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=s,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(44));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,f=void 0!==c&&c,s=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=f,t)])},s),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";n.r(t),t.default={prompt:"PCj53ArrxCmKxnpOpE7jgg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(48);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(49));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,f=e.disabled,s=void 0!==f&&f,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,S=void 0===x?"medium":x;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[S],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:s,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(51);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(52));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.layout,l=void 0===u?"column":u,d=e.placement,c=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===c.horizontal?"horizontalCenter":c.horizontal,s="center"===c.vertical?"verticalCenter":c.vertical;return a.default.createElement("div",{ref:r,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[s],i.default[l],(t={},t[i.default.fixed]="container"!==c.parent,t)])},n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(54);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(55)),l=n(4);t.default=function(e){var t,n=e.className,r=e.containerRef,d=e.src,c=e.alt,f=e.badgeContent,s=void 0===f?null:f,v=e.offsetSides,p=void 0===v?[]:v,m=e.onClick,h=void 0===m?function(){}:m,y=e.disabled,b=void 0!==y&&y,g=e.inverted,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,P=e.noBorder,j=void 0!==P&&P,M=e.transparent,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,S=void 0===x?"medium":x,N=e.type,D=void 0===N?"button":N;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[S],(t={},t[u.default.inverted]=_,t[u.default.rounded]=C,t[u.default.noShadow]=w,t[u.default.noBorder]=j,t[u.default.transparent]=E,t[u.default.topOffset]=C&&p.includes("top"),t[u.default.rightOffset]=C&&p.includes("right"),t[u.default.bottomOffset]=C&&p.includes("bottom"),t[u.default.leftOffset]=C&&p.includes("left"),t),n]),disabled:b,onClick:h,type:D,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:S,inverted:_}),s&&a.default.createElement(l.ButtonBadge,null,s))}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(57);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(3),d=o(n(58)),c=n(4);t.default=function(e){var t,n=e.as,o=e.containerRef,f=e.className,s=e.src,v=e.alt,p=e.badgeContent,m=void 0===p?null:p,h=e.inverted,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.rounded,M=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,C=e.disabled,x=void 0!==C&&C,S=e.size,N=void 0===S?"medium":S,D=a(e,["as","containerRef","className","src","alt","badgeContent","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[N],(t={},t[d.default.inverted]=y,t[d.default.rounded]=M,t[d.default.noShadow]=g,t[d.default.noBorder]=O,t[d.default.disabled]=x,t[d.default.transparent]=P,t[d.default.topOffset]=M&&k.includes("top"),t[d.default.rightOffset]=M&&k.includes("right"),t[d.default.bottomOffset]=M&&k.includes("bottom"),t[d.default.leftOffset]=M&&k.includes("left"),t),f])},D),i.default.createElement(l.Icon,{src:s,alt:v,size:N,inverted:y}),m&&i.default.createElement(c.ButtonBadge,null,m))}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(60);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(61));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,f=void 0===c?"contain":c,s=e.decoding,v=void 0===s?"auto":s,p=e.loading,m=void 0===p?"eager":p,h=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[f]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},h,l&&a.default.createElement("div",{className:i.default.overlay},l)):h}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(63);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(65);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(66);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(64));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel},u),l),a.default.createElement("ul",{className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(5),u=r(n(10));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,f=void 0!==c&&c,s=e.noPadding,v=void 0!==s&&s,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:f,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(6),d=o(n(10));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,f=e.transparent,s=void 0!==f&&f,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:s,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(68);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(69));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,f=e.onClick,s=void 0===f?function(){}:f;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:s},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(71);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(2),c=i(n(72));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,f=e.value,s=e.name,v=e.inputRef,p=e.size,m=void 0===p?"medium":p,h=e.type,y=void 0===h?"text":h,b=e.autoFocus,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=u.default.createElement("input",{"data-testid":"input",ref:v,className:(0,l.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=O,t)]),onChange:w,onBlur:a,onKeyDown:o,placeholder:i,name:s,type:y,value:f,autoFocus:g});return n?u.default.createElement(d.Label,{value:n},P):u.default.createElement(u.default.Fragment,null,P)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(74);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(76);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(75));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(77));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(79);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(80));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,f=e.loop,s=void 0===f||f,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return a})),n.d(t,"usePromise",(function(){return l})),n.d(t,"useSWRHooksConfig",(function(){return ee})),n.d(t,"useToggle",(function(){return te}));var r=n(0);function a(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n),document.addEventListener("touchend",n),function(){document.removeEventListener("mouseup",n),document.removeEventListener("touchend",n)}}),[e]),t}
|
|
1
|
+
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=12)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(36);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(13);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(15);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(21);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(17);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(26);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(31);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(38)),l=r(n(39));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return a.default.createElement(o.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},a.default.createElement("div",{className:u.default.container},t,a.default.createElement(i.Icon,{alt:"Dropdown",src:l.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(40);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(42);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(44);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(46);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),a(n(3),t),a(n(4),t),a(n(6),t),a(n(19),t),a(n(24),t),a(n(7),t),a(n(29),t),a(n(34),t),a(n(48),t),a(n(51),t),a(n(2),t),a(n(54),t),a(n(57),t),a(n(60),t),a(n(5),t),a(n(63),t),a(n(10),t),a(n(8),t),a(n(68),t),a(n(71),t),a(n(74),t),a(n(79),t),a(n(82),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(14));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.containerRef,d=e.disabled,c=void 0!==d&&d,f=e.inverted,s=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noPadding,b=void 0!==y&&y,g=e.noBorder,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.autoFocus,C=void 0!==k&&k,x=e.offsetSides,N=void 0===x?[]:x,S=e.align,D=void 0===S?"center":S,A=e.size,B=void 0===A?"medium":A,L=e.type;return a.default.createElement("button",{ref:l,className:(0,o.default)([i.default.container,i.default[B],i.default[D],(t={},t[i.default.inverted]=s,t[i.default.rounded]=p,t[i.default.noShadow]=h,t[i.default.noPadding]=b,t[i.default.noBorder]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t[i.default.leftOffset]=p&&N.includes("left"),t[i.default.rightOffset]=p&&N.includes("right"),t),r]),disabled:c,autoFocus:C,onClick:u,type:L,role:"button"},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(16));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,n])},t)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(18));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,f=e.containerRef,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,x=void 0!==C&&C,N=e.offsetSides,S=void 0===N?[]:N,D=e.align,A=void 0===D?"center":D,B=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:f,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[A],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=P,t[l.default.disabled]=x,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&S.includes("left"),t[l.default.rightOffset]=m&&S.includes("right"),t),d])},B),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(20);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(23));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,f=e.className,s=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=s)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,f,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(22));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(25);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(28));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,f=e.canToggle,s=void 0!==f&&f;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){s&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(27));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.isSelected,l=void 0!==u&&u,d=e.size,c=void 0===d?"medium":d,f=e.onClick;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=l,t)]),"data-testid":"color-swatch",onClick:f,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(30);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(8),u=r(n(33));function l(e){var t,n=e.children,r=e.containerRef,l=e.header,d=e.isOpen,c=e.buttonsLeft,f=void 0===c?[]:c,s=e.buttonsRight,v=void 0===s?[]:s,p=e.onClose,m=void 0===p?function(){}:p,h=e.noPadding,y=void 0!==h&&h,b=e.noOverlay,g=void 0!==b&&b,_=e.noShadow,O=void 0!==_&&_,w=e.baseZIndex,P=void 0===w?1019:w;return a.default.createElement(i.Modal,{containerRef:r,isOpen:d,onClose:m,noOverlay:g,noShadow:O,baseZIndex:P},a.default.createElement("div",{className:u.default.container},!!l&&a.default.createElement("h1",{className:u.default.modalHeader},l),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=y,t)])},n),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},v))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(87),d=i(n(1)),c=i(n(32));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,f=e.transparent,s=void 0!==f&&f,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=s,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(35);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(9);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return a.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=o(n(0)),u=n(86),l=n(9),d=n(10);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,f=(0,i.useState)(!1),s=f[0],v=f[1],p=(0,u.useOutsideClick)((function(){return v(!1)})),m=!n||0===n.length,h=function(){return v(!s)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:m,selectedItem:c,toggleIsOpen:h}):i.default.createElement(l.Clickable,{display:a,isDisabled:m,onClick:h}),placement:{vertical:"bottom",horizontal:"left"},ref:p},i.default.createElement(d.Menu,{isOpen:s},n&&n.map((function(e){return i.default.createElement(d.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),v(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(37));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,f=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=f,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(41));t.default=function(e){var t,n,r=e.children,u=e.containerRef,l=e.className,d=e.isOpen,c=void 0===d||d,f=e.header,s=e.footer;return c?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.menu,(t={},t[i.default.open]=c,t),l])},a.default.createElement("div",{className:i.default.scrollContainer},f&&c&&a.default.createElement("h3",{className:i.default.header},f),a.default.createElement("ul",null,c&&r)),s&&c&&a.default.createElement("div",{className:(0,o.default)([i.default.footer,(n={},n[i.default.noBorder]=!r,n)])},s))):null}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg==",scrollContainer:"T+bIpal+WHUH-hA0Gw5rVg=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=i(n(43));t.default=(0,u.forwardRef)((function(e,t){var n=e.children,r=e.button,a=e.className,o=e.placement,i=void 0===o?{horizontal:"left",vertical:"bottom"}:o;return u.default.createElement("div",{ref:t,className:(0,l.default)([d.default.container,a])},r,u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[i.horizontal],d.default[i.vertical]])},n))}))},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(45));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,f=e.isActive,s=void 0!==f&&f;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=s,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(47));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,f=void 0!==c&&c,s=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=f,t)])},s),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(49);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(50));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,f=e.disabled,s=void 0!==f&&f,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,N=void 0===x?"medium":x;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[N],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:s,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(52);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(53));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.layout,l=void 0===u?"column":u,d=e.placement,c=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===c.horizontal?"horizontalCenter":c.horizontal,s="center"===c.vertical?"verticalCenter":c.vertical;return a.default.createElement("div",{ref:r,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[s],i.default[l],(t={},t[i.default.fixed]="container"!==c.parent,t)])},n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(55);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(2),u=r(n(56)),l=n(4);t.default=function(e){var t,n=e.className,r=e.containerRef,d=e.src,c=e.alt,f=e.badgeContent,s=void 0===f?null:f,v=e.offsetSides,p=void 0===v?[]:v,m=e.onClick,h=void 0===m?function(){}:m,y=e.disabled,b=void 0!==y&&y,g=e.inverted,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,P=e.noBorder,j=void 0!==P&&P,M=e.transparent,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,N=void 0===x?"medium":x,S=e.type,D=void 0===S?"button":S;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[N],(t={},t[u.default.inverted]=_,t[u.default.rounded]=C,t[u.default.noShadow]=w,t[u.default.noBorder]=j,t[u.default.transparent]=E,t[u.default.topOffset]=C&&p.includes("top"),t[u.default.rightOffset]=C&&p.includes("right"),t[u.default.bottomOffset]=C&&p.includes("bottom"),t[u.default.leftOffset]=C&&p.includes("left"),t),n]),disabled:b,onClick:h,type:D,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:N,inverted:_}),s&&a.default.createElement(l.ButtonBadge,null,s))}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(58);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(2),d=o(n(59)),c=n(4);t.default=function(e){var t,n=e.as,o=e.containerRef,f=e.className,s=e.src,v=e.alt,p=e.badgeContent,m=void 0===p?null:p,h=e.inverted,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.rounded,M=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,C=e.disabled,x=void 0!==C&&C,N=e.size,S=void 0===N?"medium":N,D=a(e,["as","containerRef","className","src","alt","badgeContent","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[S],(t={},t[d.default.inverted]=y,t[d.default.rounded]=M,t[d.default.noShadow]=g,t[d.default.noBorder]=O,t[d.default.disabled]=x,t[d.default.transparent]=P,t[d.default.topOffset]=M&&k.includes("top"),t[d.default.rightOffset]=M&&k.includes("right"),t[d.default.bottomOffset]=M&&k.includes("bottom"),t[d.default.leftOffset]=M&&k.includes("left"),t),f])},D),i.default.createElement(l.Icon,{src:s,alt:v,size:S,inverted:y}),m&&i.default.createElement(c.ButtonBadge,null,m))}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(61);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(62));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,f=void 0===c?"contain":c,s=e.decoding,v=void 0===s?"auto":s,p=e.loading,m=void 0===p?"eager":p,h=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[f]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},h,l&&a.default.createElement("div",{className:i.default.overlay},l)):h}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(64);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(66);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(67);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(65));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel},u),l),a.default.createElement("ul",{className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,f=void 0!==c&&c,s=e.noPadding,v=void 0!==s&&s,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:f,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(6),d=o(n(11));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,f=e.transparent,s=void 0!==f&&f,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:s,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(69);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(70));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,f=e.onClick,s=void 0===f?function(){}:f;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:s},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(72);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(73));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,f=e.value,s=e.name,v=e.inputRef,p=e.size,m=void 0===p?"medium":p,h=e.type,y=void 0===h?"text":h,b=e.autoFocus,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=u.default.createElement("input",{"data-testid":"input",ref:v,className:(0,l.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=O,t)]),onChange:w,onBlur:a,onKeyDown:o,placeholder:i,name:s,type:y,value:f,autoFocus:g});return n?u.default.createElement(d.Label,{value:n},P):u.default.createElement(u.default.Fragment,null,P)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(75);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(77);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(76));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(78));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(80);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(81));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,f=e.loop,s=void 0===f||f,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(83);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(84)),l=r(n(85)),d=function(e,t){return 10*e+t};t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,c=e.disabled,f=void 0!==c&&c,s=function(e){return function(t){t.preventDefault(),r(e)}},v=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:f,noBorder:!0,noShadow:!0,onClick:s(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,"data-testid":"numpad",ref:t},a.default.createElement("div",{className:u.default.numbers},v,a.default.createElement(o.Button,{disabled:f,noBorder:!0,noShadow:!0,transparent:!0,onClick:s(Math.floor(n/10))},a.default.createElement(i.Icon,{alt:"Backspace",src:l.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return a})),n.d(t,"usePromise",(function(){return l})),n.d(t,"useSWRHooksConfig",(function(){return ee})),n.d(t,"useToggle",(function(){return te}));var r=n(0);function a(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n),document.addEventListener("touchend",n),function(){document.removeEventListener("mouseup",n),document.removeEventListener("touchend",n)}}),[e]),t}function o(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function l(){var e=this,t=u(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],l=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){l.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return o(e,void 0,void 0,(function(){var e,n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===l.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===l.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[l])]}
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,29 +12,14 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */function o(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function l(){var e=this,t=u(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],l=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){l.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return o(e,void 0,void 0,(function(){var e,n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===l.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===l.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[l])]}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
20
|
-
purpose with or without fee is hereby granted.
|
|
21
|
-
|
|
22
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
23
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
24
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
25
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
26
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
27
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
28
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
29
|
-
***************************************************************************** */function d(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function c(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}var f,s=function(){},v=s(),p=Object,m=function(e){return e===v},h=function(e){return"function"==typeof e},y=function(e,t){return p.assign({},e,t)},b=function(){return"undefined"!=typeof window},g=new WeakMap,_=0,O=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(p(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=g.get(e))return t;if(t=++_+"~",g.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=O(e[n])+",";g.set(e,t)}if(a==p){t="#";for(var i=p.keys(e).sort();!m(n=i.pop());)m(e[n])||(t+=n+":"+O(e[n])+",");g.set(e,t)}}return t},w=!0,P=b(),j="undefined"!=typeof document,M=P&&window.addEventListener?window.addEventListener.bind(window):s,E=j?document.addEventListener.bind(document):s,k=P&&window.removeEventListener?window.removeEventListener.bind(window):s,C=j?document.removeEventListener.bind(document):s,x={isOnline:function(){return w},isVisible:function(){var e=j&&document.visibilityState;return m(e)||"hidden"!==e}},S={initFocus:function(e){return E("visibilitychange",e),M("focus",e),function(){C("visibilitychange",e),k("focus",e)}},initReconnect:function(e){var t=function(){w=!0,e()},n=function(){w=!1};return M("online",t),M("offline",n),function(){k("online",t),k("offline",n)}}},N=!b()||"Deno"in window,D=function(e){return b()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},A=N?r.useEffect:r.useLayoutEffect,B="undefined"!=typeof navigator&&navigator.connection,I=!N&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData),R=function(e){if(h(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?O(e):"",t,e?"$swr$"+e:""]},z=new WeakMap,L=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=z.get(e),l=u[0],d=u[1],c=u[3],f=l[t],s=d[t];if(i&&s)for(var v=0;v<s.length;++v)s[v](n,r,a);return o&&(delete c[t],f&&f[0])?f[0](2).then((function(){return e.get(t)})):e.get(t)},Q=0,T=function(){return++Q},V=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,f,s,p,b,g,_,O,w,P,j,M;return c(this,(function(c){switch(c.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!m((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,f=R(n),s=f[0],p=f[2],!s)return[2];if(b=z.get(t),g=b[2],e.length<3)return[2,L(t,s,t.get(s),v,v,u,!0)];if(_=r,w=T(),g[s]=[w,0],P=!m(d),j=t.get(s),P&&(t.set(s,d),L(t,s,d)),h(_))try{_=_(t.get(s))}catch(e){O=e}return _&&h(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=c.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&P&&l&&(i=!0,_=j,t.set(s,j)),c.label=2;case 2:return i&&(O||(h(i)&&(_=i(_,j)),t.set(s,_)),t.set(p,y(t.get(p),{error:O}))),g[s][1]=T(),[4,L(t,s,_,O,v,u,!!i)];case 3:if(M=c.sent(),O)throw O;return[2,i?M:_]}}))}))},F=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},H=function(e,t){if(!z.has(e)){var n=y(S,t),r={},a=V.bind(v,e),o=s;if(z.set(e,[r,{},{},{},a]),!N){var i=n.initFocus(setTimeout.bind(v,F.bind(v,r,0))),u=n.initReconnect(setTimeout.bind(v,F.bind(v,r,1)));o=function(){i&&i(),u&&u(),z.delete(e)}}return[e,a,o]}return[e,z.get(e)[4]]},J=H(new Map),K=J[0],G=J[1],U=y({onLoadingSlow:s,onSuccess:s,onError:s,onErrorRetry:function(e,t,n,r,a){var o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!m(o)&&i>o||setTimeout(r,u,a)},onDiscarded:s,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:I?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:I?5e3:3e3,compare:function(e,t){return O(e)==O(t)},isPaused:function(){return!1},cache:K,mutate:G,fallback:{}},x),Z=function(e,t){var n=y(e,t);if(t){var r=e.use,a=e.fallback,o=t.use,i=t.fallback;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=y(a,i))}return n},Y=Object(r.createContext)({}),W=function(e){return h(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},X=function(){return y(U,Object(r.useContext)(Y))},q=function(e,t,n){var r=t[e]||(t[e]=[]);return r.push(n),function(){var e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}},$={dedupe:!0};p.defineProperty((function(e){var t=e.value,n=Z(Object(r.useContext)(Y),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?H(a(n.cache||K),t):v}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),A((function(){return o?o[2]:v}),[]),Object(r.createElement)(Y.Provider,y(e,{value:n}))}),"default",{value:U}),f=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,f=n.refreshInterval,s=n.refreshWhenHidden,p=n.refreshWhenOffline,b=z.get(a),g=b[0],_=b[1],O=b[2],w=b[3],P=R(e),j=P[0],M=P[1],E=P[2],k=Object(r.useRef)(!1),C=Object(r.useRef)(!1),x=Object(r.useRef)(j),S=Object(r.useRef)(t),B=Object(r.useRef)(n),I=function(){return B.current},Q=function(){return I().isVisible()&&I().isOnline()},F=function(e){return a.set(E,y(a.get(E),e))},H=a.get(j),J=m(i)?n.fallback[j]:i,K=m(H)?J:H,G=a.get(E)||{},U=G.error,Z=!k.current,Y=function(){return Z&&!m(l)?l:!I().isPaused()&&(u?!m(K):m(K)||n.revalidateIfStale)},W=!(!j||!t)&&(!!G.isValidating||Z&&Y()),X=function(e,t){var n=Object(r.useState)({})[1],a=Object(r.useRef)(e),o=Object(r.useRef)({data:!1,error:!1,isValidating:!1}),i=Object(r.useCallback)((function(e){var r=!1,i=a.current;for(var u in e){var l=u;i[l]!==e[l]&&(i[l]=e[l],o.current[l]&&(r=!0))}r&&!t.current&&n({})}),[]);return A((function(){a.current=e})),[a,o.current,i]}({data:K,error:U,isValidating:W},C),ee=X[0],te=X[1],ne=X[2],re=Object(r.useCallback)((function(e){return d(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,f,s,p,y,b,g,_;return c(this,(function(c){switch(c.label){case 0:if(t=S.current,!j||!t||C.current||I().isPaused())return[2,!1];u=!0,l=e||{},d=!w[j]||!l.dedupe,f=function(){return!C.current&&j===x.current&&k.current},s=function(){var e=w[j];e&&e[1]===i&&delete w[j]},p={isValidating:!1},y=function(){F({isValidating:!1}),f()&&ne(p)},F({isValidating:!0}),ne({isValidating:!0}),c.label=1;case 1:return c.trys.push([1,3,,4]),d&&(L(a,j,ee.current.data,ee.current.error,!0),n.loadingTimeout&&!a.get(j)&&setTimeout((function(){u&&f()&&I().onLoadingSlow(j,n)}),n.loadingTimeout),w[j]=[t.apply(void 0,M),T()]),_=w[j],r=_[0],i=_[1],[4,r];case 2:return r=c.sent(),d&&setTimeout(s,n.dedupingInterval),w[j]&&w[j][1]===i?(F({error:v}),p.error=v,b=O[j],!m(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(y(),d&&f()&&I().onDiscarded(j),[2,!1]):(o(ee.current.data,r)?p.data=ee.current.data:p.data=r,o(a.get(j),r)||a.set(j,r),d&&f()&&I().onSuccess(r,j,n),[3,4])):(d&&f()&&I().onDiscarded(j),[2,!1]);case 3:return g=c.sent(),s(),I().isPaused()||(F({error:g}),p.error=g,d&&f()&&(I().onError(g,j,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||h(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&Q()&&I().onErrorRetry(g,j,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,y(),f()&&d&&L(a,j,p.data,p.error,!1),[2,!0]}}))}))}),[j]),ae=Object(r.useCallback)(V.bind(v,a,(function(){return x.current})),[]);if(A((function(){S.current=t,B.current=n})),A((function(){if(j){var e=j!==x.current,t=re.bind(v,$),n=0,r=q(j,_,(function(e,t,n){ne(y({error:t,isValidating:n},o(ee.current.data,e)?v:{data:e}))})),a=q(j,g,(function(e){if(0==e){var r=Date.now();I().revalidateOnFocus&&r>n&&Q()&&(n=r+I().focusThrottleInterval,t())}else if(1==e)I().revalidateOnReconnect&&Q()&&t();else if(2==e)return re()}));return C.current=!1,x.current=j,k.current=!0,e&&ne({data:K,error:U,isValidating:W}),Y()&&(m(K)||N?t():D(t)),function(){C.current=!0,r(),a()}}}),[j,re]),A((function(){var e;function t(){var t=h(f)?f(K):f;t&&-1!==e&&(e=setTimeout(n,t))}function n(){ee.current.error||!s&&!I().isVisible()||!p&&!I().isOnline()?t():re($).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[f,s,p,re]),Object(r.useDebugValue)(K),u&&m(K)&&j)throw S.current=t,B.current=n,C.current=!1,m(U)?re($):U;return{mutate:ae,get data(){return te.data=!0,K},get error(){return te.error=!0,U},get isValidating(){return te.isValidating=!0,W}}};function ee(){var e=X();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function te(e){void 0===e&&(e=!1);var t=u(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return N})),n.d(t,"useHotkeys",(function(){return S})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
|
|
30
|
-
/*!
|
|
31
|
-
* hotkeys-js v3.8.7
|
|
32
|
-
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
|
|
33
|
-
*
|
|
34
|
-
* Copyright (c) 2021 kenny wong <wowohoo@qq.com>
|
|
35
|
-
* http://jaywcjlove.github.io/hotkeys
|
|
15
|
+
***************************************************************************** */function d(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function c(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}var f,s=function(){},v=s(),p=Object,m=function(e){return e===v},h=function(e){return"function"==typeof e},y=function(e,t){return p.assign({},e,t)},b=function(){return"undefined"!=typeof window},g=new WeakMap,_=0,O=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(p(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=g.get(e))return t;if(t=++_+"~",g.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=O(e[n])+",";g.set(e,t)}if(a==p){t="#";for(var i=p.keys(e).sort();!m(n=i.pop());)m(e[n])||(t+=n+":"+O(e[n])+",");g.set(e,t)}}return t},w=!0,P=b(),j="undefined"!=typeof document,M=P&&window.addEventListener?window.addEventListener.bind(window):s,E=j?document.addEventListener.bind(document):s,k=P&&window.removeEventListener?window.removeEventListener.bind(window):s,C=j?document.removeEventListener.bind(document):s,x={isOnline:function(){return w},isVisible:function(){var e=j&&document.visibilityState;return m(e)||"hidden"!==e}},N={initFocus:function(e){return E("visibilitychange",e),M("focus",e),function(){C("visibilitychange",e),k("focus",e)}},initReconnect:function(e){var t=function(){w=!0,e()},n=function(){w=!1};return M("online",t),M("offline",n),function(){k("online",t),k("offline",n)}}},S=!b()||"Deno"in window,D=function(e){return b()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},A=S?r.useEffect:r.useLayoutEffect,B="undefined"!=typeof navigator&&navigator.connection,L=!S&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData),I=function(e){if(h(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?O(e):"",t,e?"$swr$"+e:""]},R=new WeakMap,z=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=R.get(e),l=u[0],d=u[1],c=u[3],f=l[t],s=d[t];if(i&&s)for(var v=0;v<s.length;++v)s[v](n,r,a);return o&&(delete c[t],f&&f[0])?f[0](2).then((function(){return e.get(t)})):e.get(t)},Q=0,V=function(){return++Q},T=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,f,s,p,b,g,_,O,w,P,j,M,E;return c(this,(function(c){switch(c.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!m((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,f=I(n),s=f[0],p=f[2],!s)return[2];if(b=R.get(t),g=b[2],e.length<3)return[2,z(t,s,t.get(s),v,v,u,!0)];if(_=r,w=V(),g[s]=[w,0],P=!m(d),j=t.get(s),P&&(M=h(d)?d(j):d,t.set(s,M),z(t,s,M)),h(_))try{_=_(t.get(s))}catch(e){O=e}return _&&h(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=c.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&P&&l&&(i=!0,_=j,t.set(s,j)),c.label=2;case 2:return i&&(O||(h(i)&&(_=i(_,j)),t.set(s,_)),t.set(p,y(t.get(p),{error:O}))),g[s][1]=V(),[4,z(t,s,_,O,v,u,!!i)];case 3:if(E=c.sent(),O)throw O;return[2,i?E:_]}}))}))},H=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},F=function(e,t){if(!R.has(e)){var n=y(N,t),r={},a=T.bind(v,e),o=s;if(R.set(e,[r,{},{},{},a]),!S){var i=n.initFocus(setTimeout.bind(v,H.bind(v,r,0))),u=n.initReconnect(setTimeout.bind(v,H.bind(v,r,1)));o=function(){i&&i(),u&&u(),R.delete(e)}}return[e,a,o]}return[e,R.get(e)[4]]},J=F(new Map),Z=J[0],K=J[1],G=y({onLoadingSlow:s,onSuccess:s,onError:s,onErrorRetry:function(e,t,n,r,a){var o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!m(o)&&i>o||setTimeout(r,u,a)},onDiscarded:s,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:function(e,t){return O(e)==O(t)},isPaused:function(){return!1},cache:Z,mutate:K,fallback:{}},x),U=function(e,t){var n=y(e,t);if(t){var r=e.use,a=e.fallback,o=t.use,i=t.fallback;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=y(a,i))}return n},Y=Object(r.createContext)({}),W=function(e){return h(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},X=function(){return y(G,Object(r.useContext)(Y))},q=function(e,t,n){var r=t[e]||(t[e]=[]);return r.push(n),function(){var e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}},$={dedupe:!0};p.defineProperty((function(e){var t=e.value,n=U(Object(r.useContext)(Y),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?F(a(n.cache||Z),t):v}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),A((function(){return o?o[2]:v}),[]),Object(r.createElement)(Y.Provider,y(e,{value:n}))}),"default",{value:G}),f=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,f=n.refreshInterval,s=n.refreshWhenHidden,p=n.refreshWhenOffline,b=R.get(a),g=b[0],_=b[1],O=b[2],w=b[3],P=I(e),j=P[0],M=P[1],E=P[2],k=Object(r.useRef)(!1),C=Object(r.useRef)(!1),x=Object(r.useRef)(j),N=Object(r.useRef)(t),B=Object(r.useRef)(n),L=function(){return B.current},Q=function(){return L().isVisible()&&L().isOnline()},H=function(e){return a.set(E,y(a.get(E),e))},F=a.get(j),J=m(i)?n.fallback[j]:i,Z=m(F)?J:F,K=a.get(E)||{},G=K.error,U=!k.current,Y=function(){return U&&!m(l)?l:!L().isPaused()&&(u?!m(Z)&&n.revalidateIfStale:m(Z)||n.revalidateIfStale)},W=!(!j||!t)&&(!!K.isValidating||U&&Y()),X=function(e,t){var n=Object(r.useState)({})[1],a=Object(r.useRef)(e),o=Object(r.useRef)({data:!1,error:!1,isValidating:!1}),i=Object(r.useCallback)((function(e){var r=!1,i=a.current;for(var u in e){var l=u;i[l]!==e[l]&&(i[l]=e[l],o.current[l]&&(r=!0))}r&&!t.current&&n({})}),[]);return A((function(){a.current=e})),[a,o.current,i]}({data:Z,error:G,isValidating:W},C),ee=X[0],te=X[1],ne=X[2],re=Object(r.useCallback)((function(e){return d(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,f,s,p,y,b,g,_;return c(this,(function(c){switch(c.label){case 0:if(t=N.current,!j||!t||C.current||L().isPaused())return[2,!1];u=!0,l=e||{},d=!w[j]||!l.dedupe,f=function(){return!C.current&&j===x.current&&k.current},s=function(){var e=w[j];e&&e[1]===i&&delete w[j]},p={isValidating:!1},y=function(){H({isValidating:!1}),f()&&ne(p)},H({isValidating:!0}),ne({isValidating:!0}),c.label=1;case 1:return c.trys.push([1,3,,4]),d&&(z(a,j,ee.current.data,ee.current.error,!0),n.loadingTimeout&&!a.get(j)&&setTimeout((function(){u&&f()&&L().onLoadingSlow(j,n)}),n.loadingTimeout),w[j]=[t.apply(void 0,M),V()]),_=w[j],r=_[0],i=_[1],[4,r];case 2:return r=c.sent(),d&&setTimeout(s,n.dedupingInterval),w[j]&&w[j][1]===i?(H({error:v}),p.error=v,b=O[j],!m(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(y(),d&&f()&&L().onDiscarded(j),[2,!1]):(o(ee.current.data,r)?p.data=ee.current.data:p.data=r,o(a.get(j),r)||a.set(j,r),d&&f()&&L().onSuccess(r,j,n),[3,4])):(d&&f()&&L().onDiscarded(j),[2,!1]);case 3:return g=c.sent(),s(),L().isPaused()||(H({error:g}),p.error=g,d&&f()&&(L().onError(g,j,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||h(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&Q()&&L().onErrorRetry(g,j,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,y(),f()&&d&&z(a,j,p.data,p.error,!1),[2,!0]}}))}))}),[j]),ae=Object(r.useCallback)(T.bind(v,a,(function(){return x.current})),[]);if(A((function(){N.current=t,B.current=n})),A((function(){if(j){var e=j!==x.current,t=re.bind(v,$),n=0,r=q(j,_,(function(e,t,n){ne(y({error:t,isValidating:n},o(ee.current.data,e)?v:{data:e}))})),a=q(j,g,(function(e){if(0==e){var r=Date.now();L().revalidateOnFocus&&r>n&&Q()&&(n=r+L().focusThrottleInterval,t())}else if(1==e)L().revalidateOnReconnect&&Q()&&t();else if(2==e)return re()}));return C.current=!1,x.current=j,k.current=!0,e&&ne({data:Z,error:G,isValidating:W}),Y()&&(m(Z)||S?t():D(t)),function(){C.current=!0,r(),a()}}}),[j,re]),A((function(){var e;function t(){var t=h(f)?f(Z):f;t&&-1!==e&&(e=setTimeout(n,t))}function n(){ee.current.error||!s&&!L().isVisible()||!p&&!L().isOnline()?t():re($).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[f,s,p,re]),Object(r.useDebugValue)(Z),u&&m(Z)&&j)throw N.current=t,B.current=n,C.current=!1,m(G)?re($):G;return{mutate:ae,get data(){return te.data=!0,Z},get error(){return te.error=!0,G},get isValidating(){return te.isValidating=!0,W}}};function ee(){var e=X();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function te(e){void 0===e&&(e=!1);var t=u(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return S})),n.d(t,"useHotkeys",(function(){return N})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
|
|
16
|
+
/**!
|
|
17
|
+
* hotkeys-js v3.9.3
|
|
18
|
+
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
|
|
36
19
|
*
|
|
37
|
-
*
|
|
20
|
+
* Copyright (c) 2022 kenny wong <wowohoo@qq.com>
|
|
21
|
+
* http://jaywcjlove.github.io/hotkeys
|
|
22
|
+
* Licensed under the MIT license
|
|
38
23
|
*/
|
|
39
|
-
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n){e.addEventListener?e.addEventListener(t,n
|
|
40
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzcz85YTRlIiwid2VicGFjazovLy8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz8zMmFiIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9jZDQ2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/MDg0MSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/MWYxMSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC5tb2R1bGUuY3NzPzRlZWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC5tb2R1bGUuY3NzPzIzZWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIubW9kdWxlLmNzcz9lMTg4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz8wZWRmIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/MjdiMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz85YjkzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Lm1vZHVsZS5jc3M/MzcwOSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzPzk2ZDIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzPzUwNDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/MDQyNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9Ecm9wZG93bi5tb2R1bGUuY3NzPzU5MDkiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlUHJvbWlzZS91c2VQcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zd3IvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImlzQXJyYXkiLCJBcnJheSIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImxlbmd0aCIsImRlZmF1bHQiLCJEcm9wZG93biIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiYnV0dG9uQmFkZ2UiLCJvbkNsaWNrIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImFsaWduIiwic2l6ZSIsInR5cGUiLCJyZWYiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiaXRlbXMiLCJpdGVtQm9keVJlbmRlcmVyIiwiaGFuZGxlU2VsZWN0IiwicHJvbXB0Iiwic2VsZWN0ZWRJdGVtIiwic3RyZXRjaFByb21wdEhvcml6b250YWxseSIsInN0cmV0Y2hQcm9tcHRWZXJ0aWNhbGx5Iiwibm9Qcm9tcHRQYWRkaW5nIiwibm9Qcm9wbXB0U2hhZG93Iiwibm9Qcm9tcHRCb3JkZXIiLCJ1c2VTdGF0ZSIsInNldElzT3BlbiIsInVzZU91dHNpZGVDbGljayIsImRlZmF1bHRQcm9tcHQiLCJwcm9tcHRUb1JlbmRlciIsIkJ1dHRvbiIsIkljb24iLCJhbHQiLCJzcmMiLCJNZW51Q29udGFpbmVyIiwicGxhY2VtZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTWVudSIsIml0ZW0iLCJNZW51SXRlbSIsImlzQWN0aXZlIiwiaWQiLCJoYW5kbGVDbGljayIsImljb24iLCJjcm9zc09yaWdpbiIsImZvb3RlciIsIm1lbnUiLCJvcGVuIiwic2Nyb2xsQ29udGFpbmVyIiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsImFjdGl2ZSIsIm1lbnVMaW5rSXRlbSIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJsYXlvdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImJhZGdlQ29udGVudCIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsIkJ1dHRvbkJhZGdlIiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJpc0ZpeGVkIiwib25CbHVyIiwib25LZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImNhbGxiYWNrIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsIl8iLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJpdGVyYXRvciIsInRoaXMiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJwdXNoIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwicHJvbWlzZSIsImVycm9yXzEiLCJob29rIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiYXNzaWduIiwiaGFzV2luZG93Iiwid2luZG93IiwidGFibGUiLCJXZWFrTWFwIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJpbmRleCIsImNvbnN0cnVjdG9yIiwiaXNEYXRlIiwiRGF0ZSIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsImtleXMiLCJzb3J0Iiwib25saW5lIiwiaGFzV2luIiwiaGFzRG9jIiwib25XaW5kb3dFdmVudCIsIm9uRG9jdW1lbnRFdmVudCIsIm9mZldpbmRvd0V2ZW50Iiwib2ZmRG9jdW1lbnRFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19TRVJWRVIiLCJyQUYiLCJzZXRUaW1lb3V0IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJzZXJpYWxpemUiLCJlcnIiLCJhcmdzIiwiY29uY2F0IiwiU1dSR2xvYmFsU3RhdGUiLCJicm9hZGNhc3RTdGF0ZSIsImNhY2hlIiwiaXNWYWxpZGF0aW5nIiwicmV2YWxpZGF0ZSIsImJyb2FkY2FzdCIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIlNUQVRFX1VQREFURVJTIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJ1cGRhdGVycyIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiaW50ZXJuYWxNdXRhdGUiLCJfaSIsImFyZ3VtZW50cyIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwib3B0aW9ucyIsInBvcHVsYXRlQ2FjaGUiLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUluZm8iLCJfYiIsIk1VVEFUSU9OIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwicm9sbGJhY2tEYXRhIiwicmVzIiwiX2MiLCJjYXRjaCIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInJlbGVhc2VGb2N1c18xIiwicmVsZWFzZVJlY29ubmVjdF8xIiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsIk1hdGgiLCJyYW5kb20iLCJlcnJvclJldHJ5SW50ZXJ2YWwiLCJvbkRpc2NhcmRlZCIsInJldmFsaWRhdGVPbkZvY3VzIiwicmV2YWxpZGF0ZU9uUmVjb25uZWN0IiwicmV2YWxpZGF0ZUlmU3RhbGUiLCJzaG91bGRSZXRyeU9uRXJyb3IiLCJmb2N1c1Rocm90dGxlSW50ZXJ2YWwiLCJkZWR1cGluZ0ludGVydmFsIiwibG9hZGluZ1RpbWVvdXQiLCJjb21wYXJlIiwiY3VycmVudERhdGEiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInUxIiwidXNlIiwiZjEiLCJ1MiIsImYyIiwiU1dSQ29uZmlnQ29udGV4dCIsIm5vcm1hbGl6ZSIsInVzZVNXUkNvbmZpZyIsInN1YnNjcmliZUNhbGxiYWNrIiwiY2FsbGJhY2tzIiwia2V5ZWRSZXZhbGlkYXRvcnMiLCJpbmRleE9mIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsIlByb3ZpZGVyIiwiZmV0Y2hlciIsImZhbGxiYWNrRGF0YSIsInN1c3BlbnNlIiwicmV2YWxpZGF0ZU9uTW91bnQiLCJyZWZyZXNoSW50ZXJ2YWwiLCJyZWZyZXNoV2hlbkhpZGRlbiIsInJlZnJlc2hXaGVuT2ZmbGluZSIsImZuQXJncyIsImluaXRpYWxNb3VudGVkUmVmIiwidW5tb3VudGVkUmVmIiwia2V5UmVmIiwiZmV0Y2hlclJlZiIsImNvbmZpZ1JlZiIsImdldENvbmZpZyIsInBhdGNoRmV0Y2hJbmZvIiwiaW5mbyIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50Iiwic2hvdWxkUmV2YWxpZGF0ZSIsInN0YXRlIiwicmVyZW5kZXIiLCJzdGF0ZVJlZiIsInN0YXRlRGVwZW5kZW5jaWVzUmVmIiwic2V0U3RhdGUiLCJwYXlsb2FkIiwic2hvdWxkUmVyZW5kZXIiLCJjdXJyZW50U3RhdGUiLCJ1c2VTdGF0ZVdpdGhEZXBzIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImlzQ3VycmVudEtleU1vdW50ZWQiLCJjbGVhbnVwU3RhdGUiLCJuZXdTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsIm11dGF0aW9uSW5mbyIsImVycl8xIiwicmVxdWVzdEluZm8iLCJib3VuZE11dGF0ZSIsImtleUNoYW5nZWQiLCJzb2Z0UmV2YWxpZGF0ZSIsIm5leHRGb2N1c1JldmFsaWRhdGVkQXQiLCJ1bnN1YlVwZGF0ZSIsInVwZGF0ZWREYXRhIiwidXBkYXRlZEVycm9yIiwidXBkYXRlZElzVmFsaWRhdGluZyIsInVuc3ViRXZlbnRzIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJpc2ZmIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJhZGRFdmVudCIsIm1ldGhvZCIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJzdG9wUHJvcGFnYXRpb24iLCJjYW5jZWxCdWJibGUiLCJkaXNwYXRjaCIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJmaWx0ZXIiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJlbGVtZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCJdLCJtYXBwaW5ncyI6IjZEQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQTBEZixPQXJEQUYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sS0FRdkRyQixFQUFvQnNCLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRckIsRUFBb0JxQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQTFCLEVBQW9Ca0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUksVUFBVyxDQUFFVCxZQUFZLEVBQU1LLE1BQU9BLElBQ3RELEVBQVBFLEdBQTRCLGlCQUFURixFQUFtQixJQUFJLElBQUlNLEtBQU9OLEVBQU9yQixFQUFvQlUsRUFBRWUsRUFBSUUsRUFBSyxTQUFTQSxHQUFPLE9BQU9OLEVBQU1NLElBQVFDLEtBQUssS0FBTUQsSUFDOUksT0FBT0YsR0FJUnpCLEVBQW9CNkIsRUFBSSxTQUFTMUIsR0FDaEMsSUFBSVMsRUFBU1QsR0FBVUEsRUFBT3FCLFdBQzdCLFdBQXdCLE9BQU9yQixFQUFnQixTQUMvQyxXQUE4QixPQUFPQSxHQUV0QyxPQURBSCxFQUFvQlUsRUFBRUUsRUFBUSxJQUFLQSxHQUM1QkEsR0FJUlosRUFBb0JhLEVBQUksU0FBU2lCLEVBQVFDLEdBQVksT0FBT2pCLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3VCLEVBQVFDLElBR3pHL0IsRUFBb0JrQyxFQUFJLEdBSWpCbEMsRUFBb0JBLEVBQW9CbUMsRUFBSSxJLGdCQ2xGckRoQyxFQUFPRCxRQUFVa0MsUUFBUSxVLDZCQ0F6QixtREFBSUMsRUFBVUMsTUFBTUQsUUFFTCxTQUFTRSxFQUFHQyxHQUN6QixJQUFJQyxFQUFNLEdBRVYsR0FBbUIsaUJBQVJELEdBQW1DLGlCQUFSQSxFQUFrQixPQUFPQSxHQUFPLEdBRXRFLEdBQUlILEVBQVFHLEdBQ1YsSUFBSyxJQUFXRSxFQUFQQyxFQUFJLEVBQVFBLEVBQUlILEVBQUlJLE9BQVFELElBQ1IsTUFBdEJELEVBQU1ILEVBQUdDLEVBQUlHLE9BQ2hCRixJQUFRQSxHQUFPLEtBQU9DLFFBSTFCLElBQUssSUFBSUMsS0FBS0gsRUFDUkEsRUFBSVAsZUFBZVUsSUFBTUgsRUFBSUcsS0FBSUYsSUFBUUEsR0FBTyxLQUFPRSxHQUcvRCxPQUFPRixJLGlMQ2xCVCxZQUFTLDBFQUFBSSxZLGdMQ0FULFlBQVMseUVBQUFBLFksdUxDQVQsWUFBUyxnRkFBQUEsWSxrTENBVCxZQUFTLDJFQUFBQSxZLHNMQ0FULFlBQVMsK0VBQUFBLFksdUxDQVQsWUFBUyxnRkFBQUEsWSxpTENBVCxZQUFTLDBFQUFBQSxZLDBOQ0FULFlBQVMseUVBQUFBLFdBQ1QsWUFBUyxrRkFBQUEsV0FDVCxZQUFTLDZFQUFBQSxXQUNULFlBQVMsaUZBQUFBLFksNkJDSFQsT0FDZSxXQUFDLGFBQWUsNkIseWFDRC9CLFVBQ0EsVUFDQSxVQUNBLFdBQ0EsV0FDQSxVQUNBLFdBQ0EsWUFDRSwwRUFBQUMsWUFNRixXQUNBLFdBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFVBQ0EsVUFDQSxXQUNBLFVBQ0EsV0FDQSxXQUNBLFksa0tDM0JBLGNBQ0EsVUFFQSxXQWFBLFVBTkEsU0FBcUIsRyxJQUFFQyxFQUFRLFdBQUVDLEVBQVMsWUFDeEMsT0FDRSwrQkFBS0EsV0FBVyxhQUFTLENBQUMsVUFBT0MsWUFBYUQsS0FBY0QsSyw2QkNaaEUsT0FDZSxXQUFDLFlBQWMsNkIsa0tDRDlCLGNBQ0EsVUFFQSxXQWtGQSxVQTFEQSxTQUFnQixHLE1BQ2RBLEVBQVEsV0FDUkMsRUFBUyxZQUNURSxFQUFPLFVBQ1BDLEVBQVksZUFDWixJQUFBQyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQUMsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFDLDJCQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQUMseUJBQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBQyxpQkFBUyxJQUFHLEdBQUssRUFDakIsSUFBQUMsbUJBQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFDLGFBQUssSUFBRyxXQUFRLEVBQ2hCLElBQUFDLFlBQUksSUFBRyxXQUFRLEVBQ2ZDLEVBQUksT0FFSixPQUNFLGtDQUNFQyxJQUFLZixFQUNMSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT21CLFVBQ1AsVUFBT0gsR0FDUCxVQUFPRCxJLEtBRUwsRUFBQyxVQUFPVixVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxXQUFZQSxFQUNwQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsYUFBY0EsRUFDdEIsRUFBQyxVQUFPQyxxQkFBc0JBLEVBQzlCLEVBQUMsVUFBT0MsbUJBQW9CQSxFQUM1QixFQUFDLFVBQU9RLFlBQWFkLEdBQVdRLEVBQVlPLFNBQVMsUUFDckQsRUFBQyxVQUFPQyxhQUFjaEIsR0FBV1EsRUFBWU8sU0FBUyxTLEdBRXhEckIsSUFFRkksU0FBVUEsRUFDVlMsVUFBV0EsRUFDWFgsUUFBU0EsRUFDVGUsS0FBTUEsRUFDTk0sS0FBSyxVQUVnQixpQkFBYnhCLEdBQ1JULE1BQU1ELFFBQVFVLElBQ2RBLEVBQVNILE9BQ1AsK0JBQUtJLFVBQVcsVUFBT3dCLFNBQVV6QixHQUMvQixLLDZCQzlFVixPQUNlLFdBQUMsVUFBWSwyQkFBMkIsS0FBTywyQkFBMkIsTUFBUSwyQkFBMkIsTUFBUSw0QkFBNEIsT0FBUywyQkFBMkIsU0FBVywyQkFBMkIsUUFBVSwyQkFBMkIsWUFBYywyQkFBMkIsV0FBYSwyQkFBMkIsU0FBVywyQkFBMkIsU0FBVywyQkFBMkIsWUFBYywyQkFBMkIsb0JBQXNCLDJCQUEyQixrQkFBb0IsMkJBQTJCLFVBQVksMkJBQTJCLFFBQVUsNkIscXVCQ0R0bUIsY0FDQSxVQUVBLFdBcUZBLFVBM0RBLFNBQW9CLEcsTUFDZDBCLEVBQVMsS0FDYjFCLEVBQVEsV0FDUkMsRUFBUyxZQUNUZ0IsRUFBSSxPQUNKYixFQUFZLGVBQ1osSUFBQUUsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQUksbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFILGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxpQkFBUyxJQUFHLEdBQUssRUFDakIsSUFBQUMsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLDJCQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQUMseUJBQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBUixnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQVUsbUJBQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFDLGFBQUssSUFBRyxXQUFRLEVBQ2JXLEVBQUssSUFqQlUscU1BdUJsQixZQUp5QixJQUFkRCxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsR0FDUlAsSUFBS2YsRUFBWSxjQUNMLGNBQ1pILFdBQVcsYUFBUyxDQUNsQixVQUFPbUIsVUFDUCxVQUFPSCxHQUNQLFVBQU9ELEksS0FFTCxFQUFDLFVBQU9WLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFdBQVlBLEVBQ3BCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPTCxVQUFXQSxFQUNuQixFQUFDLFVBQU9NLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT0MscUJBQXNCQSxFQUM5QixFQUFDLFVBQU9DLG1CQUFvQkEsRUFDNUIsRUFBQyxVQUFPUSxZQUFhZCxHQUFXUSxFQUFZTyxTQUFTLFFBQ3JELEVBQUMsVUFBT0MsYUFBY2hCLEdBQVdRLEVBQVlPLFNBQVMsUyxHQUV4RHJCLEtBRUUwQixHQUVpQixpQkFBYjNCLEdBQ1JULE1BQU1ELFFBQVFVLElBQ2RBLEVBQVNILE9BQ1AsK0JBQUtJLFVBQVcsVUFBT3dCLFNBQVV6QixHQUMvQixLLDZCQ2pGVixPQUNlLFdBQUMsVUFBWSwyQkFBMkIsS0FBTywyQkFBMkIsTUFBUSw0QkFBNEIsT0FBUywyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUywyQkFBMkIsU0FBVywyQkFBMkIsUUFBVSwyQkFBMkIsWUFBYywyQkFBMkIsV0FBYSwyQkFBMkIsU0FBVywyQkFBMkIsWUFBYywyQkFBMkIsb0JBQXNCLDJCQUEyQixrQkFBb0IsMkJBQTJCLFVBQVksMkJBQTJCLFNBQVcsMkJBQTJCLFNBQVcsMkJBQTJCLFFBQVUsOEIsb0xDRGhyQixZQUFTLDZFQUFBRixZLDJyQkNBVCxjQUNBLFVBRUEsT0FHQSxXQXdEQSxVQXhDQSxTQUFrQixHLElBQ2hCOEIsRUFBSyxRQUNMQyxFQUFRLFdBQ1JDLEVBQVcsY0FDWEMsRUFBTyxVQUNQMUIsRUFBUSxXQUNSekMsRUFBSSxPQUNKcUMsRUFBUyxZQUNUK0IsRUFBYSxnQkFDYixJQUFBZixZQUFJLElBQUcsV0FBUSxFQUNmLElBQUFILGlCQUFTLElBQUcsR0FBSyxFQUVYbUIsR0FBZSxJQUFBQyxjQUNuQixTQUFDQyxHQUNDLE9BQUFOLEVBQVVNLEVBQUVDLE9BQTRCTCxXQUMxQyxDQUFDRixJQUdILE9BQ0Usd0JBQUMsRUFBQVEsTUFBSyxDQUFDL0QsTUFBT3NELEdBQ1osK0NBQ2MsV0FDWlQsSUFBSyxTQUFDbUIsR0FDQUEsSUFDRkEsRUFBU04sY0FBZ0JBLElBRzdCRCxRQUFTQSxFQUNUMUIsU0FBVUEsRUFDVkosV0FBVyxhQUFTLENBQUMsVUFBT3NDLFNBQVV0QyxFQUFXLFVBQU9nQixLQUN4RFksU0FBVUksRUFDVkgsWUFBYUEsRUFDYmxFLEtBQU1BLEVBQ05zRCxLQUFLLFdBQ0xKLFVBQVdBLE8sa0tDeERuQixjQUNBLFVBRUEsV0FxQkEsVUFaQSxTQUFlLEcsSUFBRWIsRUFBUyxZQUFFRCxFQUFRLFdBQUUxQixFQUFLLFFBQUU4QixFQUFZLGVBQ3ZELE9BQ0UsaUNBQ0VlLElBQUtmLEVBQ0xILFdBQVcsYUFBUyxDQUFDLFVBQU9tQixVQUFXbkIsS0FFdEMzQixFQUNBMEIsSyw2QkNuQlAsT0FDZSxXQUFDLFVBQVksNkIsNkJDRDVCLE9BQ2UsV0FBQyxTQUFXLDJCQUEyQixNQUFRLDRCQUE0QixPQUFTLDJCQUEyQixNQUFRLDJCQUEyQixPQUFTLDZCLHVMQ0QxSyxZQUFTLGdGQUFBRixZLGtLQ0FULGNBQ0EsVUFFQSxPQUNBLFdBK0NBLFVBbkNBLFNBQXFCLEcsSUFDbkIwQyxFQUFNLFNBQ05wQyxFQUFZLGVBQ1pxQyxFQUFRLFdBQ1JDLEVBQWEsZ0JBQ2IsSUFBQUMsaUJBQVMsSUFBRyxhQUFVLEVBQ3RCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUVqQixPQUNFLCtCQUNFekIsSUFBS2YsRUFDTEgsV0FBVyxhQUFTLENBQUMsVUFBTzRDLFlBQWEsVUFBT0YsTUFFL0NILEVBQU9NLEtBQUksU0FBQ0MsR0FTWCxPQUNFLHdCQUFDLEVBQUFDLFlBQVcsQ0FDVnBFLElBQUttRSxFQUFNbkUsSUFDWG1FLE1BQU9BLEVBQ1BFLFdBQVlGLEVBQU1uRSxPQUFROEQsYUFBYSxFQUFiQSxFQUFlOUQsS0FDekN1QixRQWJpQixXQUNmeUMsR0FBYUcsRUFBTW5FLE9BQVE4RCxhQUFhLEVBQWJBLEVBQWU5RCxLQUM1QzZELEVBQVMsTUFFVEEsRUFBU00sWSxrS0NsQ3JCLGNBQ0EsVUFFQSxXQWtDQSxVQXhCQSxTQUFxQixHLE1BQ25CQSxFQUFLLFFBQ0wzQyxFQUFZLGVBQ1pELEVBQU8sVUFDUCxJQUFBOEMsa0JBQVUsSUFBRyxHQUFLLEVBRWxCLE9BQ0Usa0NBQ0U5QixJQUFLZixFQUNMSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT2lELGEsS0FFTCxFQUFDLFVBQU9DLFVBQVdGLEUsS0FFckIsY0FDVSxlQUNaOUMsUUFBU0EsRUFDVGlELE1BQU8sQ0FBRUMsZ0JBQWlCTixFQUFNTyxVQUUvQlAsRUFBTW5CLE9BQVMsZ0NBQU0zQixVQUFXLFVBQU9zRCxRQUFTLGlCQUFVUixFQUFNbkIsTUFBSyxjLDZCQ2hDNUUsT0FDZSxXQUFDLFlBQWMsMkJBQTJCLFNBQVcsMkJBQTJCLE9BQVMsNkIsNkJDRHhHLE9BQ2UsV0FBQyxZQUFjLDJCQUEyQixXQUFhLDRCQUE0QixTQUFXLDhCLDZMQ0Q3RyxZQUFTLHNGQUFBOUIsWSxrS0NBVCxjQUNBLFVBRUEsT0FDQSxXQWdCQSxTQUFTMEQsRUFBa0IsRyxNQUN6QnhELEVBQVEsV0FDUkksRUFBWSxlQUNacUQsRUFBTSxTQUNOQyxFQUFNLFNBQ04sSUFBQUMsbUJBQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFDLG9CQUFZLElBQUcsS0FBRSxFQUNqQixJQUFBQyxlQUFPLElBQUcsZUFBUSxFQUNsQixJQUFBcEQsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFxRCxpQkFBUyxJQUFHLEdBQUssRUFDakIsSUFBQXRELGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBdUQsa0JBQVUsSUFBRyxPQUFJLEVBRWpCLE9BQ0Usd0JBQUMsRUFBQUMsTUFBSyxDQUNKNUQsYUFBY0EsRUFDZHNELE9BQVFBLEVBQ1JHLFFBQVNBLEVBQ1RDLFVBQVdBLEVBQ1h0RCxTQUFVQSxFQUNWdUQsV0FBWUEsR0FFWiwrQkFBSzlELFVBQVcsVUFBT21CLFdBQ3JCLDhCQUFJbkIsVUFBVyxVQUFPZ0UsYUFBY1IsR0FDcEMsK0JBQ0V4RCxXQUFXLGFBQVMsQ0FDbEIsVUFBT2lFLGMsS0FDTCxFQUFDLFVBQU96RCxXQUFZQSxFQUFTLE1BR2hDVCxHQUVILCtCQUFLQyxVQUFXLFVBQU9rRSx1QkFDckIsK0JBQUtsRSxVQUFXLFVBQU9tRSxjQUFlVCxHQUN0QywrQkFBSzFELFVBQVcsVUFBT21FLGNBQWVSLE1BT2hESixFQUFrQmEsWUFBYyxvQkFFaEMsVUFBZWIsRywyckJDL0RmLGNBQ0EsUUFDQSxVQUVBLFdBcUVBLFVBdkRBLFNBQWUsRyxRQUNieEQsRUFBUSxXQUNSSSxFQUFZLGVBQ1pzRCxFQUFNLFNBQ05ZLEVBQU0sU0FDTixJQUFBM0QsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFILGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBc0QsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFELGVBQU8sSUFBRyxlQUFRLEVBQ2xCLElBQUFFLGtCQUFVLElBQUcsT0FBSSxHQUVqQixJQUFBUSxZQUFXLFNBQVVWLEdBRXJCLElBQU1XLEdBQXFCLElBQUF0QyxjQUFZLFdBQ3JDMkIsTUFDQyxDQUFDQSxJQUVKLE9BQ0VILEdBQ0UsK0JBQUt2QyxJQUFLZixHQUNSLCtCQUNFZ0QsTUFBTyxDQUFFcUIsT0FBUVYsR0FDakI5RCxXQUFXLGFBQVMsQ0FDbEIsVUFBT3lFLFMsS0FDTCxFQUFDLFVBQU9aLFdBQVlBLEVBQVMsS0FDL0IsY0FDVSxnQkFDWjNELFFBQVNxRSxJQUVYLCtCQUNFcEIsTUFBTyxDQUFFcUIsT0FBUVYsRUFBYSxHQUM5QjlELFdBQVcsYUFBUyxDQUNsQixVQUFPMEUsTyxLQUVMLEVBQUMsVUFBT2hFLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT0gsVUFBV0EsRSxLQUVyQixjQUNVLFNBRVhSLEdBRUZzRSxHQUNDLCtCQUNFbEIsTUFBTyxDQUFFcUIsT0FBUVYsRUFBYSxHQUM5QjlELFVBQVcsVUFBTzJFLGFBRWpCTixNLDZCQ2pFYixPQUNlLFdBQUMsUUFBVSwyQkFBMkIsVUFBWSw0QkFBNEIsTUFBUSwyQkFBMkIsWUFBYywyQkFBMkIsU0FBVywyQkFBMkIsWUFBYyw2Qiw2QkNEN04sT0FDZSxXQUFDLFVBQVksMkJBQTJCLFlBQWMsMkJBQTJCLGFBQWUsMkJBQTJCLFVBQVksNEJBQTRCLHNCQUF3Qiw0QkFBNEIsYUFBZSw2QixvTENEclAsWUFDRSw2RUFBQXhFLFksMnJCQ0RGLGNBRUEsUUFDQSxPQUNBLE9BQ0EsT0FDQSxPQUVBLFdBQ0EsV0E0RkEsVUFyRUEsU0FBa0MsRyxJQUNoQytFLEVBQUssUUFDTEMsRUFBZ0IsbUJBQ2hCbEQsRUFBSyxRQUNLbUQsRUFBWSxXQUN0QkMsRUFBTSxTQUNOQyxFQUFZLGVBQ1osSUFBQUMsaUNBQXlCLElBQUcsR0FBSSxFQUNoQyxJQUFBQywrQkFBdUIsSUFBRyxHQUFLLEVBQy9CLElBQUFDLHVCQUFlLElBQUcsR0FBSyxFQUN2QixJQUFBQyx1QkFBZSxJQUFHLEdBQUssRUFDdkIsSUFBQUMsc0JBQWMsSUFBRyxHQUFLLEVBRWhCLEdBQXNCLElBQUFDLFdBQVMsR0FBOUI3QixFQUFNLEtBQUU4QixFQUFTLEtBQ2xCckUsR0FBTSxJQUFBc0Usa0JBQWdCLFdBQU0sT0FBQUQsR0FBVSxNQU10Q0UsRUFBZ0JULEVBQWVBLEVBQWFySCxLQUFPb0gsRUFDbkRXLEVBQ0osd0JBQUMsRUFBQUMsT0FBTSxDQUNMNUUsTUFBTSxPQUNOWCxVQUFXd0UsR0FBMEIsSUFBakJBLEVBQU1oRixPQUMxQk0sUUFBUyxXQUFNLE9BQUFxRixHQUFXOUIsSUFDMUJ6QyxLQUFLLFNBQ0xMLG9CQUFxQnNFLEVBQ3JCckUsa0JBQW1Cc0UsRUFDbkIxRSxVQUFXMkUsRUFDWDVFLFNBQVU2RSxFQUNWM0UsU0FBVTRFLEdBRVYsK0JBQUtyRixVQUFXLFVBQUkrRSxRQUNDLGlCQUFYQSxFQUFzQlUsRUFBZ0JWLEVBQU9DLEdBQ3JELHdCQUFDLEVBQUFZLEtBQUksQ0FBQ0MsSUFBSSxXQUFXQyxJQUFLLGNBS2hDLE9BQ0Usd0JBQUMsRUFBQUMsY0FBYSxDQUNaMUIsT0FDRTFDLEVBQVEsd0JBQUMsRUFBQVMsTUFBSyxDQUFDL0QsTUFBT3NELEdBQVErRCxHQUEwQkEsRUFFMURNLFVBQVcsQ0FBRUMsU0FBVSxTQUFVQyxXQUFZLFFBQzdDaEYsSUFBS0EsR0FFTCx3QkFBQyxFQUFBaUYsS0FBSSxDQUFDMUMsT0FBUUEsR0FDWG1CLEdBQ0NBLEVBQU0vQixLQUFJLFNBQUN1RCxHQUFTLE9BQ2xCLHdCQUFDLEVBQUFDLFNBQVEsQ0FDUEMsU0FBVUYsRUFBS0csTUFBT3ZCLGFBQVksRUFBWkEsRUFBY3VCLElBQ3BDNUgsSUFBS3lILEVBQUtHLEdBQ1ZyRyxRQUFTLFdBQU0sT0F2Q1AsU0FBQ2tHLEdBQ25CdEIsRUFBYXNCLEdBQ2JiLEdBQVUsR0FxQ2VpQixDQUFZSixLQUUxQnZCLEVBQ0dBLEVBQWlCLENBQ2Z1QixLQUFJLEVBQ0pwRCxXQUFZb0QsRUFBS0csTUFBT3ZCLGFBQVksRUFBWkEsRUFBY3VCLE1BRXhDSCxFQUFLekksYSxrS0M3RnZCLGNBQ0EsVUFDQSxXQWdDQSxVQXZCQSxTQUFjLEcsTUFDWm1JLEVBQUcsTUFDSEQsRUFBRyxNQUNIMUYsRUFBWSxlQUNaLElBQUFhLFlBQUksSUFBRyxXQUFRLEVBQ2YsSUFBQVgsZ0JBQVEsSUFBRyxHQUFLLEVBRWhCLE9BQ0UsK0JBQ0VhLElBQUtmLEVBQ0xILFdBQVcsYUFBUyxDQUNsQixVQUFPeUcsS0FDUCxVQUFPekYsSSxLQUNMLEVBQUMsVUFBT1gsVUFBV0EsRUFBUSxLQUUvQnFHLFlBQVksWUFBVyxjQUNYLE9BQ1piLElBQUtBLEVBQ0xDLElBQUtBLE0sNkJDN0JYLE9BQ2UsV0FBQyxLQUFPLDJCQUEyQixNQUFRLDJCQUEyQixPQUFTLDJCQUEyQixNQUFRLDRCQUE0QixPQUFTLDJCQUEyQixTQUFXLDZCLGtLQ0Q1TSxjQUNBLFVBRUEsV0FvREEsVUF6Q0EsU0FBYyxHLFFBQ1ovRixFQUFRLFdBQ1JJLEVBQVksZUFDWkgsRUFBUyxZQUNULElBQUF5RCxjQUFNLElBQUcsR0FBSSxFQUNiRCxFQUFNLFNBQ05tRCxFQUFNLFNBRU4sT0FBS2xELEVBS0gsZ0RBQ0UsK0JBQ0V2QyxJQUFLZixFQUNMSCxXQUFXLGFBQVMsQ0FDbEIsVUFBTzRHLE0sS0FDTCxFQUFDLFVBQU9DLE1BQU9wRCxFQUFNLEdBQ3ZCekQsS0FHRiwrQkFBS0EsVUFBVyxVQUFPOEcsaUJBQ3BCdEQsR0FBVUMsR0FBVSw4QkFBSXpELFVBQVcsVUFBT3dELFFBQVNBLEdBQ3BELGtDQUFLQyxHQUFVMUQsSUFFaEI0RyxHQUFVbEQsR0FDVCwrQkFDRXpELFdBQVcsYUFBUyxDQUNsQixVQUFPMkcsUSxLQUNMLEVBQUMsVUFBT2xHLFdBQVlWLEVBQVEsTUFHL0I0RyxLQXhCRixPLDZCQ3ZCWCxPQUNlLFdBQUMsS0FBTywyQkFBMkIsS0FBTywyQkFBMkIsU0FBVywyQkFBMkIsT0FBUywyQkFBMkIsT0FBUywyQkFBMkIsU0FBVywyQkFBMkIsZ0JBQWtCLDZCLDJyQkNEMVAsY0FNQSxVQUVBLFdBd0NBLFdBQWUsSUFBQUksYUExQmYsU0FDRSxFQU1BN0YsRyxJQUxFbkIsRUFBUSxXQUNSc0UsRUFBTSxTQUNOckUsRUFBUyxZQUNULElBQUFnRyxpQkFBUyxJQUFHLEdBQUVFLFdBQVksT0FBUUQsU0FBVSxVQUFVLEVBSXhELE9BQ0UsK0JBQUsvRSxJQUFLQSxFQUFLbEIsV0FBVyxhQUFTLENBQUMsVUFBT21CLFVBQVduQixLQUNuRHFFLEVBRUQsK0JBQ0VyRSxXQUFXLGFBQVMsQ0FDbEIsVUFBT2dILGNBQ1AsVUFBT2hCLEVBQVVFLFlBQ2pCLFVBQU9GLEVBQVVDLGFBR2xCbEcsUSw2QkMxQ1QsT0FDZSxXQUFDLFVBQVksMkJBQTJCLGNBQWdCLDJCQUEyQixJQUFNLDJCQUEyQixNQUFRLDJCQUEyQixLQUFPLDJCQUEyQixPQUFTLDZCLGtLQ0RqTixjQUNBLFVBRUEsV0FnQ0EsVUF0QkEsU0FBa0IsRyxRQUNoQkEsRUFBUSxXQUNSQyxFQUFTLFlBQ1RFLEVBQU8sVUFDUCxJQUFBTSxpQkFBUyxJQUFHLEdBQUssRUFDakIsSUFBQThGLGdCQUFRLElBQUcsR0FBSyxFQUVoQixPQUNFLDhCQUNFdEcsV0FBVyxhQUFTLENBQ2xCLFVBQU9pSCxVLEtBQ0wsRUFBQyxVQUFPQyxRQUFTWixFQUFRLEksS0FDekIsRUFBQyxVQUFPOUYsV0FBWUEsRUFBUyxHQUMvQlIsSUFFRkUsUUFBU0EsR0FFUkgsSyw2QkM5QlAsT0FDZSxXQUFDLFNBQVcsMkJBQTJCLFVBQVksMkJBQTJCLE9BQVMsNkIscXVCQ0R0RyxjQUNBLFVBRUEsV0FxQ0EsVUExQkEsU0FBc0IsRyxNQUNoQjBCLEVBQVMsS0FDYjFCLEVBQVEsV0FDUkMsRUFBUyxZQUNULElBQUFRLGlCQUFTLElBQUcsR0FBSyxFQUNka0IsRUFBSyxJQUxZLDJDQVdwQixZQUp5QixJQUFkRCxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsaUJBQ0ksaUJBQ1p6QixXQUFXLGFBQVMsQ0FDbEIsVUFBT21ILGFBQ1BuSCxHLEtBQ0UsRUFBQyxVQUFPUSxXQUFZQSxFQUFTLE1BRTdCa0IsR0FFSDNCLEssNkJDbkNQLE9BQ2UsV0FBQyxhQUFlLDJCQUEyQixVQUFZLDRCQUE0QixPQUFTLDJCQUEyQixTQUFXLDZCLDZCQ0RqSixPQUNlLFdBQUMsT0FBUyw2Qiw2QkNEekIsT0FBZSx1TixxTENBZixZQUFTLDhFQUFBRixZLGtLQ0FULGNBQ0EsVUFHQSxXQXVFQSxVQWpEQSxTQUFtQixHLE1BQ2pCRSxFQUFRLFdBQ1JxSCxFQUFNLFNBQ054RixFQUFRLFdBQ1JTLEVBQVEsV0FDUixJQUFBZ0YsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFqSCxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUQsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFFLG1CQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBQywyQkFBbUIsSUFBRyxHQUFLLEVBQzNCLElBQUFDLHlCQUFpQixJQUFHLEdBQUssRUFDekIsSUFBQU4sZUFBTyxJQUFHLEdBQUssRUFDZixJQUFBVSxZQUFJLElBQUcsV0FBUSxFQUVmLE9BQ0UsaUNBQ0VoQixXQUFXLGFBQVMsQ0FDbEIsVUFBTzJCLE1BQ1AsVUFBT1gsSSxLQUVMLEVBQUMsVUFBT1gsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPRCxXQUFZQSxFQUNwQixFQUFDLFVBQU9FLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT0MscUJBQXNCQSxFQUM5QixFQUFDLFVBQU9DLG1CQUFvQkEsRSxNQUloQyxpQ0FDRVosVUFBVyxVQUFPc0gsTUFDbEJyRyxLQUFLLE9BQ0xzRixHQUFHLE9BQ0hhLE9BQVFBLEVBQ1JDLFNBQVVBLEVBQ1ZuRyxJQUFLbUIsRUFDTGpDLFNBQVVBLEVBQ1Z3QixTQUFVQSxJQUVYN0IsSyw2QkN0RVAsT0FDZSxXQUFDLE1BQVEsMkJBQTJCLE1BQVEsMkJBQTJCLE1BQVEsMkJBQTJCLE1BQVEsMkJBQTJCLE9BQVMsMkJBQTJCLFNBQVcsMkJBQTJCLFFBQVUsMkJBQTJCLFNBQVcsNEJBQTRCLFNBQVcsMkJBQTJCLFVBQVksMkJBQTJCLFlBQWMsMkJBQTJCLG9CQUFzQiwyQkFBMkIsa0JBQW9CLDZCLHlMQ0Q3ZSxZQUFTLGtGQUFBRixZLGtLQ0FULGNBQ0EsVUFFQSxXQStEQSxVQWpDQSxTQUF1QixHLE1BQ3JCRSxFQUFRLFdBQ1JJLEVBQVksZUFDWixJQUFBb0gsY0FBTSxJQUFHLFdBQVEsRUFDakIsSUFBQXZCLGlCQUFTLElBQUcsR0FBRUUsV0FBWSxTQUFVRCxTQUFVLFNBQVV1QixPQUFRLFlBQVksRUFFdEVDLEVBQ3FCLFdBQXpCekIsRUFBVUUsV0FDTixtQkFDQUYsRUFBVUUsV0FFVndCLEVBQ21CLFdBQXZCMUIsRUFBVUMsU0FBd0IsaUJBQW1CRCxFQUFVQyxTQUVqRSxPQUNFLCtCQUNFL0UsSUFBS2YsRUFBWSxjQUNMLGlCQUNaSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT21CLFVBQ1AsVUFBT3NHLEdBQ1AsVUFBT0MsR0FDUCxVQUFPSCxJLEtBRUwsRUFBQyxVQUFPSSxPQUE2QixjQUFyQjNCLEVBQVV3QixPLE1BSTdCekgsSyw2QkM3RFAsT0FDZSxXQUFDLFVBQVksMkJBQTJCLElBQU0sMkJBQTJCLE9BQVMsMkJBQTJCLE1BQVEsNEJBQTRCLE1BQVEsMkJBQTJCLFlBQWMsMkJBQTJCLElBQU0sMkJBQTJCLFFBQVUsMkJBQTJCLFVBQVksMkJBQTJCLE1BQVEsMkJBQTJCLFVBQVksMkJBQTJCLFlBQWMsMkJBQTJCLE9BQVMsMkJBQTJCLFdBQWEsMkJBQTJCLGFBQWUsMkJBQTJCLEtBQU8sMkJBQTJCLFNBQVcsMkJBQTJCLFdBQWEsNEJBQTRCLGlCQUFtQiwyQkFBMkIsZUFBaUIsOEIsc0xDRGx2QixZQUFTLCtFQUFBRixZLGtLQ0FULGNBQ0EsVUFFQSxPQUNBLFdBQ0EsT0FvRUEsVUEvQ0EsU0FBb0IsRyxNQUNsQkcsRUFBUyxZQUNURyxFQUFZLGVBQ1oyRixFQUFHLE1BQ0hELEVBQUcsTUFDSCxJQUFBK0Isb0JBQVksSUFBRyxPQUFJLEVBQ25CLElBQUE5RyxtQkFBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQVosZUFBTyxJQUFHLGVBQVEsRUFDbEIsSUFBQUUsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLG1CQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBSixlQUFPLElBQUcsR0FBSyxFQUNmLElBQUFVLFlBQUksSUFBRyxXQUFRLEVBQ2YsSUFBQUMsWUFBSSxJQUFHLFdBQVEsRUFFZixPQUNFLGtDQUNFQyxJQUFLZixFQUNMSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT21CLFVBQ1AsVUFBT0gsSSxLQUVMLEVBQUMsVUFBT1gsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxhQUFjQSxFQUN0QixFQUFDLFVBQU9tSCxXQUFZdkgsR0FBV1EsRUFBWU8sU0FBUyxPQUNwRCxFQUFDLFVBQU9DLGFBQWNoQixHQUFXUSxFQUFZTyxTQUFTLFNBQ3RELEVBQUMsVUFBT3lHLGNBQWV4SCxHQUFXUSxFQUFZTyxTQUFTLFVBQ3ZELEVBQUMsVUFBT0QsWUFBYWQsR0FBV1EsRUFBWU8sU0FBUyxRLEdBRXZEckIsSUFFRkksU0FBVUEsRUFDVkYsUUFBU0EsRUFDVGUsS0FBTUEsRUFDTk0sS0FBSyxVQUVMLHdCQUFDLEVBQUFxRSxLQUFJLENBQUNFLElBQUtBLEVBQUtELElBQUtBLEVBQUs3RSxLQUFNQSxFQUFNWCxTQUFVQSxJQUMvQ3VILEdBQWdCLHdCQUFDLEVBQUFHLFlBQVcsS0FBRUgsTSw2QkNwRXJDLE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixNQUFRLDRCQUE0QixPQUFTLDRCQUE0QixNQUFRLDJCQUEyQixPQUFTLDJCQUEyQixRQUFVLDJCQUEyQixVQUFZLDRCQUE0QixZQUFjLDJCQUEyQixhQUFlLDRCQUE0QixXQUFhLDJCQUEyQixTQUFXLDJCQUEyQixTQUFXLDJCQUEyQixTQUFXLDJCQUEyQixZQUFjLDZCLDBMQ0RoaEIsWUFBUyxtRkFBQS9ILFkscXVCQ0FULGNBRUEsVUFDQSxPQUNBLFdBRUEsT0F5RUEsVUFsREEsU0FBd0IsRyxNQUNsQjRCLEVBQVMsS0FDYnRCLEVBQVksZUFDWkgsRUFBUyxZQUNUOEYsRUFBRyxNQUNIRCxFQUFHLE1BQ0gsSUFBQStCLG9CQUFZLElBQUcsT0FBSSxFQUNuQixJQUFBdkgsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFKLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQVEsbUJBQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFWLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBWSxZQUFJLElBQUcsV0FBUSxFQUNaVSxFQUFLLElBZmMsdUpBcUJ0QixZQUp5QixJQUFkRCxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsR0FDUlAsSUFBS2YsRUFBWSxjQUNMLG1CQUNaSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT21CLFVBQ1AsVUFBT0gsSSxLQUVMLEVBQUMsVUFBT1gsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPTCxVQUFXQSxFQUNuQixFQUFDLFVBQU9NLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT21ILFdBQVl2SCxHQUFXUSxFQUFZTyxTQUFTLE9BQ3BELEVBQUMsVUFBT0MsYUFBY2hCLEdBQVdRLEVBQVlPLFNBQVMsU0FDdEQsRUFBQyxVQUFPeUcsY0FBZXhILEdBQVdRLEVBQVlPLFNBQVMsVUFDdkQsRUFBQyxVQUFPRCxZQUFhZCxHQUFXUSxFQUFZTyxTQUFTLFEsR0FFdkRyQixLQUVFMEIsR0FFSix3QkFBQyxFQUFBa0UsS0FBSSxDQUFDRSxJQUFLQSxFQUFLRCxJQUFLQSxFQUFLN0UsS0FBTUEsRUFBTVgsU0FBVUEsSUFDL0N1SCxHQUFnQix3QkFBQyxFQUFBRyxZQUFXLEtBQUVILE0sNkJDMUVyQyxPQUNlLFdBQUMsVUFBWSwyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUyw0QkFBNEIsTUFBUSwyQkFBMkIsT0FBUywyQkFBMkIsUUFBVSwyQkFBMkIsVUFBWSwyQkFBMkIsWUFBYywyQkFBMkIsYUFBZSw0QkFBNEIsV0FBYSwyQkFBMkIsU0FBVywyQkFBMkIsU0FBVywyQkFBMkIsU0FBVywyQkFBMkIsWUFBYywyQkFBMkIsU0FBVyw2QixpTENEcGpCLFlBQVMsMEVBQUEvSCxZLGtLQ0FULGNBQ0EsVUFFQSxXQW9EQSxVQXRDQSxTQUF3QixHLElBQ3RCaUcsRUFBRyxNQUNIRCxFQUFHLE1BQ0htQyxFQUFRLFdBQ1JDLEVBQVMsWUFDVGxJLEVBQVEsV0FDUkksRUFBWSxlQUNaLElBQUFvSCxjQUFNLElBQUcsWUFBUyxFQUNsQixJQUFBVyxnQkFBUSxNQUFFLE9BQU0sRUFDaEIsSUFBQUMsZUFBTyxNQUFFLFFBQU8sRUFFVkMsRUFDSiwrQkFDRXBJLFdBQVcsYUFBUyxDQUFDLFVBQU9xSSxNQUFPLFVBQU9kLEtBQzFDYixZQUFZLFlBQVcsY0FDWCxRQUNaYixJQUFLQSxFQUNMQyxJQUFLQSxFQUNMd0MsTUFBT04sRUFDUE8sT0FBUU4sRUFDUkMsU0FBVUEsRUFDVkMsUUFBU0EsSUFJYixPQUFPcEksRUFDTCwrQkFDRW1CLElBQUtmLEVBQ0xILFdBQVcsYUFBUyxDQUFDLFVBQU9tQixVQUFXLFVBQU9xSCxjQUU3Q0osRUFDQXJJLEdBQVksK0JBQUtDLFVBQVcsVUFBT3lFLFNBQVUxRSxJQUU5QyxJLDZCQ2xETixPQUNlLFdBQUMsVUFBWSw0QkFBNEIsV0FBYSwyQkFBMkIsUUFBVSw0QkFBNEIsTUFBUSwyQkFBMkIsTUFBUSw0QkFBNEIsUUFBVSwyQkFBMkIsb0JBQXNCLDJCQUEyQixrQkFBb0IsOEIsc05DRHZULFlBQVMsNkVBQUFGLFdBQ1QsWUFBUyxpRkFBQUEsV0FDVCxZQUFTLHFGQUFBQSxZLGtLQ0ZULGNBQ0EsVUFFQSxXQThCQSxVQXBCQSxTQUFrQixHLElBQ2hCRSxFQUFRLFdBQ1JDLEVBQVMsWUFDVEcsRUFBWSxlQUNacUQsRUFBTSxTQUNOaUYsRUFBYSxnQkFFYixPQUNFLCtCQUFLdkgsSUFBS2YsRUFBY0gsV0FBVyxhQUFTLENBQUMsVUFBT21CLFVBQVduQixNQUMzRHdELEdBQVVpRixJQUNWLCtCQUFLekksVUFBVyxVQUFPd0QsUUFDcEJBLEdBQVUsOEJBQUl4RCxVQUFXLFVBQU8wSSxhQUFjbEYsR0FDOUNpRixHQUdMLDhCQUFJekksVUFBVyxVQUFPMkksTUFBTzVJLE0sNkJDNUJuQyxPQUNlLFdBQUMsVUFBWSwyQkFBMkIsT0FBUyw0QkFBNEIsWUFBYywyQkFBMkIsS0FBTyw4QixrS0NENUksY0FDQSxVQUVBLE9BRUEsV0EyQ0EsVUE5QkEsU0FBc0IsRyxJQUNwQkEsRUFBUSxXQUNSLElBQUFtSCxjQUFNLElBQUcsR0FBSyxFQUNkLElBQUE5RyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQU0sbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFGLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBUSxZQUFJLElBQUcsV0FBUSxFQUNmLElBQUFELGFBQUssSUFBRyxXQUFRLEVBQ2hCLElBQUFiLGVBQU8sSUFBRyxlQUFRLEVBRWxCLE9BQ0UsOEJBQUlGLFdBQVcsYUFBUyxDQUFDLFVBQU80SSxnQkFDOUIsd0JBQUMsRUFBQWpELE9BQU0sQ0FDTHpGLFFBQVNBLEVBQ1RFLFNBQVVBLEVBQ1ZDLFNBQVU2RyxFQUNWeEcsWUFBYUEsRUFDYkYsVUFBV0EsRUFDWE8sTUFBT0EsRUFDUEMsS0FBTUEsRUFDTkwscUJBQW1CLEVBQ25CSixVQUFRLEVBQ1JFLFVBQVEsR0FFUFYsTSxxdUJDMUNULGNBQ0EsVUFFQSxPQUNBLFdBaURBLFVBbENBLFNBQTBCLEdBQ3hCLElBQUFBLEVBQVEsV0FDSjBCLEVBQVMsS0FDYixJQUFBeUYsY0FBTSxJQUFHLEdBQUssRUFDZCxJQUFBeEcsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFGLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBTyxhQUFLLElBQUcsV0FBUSxFQUNoQixJQUFBQyxZQUFJLElBQUcsV0FBUSxFQUNaVSxFQUFLLElBUmdCLHFFQWN4QixZQUp5QixJQUFkRCxJQUNUQSxFQUFZLEtBSVosOEJBQUl6QixXQUFXLGFBQVMsQ0FBQyxVQUFPNEksZ0JBQzlCLHdCQUFDLEVBQUFDLFdBQVUsR0FDVEMsR0FBSXJILEVBQ0pwQixTQUFVNkcsRUFDVnhHLFlBQWFBLEVBQ2JGLFVBQVdBLEVBQ1hPLE1BQU9BLEVBQ1BDLEtBQU1BLEVBQ05MLHFCQUFtQixFQUNuQkosVUFBUSxFQUNSRSxVQUFRLEdBQ0ppQixHQUVIM0IsTSxtTEMvQ1QsWUFBUyw0RUFBQUYsWSxrS0NBVCxjQUNBLFVBQ0EsV0FtQ0EsVUF6QkEsU0FBaUIsRyxNQUNmRSxFQUFRLFdBQ1JJLEVBQVksZUFDWixJQUFBTyxtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQXFJLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQTdJLGVBQU8sSUFBRyxlQUFRLEVBRWxCLE9BQ0UsK0JBQ0VnQixJQUFLZixFQUFZLGNBQ0wsVUFDWkgsV0FBVyxhQUFTLENBQ2xCLFVBQU95RSxTLEtBRUwsRUFBQyxVQUFPL0QsYUFBY0EsRUFDdEIsRUFBQyxVQUFPaUgsT0FBUW9CLEUsS0FHcEI3SSxRQUFTQSxHQUVSSCxLLDZCQ2hDUCxPQUNlLFdBQUMsUUFBVSwyQkFBMkIsWUFBYywyQkFBMkIsTUFBUSw2QixxTENEdEcsWUFBUyw4RUFBQUYsWSwyckJDQVQsY0FDQSxVQUVBLE9BQ0EsV0E4REEsVUE1Q0EsU0FBbUIsRyxNQUNqQjhCLEVBQUssUUFDTEMsRUFBUSxXQUNSb0gsRUFBTSxTQUNOQyxFQUFTLFlBQ1RwSCxFQUFXLGNBQ1h4RCxFQUFLLFFBQ0xWLEVBQUksT0FDSjBFLEVBQVEsV0FDUixJQUFBckIsWUFBSSxJQUFHLFdBQVEsRUFDZixJQUFBQyxZQUFJLElBQUcsU0FBTSxFQUNiLElBQUFKLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBSixnQkFBUSxJQUFHLEdBQUssRUFFVnVCLEdBQWUsSUFBQUMsY0FDbkIsU0FBQ0MsR0FDS04sR0FDRkEsRUFBVU0sRUFBRUMsT0FBNEI5RCxTQUc1QyxDQUFDdUQsSUFHR3NILEVBQ0osK0NBQ2MsUUFDWmhJLElBQUttQixFQUNMckMsV0FBVyxhQUFTLENBQUMsVUFBT21KLFVBQVcsVUFBT25JLElBQUssS0FBRyxFQUFDLFVBQU9QLFVBQVdBLEVBQVEsS0FDakZtQixTQUFVSSxFQUNWZ0gsT0FBUUEsRUFDUkMsVUFBV0EsRUFDWHBILFlBQWFBLEVBQ2JsRSxLQUFNQSxFQUNOc0QsS0FBTUEsRUFDTjVDLE1BQU9BLEVBQ1B3QyxVQUFXQSxJQUdmLE9BQUljLEVBQ0ssd0JBQUMsRUFBQVMsTUFBSyxDQUFDL0QsTUFBT3NELEdBQVF1SCxHQUV0QixnREFBR0EsSyw2QkMvRGQsT0FDZSxXQUFDLFVBQVksMkJBQTJCLE1BQVEsMkJBQTJCLE9BQVMsNEJBQTRCLE1BQVEsMkJBQTJCLE9BQVMsMkJBQTJCLFNBQVcsNkIsa01DRGpOLFlBQVMsMEVBQUFySixXQUNULFlBQVMsbUZBQUFBLFksa0tDRFQsY0FFQSxXQXFCQSxVQWJBLFNBQWUsRyxJQUFFRSxFQUFRLFdBQUVJLEVBQVksZUFBRSxJQUFBRCxlQUFPLElBQUcsZUFBUSxFQUN6RCxPQUNFLCtCQUNFZ0IsSUFBS2YsRUFDTEgsVUFBVyxVQUFPb0osTUFDbEJsSixRQUFTQSxFQUFPLGNBQ0osU0FFWEgsSyw2QkNsQlAsT0FDZSxXQUFDLE1BQVEsMkJBQTJCLFNBQVcsNkIsa0tDRDlELGNBRUEsVUFDQSxXQWtCQSxVQVpBLFNBQXdCLEcsSUFBRUEsRUFBUSxXQUFFK0QsRUFBVSxhQUM1QyxPQUNFLCtCQUNFOUQsV0FBVyxhQUFTLENBQUMsVUFBT3FKLGlCQUM1QmxHLE1BQU8sQ0FBRXFCLE9BQVFWLEdBQVksY0FDakIsbUJBRVgvRCxLLDZCQ2hCUCxPQUNlLFdBQUMsZUFBaUIsOEIsaUxDRGpDLFlBQVMsMEVBQUFGLFksa0tDQVQsY0FDQSxVQUVBLFdBdUVBLFVBOUNBLFNBQWUsRyxJQUNiaUcsRUFBRyxNQUNIN0UsRUFBSSxPQUNKbEIsRUFBUSxXQUNSSSxFQUFZLGVBQ1ptSixFQUFNLFNBQ04sSUFBQUMsYUFBSyxJQUFHLEdBQUksRUFDWixJQUFBQyxZQUFJLElBQUcsR0FBSSxFQUNYLElBQUFDLGdCQUFRLElBQUcsR0FBSSxFQUNmLElBQUFsQyxjQUFNLElBQUcsWUFBUyxFQUVsQixPQUFPeEgsRUFDTCwrQkFDRW1CLElBQUtmLEVBQ0xILFdBQVcsYUFBUyxDQUFDLFVBQU9tQixVQUFXLFVBQU9xSCxjQUU5QywrQ0FDYyxRQUNaOUIsWUFBWSxZQUNaMUcsV0FBVyxhQUFTLENBQUMsVUFBTzBKLE1BQU8sVUFBT25DLEtBQzFDZ0MsTUFBT0EsRUFDUEMsS0FBTUEsRUFDTkMsU0FBVUEsRUFDVkgsT0FBUUEsRUFDUkssYUFBVyxHQUVYLGdEQUFvQixTQUFTN0QsSUFBS0EsRUFBSzdFLEtBQU1BLEtBRTlDbEIsR0FBWSwrQkFBS0MsVUFBVyxVQUFPeUUsU0FBVTFFLElBR2hELCtDQUNjLFFBQ1oyRyxZQUFZLFlBQ1oxRyxXQUFXLGFBQVMsQ0FBQyxVQUFPMEosTUFBTyxVQUFPbkMsS0FDMUNnQyxNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVM3RCxJQUFLQSxFQUFLN0UsS0FBTUEsTyw2QkNyRW5ELE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixXQUFhLDJCQUEyQixNQUFRLDJCQUEyQixNQUFRLDJCQUEyQixRQUFVLDJCQUEyQixvQkFBc0IsMkJBQTJCLGtCQUFvQiwyQkFBMkIsUUFBVSw2Qix3T0NBclMsU0FBU3VFLEVBQWdCb0UsR0FDcEMsSUFBSTFJLEVBQU0sbUJBZVYsT0FkQSxxQkFBVSxXQUNOLElBQUlzRixFQUFjLFNBQVVxRCxHQUNuQjNJLEVBQUk0SSxVQUFXNUksRUFBSTRJLFFBQVFDLFNBQVNGLEVBQU0xSCxTQUcvQ3lILEVBQVNDLElBSWIsT0FGQUcsU0FBU0MsaUJBQWlCLFVBQVd6RCxHQUNyQ3dELFNBQVNDLGlCQUFpQixXQUFZekQsR0FDL0IsV0FDSHdELFNBQVNFLG9CQUFvQixVQUFXMUQsR0FDeEN3RCxTQUFTRSxvQkFBb0IsV0FBWTFELE1BRTlDLENBQUNvRCxJQUNHMUk7Ozs7Ozs7Ozs7Ozs7O2dGQ29ESixTQUFTaUosRUFBVUMsRUFBU0MsRUFBWUMsRUFBR0MsR0FFOUMsT0FBTyxJQUFLRCxJQUFNQSxFQUFJRSxXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVV0TSxHQUFTLElBQU11TSxFQUFLTCxFQUFVTSxLQUFLeE0sSUFBVyxNQUFPNkQsR0FBS3dJLEVBQU94SSxJQUNwRixTQUFTNEksRUFBU3pNLEdBQVMsSUFBTXVNLEVBQUtMLEVBQWlCLE1BQUVsTSxJQUFXLE1BQU82RCxHQUFLd0ksRUFBT3hJLElBQ3ZGLFNBQVMwSSxFQUFLRyxHQUpsQixJQUFlMU0sRUFJYTBNLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU8xTSxRQUoxQ0EsRUFJeUQwTSxFQUFPMU0sTUFKaERBLGFBQWlCaU0sRUFBSWpNLEVBQVEsSUFBSWlNLEdBQUUsU0FBVUcsR0FBV0EsRUFBUXBNLE9BSVQ0TSxLQUFLTixFQUFXRyxHQUNsR0YsR0FBTUwsRUFBWUEsRUFBVVcsTUFBTWQsRUFBU0MsR0FBYyxLQUFLUSxXQUkvRCxTQUFTTSxFQUFZZixFQUFTZ0IsR0FDakMsSUFBc0dDLEVBQUdDLEVBQUdoTixFQUFHaU4sRUFBM0dDLEVBQUksQ0FBRTdKLE1BQU8sRUFBRzhKLEtBQU0sV0FBYSxHQUFXLEVBQVBuTixFQUFFLEdBQVEsTUFBTUEsRUFBRSxHQUFJLE9BQU9BLEVBQUUsSUFBT29OLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPSixFQUFJLENBQUVWLEtBQU1lLEVBQUssR0FBSSxNQUFTQSxFQUFLLEdBQUksT0FBVUEsRUFBSyxJQUF3QixtQkFBWHpOLFNBQTBCb04sRUFBRXBOLE9BQU8wTixVQUFZLFdBQWEsT0FBT0MsT0FBVVAsRUFDdkosU0FBU0ssRUFBSy9NLEdBQUssT0FBTyxTQUFVa04sR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlYLEVBQUcsTUFBTSxJQUFJWSxVQUFVLG1DQUMzQixLQUFPVCxHQUFHLElBQ04sR0FBSUgsRUFBSSxFQUFHQyxJQUFNaE4sRUFBWSxFQUFSME4sRUFBRyxHQUFTVixFQUFVLE9BQUlVLEVBQUcsR0FBS1YsRUFBUyxTQUFPaE4sRUFBSWdOLEVBQVUsU0FBTWhOLEVBQUVmLEtBQUsrTixHQUFJLEdBQUtBLEVBQUVULFNBQVd2TSxFQUFJQSxFQUFFZixLQUFLK04sRUFBR1UsRUFBRyxLQUFLaEIsS0FBTSxPQUFPMU0sRUFFM0osT0FESWdOLEVBQUksRUFBR2hOLElBQUcwTixFQUFLLENBQVMsRUFBUkEsRUFBRyxHQUFRMU4sRUFBRUQsUUFDekIyTixFQUFHLElBQ1AsS0FBSyxFQUFHLEtBQUssRUFBRzFOLEVBQUkwTixFQUFJLE1BQ3hCLEtBQUssRUFBYyxPQUFYUixFQUFFN0osUUFBZ0IsQ0FBRXRELE1BQU8yTixFQUFHLEdBQUloQixNQUFNLEdBQ2hELEtBQUssRUFBR1EsRUFBRTdKLFFBQVMySixFQUFJVSxFQUFHLEdBQUlBLEVBQUssQ0FBQyxHQUFJLFNBQ3hDLEtBQUssRUFBR0EsRUFBS1IsRUFBRUcsSUFBSU8sTUFBT1YsRUFBRUUsS0FBS1EsTUFBTyxTQUN4QyxRQUNJLEtBQU01TixFQUFJa04sRUFBRUUsTUFBTXBOLEVBQUlBLEVBQUVzQixPQUFTLEdBQUt0QixFQUFFQSxFQUFFc0IsT0FBUyxLQUFrQixJQUFWb00sRUFBRyxJQUFzQixJQUFWQSxFQUFHLElBQVcsQ0FBRVIsRUFBSSxFQUFHLFNBQ2pHLEdBQWMsSUFBVlEsRUFBRyxNQUFjMU4sR0FBTTBOLEVBQUcsR0FBSzFOLEVBQUUsSUFBTTBOLEVBQUcsR0FBSzFOLEVBQUUsSUFBTSxDQUFFa04sRUFBRTdKLE1BQVFxSyxFQUFHLEdBQUksTUFDOUUsR0FBYyxJQUFWQSxFQUFHLElBQVlSLEVBQUU3SixNQUFRckQsRUFBRSxHQUFJLENBQUVrTixFQUFFN0osTUFBUXJELEVBQUUsR0FBSUEsRUFBSTBOLEVBQUksTUFDN0QsR0FBSTFOLEdBQUtrTixFQUFFN0osTUFBUXJELEVBQUUsR0FBSSxDQUFFa04sRUFBRTdKLE1BQVFyRCxFQUFFLEdBQUlrTixFQUFFRyxJQUFJUSxLQUFLSCxHQUFLLE1BQ3ZEMU4sRUFBRSxJQUFJa04sRUFBRUcsSUFBSU8sTUFDaEJWLEVBQUVFLEtBQUtRLE1BQU8sU0FFdEJGLEVBQUtaLEVBQUs3TixLQUFLNk0sRUFBU29CLEdBQzFCLE1BQU90SixHQUFLOEosRUFBSyxDQUFDLEVBQUc5SixHQUFJb0osRUFBSSxFQUFLLFFBQVVELEVBQUkvTSxFQUFJLEVBQ3RELEdBQVksRUFBUjBOLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFM04sTUFBTzJOLEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVFoQixNQUFNLEdBckI5QkosQ0FBSyxDQUFDL0wsRUFBR2tOLE1BeUJoQ2pPLE9BQU9ZLE9Bd0I3QixTQUFTME4sRUFBT3ZPLEVBQUdnQixHQUN0QixJQUFJckIsRUFBc0IsbUJBQVhXLFFBQXlCTixFQUFFTSxPQUFPME4sVUFDakQsSUFBS3JPLEVBQUcsT0FBT0ssRUFDZixJQUFtQkssRUFBWWdFLEVBQTNCOUUsRUFBSUksRUFBRUQsS0FBS00sR0FBT3dPLEVBQUssR0FDM0IsSUFDSSxXQUFjLElBQU54TixHQUFnQkEsS0FBTSxNQUFRWCxFQUFJZCxFQUFFeU4sUUFBUUcsTUFBTXFCLEVBQUdGLEtBQUtqTyxFQUFFRyxPQUV4RSxNQUFPaU8sR0FBU3BLLEVBQUksQ0FBRW9LLE1BQU9BLEdBQzdCLFFBQ0ksSUFDUXBPLElBQU1BLEVBQUU4TSxPQUFTeE4sRUFBSUosRUFBVSxTQUFJSSxFQUFFRCxLQUFLSCxHQUVsRCxRQUFVLEdBQUk4RSxFQUFHLE1BQU1BLEVBQUVvSyxPQUU3QixPQUFPRCxFQWdFY3ZPLE9BQU9ZLE9DL01qQixTQUFTNk4sSUFDcEIsSUFBSUMsRUFBUVYsS0FDUlcsRUFBS0wsRUFBTyxtQkFBUyxDQUNyQk0sVUFBTUMsRUFDTkwsV0FBT0ssRUFDUEMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUNYLEdBQUloQyxFQUFTMEIsRUFBRyxHQUFJTyxFQUFZUCxFQUFHLEdBSW5DUSxFQUFlLGtCQUFPLEdBbUQxQixPQWxEQSxxQkFBVSxXQUNOLE9BQU8sV0FDSEEsRUFBYW5ELFNBQVUsS0FFNUIsSUE4Q0ksQ0FBQ2lCLEVBN0NPLHVCQUFZLFNBQVVtQyxHQUFXLE9BQU8vQyxFQUFVcUMsT0FBTyxPQUFRLEdBQVEsV0FDcEYsSUFBSUUsRUFBTVMsRUFDVixPQUFPaEMsRUFBWVcsTUFBTSxTQUFVVyxHQUMvQixPQUFRQSxFQUFHOUssT0FDUCxLQUFLLEVBVUQsT0FUQThLLEVBQUdmLEtBQUtTLEtBQUssQ0FBQyxFQUFHLEVBQUcsQ0FBRSxJQUN0QmEsRUFBVSxDQUNOTixVQUFNQyxFQUNOTCxXQUFPSyxFQUNQQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBRVIsQ0FBQyxFQUFhRyxHQUN6QixLQUFLLEVBWUQsT0FYQVIsRUFBT0QsRUFBR2hCLFFBQ21CLElBQXpCd0IsRUFBYW5ELFNBQ2JrRCxFQUFVLENBQ05OLEtBQU1BLEVBQ05KLFdBQU9LLEVBQ1BDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLFdBQVcsSUFHWixDQUFDLEVBQWNMLEdBQzFCLEtBQUssRUFZRCxPQVhBUyxFQUFVVixFQUFHaEIsUUFDZ0IsSUFBekJ3QixFQUFhbkQsU0FDYmtELEVBQVUsQ0FDTlYsTUFBT2EsRUFDUFQsVUFBTUMsRUFDTkMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBYSxHQUN6QixLQUFLLEVBQUcsTUFBTyxDQUFDLFlBR3JCLENBQUNFOzs7Ozs7Ozs7Ozs7OztnRkNoRFosU0FBUyxFQUFVN0MsRUFBU0MsRUFBWUMsRUFBR0MsR0FFdkMsT0FBTyxJQUFLRCxJQUFNQSxFQUFJRSxXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVV0TSxHQUFTLElBQU11TSxFQUFLTCxFQUFVTSxLQUFLeE0sSUFBVyxNQUFPNkQsR0FBS3dJLEVBQU94SSxJQUNwRixTQUFTNEksRUFBU3pNLEdBQVMsSUFBTXVNLEVBQUtMLEVBQWlCLE1BQUVsTSxJQUFXLE1BQU82RCxHQUFLd0ksRUFBT3hJLElBQ3ZGLFNBQVMwSSxFQUFLRyxHQUpsQixJQUFlMU0sRUFJYTBNLEVBQU9DLEtBQU9QLEVBQVFNLEVBQU8xTSxRQUoxQ0EsRUFJeUQwTSxFQUFPMU0sTUFKaERBLGFBQWlCaU0sRUFBSWpNLEVBQVEsSUFBSWlNLEdBQUUsU0FBVUcsR0FBV0EsRUFBUXBNLE9BSVQ0TSxLQUFLTixFQUFXRyxHQUNsR0YsR0FBTUwsRUFBWUEsRUFBVVcsTUFBTWQsRUFBU0MsR0FBYyxLQUFLUSxXQUl0RSxTQUFTLEVBQVlULEVBQVNnQixHQUMxQixJQUFzR0MsRUFBR0MsRUFBR2hOLEVBQUdpTixFQUEzR0MsRUFBSSxDQUFFN0osTUFBTyxFQUFHOEosS0FBTSxXQUFhLEdBQVcsRUFBUG5OLEVBQUUsR0FBUSxNQUFNQSxFQUFFLEdBQUksT0FBT0EsRUFBRSxJQUFPb04sS0FBTSxHQUFJQyxJQUFLLElBQ2hHLE9BQU9KLEVBQUksQ0FBRVYsS0FBTWUsRUFBSyxHQUFJLE1BQVNBLEVBQUssR0FBSSxPQUFVQSxFQUFLLElBQXdCLG1CQUFYek4sU0FBMEJvTixFQUFFcE4sT0FBTzBOLFVBQVksV0FBYSxPQUFPQyxPQUFVUCxFQUN2SixTQUFTSyxFQUFLL00sR0FBSyxPQUFPLFNBQVVrTixHQUFLLE9BQ3pDLFNBQWNDLEdBQ1YsR0FBSVgsRUFBRyxNQUFNLElBQUlZLFVBQVUsbUNBQzNCLEtBQU9ULEdBQUcsSUFDTixHQUFJSCxFQUFJLEVBQUdDLElBQU1oTixFQUFZLEVBQVIwTixFQUFHLEdBQVNWLEVBQVUsT0FBSVUsRUFBRyxHQUFLVixFQUFTLFNBQU9oTixFQUFJZ04sRUFBVSxTQUFNaE4sRUFBRWYsS0FBSytOLEdBQUksR0FBS0EsRUFBRVQsU0FBV3ZNLEVBQUlBLEVBQUVmLEtBQUsrTixFQUFHVSxFQUFHLEtBQUtoQixLQUFNLE9BQU8xTSxFQUUzSixPQURJZ04sRUFBSSxFQUFHaE4sSUFBRzBOLEVBQUssQ0FBUyxFQUFSQSxFQUFHLEdBQVExTixFQUFFRCxRQUN6QjJOLEVBQUcsSUFDUCxLQUFLLEVBQUcsS0FBSyxFQUFHMU4sRUFBSTBOLEVBQUksTUFDeEIsS0FBSyxFQUFjLE9BQVhSLEVBQUU3SixRQUFnQixDQUFFdEQsTUFBTzJOLEVBQUcsR0FBSWhCLE1BQU0sR0FDaEQsS0FBSyxFQUFHUSxFQUFFN0osUUFBUzJKLEVBQUlVLEVBQUcsR0FBSUEsRUFBSyxDQUFDLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxFQUFLUixFQUFFRyxJQUFJTyxNQUFPVixFQUFFRSxLQUFLUSxNQUFPLFNBQ3hDLFFBQ0ksS0FBTTVOLEVBQUlrTixFQUFFRSxNQUFNcE4sRUFBSUEsRUFBRXNCLE9BQVMsR0FBS3RCLEVBQUVBLEVBQUVzQixPQUFTLEtBQWtCLElBQVZvTSxFQUFHLElBQXNCLElBQVZBLEVBQUcsSUFBVyxDQUFFUixFQUFJLEVBQUcsU0FDakcsR0FBYyxJQUFWUSxFQUFHLE1BQWMxTixHQUFNME4sRUFBRyxHQUFLMU4sRUFBRSxJQUFNME4sRUFBRyxHQUFLMU4sRUFBRSxJQUFNLENBQUVrTixFQUFFN0osTUFBUXFLLEVBQUcsR0FBSSxNQUM5RSxHQUFjLElBQVZBLEVBQUcsSUFBWVIsRUFBRTdKLE1BQVFyRCxFQUFFLEdBQUksQ0FBRWtOLEVBQUU3SixNQUFRckQsRUFBRSxHQUFJQSxFQUFJME4sRUFBSSxNQUM3RCxHQUFJMU4sR0FBS2tOLEVBQUU3SixNQUFRckQsRUFBRSxHQUFJLENBQUVrTixFQUFFN0osTUFBUXJELEVBQUUsR0FBSWtOLEVBQUVHLElBQUlRLEtBQUtILEdBQUssTUFDdkQxTixFQUFFLElBQUlrTixFQUFFRyxJQUFJTyxNQUNoQlYsRUFBRUUsS0FBS1EsTUFBTyxTQUV0QkYsRUFBS1osRUFBSzdOLEtBQUs2TSxFQUFTb0IsR0FDMUIsTUFBT3RKLEdBQUs4SixFQUFLLENBQUMsRUFBRzlKLEdBQUlvSixFQUFJLEVBQUssUUFBVUQsRUFBSS9NLEVBQUksRUFDdEQsR0FBWSxFQUFSME4sRUFBRyxHQUFRLE1BQU1BLEVBQUcsR0FBSSxNQUFPLENBQUUzTixNQUFPMk4sRUFBRyxHQUFLQSxFQUFHLFFBQUssRUFBUWhCLE1BQU0sR0FyQjlCSixDQUFLLENBQUMvTCxFQUFHa04sTUF5QjdELElBcWhCeUJxQixFQXJoQnJCQyxFQUFPLGFBS1BDLEVBQStCRCxJQUMvQkUsRUFBU3pQLE9BQ1QwUCxFQUFjLFNBQVV6QixHQUFLLE9BQU9BLElBQU11QixHQUMxQ0csRUFBYSxTQUFVMUIsR0FBSyxNQUFtQixtQkFBTEEsR0FDMUMyQixFQUFlLFNBQVVDLEVBQUdDLEdBQUssT0FBT0wsRUFBT00sT0FBTyxHQUFJRixFQUFHQyxJQUc3REUsRUFBWSxXQUFjLE1BRlYsb0JBRXdCQyxRQVV4Q0MsRUFBUSxJQUFJQyxRQUVaQyxFQUFVLEVBU1ZDLEVBQWEsU0FBVUMsR0FDdkIsSUFHSXJELEVBQ0FzRCxFQUpBcE4sU0FBY21OLEVBQ2RFLEVBQWNGLEdBQU9BLEVBQUlFLFlBQ3pCQyxFQUFTRCxHQUFlRSxLQUc1QixHQUFJakIsRUFBT2EsS0FBU0EsR0FBUUcsR0FBVUQsR0FBZUcsT0FnQ2pEMUQsRUFBU3dELEVBQ0hILEVBQUlNLFNBQ0ksVUFBUnpOLEVBQ0ltTixFQUFJTyxXQUNJLFVBQVIxTixFQUNJMk4sS0FBS0MsVUFBVVQsR0FDZixHQUFLQSxNQXRDc0MsQ0FJekQsR0FEQXJELEVBQVNpRCxFQUFNL1AsSUFBSW1RLEdBRWYsT0FBT3JELEVBTVgsR0FGQUEsSUFBV21ELEVBQVUsSUFDckJGLEVBQU1jLElBQUlWLEVBQUtyRCxHQUNYdUQsR0FBZWhQLE1BQU8sQ0FHdEIsSUFEQXlMLEVBQVMsSUFDSnNELEVBQVEsRUFBR0EsRUFBUUQsRUFBSXhPLE9BQVF5TyxJQUNoQ3RELEdBQVVvRCxFQUFXQyxFQUFJQyxJQUFVLElBRXZDTCxFQUFNYyxJQUFJVixFQUFLckQsR0FFbkIsR0FBSXVELEdBQWVmLEVBQVEsQ0FFdkJ4QyxFQUFTLElBRVQsSUFEQSxJQUFJZ0UsRUFBT3hCLEVBQU93QixLQUFLWCxHQUFLWSxRQUNwQnhCLEVBQWFhLEVBQVFVLEVBQUs3QyxRQUN6QnNCLEVBQVlZLEVBQUlDLE1BQ2pCdEQsR0FBVXNELEVBQVEsSUFBTUYsRUFBV0MsRUFBSUMsSUFBVSxLQUd6REwsRUFBTWMsSUFBSVYsRUFBS3JELElBWXZCLE9BQU9BLEdBVVBrRSxHQUFTLEVBRVRDLEVBQVNwQixJQUNUcUIsRUFsRmdCLG9CQUcwQm5GLFNBaUYxQ29GLEVBQWdCRixHQUFVbkIsT0FBTzlELGlCQUMvQjhELE9BQU85RCxpQkFBaUJyTCxLQUFLbVAsUUFDN0JWLEVBQ0ZnQyxFQUFrQkYsRUFBU25GLFNBQVNDLGlCQUFpQnJMLEtBQUtvTCxVQUFZcUQsRUFDdEVpQyxFQUFpQkosR0FBVW5CLE9BQU83RCxvQkFDaEM2RCxPQUFPN0Qsb0JBQW9CdEwsS0FBS21QLFFBQ2hDVixFQUNGa0MsRUFBbUJKLEVBQ2pCbkYsU0FBU0Usb0JBQW9CdEwsS0FBS29MLFVBQ2xDcUQsRUErQkZtQyxFQUFTLENBQ1RDLFNBN0NXLFdBQWMsT0FBT1IsR0E4Q2hDUyxVQWhDWSxXQUNaLElBQUlDLEVBQWtCUixHQUFVbkYsU0FBUzJGLGdCQUN6QyxPQUFPbkMsRUFBWW1DLElBQXdDLFdBQXBCQSxJQWdDdkNDLEVBQXVCLENBQ3ZCQyxVQS9CWSxTQUFVakcsR0FJdEIsT0FGQXlGLEVBQWdCLG1CQUFvQnpGLEdBQ3BDd0YsRUFBYyxRQUFTeEYsR0FDaEIsV0FDSDJGLEVBQWlCLG1CQUFvQjNGLEdBQ3JDMEYsRUFBZSxRQUFTMUYsS0EwQjVCa0csY0F2QmdCLFNBQVVsRyxHQUUxQixJQUFJbUcsRUFBVyxXQUNYZCxHQUFTLEVBQ1RyRixLQUdBb0csRUFBWSxXQUNaZixHQUFTLEdBSWIsT0FGQUcsRUFBYyxTQUFVVyxHQUN4QlgsRUFBYyxVQUFXWSxHQUNsQixXQUNIVixFQUFlLFNBQVVTLEdBQ3pCVCxFQUFlLFVBQVdVLE1BWTlCQyxHQUFhbkMsS0FBZSxTQUFVQyxPQUV0Q21DLEVBQU0sU0FBVTdFLEdBQ2hCLE9BbklPeUMsVUFMUyxJQUthQyxPQUE4QixzQkFtSXZCQSxPQUE4QixzQkFBRTFDLEdBQUs4RSxXQUFXOUUsRUFBRyxJQUt2RitFLEVBQTRCSCxFQUFZLFlBQVksa0JBRXBESSxFQUEyQyxvQkFBZEMsV0FDN0JBLFVBQVVDLFdBRVZDLEdBQWtCUCxHQUNsQkksSUFDQyxDQUFDLFVBQVcsTUFBTWhQLFNBQVNnUCxFQUFvQkksZ0JBQzVDSixFQUFvQkssVUFFeEJDLEVBQVksU0FBVWhTLEdBQ3RCLEdBQUk4TyxFQUFXOU8sR0FDWCxJQUNJQSxFQUFNQSxJQUVWLE1BQU9pUyxHQUVIalMsRUFBTSxHQUdkLElBQUlrUyxFQUFPLEdBQUdDLE9BQU9uUyxHQVNyQixNQUFPLENBUFBBLEVBQ2tCLGlCQUFQQSxFQUNEQSxHQUNDVyxNQUFNRCxRQUFRVixHQUFPQSxFQUFJaUIsT0FBU2pCLEdBQy9Cd1AsRUFBV3hQLEdBQ1gsR0FFRGtTLEVBRENsUyxFQUFNLFFBQVVBLEVBQU0sS0FLcENvUyxFQUFpQixJQUFJOUMsUUFNckIrQyxFQUFpQixTQUFVQyxFQUFPdFMsRUFBSytOLEVBQU1KLEVBQU80RSxFQUFjQyxFQUFZQyxRQUM1RCxJQUFkQSxJQUF3QkEsR0FBWSxHQUN4QyxJQUFJM0UsRUFBS3NFLEVBQWU5UyxJQUFJZ1QsR0FBUUksRUFBcUI1RSxFQUFHLEdBQUk2RSxFQUFpQjdFLEVBQUcsR0FBSThFLEVBQVE5RSxFQUFHLEdBQy9GK0UsRUFBZUgsRUFBbUIxUyxHQUNsQzhTLEVBQVdILEVBQWUzUyxHQUU5QixHQUFJeVMsR0FBYUssRUFDYixJQUFLLElBQUlyVSxFQUFJLEVBQUdBLEVBQUlxVSxFQUFTN1IsU0FBVXhDLEVBQ25DcVUsRUFBU3JVLEdBQUdzUCxFQUFNSixFQUFPNEUsR0FJakMsT0FBSUMsV0FHT0ksRUFBTTVTLEdBQ1Q2UyxHQUFnQkEsRUFBYSxJQUN0QkEsRUFBYSxHQW5CYixHQW1COEJ2RyxNQUFLLFdBQ3RDLE9BQU9nRyxFQUFNaFQsSUFBSVUsTUFJdEJzUyxFQUFNaFQsSUFBSVUsSUFJakIrUyxFQUFjLEVBQ2RDLEVBQWUsV0FBYyxRQUFTRCxHQUV0Q0UsRUFBaUIsV0FFakIsSUFEQSxJQUFJZixFQUFPLEdBQ0ZnQixFQUFLLEVBQUdBLEVBQUtDLFVBQVVsUyxPQUFRaVMsSUFDcENoQixFQUFLZ0IsR0FBTUMsVUFBVUQsR0FFekIsT0FBTyxPQUFVLE9BQVEsT0FBUSxHQUFRLFdBQ3JDLElBQUlaLEVBQU9jLEVBQU1DLEVBQU9DLEVBQU9DLEVBQVNDLEVBQWVoQixFQUFZaUIsRUFBaUJDLEVBQWdCNUYsRUFBSTlOLEVBQUsyVCxFQUFTQyxFQUFJQyxFQUFVOUYsRUFBTUosRUFBT21HLEVBQWtCQyxFQUFtQkMsRUFBY0MsRUFDcE0sT0FBTyxFQUFZOUcsTUFBTSxTQUFVK0csR0FDL0IsT0FBUUEsRUFBR2xSLE9BQ1AsS0FBSyxFQVVELEdBVEFzUCxFQUFRSixFQUFLLEdBQUlrQixFQUFPbEIsRUFBSyxHQUFJbUIsRUFBUW5CLEVBQUssR0FBSW9CLEVBQVFwQixFQUFLLEdBRS9Ec0IsSUFBZ0IzRSxHQURoQjBFLEVBQTJCLGtCQUFWRCxFQUFzQixDQUFFZCxXQUFZYyxHQUFVQSxHQUFTLElBQ3BDRSxnQkFFOUJELEVBQVFDLGNBQ2RoQixHQUFvQyxJQUF2QmUsRUFBUWYsV0FDckJpQixHQUE4QyxJQUE1QkYsRUFBUUUsZ0JBQzFCQyxFQUFpQkgsRUFBUUcsZUFDekI1RixFQUFLa0UsRUFBVW9CLEdBQU9wVCxFQUFNOE4sRUFBRyxHQUFJNkYsRUFBVTdGLEVBQUcsSUFDM0M5TixFQUNELE1BQU8sQ0FBQyxHQUdaLEdBRkE0VCxFQUFLeEIsRUFBZTlTLElBQUlnVCxHQUFRdUIsRUFBV0QsRUFBRyxHQUUxQzFCLEVBQUtqUixPQUFTLEVBRWQsTUFBTyxDQUFDLEVBQWNvUixFQUFlQyxFQUFPdFMsRUFBS3NTLEVBQU1oVCxJQUFJVSxHQUFNMk8sRUFBV0EsRUFBVzZELEdBQVksSUFZdkcsR0FWQXpFLEVBQU9zRixFQUNQUyxFQUFtQmQsSUFDbkJhLEVBQVM3VCxHQUFPLENBQUM4VCxFQUFrQixHQUNuQ0MsR0FBcUJsRixFQUFZNkUsR0FDakNNLEVBQWUxQixFQUFNaFQsSUFBSVUsR0FFckIrVCxJQUNBekIsRUFBTW5DLElBQUluUSxFQUFLMFQsR0FDZnJCLEVBQWVDLEVBQU90UyxFQUFLMFQsSUFFM0I1RSxFQUFXZixHQUVYLElBQ0lBLEVBQU9BLEVBQUt1RSxFQUFNaFQsSUFBSVUsSUFFMUIsTUFBT2lTLEdBRUh0RSxFQUFRc0UsRUFHaEIsT0FBTWxFLEdBQVFlLEVBQVdmLEVBQUt6QixNQUN2QixDQUFDLEVBQWF5QixFQUFLb0csT0FBTSxTQUFVbEMsR0FDbEN0RSxFQUFRc0UsTUFGNkIsQ0FBQyxFQUFhLEdBUS9ELEtBQUssRUFPRCxHQUpBbEUsRUFBT21HLEVBQUdwSCxPQUlOZ0gsSUFBcUJELEVBQVM3VCxHQUFLLEdBQUksQ0FDdkMsR0FBSTJOLEVBQ0EsTUFBTUEsRUFDVixNQUFPLENBQUMsRUFBY0ksR0FFakJKLEdBQVNvRyxHQUFxQk4sSUFHbkNELEdBQWdCLEVBQ2hCekYsRUFBT2lHLEVBQ1AxQixFQUFNbkMsSUFBSW5RLEVBQUtnVSxJQUVuQkUsRUFBR2xSLE1BQVEsRUFDZixLQUFLLEVBZ0JELE9BZEl3USxJQUNLN0YsSUFFR21CLEVBQVcwRSxLQUNYekYsRUFBT3lGLEVBQWN6RixFQUFNaUcsSUFHL0IxQixFQUFNbkMsSUFBSW5RLEVBQUsrTixJQUduQnVFLEVBQU1uQyxJQUFJd0QsRUFBUzVFLEVBQWF1RCxFQUFNaFQsSUFBSXFVLEdBQVUsQ0FBRWhHLE1BQU9BLE1BR2pFa0csRUFBUzdULEdBQUssR0FBS2dULElBQ1osQ0FBQyxFQUFhWCxFQUFlQyxFQUFPdFMsRUFBSytOLEVBQU1KLEVBQU9nQixFQUFXNkQsSUFBY2dCLElBRzFGLEtBQUssRUFHRCxHQUZBUyxFQUFNQyxFQUFHcEgsT0FFTGEsRUFDQSxNQUFNQSxFQUNWLE1BQU8sQ0FBQyxFQUFjNkYsRUFBZ0JTLEVBQU1sRyxXQU01RHFHLEVBQW9CLFNBQVV2QixFQUFjdlEsR0FDNUMsSUFBSyxJQUFJdEMsS0FBTzZTLEVBQ1JBLEVBQWE3UyxHQUFLLElBQ2xCNlMsRUFBYTdTLEdBQUssR0FBR3NDLElBRzdCK1IsRUFBWSxTQUFVQyxFQUFVZixHQU1oQyxJQUFLbkIsRUFBZW1DLElBQUlELEdBQVcsQ0FDL0IsSUFBSUUsRUFBT3pGLEVBQWFrQyxFQUFzQnNDLEdBRzFDYixFQUFxQixHQUNyQitCLEVBQVN4QixFQUFlaFQsS0FBSzBPLEVBQVcyRixHQUN4Q0ksRUFBVWhHLEVBS2QsR0FIQTBELEVBQWVqQyxJQUFJbUUsRUFBVSxDQUFDNUIsRUFBb0IsR0FBSSxHQUFJLEdBQUkrQixLQUd6RG5ELEVBQVcsQ0FPWixJQUFJcUQsRUFBaUJILEVBQUt0RCxVQUFVTSxXQUFXdlIsS0FBSzBPLEVBQVd5RixFQUFrQm5VLEtBQUswTyxFQUFXK0QsRUF4SzNGLEtBeUtGa0MsRUFBcUJKLEVBQUtyRCxjQUFjSyxXQUFXdlIsS0FBSzBPLEVBQVd5RixFQUFrQm5VLEtBQUswTyxFQUFXK0QsRUF4Sy9GLEtBeUtWZ0MsRUFBVSxXQUNOQyxHQUFrQkEsSUFDbEJDLEdBQXNCQSxJQUl0QnhDLEVBQWV5QyxPQUFPUCxJQU05QixNQUFPLENBQUNBLEVBQVVHLEVBQVFDLEdBRTlCLE1BQU8sQ0FBQ0osRUFBVWxDLEVBQWU5UyxJQUFJZ1YsR0FBVSxLQWdCL0MsRUFBS0QsRUFBVSxJQUFJUyxLQUFRLEVBQVEsRUFBRyxHQUFJTCxFQUFTLEVBQUcsR0FFdERNLEVBQWdCaEcsRUFBYSxDQUU3QmlHLGNBQWV0RyxFQUNmdUcsVUFBV3ZHLEVBQ1h3RyxRQUFTeEcsRUFDVHlHLGFBbkJlLFNBQVV0SSxFQUFHdUksRUFBSUMsRUFBUTdDLEVBQVlnQyxHQUNwRCxJQUFJYyxFQUFnQkQsRUFBT0UsZ0JBQ3ZCQyxFQUFvQmhCLEVBQUtpQixXQUV6QkMsTUFBY0MsS0FBS0MsU0FBVyxLQUM3QixJQUFNSixFQUFvQixFQUFJQSxFQUFvQixLQUFPSCxFQUFPUSxvQkFDaEVoSCxFQUFZeUcsSUFBa0JFLEVBQW9CRixHQUd2RDlELFdBQVdnQixFQUFZa0QsRUFBU2xCLElBV2hDc0IsWUFBYXBILEVBRWJxSCxtQkFBbUIsRUFDbkJDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQyxvQkFBb0IsRUFFcEJMLG1CQUFvQmhFLEVBQWlCLElBQVEsSUFDN0NzRSxzQkFBdUIsSUFDdkJDLGlCQUFrQixJQUNsQkMsZUFBZ0J4RSxFQUFpQixJQUFPLElBRXhDeUUsUUFBUyxTQUFVQyxFQUFhQyxHQUM1QixPQUFPaEgsRUFBVytHLElBQWdCL0csRUFBV2dILElBRWpEQyxTQUFVLFdBQWMsT0FBTyxHQUMvQm5FLE1BQU8sRUFDUG1DLE9BQVFBLEVBQ1JpQyxTQUFVLElBR2Q3RixHQUVJOEYsRUFBZSxTQUFVM0gsRUFBR0MsR0FFNUIsSUFBSTdCLEVBQUkyQixFQUFhQyxFQUFHQyxHQUV4QixHQUFJQSxFQUFHLENBQ0gsSUFBSTJILEVBQUs1SCxFQUFFNkgsSUFBS0MsRUFBSzlILEVBQUUwSCxTQUNuQkssRUFBSzlILEVBQUU0SCxJQUFLRyxFQUFLL0gsRUFBRXlILFNBQ25CRSxHQUFNRyxJQUNOM0osRUFBRXlKLElBQU1ELEVBQUd6RSxPQUFPNEUsSUFFbEJELEdBQU1FLElBQ041SixFQUFFc0osU0FBVzNILEVBQWErSCxFQUFJRSxJQUd0QyxPQUFPNUosR0FHUDZKLEVBQW1CLHdCQUFjLElBdUZqQ0MsRUFBWSxTQUFVaEYsR0FDdEIsT0FBT3BELEVBQVdvRCxFQUFLLElBQ2pCLENBQUNBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQU0sSUFDOUIsQ0FBQ0EsRUFBSyxHQUFJLE1BQW1CLE9BQVpBLEVBQUssR0FBY0EsRUFBSyxHQUFLQSxFQUFLLEtBQU8sS0FHaEVpRixFQUFlLFdBQ2YsT0FBT3BJLEVBQWFnRyxFQUFlLHFCQUFXa0MsS0ErQjlDRyxFQUFvQixTQUFVcFgsRUFBS3FYLEVBQVdwTSxHQUM5QyxJQUFJcU0sRUFBb0JELEVBQVVyWCxLQUFTcVgsRUFBVXJYLEdBQU8sSUFFNUQsT0FEQXNYLEVBQWtCOUosS0FBS3ZDLEdBQ2hCLFdBQ0gsSUFBSXlFLEVBQVE0SCxFQUFrQkMsUUFBUXRNLEdBQ2xDeUUsR0FBUyxJQUVUNEgsRUFBa0I1SCxHQUFTNEgsRUFBa0JBLEVBQWtCclcsT0FBUyxHQUN4RXFXLEVBQWtCL0osU0FLMUJpSyxFQUFjLENBQUVDLFFBQVEsR0F5Wlo3SSxFQUFPeFAsZ0JBbGlCTCxTQUFVMkQsR0FDeEIsSUFBSXJELEVBQVFxRCxFQUFNckQsTUFFZGdZLEVBQWlCZixFQUFhLHFCQUFXTSxHQUFtQnZYLEdBRTVENFUsRUFBVzVVLEdBQVNBLEVBQU00VSxTQUUxQnFELEVBQWUsb0JBQVMsV0FDeEIsT0FBT3JELEVBQ0RELEVBQVVDLEVBQVNvRCxFQUFlcEYsT0FBUyxHQUFRNVMsR0FDbkRpUCxLQUNQLEdBUUgsT0FOSWdKLElBQ0FELEVBQWVwRixNQUFRcUYsRUFBYSxHQUNwQ0QsRUFBZWpELE9BQVNrRCxFQUFhLElBR3pDbEcsR0FBMEIsV0FBYyxPQUFRa0csRUFBZUEsRUFBYSxHQUFLaEosSUFBZSxJQUN6Rix3QkFBY3NJLEVBQWlCVyxTQUFVN0ksRUFBYWhNLEVBQU8sQ0FDaEVyRCxNQUFPZ1ksT0E4Z0JvQyxVQUFXLENBQzFEaFksTUFBT3FWLElBamNjdEcsRUF3Q0wsU0FBVTJFLEVBQU15RSxFQUFTeEMsR0FDekMsSUFBSS9DLEVBQVErQyxFQUFPL0MsTUFBT2dFLEVBQVVqQixFQUFPaUIsUUFBU3dCLEVBQWV6QyxFQUFPeUMsYUFBY0MsRUFBVzFDLEVBQU8wQyxTQUFVQyxFQUFvQjNDLEVBQU8yQyxrQkFBbUJDLEVBQWtCNUMsRUFBTzRDLGdCQUFpQkMsRUFBb0I3QyxFQUFPNkMsa0JBQW1CQyxFQUFxQjlDLEVBQU84QyxtQkFDbFJySyxFQUFLc0UsRUFBZTlTLElBQUlnVCxHQUFRSSxFQUFxQjVFLEVBQUcsR0FBSTZFLEVBQWlCN0UsRUFBRyxHQUFJK0YsRUFBVy9GLEVBQUcsR0FBSThFLEVBQVE5RSxFQUFHLEdBTWpIOEYsRUFBSzVCLEVBQVVvQixHQUFPcFQsRUFBTTRULEVBQUcsR0FBSXdFLEVBQVN4RSxFQUFHLEdBQUlELEVBQVVDLEVBQUcsR0FFaEV5RSxFQUFvQixrQkFBTyxHQUczQkMsRUFBZSxrQkFBTyxHQUV0QkMsRUFBUyxpQkFBT3ZZLEdBQ2hCd1ksRUFBYSxpQkFBT1gsR0FDcEJZLEVBQVksaUJBQU9wRCxHQUNuQnFELEVBQVksV0FBYyxPQUFPRCxFQUFVdE4sU0FDM0N4RCxFQUFXLFdBQWMsT0FBTytRLElBQVkzSCxhQUFlMkgsSUFBWTVILFlBQ3ZFNkgsRUFBaUIsU0FBVUMsR0FDM0IsT0FBT3RHLEVBQU1uQyxJQUFJd0QsRUFBUzVFLEVBQWF1RCxFQUFNaFQsSUFBSXFVLEdBQVVpRixLQUczREMsRUFBU3ZHLEVBQU1oVCxJQUFJVSxHQUNuQjBXLEVBQVc3SCxFQUFZaUosR0FDckJ6QyxFQUFPcUIsU0FBUzFXLEdBQ2hCOFgsRUFDRi9KLEVBQU9jLEVBQVlnSyxHQUFVbkMsRUFBV21DLEVBQ3hDRCxFQUFPdEcsRUFBTWhULElBQUlxVSxJQUFZLEdBQzdCaEcsRUFBUWlMLEVBQUtqTCxNQUNibUwsR0FBa0JULEVBQWtCbE4sUUFJcEM0TixFQUFtQixXQUVuQixPQUFJRCxJQUFtQmpLLEVBQVltSixHQUN4QkEsR0FFUFUsSUFBWWpDLGFBRVRzQixHQUdFbEosRUFBWWQsR0FHYmMsRUFBWWQsSUFBU3NILEVBQU9ZLG9CQVdwQzFELEtBUEt2UyxJQUFRNlgsT0FFVGUsRUFBS3JHLGNBR0Z1RyxHQUFrQkMsS0FHekI3RSxFQTNLZSxTQUFVOEUsRUFBT1YsR0FDcEMsSUFBSVcsRUFBVyxtQkFBUyxJQUFJLEdBQ3hCQyxFQUFXLGlCQUFPRixHQUtsQkcsRUFBdUIsaUJBQU8sQ0FDOUJwTCxNQUFNLEVBQ05KLE9BQU8sRUFDUDRFLGNBQWMsSUFtQmQ2RyxFQUFXLHVCQUFZLFNBQVVDLEdBQ2pDLElBQUlDLEdBQWlCLEVBQ2pCQyxFQUFlTCxFQUFTL04sUUFDNUIsSUFBSyxJQUFJMEIsS0FBS3dNLEVBQVMsQ0FDbkIsSUFBSXJZLEVBQUk2TCxFQUdKME0sRUFBYXZZLEtBQU9xWSxFQUFRclksS0FDNUJ1WSxFQUFhdlksR0FBS3FZLEVBQVFyWSxHQUd0Qm1ZLEVBQXFCaE8sUUFBUW5LLEtBQzdCc1ksR0FBaUIsSUFJekJBLElBQW1CaEIsRUFBYW5OLFNBQ2hDOE4sRUFBUyxNQUtqQixJQUtBLE9BSEF4SCxHQUEwQixXQUN0QnlILEVBQVMvTixRQUFVNk4sS0FFaEIsQ0FBQ0UsRUFBVUMsRUFBcUJoTyxRQUFTaU8sR0FtSHZDSSxDQUFpQixDQUN0QnpMLEtBQU1BLEVBQ05KLE1BQU9BLEVBQ1A0RSxhQUFjQSxHQUNmK0YsR0FBZVksR0FBV2hGLEVBQUcsR0FBSXVGLEdBQW9CdkYsRUFBRyxHQUFJa0YsR0FBV2xGLEVBQUcsR0FHekUxQixHQUFhLHVCQUFZLFNBQVVrSCxHQUFrQixPQUFPLE9BQVUsT0FBUSxPQUFRLEdBQVEsV0FDOUYsSUFBSUMsRUFBZ0JuRCxFQUFTb0QsRUFBU3BRLEVBQVNnTCxFQUFNcUYsRUFBdUJDLEVBQXFCQyxFQUFjQyxFQUFVQyxFQUE2QkMsRUFBY0MsRUFDaEtyTSxFQUNKLE9BQU8sRUFBWVgsTUFBTSxTQUFVeUcsR0FDL0IsT0FBUUEsRUFBRzVRLE9BQ1AsS0FBSyxFQUVELEdBREEyVyxFQUFpQm5CLEVBQVdyTixTQUN2Qm5MLElBQ0EyWixHQUNEckIsRUFBYW5OLFNBQ2J1TixJQUFZakMsV0FDWixNQUFPLENBQUMsR0FBYyxHQUUxQmpOLEdBQVUsRUFDVmdMLEVBQU9rRixHQUFrQixHQUN6QkcsR0FBeUJqSCxFQUFNNVMsS0FBU3dVLEVBQUtpRCxPQUM3Q3FDLEVBQXNCLFdBQ2xCLE9BQVF4QixFQUFhbk4sU0FDakJuTCxJQUFRdVksRUFBT3BOLFNBQ2ZrTixFQUFrQmxOLFNBRTFCNE8sRUFBZSxXQUVYLElBQUlLLEVBQWN4SCxFQUFNNVMsR0FDcEJvYSxHQUFlQSxFQUFZLEtBQU9SLFVBQzNCaEgsRUFBTTVTLElBR3JCZ2EsRUFBVyxDQUFFekgsY0FBYyxHQUMzQjBILEVBQThCLFdBQzFCdEIsRUFBZSxDQUFFcEcsY0FBYyxJQUUzQnVILEtBQ0FWLEdBQVNZLElBSWpCckIsRUFBZSxDQUNYcEcsY0FBYyxJQUVsQjZHLEdBQVMsQ0FBRTdHLGNBQWMsSUFDekJxQixFQUFHNVEsTUFBUSxFQUNmLEtBQUssRUFrQkQsT0FqQkE0USxFQUFHN0csS0FBS1MsS0FBSyxDQUFDLEVBQUcsRUFBRyxDQUFFLElBQ2xCcU0sSUFFQXhILEVBQWVDLEVBQU90UyxFQUFLa1osR0FBUy9OLFFBQVE0QyxLQUFNbUwsR0FBUy9OLFFBQVF3QyxPQUFPLEdBR3RFMEgsRUFBT2dCLGlCQUFtQi9ELEVBQU1oVCxJQUFJVSxJQUNwQ3dSLFlBQVcsV0FDSGhJLEdBQVdzUSxLQUNYcEIsSUFBWTFELGNBQWNoVixFQUFLcVYsS0FFcENBLEVBQU9nQixnQkFHZHpELEVBQU01UyxHQUFPLENBQUMyWixFQUFlcE4sV0FBTSxFQUFRNkwsR0FBU3BGLE1BRXhEbEYsRUFBSzhFLEVBQU01UyxHQUFNd1csRUFBVTFJLEVBQUcsR0FBSThMLEVBQVU5TCxFQUFHLEdBQ3hDLENBQUMsRUFBYTBJLEdBQ3pCLEtBQUssRUFhRCxPQVpBQSxFQUFVNUMsRUFBRzlHLE9BQ1QrTSxHQUdBckksV0FBV3VJLEVBQWMxRSxFQUFPZSxrQkFRL0J4RCxFQUFNNVMsSUFBUTRTLEVBQU01UyxHQUFLLEtBQU80WixHQVNyQ2pCLEVBQWUsQ0FDWGhMLE1BQU9nQixJQUVYcUwsRUFBU3JNLE1BQVFnQixFQUNqQnVMLEVBQWVyRyxFQUFTN1QsSUFDbkI2TyxFQUFZcUwsS0FFWk4sR0FBV00sRUFBYSxJQUVyQk4sR0FBV00sRUFBYSxJQUVKLElBQXBCQSxFQUFhLEtBQ2pCRCxJQUNJSixHQUNJQyxLQUNBcEIsSUFBWTVDLFlBQVk5VixHQUd6QixDQUFDLEdBQWMsS0FJckJzVyxFQUFRNEMsR0FBUy9OLFFBQVE0QyxLQUFNeUksR0FNaEN3RCxFQUFTak0sS0FBT21MLEdBQVMvTixRQUFRNEMsS0FMakNpTSxFQUFTak0sS0FBT3lJLEVBV2ZGLEVBQVFoRSxFQUFNaFQsSUFBSVUsR0FBTXdXLElBQ3pCbEUsRUFBTW5DLElBQUluUSxFQUFLd1csR0FHZnFELEdBQ0lDLEtBQ0FwQixJQUFZekQsVUFBVXVCLEVBQVN4VyxFQUFLcVYsR0FHckMsQ0FBQyxFQUFhLE1BbkRid0UsR0FDSUMsS0FDQXBCLElBQVk1QyxZQUFZOVYsR0FHekIsQ0FBQyxHQUFjLElBK0M5QixLQUFLLEVBNEJELE9BM0JBbWEsRUFBUXZHLEVBQUc5RyxPQUNYaU4sSUFFS3JCLElBQVlqQyxhQUVia0MsRUFBZSxDQUFFaEwsTUFBT3dNLElBQ3hCSCxFQUFTck0sTUFBUXdNLEVBR2JOLEdBQXlCQyxNQUN6QnBCLElBQVl4RCxRQUFRaUYsRUFBT25hLEVBQUtxVixJQUNVLGtCQUE5QkEsRUFBT2Esb0JBQ2ZiLEVBQU9hLG9CQUNOcEgsRUFBV3VHLEVBQU9hLHFCQUNmYixFQUFPYSxtQkFBbUJpRSxLQUUxQnhTLEtBR0ErUSxJQUFZdkQsYUFBYWdGLEVBQU9uYSxFQUFLcVYsRUFBUTdDLEdBQVksQ0FDckRpRCxZQUFhakIsRUFBS2lCLFlBQWMsR0FBSyxFQUNyQ2dDLFFBQVEsTUFNckIsQ0FBQyxFQUFhLEdBQ3pCLEtBQUssRUFVRCxPQVJBak8sR0FBVSxFQUVWeVEsSUFHSUgsS0FBeUJELEdBQ3pCeEgsRUFBZUMsRUFBT3RTLEVBQUtnYSxFQUFTak0sS0FBTWlNLEVBQVNyTSxPQUFPLEdBRXZELENBQUMsR0FBYyxZQWV0QyxDQUFDM04sSUFJR3FhLEdBQWMsc0JBSWxCcEgsRUFBZWhULEtBQUswTyxFQUFXMkQsR0FBTyxXQUFjLE9BQU9pRyxFQUFPcE4sV0FFbEUsSUErSEEsR0E3SEFzRyxHQUEwQixXQUN0QitHLEVBQVdyTixRQUFVME0sRUFDckJZLEVBQVV0TixRQUFVa0ssS0FHeEI1RCxHQUEwQixXQUN0QixHQUFLelIsRUFBTCxDQUVBLElBQUlzYSxFQUFhdGEsSUFBUXVZLEVBQU9wTixRQUM1Qm9QLEVBQWlCL0gsR0FBV3ZTLEtBQUswTyxFQUFXNkksR0FrQjVDZ0QsRUFBeUIsRUFxQnpCQyxFQUFjckQsRUFBa0JwWCxFQUFLMlMsR0FwQ3JCLFNBQVUrSCxFQUFhQyxFQUFjQyxHQUNyRHhCLEdBQVNySyxFQUFhLENBQ2xCcEIsTUFBT2dOLEVBQ1BwSSxhQUFjcUksR0FJbEJ0RSxFQUFRNEMsR0FBUy9OLFFBQVE0QyxLQUFNMk0sR0FDekIvTCxFQUNBLENBQ0VaLEtBQU0yTSxRQTJCZEcsRUFBY3pELEVBQWtCcFgsRUFBSzBTLEdBckJ0QixTQUFVcFEsR0FDekIsR0FwcUJNLEdBb3FCRkEsRUFBcUIsQ0FDckIsSUFBSXdZLEVBQU1qTCxLQUFLaUwsTUFDWHBDLElBQVkzQyxtQkFDWitFLEVBQU1OLEdBQ043UyxNQUNBNlMsRUFBeUJNLEVBQU1wQyxJQUFZdkMsc0JBQzNDb0UsVUFHSCxHQTVxQkssR0E0cUJEalksRUFDRG9XLElBQVkxQyx1QkFBeUJyTyxLQUNyQzRTLFNBR0gsR0FockJFLEdBZ3JCRWpZLEVBQ0wsT0FBT2tRLFFBK0JmLE9BeEJBOEYsRUFBYW5OLFNBQVUsRUFDdkJvTixFQUFPcE4sUUFBVW5MLEVBQ2pCcVksRUFBa0JsTixTQUFVLEVBR3hCbVAsR0FDQWxCLEdBQVMsQ0FDTHJMLEtBQU1BLEVBQ05KLE1BQU9BLEVBQ1A0RSxhQUFjQSxJQUlsQndHLE1BQ0lsSyxFQUFZZCxJQUFTdUQsRUFFckJpSixJQUtBaEosRUFBSWdKLElBR0wsV0FFSGpDLEVBQWFuTixTQUFVLEVBQ3ZCc1AsSUFDQUksUUFFTCxDQUFDN2EsRUFBS3dTLEtBRVRmLEdBQTBCLFdBQ3RCLElBQUlzSixFQUNKLFNBQVM3TyxJQUdMLElBQUk4TyxFQUFXbE0sRUFBV21KLEdBQ3BCQSxFQUFnQmxLLEdBQ2hCa0ssRUFJRitDLElBQXVCLElBQVhELElBQ1pBLEVBQVF2SixXQUFXeUosRUFBU0QsSUFHcEMsU0FBU0MsSUFHQS9CLEdBQVMvTixRQUFRd0MsUUFDakJ1SyxJQUFxQlEsSUFBWTNILGNBQ2pDb0gsSUFBc0JPLElBQVk1SCxXQUtuQzVFLElBSkFzRyxHQUFXZ0YsR0FBYWxMLEtBQUtKLEdBUXJDLE9BREFBLElBQ08sV0FDQzZPLElBQ0FHLGFBQWFILEdBQ2JBLEdBQVMsTUFHbEIsQ0FBQzlDLEVBQWlCQyxFQUFtQkMsRUFBb0IzRixLQUU1RCx3QkFBY3pFLEdBS1ZnSyxHQUFZbEosRUFBWWQsSUFBUy9OLEVBS2pDLE1BSEF3WSxFQUFXck4sUUFBVTBNLEVBQ3JCWSxFQUFVdE4sUUFBVWtLLEVBQ3BCaUQsRUFBYW5OLFNBQVUsRUFDakIwRCxFQUFZbEIsR0FBUzZFLEdBQVdnRixHQUFlN0osRUFFekQsTUFBTyxDQUNIOEcsT0FBUTRGLEdBQ1IsV0FFSSxPQURBWixHQUFrQjFMLE1BQU8sRUFDbEJBLEdBRVgsWUFFSSxPQURBMEwsR0FBa0I5TCxPQUFRLEVBQ25CQSxHQUVYLG1CQUVJLE9BREE4TCxHQUFrQmxILGNBQWUsRUFDMUJBLEtDdGdDSixTQUFTNEksS0FDcEIsSUFBSUMsRUFBWWpFLElBRWhCLE9BRFksbUJBQVEsV0FBYyxNQUFPLENBQUcxQyxPQUFRMkcsRUFBVTNHLE9BQVFuQyxNQUFPOEksRUFBVTlJLFNBQWEsQ0FBQzhJLEVBQVUzRyxPQUFRMkcsRUFBVTlJLFFDRnRILFNBQVMrSSxHQUFVQyxRQUNULElBQWpCQSxJQUEyQkEsR0FBZSxHQUM5QyxJQUFJeE4sRUFBS0wsRUFBTyxtQkFBUzZOLEdBQWUsR0FBSTViLEVBQVFvTyxFQUFHLEdBQUl5TixFQUFXek4sRUFBRyxHQVd6RSxNQUFPLENBQUNwTyxFQVZLLHVCQUFZLFNBQVU4YixHQUUzQkQsRUFEb0Isa0JBQWJDLEVBQ0VBLEVBR0EsU0FBVUMsR0FDZixPQUFRQSxNQUdqQixPOzs7Ozs7Ozs7O0FDSlAsSUFBSUMsRUFBNEIsb0JBQWQvSixXQUE0QkEsVUFBVWdLLFVBQVVDLGNBQWNyRSxRQUFRLFdBQWEsRUFFckcsU0FBU3NFLEVBQVMxYixFQUFRK0ssRUFBTzRRLEdBQzNCM2IsRUFBT21MLGlCQUNUbkwsRUFBT21MLGlCQUFpQkosRUFBTzRRLEdBQVEsR0FDOUIzYixFQUFPNGIsYUFDaEI1YixFQUFPNGIsWUFBWSxLQUFLNUosT0FBT2pILElBQVEsV0FDckM0USxFQUFPMU0sT0FBT2xFLFVBTXBCLFNBQVM4USxFQUFRQyxFQUFVamMsR0FHekIsSUFGQSxJQUFJa2MsRUFBT2xjLEVBQUltYyxNQUFNLEVBQUduYyxFQUFJaUIsT0FBUyxHQUU1QnhDLEVBQUksRUFBR0EsRUFBSXlkLEVBQUtqYixPQUFReEMsSUFDL0J5ZCxFQUFLemQsR0FBS3dkLEVBQVNDLEVBQUt6ZCxHQUFHbWQsZUFHN0IsT0FBT00sRUFJVCxTQUFTRSxFQUFRcGMsR0FDSSxpQkFBUkEsSUFBa0JBLEVBQU0sSUFPbkMsSUFKQSxJQUFJb1EsR0FGSnBRLEVBQU1BLEVBQUlxYyxRQUFRLE1BQU8sS0FFVkMsTUFBTSxLQUVqQjVNLEVBQVFVLEVBQUttTSxZQUFZLElBRXRCN00sR0FBUyxHQUNkVSxFQUFLVixFQUFRLElBQU0sSUFDbkJVLEVBQUtvTSxPQUFPOU0sRUFBTyxHQUNuQkEsRUFBUVUsRUFBS21NLFlBQVksSUFHM0IsT0FBT25NLEVBdUdULElBdkZBLElBQUlxTSxFQUFVLENBQ1pDLFVBQVcsRUFDWEMsSUFBSyxFQUNMQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsT0FBUSxHQUNSQyxJQUFLLEdBQ0xDLE9BQVEsR0FDUkMsTUFBTyxHQUNQQyxLQUFNLEdBQ05DLEdBQUksR0FDSkMsTUFBTyxHQUNQQyxLQUFNLEdBQ05DLElBQUssR0FDTHpJLE9BQVEsR0FDUjBJLElBQUssR0FDTEMsT0FBUSxHQUNSQyxLQUFNLEdBQ05DLElBQUssR0FDTEMsT0FBUSxHQUNSQyxTQUFVLEdBQ1ZDLFNBQVUsR0FDVkMsTUFBTyxHQUNQQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxhQUFjLElBQ2RDLFFBQVMsSUFDVEMsVUFBVyxJQUNYQyxhQUFjLElBQ2RDLFlBQWEsSUFDYkMsV0FBWSxJQUNaLElBQUssR0FDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLLElBQ0wsSUFBS25ELEVBQU8sSUFBTSxJQUNsQixJQUFLQSxFQUFPLEdBQUssSUFDakIsSUFBS0EsRUFBTyxHQUFLLElBQ2pCb0QsSUFBTSxJQUNOLElBQUssSUFDTCxJQUFLLElBQ0wsS0FBTSxLQUdKQyxFQUFZLENBRWQsSUFBSyxHQUNMQyxNQUFPLEdBRVAsSUFBSyxHQUNMOVgsSUFBSyxHQUNMK1gsT0FBUSxHQUVSLElBQUssR0FDTEMsS0FBTSxHQUNOQyxRQUFTLEdBRVQsSUFBSyxHQUNMQyxJQUFLLEdBQ0xDLFFBQVMsSUFFUEMsRUFBYyxDQUNoQkMsR0FBSSxXQUNKQyxHQUFJLFNBQ0pDLEdBQUksVUFDSkMsR0FBSSxVQUNKQyxTQUFVLEdBQ1ZDLFFBQVMsR0FDVEMsT0FBUSxHQUNSQyxRQUFTLElBRVBDLEVBQVEsQ0FDVlIsSUFBSSxFQUNKQyxJQUFJLEVBQ0pDLElBQUksRUFDSkMsSUFBSSxHQUVGTSxFQUFZLEdBRVBoZixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFDdEJ5YixFQUFRLElBQUl0SyxPQUFPblIsSUFBTSxJQUFNQSxFQUdqQyxJQUFJaWYsRUFBWSxHQUVaQyxFQUFTLE1BRVRDLEVBQXNCLEdBR3RCQyxFQUFPLFNBQWNDLEdBQ3ZCLE9BQU81RCxFQUFRNEQsRUFBRXpFLGdCQUFrQm1ELEVBQVVzQixFQUFFekUsZ0JBQWtCeUUsRUFBRUMsY0FBY0MsV0FBVyxJQUk5RixTQUFTQyxFQUFTQyxHQUNoQlAsRUFBU08sR0FBUyxNQUlwQixTQUFTQyxJQUNQLE9BQU9SLEdBQVUsTUF1SG5CLElBQUlTLEVBQWEsU0FBb0JDLEdBQ25DLElBQUk1Z0IsRUFBTTRnQixFQUFLNWdCLElBQ1h5Z0IsRUFBUUcsRUFBS0gsTUFDYjNFLEVBQVM4RSxFQUFLOUUsT0FDZCtFLEVBQWdCRCxFQUFLRSxTQUNyQkEsT0FBNkIsSUFBbEJELEVBQTJCLElBQU1BLEVBQzdCekUsRUFBUXBjLEdBQ2QrZ0IsU0FBUSxTQUFVQyxHQUM3QixJQUFJQyxFQUFhRCxFQUFVMUUsTUFBTXdFLEdBQzdCSSxFQUFNRCxFQUFXaGdCLE9BQ2pCa2dCLEVBQVVGLEVBQVdDLEVBQU0sR0FDM0JFLEVBQXNCLE1BQVpELEVBQWtCLElBQU1mLEVBQUtlLEdBQzNDLEdBQUtuQixFQUFVb0IsR0FBZixDQUVLWCxJQUFPQSxFQUFRQyxLQUNwQixJQUFJeEUsRUFBT2dGLEVBQU0sRUFBSWxGLEVBQVErQyxFQUFXa0MsR0FBYyxHQUN0RGpCLEVBQVVvQixHQUFXcEIsRUFBVW9CLEdBQVNsZCxLQUFJLFNBQVVtZCxHQUlwRCxRQUZ1QnZGLEdBQVN1RixFQUFPdkYsU0FBV0EsSUFFMUJ1RixFQUFPWixRQUFVQSxHQXBRL0MsU0FBc0JhLEVBQUlDLEdBS3hCLElBSkEsSUFBSUMsRUFBT0YsRUFBR3JnQixRQUFVc2dCLEVBQUd0Z0IsT0FBU3FnQixFQUFLQyxFQUNyQ0UsRUFBT0gsRUFBR3JnQixRQUFVc2dCLEVBQUd0Z0IsT0FBU3NnQixFQUFLRCxFQUNyQ0ksR0FBVSxFQUVMampCLEVBQUksRUFBR0EsRUFBSStpQixFQUFLdmdCLE9BQVF4QyxLQUNBLElBQTNCZ2pCLEVBQUtsSyxRQUFRaUssRUFBSy9pQixNQUFZaWpCLEdBQVUsR0FHOUMsT0FBT0EsRUEyUCtDQyxDQUFhTixFQUFPbkYsS0FBTUEsR0FDbkUsR0FHRm1GLFVBTWIsU0FBU08sRUFBYTFXLEVBQU8yVyxFQUFTcEIsR0FDcEMsSUFBSXFCLEVBRUosR0FBSUQsRUFBUXBCLFFBQVVBLEdBQTJCLFFBQWxCb0IsRUFBUXBCLE1BQWlCLENBSXRELElBQUssSUFBSTlULEtBRlRtVixFQUFpQkQsRUFBUTNGLEtBQUtqYixPQUFTLEVBRXpCOGUsRUFDUjVnQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUttaEIsRUFBT3BULE1BQ3pDb1QsRUFBTXBULElBQU1rVixFQUFRM0YsS0FBSzNFLFNBQVM1SyxJQUFNLEdBQUtvVCxFQUFNcFQsS0FBb0MsSUFBOUJrVixFQUFRM0YsS0FBSzNFLFNBQVM1SyxNQUNsRm1WLEdBQWlCLElBTUssSUFBeEJELEVBQVEzRixLQUFLamIsUUFBaUI4ZSxFQUFNLEtBQVFBLEVBQU0sS0FBUUEsRUFBTSxLQUFRQSxFQUFNLE9BQU8rQixHQUF1QyxNQUFyQkQsRUFBUUUsV0FDMUUsSUFBbkNGLEVBQVEvRixPQUFPNVEsRUFBTzJXLEtBQ3BCM1csRUFBTThXLGVBQWdCOVcsRUFBTThXLGlCQUFzQjlXLEVBQU0rVyxhQUFjLEVBQ3RFL1csRUFBTWdYLGlCQUFpQmhYLEVBQU1nWCxrQkFDN0JoWCxFQUFNaVgsZUFBY2pYLEVBQU1pWCxjQUFlLEtBT3JELFNBQVNDLEVBQVNsWCxHQUNoQixJQUFJbVgsRUFBV3JDLEVBQVUsS0FDckJoZ0IsRUFBTWtMLEVBQU1rVyxTQUFXbFcsRUFBTW9YLE9BQVNwWCxFQUFNcVgsU0FFaEQsR0FBS0MsRUFBUUMsT0FBTzdqQixLQUFLdU8sS0FBTWpDLEdBQS9CLENBc0NBLEdBbkNZLEtBQVJsTCxHQUFzQixNQUFSQSxJQUFhQSxFQUFNLEtBUUwsSUFBNUJpZ0IsRUFBVTFJLFFBQVF2WCxJQUF1QixNQUFSQSxHQUFhaWdCLEVBQVV6UyxLQUFLeE4sR0FNakUsQ0FBQyxVQUFXLFNBQVUsV0FBWSxXQUFXK2dCLFNBQVEsU0FBVTJCLEdBQzdELElBQUlDLEVBQVNyRCxFQUFZb0QsR0FFckJ4WCxFQUFNd1gsS0FBMkMsSUFBL0J6QyxFQUFVMUksUUFBUW9MLEdBQ3RDMUMsRUFBVXpTLEtBQUttVixJQUNMelgsRUFBTXdYLElBQVl6QyxFQUFVMUksUUFBUW9MLElBQVcsRUFDekQxQyxFQUFVekQsT0FBT3lELEVBQVUxSSxRQUFRb0wsR0FBUyxHQUN2QixZQUFaRCxHQUF5QnhYLEVBQU13WCxJQUFpQyxJQUFyQnpDLEVBQVVoZixTQUt4RGlLLEVBQU0wVSxTQUFXMVUsRUFBTXlVLFVBQVl6VSxFQUFNMlUsU0FDN0NJLEVBQVlBLEVBQVU5RCxNQUFNOEQsRUFBVTFJLFFBQVFvTCxTQVFoRDNpQixLQUFPK2YsRUFBTyxDQUdoQixJQUFLLElBQUkvZSxLQUZUK2UsRUFBTS9mLElBQU8sRUFFQytlLEVBQ1JBLEVBQVUvZCxLQUFPaEIsSUFBS3dpQixFQUFReGhCLElBQUssR0FHekMsSUFBS3FoQixFQUFVLE9BSWpCLElBQUssSUFBSTllLEtBQUt3YyxFQUNSNWdCLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS21oQixFQUFPeGMsS0FDOUN3YyxFQUFNeGMsR0FBSzJILEVBQU1vVSxFQUFZL2IsS0FXN0IySCxFQUFNMFgsb0JBQXNCMVgsRUFBTTJVLFFBQVczVSxFQUFNMFUsVUFBWTFVLEVBQU0wWCxpQkFBaUIsZUFDekQsSUFBM0IzQyxFQUFVMUksUUFBUSxLQUNwQjBJLEVBQVV6UyxLQUFLLEtBR2MsSUFBM0J5UyxFQUFVMUksUUFBUSxLQUNwQjBJLEVBQVV6UyxLQUFLLElBR2pCdVMsRUFBTSxLQUFNLEVBQ1pBLEVBQU0sS0FBTSxHQUlkLElBQUlVLEVBQVFDLElBRVosR0FBSTJCLEVBQ0YsSUFBSyxJQUFJNWpCLEVBQUksRUFBR0EsRUFBSTRqQixFQUFTcGhCLE9BQVF4QyxJQUMvQjRqQixFQUFTNWpCLEdBQUdnaUIsUUFBVUEsSUFBeUIsWUFBZnZWLEVBQU01SSxNQUFzQitmLEVBQVM1akIsR0FBR29rQixTQUEwQixVQUFmM1gsRUFBTTVJLE1BQW9CK2YsRUFBUzVqQixHQUFHcWtCLFFBQzNIbEIsRUFBYTFXLEVBQU9tWCxFQUFTNWpCLEdBQUlnaUIsR0FNdkMsR0FBTXpnQixLQUFPZ2dCLEVBRWIsSUFBSyxJQUFJOU0sRUFBSyxFQUFHQSxFQUFLOE0sRUFBVWhnQixHQUFLaUIsT0FBUWlTLElBQzNDLElBQW1CLFlBQWZoSSxFQUFNNUksTUFBc0IwZCxFQUFVaGdCLEdBQUtrVCxHQUFJMlAsU0FBMEIsVUFBZjNYLEVBQU01SSxNQUFvQjBkLEVBQVVoZ0IsR0FBS2tULEdBQUk0UCxRQUNyRzlDLEVBQVVoZ0IsR0FBS2tULEdBQUlsVCxJQUFLLENBTTFCLElBTEEsSUFBSXFoQixFQUFTckIsRUFBVWhnQixHQUFLa1QsR0FDeEI0TixFQUFXTyxFQUFPUCxTQUNsQmlDLEVBQWMxQixFQUFPcmhCLElBQUlzYyxNQUFNd0UsR0FDL0JrQyxFQUFtQixHQUVkaFUsRUFBSSxFQUFHQSxFQUFJK1QsRUFBWTloQixPQUFRK04sSUFDdENnVSxFQUFpQnhWLEtBQUs0UyxFQUFLMkMsRUFBWS9ULEtBR3JDZ1UsRUFBaUIzUyxPQUFPNFMsS0FBSyxNQUFRaEQsRUFBVTVQLE9BQU80UyxLQUFLLEtBRTdEckIsRUFBYTFXLEVBQU9tVyxFQUFRWixLQVl0QyxTQUFTK0IsRUFBUXhpQixFQUFLaWYsRUFBUW5ELEdBQzVCbUUsRUFBWSxHQUNaLElBQUk3UCxFQUFPZ00sRUFBUXBjLEdBRWZrYyxFQUFPLEdBQ1B1RSxFQUFRLE1BRVJ5QyxFQUFVN1gsU0FFVjVNLEVBQUksRUFDSnFrQixHQUFRLEVBQ1JELEdBQVUsRUFDVi9CLEVBQVcsSUFvQmYsU0FsQmU5UyxJQUFYOE4sR0FBMEMsbUJBQVhtRCxJQUNqQ25ELEVBQVNtRCxHQUdvQyxvQkFBM0M5ZixPQUFPa0IsVUFBVTJQLFNBQVNwUixLQUFLcWdCLEtBQzdCQSxFQUFPd0IsUUFBT0EsRUFBUXhCLEVBQU93QixPQUU3QnhCLEVBQU9pRSxVQUFTQSxFQUFVakUsRUFBT2lFLFNBRWpDakUsRUFBTzZELFFBQU9BLEVBQVE3RCxFQUFPNkQsWUFFVjlVLElBQW5CaVIsRUFBTzRELFVBQXVCQSxFQUFVNUQsRUFBTzRELFNBRXBCLGlCQUFwQjVELEVBQU82QixXQUF1QkEsRUFBVzdCLEVBQU82QixXQUd2QyxpQkFBWDdCLElBQXFCd0IsRUFBUXhCLEdBRWpDeGdCLEVBQUkyUixFQUFLblAsT0FBUXhDLElBR3RCeWQsRUFBTyxJQUZQbGMsRUFBTW9RLEVBQUszUixHQUFHNmQsTUFBTXdFLElBSVo3ZixPQUFTLElBQUdpYixFQUFPRixFQUFRK0MsRUFBVy9lLEtBRzlDQSxFQUFjLE9BRGRBLEVBQU1BLEVBQUlBLEVBQUlpQixPQUFTLElBQ0gsSUFBTW1mLEVBQUtwZ0IsTUFHbEJnZ0IsSUFBWUEsRUFBVWhnQixHQUFPLElBRTFDZ2dCLEVBQVVoZ0IsR0FBS3dOLEtBQUssQ0FDbEJzVixNQUFPQSxFQUNQRCxRQUFTQSxFQUNUcEMsTUFBT0EsRUFDUHZFLEtBQU1BLEVBQ042RixTQUFVM1IsRUFBSzNSLEdBQ2ZxZCxPQUFRQSxFQUNSOWIsSUFBS29RLEVBQUszUixHQUNWcWlCLFNBQVVBLFNBS1MsSUFBWm9DLElBOURiLFNBQXVCQSxHQUNyQixPQUFPL0MsRUFBb0I1SSxRQUFRMkwsSUFBWSxFQTZEUkMsQ0FBY0QsSUFBWTlULFNBQy9EK1EsRUFBb0IzUyxLQUFLMFYsR0FDekJySCxFQUFTcUgsRUFBUyxXQUFXLFNBQVUzZixHQUNyQzZlLEVBQVM3ZSxNQUVYc1ksRUFBU3pNLE9BQVEsU0FBUyxXQUN4QjZRLEVBQVksTUFFZHBFLEVBQVNxSCxFQUFTLFNBQVMsU0FBVTNmLEdBQ25DNmUsRUFBUzdlLEdBclRmLFNBQXVCMkgsR0FDckIsSUFBSWxMLEVBQU1rTCxFQUFNa1csU0FBV2xXLEVBQU1vWCxPQUFTcFgsRUFBTXFYLFNBRTVDOWpCLEVBQUl3aEIsRUFBVTFJLFFBQVF2WCxHQWUxQixHQVpJdkIsR0FBSyxHQUNQd2hCLEVBQVV6RCxPQUFPL2QsRUFBRyxHQUlsQnlNLEVBQU1sTCxLQUFtQyxTQUE1QmtMLEVBQU1sTCxJQUFJNGIsZUFDekJxRSxFQUFVekQsT0FBTyxFQUFHeUQsRUFBVWhmLFFBSXBCLEtBQVJqQixHQUFzQixNQUFSQSxJQUFhQSxFQUFNLElBRWpDQSxLQUFPK2YsRUFHVCxJQUFLLElBQUkvZSxLQUZUK2UsRUFBTS9mLElBQU8sRUFFQytlLEVBQ1JBLEVBQVUvZCxLQUFPaEIsSUFBS3dpQixFQUFReGhCLElBQUssR0FnU3ZDb2lCLENBQWM3ZixPQUtwQixJQUFJOGYsRUFBTyxDQUNUN0MsU0FBVUEsRUFDVkUsU0FBVUEsRUFDVjRDLFlBblZGLFNBQXFCN0MsRUFBTzhDLEdBQzFCLElBQUlDLEVBQ0Eva0IsRUFJSixJQUFLLElBQUl1QixLQUZKeWdCLElBQU9BLEVBQVFDLEtBRUpWLEVBQ2QsR0FBSTdnQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtvaEIsRUFBV2hnQixHQUdsRCxJQUZBd2pCLEVBQVd4RCxFQUFVaGdCLEdBRWhCdkIsRUFBSSxFQUFHQSxFQUFJK2tCLEVBQVN2aUIsUUFDbkJ1aUIsRUFBUy9rQixHQUFHZ2lCLFFBQVVBLEVBQU8rQyxFQUFTaEgsT0FBTy9kLEVBQUcsR0FBUUEsSUFNOURpaUIsTUFBZUQsR0FBT0QsRUFBUytDLEdBQVksUUFtVS9DRSxtQkFoWEYsV0FDRSxPQUFPeEQsRUFBVTlELE1BQU0sSUFnWHZCdUgsVUE5VkYsU0FBbUJ0QyxHQUtqQixNQUp1QixpQkFBWkEsSUFDVEEsRUFBVWhCLEVBQUtnQixLQUdzQixJQUFoQ25CLEVBQVUxSSxRQUFRNkosSUEwVnpCcUIsT0E1V0YsU0FBZ0J2WCxHQUNkLElBQUkxSCxFQUFTMEgsRUFBTTFILFFBQVUwSCxFQUFNeVksV0FDL0JDLEVBQVVwZ0IsRUFBT29nQixRQUNqQkMsR0FBTyxFQU1YLE9BSklyZ0IsRUFBT3NnQixvQkFBa0MsVUFBWkYsR0FBbUMsYUFBWkEsR0FBc0MsV0FBWkEsR0FBMEJwZ0IsRUFBT3VnQixZQUNqSEYsR0FBTyxHQUdGQSxHQW9XUEcsT0F2U0YsU0FBZ0JDLEdBRWQsR0FBS0EsR0FJRSxHQUFJdGpCLE1BQU1ELFFBQVF1akIsR0FFdkJBLEVBQVNsRCxTQUFRLFNBQVVuSSxHQUNyQkEsRUFBSzVZLEtBQUsyZ0IsRUFBVy9ILFdBRXRCLEdBQXdCLGlCQUFicUwsRUFFWkEsRUFBU2prQixLQUFLMmdCLEVBQVdzRCxRQUN4QixHQUF3QixpQkFBYkEsRUFBdUIsQ0FDdkMsSUFBSyxJQUFJQyxFQUFPL1EsVUFBVWxTLE9BQVFpUixFQUFPLElBQUl2UixNQUFNdWpCLEVBQU8sRUFBSUEsRUFBTyxFQUFJLEdBQUk5USxFQUFPLEVBQUdBLEVBQU84USxFQUFNOVEsSUFDbEdsQixFQUFLa0IsRUFBTyxHQUFLRCxVQUFVQyxHQUs3QixJQUFJcU4sRUFBUXZPLEVBQUssR0FDYjRKLEVBQVM1SixFQUFLLEdBRUcsbUJBQVZ1TyxJQUNUM0UsRUFBUzJFLEVBQ1RBLEVBQVEsSUFHVkUsRUFBVyxDQUNUM2dCLElBQUtpa0IsRUFDTHhELE1BQU9BLEVBQ1AzRSxPQUFRQSxFQUNSZ0YsU0FBVSxZQTlCWjNoQixPQUFPaVIsS0FBSzRQLEdBQVdlLFNBQVEsU0FBVS9nQixHQUN2QyxjQUFjZ2dCLEVBQVVoZ0IsUUFzUzlCLElBQUssSUFBSWdQLEtBQUtxVSxFQUNSbGtCLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3lrQixFQUFNclUsS0FDN0N3VCxFQUFReFQsR0FBS3FVLEVBQUtyVSxJQUl0QixHQUFzQixvQkFBWEksT0FBd0IsQ0FDakMsSUFBSStVLEVBQVcvVSxPQUFPb1QsUUFFdEJBLEVBQVE0QixXQUFhLFNBQVVDLEdBSzdCLE9BSklBLEdBQVFqVixPQUFPb1QsVUFBWUEsSUFDN0JwVCxPQUFPb1QsUUFBVTJCLEdBR1ozQixHQUdUcFQsT0FBT29ULFFBQVVBLEVBR0osUSxPQ3BqQmYsU0FBUzhCLElBQ1AsT0FBTyxFQUFRWixVQUdqQixFQUFRakIsT0FBUyxXQUNmLE9BQU8sR0FHVCxJQUFJOEIsRUFBWSxTQUFtQjNELEVBQU00RCxHQUN2QyxJQUFJaGhCLEVBQVNvZCxFQUFLcGQsT0FDZGloQixFQUFnQmpoQixHQUFVQSxFQUFPb2dCLFFBQ3JDLE9BQU9jLFFBQVFELEdBQWlCRCxHQUFnQkEsRUFBYTloQixTQUFTK2hCLEtBT3hFLFNBQVM5ZSxFQUFXeUssRUFBTW5GLEVBQVVzSSxFQUFTb1IsR0FDdkNwUixhQUFtQjVTLFFBQ3JCZ2tCLEVBQU9wUixFQUNQQSxPQUFVdkYsR0FHWixJQUFJNFcsRUFBUXJSLEdBQVcsR0FDbkJpUixFQUFlSSxFQUFNSixhQUNyQi9CLEVBQVNtQyxFQUFNbkMsT0FDZkssRUFBUThCLEVBQU05QixNQUNkRCxFQUFVK0IsRUFBTS9CLFFBQ2hCZ0MsRUFBd0JELEVBQU1FLHFCQUM5QkEsT0FBaUQsSUFBMUJELEdBQTBDQSxFQUNqRUUsRUFBZ0JILEVBQU1JLFFBQ3RCQSxPQUE0QixJQUFsQkQsR0FBa0NBLEVBQzVDRSxFQUF3QkwsRUFBTU0sd0JBQzlCQSxPQUFvRCxJQUExQkQsR0FBMkNBLEVBRXJFMWlCLEVBQU0saUJBQU8sTUFFYjRpQixFQUFtQix1QkFBWSxTQUFVQyxFQUFlQyxHQUMxRCxJQUFJQyxFQUVKLE9BQUk3QyxJQUFXQSxFQUFPMkMsSUFDWk4sS0EzQkxQLEVBK0IrQmEsRUEvQmpCLENBQUMsUUFBUyxXQUFZLGFBK0JjYixFQUFVYSxFQUFlWixJQUFtRSxPQUFqRGMsRUFBd0JGLEVBQWM1aEIsU0FBbUI4aEIsRUFBc0J4QixvQkFBc0JvQixLQUluTCxPQUFoQjNpQixFQUFJNEksU0FBb0JFLFNBQVNrYSxnQkFBa0JoakIsRUFBSTRJLFdBQ3pERixFQUFTbWEsRUFBZUMsSUFDakIsS0FJUlYsRUFBTyxDQUFDcGlCLEVBQUtpaUIsRUFBYy9CLEdBQVF0USxPQUFPd1MsR0FBUSxDQUFDcGlCLEVBQUtpaUIsRUFBYy9CLElBaUJ6RSxPQWhCQSxxQkFBVSxXQUNSLEdBQUt1QyxFQVdMLE9BTElsQyxJQUFxQixJQUFaRCxJQUNYdFAsRUFBUXNQLFNBQVUsR0FHcEIsRUFBUXpTLEVBQU1tRCxHQUFXLEdBQUk0UixHQUN0QixXQUNMLE9BQU8sRUFBUW5CLE9BQU81VCxFQUFNK1UsSUFYNUIsRUFBUW5CLE9BQU81VCxFQUFNK1UsS0FhdEIsQ0FBQ0EsRUFBa0IvVSxFQUFNNFUsSUFDckJ6aUIsRUFHVCxJQUFJaWpCLEVBQWtCLEVBQVE5QiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51Q29udGFpbmVyLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlZLWW9OdFdUWnVpMkFPMUlseUpNVHc9PVwifTsiLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XHJcbmV4cG9ydCB7XHJcbiAgRHJvcGRvd24sXHJcbiAgRHJvcGRvd25Qcm9wcyxcclxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcclxuICBJdGVtQm9keVJlbmRlcmVyRm4gYXMgRHJvcGRvd25JdGVtQm9keVJlbmRlcmVyRm4sXHJcbiAgUHJvbXB0Rm4gYXMgRHJvcGRvd25Qcm9tcHRGbixcclxufSBmcm9tIFwiLi9jb21wb25lbnRzL0Ryb3Bkb3duXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBCdXR0b25Qcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcclxuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcclxuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEJ1dHRvbih7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIG9uQ2xpY2ssXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcclxuICBhbGlnbiA9IFwiY2VudGVyXCIsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgdHlwZSxcclxufTogQnV0dG9uUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgdHlwZT17dHlwZX1cclxuICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcclxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcclxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxyXG4gICAgICApIDogKFxyXG4gICAgICAgIGNoaWxkcmVuXHJcbiAgICAgICl9XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ4eW51TXU4WFpTc29uRHVrc2w2QVFnPT1cIixcImxlZnRcIjpcIlBrcDBIaE5IdHRvV0liMmR3cEdudHc9PVwiLFwic21hbGxcIjpcIndET2VlSkdDWm0wazJacE56RmJlSGc9PVwiLFwibGFyZ2VcIjpcIl81UWpCV3RsN1lYeTRlbTRYM0dQYlJBPT1cIixcInhsYXJnZVwiOlwia04wTGdhNGZCT2djaWdEcXRPRFJkZz09XCIsXCJpbnZlcnRlZFwiOlwiKzVuc1RuTGxOT1g4S0ZRaVVoVDFrUT09XCIsXCJyb3VuZGVkXCI6XCJCalAtSk5XSmpvQmZOTU16dG55V09RPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJsR0p3TmNvbDhDQWtucXhZKzhEZnFnPT1cIixcImxlZnRPZmZzZXRcIjpcIkVWK2c2aFVBMXF2OExROVJxZ3JRUlE9PVwiLFwibm9TaGFkb3dcIjpcIlozdVBMcnJ5cUlOZlJqWnBwd1U2TlE9PVwiLFwibm9Cb3JkZXJcIjpcImVFZ2hHNkdYQjlJenlEM2pyTlpmQUE9PVwiLFwidHJhbnNwYXJlbnRcIjpcInNzN0RoVmdGNUpHc3BDQVNkWlVZQmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiaThRUFNyNGNIWWhKN0FpdWUrY3gwZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiV1N4aW1VTTlreFlHYzVWUmMwaVpsQT09XCIsXCJub1BhZGRpbmdcIjpcIlNnWGNoano0ZEpyK3RjOHlrTG5FMUE9PVwiLFwiY29udGVudFwiOlwieG44eWZqTjZtZXhSWElneU5obWtpdz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XHJcblxyXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XHJcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcclxuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcclxuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcclxuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcclxuICAgICAgc2l6ZT86IFNpemU7XHJcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcclxuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBzaXplLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXHJcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIC4uLnByb3BzXHJcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Q29tcG9uZW50XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpJcjl3LS1mU2l2cVdWR29TcDE0dEE9PVwiLFwibGVmdFwiOlwiclJ5dTlBVkd3WCsteGpUT01UU0Uxdz09XCIsXCJzbWFsbFwiOlwiXzBEQmhHSnZjYmpFTWxTcUVvZkYtcnc9PVwiLFwibWVkaXVtXCI6XCJhNit6Y1VZNlhLeTk0ekFxVVlhRTZ3PT1cIixcImxhcmdlXCI6XCJXK3Y0dkZlYlFreHcxY2RpS1ktS3ZnPT1cIixcInhsYXJnZVwiOlwiZFk5MURRUllVYVdUNEV6T0pKK0dCZz09XCIsXCJpbnZlcnRlZFwiOlwieXBsQ3B5bEw0SWRlcytjT3JxU2ltUT09XCIsXCJyb3VuZGVkXCI6XCJNUkVZMDkrZDY5dlY4NGhabkp1TFl3PT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJIc2FvN21GVzNsWVRyTmhmV3ZmeFd3PT1cIixcImxlZnRPZmZzZXRcIjpcIk1YbEwzTzhLVVllVkFZY1Nzbk5zOXc9PVwiLFwibm9TaGFkb3dcIjpcIkhxejRDcVFjTzRzME1UYXdyRHIwb0E9PVwiLFwidHJhbnNwYXJlbnRcIjpcImgxaE53YzJVbE0wQzVGLXhkZ2E1ZHc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiVG15cTQrdUhVK0pKZVlOZEJIOEwyUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSnp6R25UdDRhTTMrOXJWbE5RV2kwQT09XCIsXCJub1BhZGRpbmdcIjpcIlV2SThVbmpjOVgwek4ybDVXK3RtclE9PVwiLFwibm9Cb3JkZXJcIjpcIlFwNXVCblFnSkZvWkhnWVNoekFQY3c9PVwiLFwiZGlzYWJsZWRcIjpcIlpYbGprWXBQV2pESkxDNEJFR01wcnc9PVwiLFwiY29udGVudFwiOlwiXzBuMk1uT2ZKUG0yd3hzNE0ybmJHSEE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBDaGVja2JveFByb3BzID0ge1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgY2hlY2tlZD86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcclxuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gQ2hlY2tib3goe1xyXG4gIGxhYmVsLFxyXG4gIG9uQ2hhbmdlLFxyXG4gIHBsYWNlaG9sZGVyLFxyXG4gIGNoZWNrZWQsXHJcbiAgZGlzYWJsZWQsXHJcbiAgbmFtZSxcclxuICBjbGFzc05hbWUsXHJcbiAgaW5kZXRlcm1pbmF0ZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICBhdXRvRm9jdXMgPSBmYWxzZSxcclxufTogQ2hlY2tib3hQcm9wcykge1xyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cclxuICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpLFxyXG4gICAgW29uQ2hhbmdlXVxyXG4gICk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfSA+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxyXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcclxuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX1cclxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XHJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgbmFtZT17bmFtZX1cclxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxyXG4gICAgICAvPlxyXG4gICAgPC9MYWJlbD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcclxuICB2YWx1ZTogUmVhY3ROb2RlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGFiZWxcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfVxyXG4gICAgPlxyXG4gICAgICB7dmFsdWV9XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvbGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJiUjdQTzh5UkZ0VWxOMXZzUDdlY1JRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwiQ0JRWjRQcDFjbGIrNVI4SWxDTzRnUT09XCIsXCJzbWFsbFwiOlwiXzVqYmp1dDdHZ3Q3Z3hlbmp5ZjlMYlE9PVwiLFwibWVkaXVtXCI6XCJpUEFPdzJac05KQTBuV0RYcVdDMzdnPT1cIixcImxhcmdlXCI6XCJMRXlrWHM5bUVFU2R3bzZpWm9NZFV3PT1cIixcInhsYXJnZVwiOlwidXFwQUNFSjFvYkE0YlJsYWVBVDI3Zz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xyXG4gIGNvbG9yczogQ29sb3JbXTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xyXG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xyXG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcclxuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xyXG4gIGNvbG9ycyxcclxuICBjb250YWluZXJSZWYsXHJcbiAgb25TZWxlY3QsXHJcbiAgc2VsZWN0ZWRDb2xvcixcclxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXHJcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXHJcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxyXG4gICAgPlxyXG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xyXG4gICAgICAgICAgICBvblNlbGVjdChudWxsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPENvbG9yU3dhdGNoXHJcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxyXG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XHJcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XHJcbiAgY29sb3I6IENvbG9yO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XHJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XHJcbiAgY29sb3IsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIG9uQ2xpY2ssXHJcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxyXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cclxuICAgID5cclxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwidVRmN21ZZlhlTlQ3R24wem5uUjhEUT09XCIsXCJzZWxlY3RlZFwiOlwibmljWmZnTWsrdVFGUHlwSklrUXVidz09XCIsXCJzck9ubHlcIjpcIkdIcEhFQjFRWER5amVSOVZuRWQxVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJES3RQNTViT2ZVVEIxa0RhLWlVSHFRPT1cIixcImhvcml6b250YWxcIjpcIl8zNExqOC1iLTEzQzhMMDlSc01pbmVnPT1cIixcInZlcnRpY2FsXCI6XCJfMXl1Z0dRczRFazB0M1Q4dGdvS3hWUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcclxuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xyXG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XHJcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgaGVhZGVyLFxyXG4gIGlzT3BlbixcclxuICBidXR0b25zTGVmdCA9IFtdLFxyXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxyXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBub092ZXJsYXkgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxyXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxNb2RhbFxyXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgaXNPcGVuPXtpc09wZW59XHJcbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XHJcbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxyXG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XHJcbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cclxuICAgICAgICA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcclxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L01vZGFsPlxyXG4gICk7XHJcbn1cclxuXHJcbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1vZGFsUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGlzT3BlbjogYm9vbGVhbjtcclxuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcclxuICBidXR0b24/OiBSZWFjdE5vZGU7XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub092ZXJsYXk/OiBib29sZWFuO1xyXG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNb2RhbCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGlzT3BlbixcclxuICBidXR0b24sXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxyXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcclxuICBiYXNlWkluZGV4ID0gMTAwOSxcclxufTogTW9kYWxQcm9wcykge1xyXG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIG9uQ2xvc2UoKTtcclxuICB9LCBbb25DbG9zZV0pO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgaXNPcGVuICYmIChcclxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXHJcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcclxuICAgICAgICAgIF0pfVxyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcclxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2J1dHRvbiAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtidXR0b259XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJwVTZJQjJyMExwQ0ZQWGdUdk9yMmdBPT1cIixcIm5vT3ZlcmxheVwiOlwiXzVTVVI5RmgtZkhUeTRYcjZtUUMrcEE9PVwiLFwibW9kYWxcIjpcIkxDQVQ4M211WHNBR3JQVUhRMXkraFE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIldIVThRYnB6K0F2VC1ZcHVRZVVLLVE9PVwiLFwibm9TaGFkb3dcIjpcIkdpMVZUbWczR1BOeG5YOTEtbTAtNWc9PVwiLFwibW9kYWxCdXR0b25cIjpcImxmbmZIdSt4eWVFamNRYkFRd2pJVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwianZLU2ktZkt1ZmNwSzllQldXRkNMZz09XCIsXCJtb2RhbEhlYWRlclwiOlwiY3gxUm9RZGdBYmVudlZYVThCN2ZTdz09XCIsXCJtb2RhbENvbnRlbnRcIjpcIlpENHYzSEUtQVlaWFYwSVRXREY3R2c9PVwiLFwibm9QYWRkaW5nXCI6XCJfMXpGRjh4cXlvNzdVeEcydjU0OUJlQT09XCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIl80aFFoQ2U1VTdZQnlobmhPKy1HcWl3PT1cIixcIm1vZGFsQnV0dG9uc1wiOlwiSm9JTGJXNUZuWml4YUo3RVR2bzgrdz09XCJ9OyIsImV4cG9ydCB7XHJcbiAgZGVmYXVsdCBhcyBEcm9wZG93bixcclxuICBEcm9wZG93blByb3BzLFxyXG4gIEl0ZW0sXHJcbiAgUHJvbXB0Rm4sXHJcbiAgSXRlbUJvZHlSZW5kZXJlckZuLFxyXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdENoaWxkLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XHJcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtIH0gZnJvbSBcIi4uL01lbnVcIjtcclxuXHJcbmltcG9ydCBjc3MgZnJvbSBcIi4vRHJvcGRvd24ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XHJcbmV4cG9ydCB0eXBlIFByb21wdEZuPFQ+ID0gKHNlbGVjdGVkSXRlbTogVCB8IG51bGwpID0+IFJlYWN0Q2hpbGQ7XHJcbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPiA9IChzdGF0ZToge1xyXG4gIGl0ZW06IFQ7XHJcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcclxufSkgPT4gUmVhY3RDaGlsZDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUPiB7XHJcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcclxuICBpdGVtczogVFtdO1xyXG4gIG9uU2VsZWN0OiAoaXRlbTogVCkgPT4gdm9pZDtcclxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21wdEZuPFQ+O1xyXG4gIHNlbGVjdGVkSXRlbTogVCB8IG51bGw7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgc3RyZXRjaFByb21wdEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgc3RyZXRjaFByb21wdFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gIG5vUHJvbXB0UGFkZGluZz86IGJvb2xlYW47XHJcbiAgbm9Qcm9wbXB0U2hhZG93PzogYm9vbGVhbjtcclxuICBub1Byb21wdEJvcmRlcj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XHJcbiAgaXRlbXMsXHJcbiAgaXRlbUJvZHlSZW5kZXJlcixcclxuICBsYWJlbCxcclxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxyXG4gIHByb21wdCxcclxuICBzZWxlY3RlZEl0ZW0sXHJcbiAgc3RyZXRjaFByb21wdEhvcml6b250YWxseSA9IHRydWUsXHJcbiAgc3RyZXRjaFByb21wdFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICBub1Byb21wdFBhZGRpbmcgPSBmYWxzZSxcclxuICBub1Byb3BtcHRTaGFkb3cgPSBmYWxzZSxcclxuICBub1Byb21wdEJvcmRlciA9IGZhbHNlLFxyXG59OiBEcm9wZG93blByb3BzPFQ+KSB7XHJcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XHJcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xyXG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBkZWZhdWx0UHJvbXB0ID0gc2VsZWN0ZWRJdGVtID8gc2VsZWN0ZWRJdGVtLm5hbWUgOiBwcm9tcHQ7XHJcbiAgY29uc3QgcHJvbXB0VG9SZW5kZXIgPSAoXHJcbiAgICA8QnV0dG9uXHJcbiAgICAgIGFsaWduPVwibGVmdFwiXHJcbiAgICAgIGRpc2FibGVkPXshaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwfVxyXG4gICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4oIWlzT3Blbil9XHJcbiAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PXtzdHJldGNoUHJvbXB0SG9yaXpvbnRhbGx5fVxyXG4gICAgICBzdHJldGNoVmVydGljYWxseT17c3RyZXRjaFByb21wdFZlcnRpY2FsbHl9XHJcbiAgICAgIG5vUGFkZGluZz17bm9Qcm9tcHRQYWRkaW5nfVxyXG4gICAgICBub1NoYWRvdz17bm9Qcm9wbXB0U2hhZG93fVxyXG4gICAgICBub0JvcmRlcj17bm9Qcm9tcHRCb3JkZXJ9XHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MucHJvbXB0fT5cclxuICAgICAgICB7dHlwZW9mIHByb21wdCA9PT0gXCJzdHJpbmdcIiA/IGRlZmF1bHRQcm9tcHQgOiBwcm9tcHQoc2VsZWN0ZWRJdGVtKX1cclxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CdXR0b24+XHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxNZW51Q29udGFpbmVyXHJcbiAgICAgIGJ1dHRvbj17XHJcbiAgICAgICAgbGFiZWwgPyA8TGFiZWwgdmFsdWU9e2xhYmVsfT57cHJvbXB0VG9SZW5kZXJ9PC9MYWJlbD4gOiBwcm9tcHRUb1JlbmRlclxyXG4gICAgICB9XHJcbiAgICAgIHBsYWNlbWVudD17eyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfX1cclxuICAgICAgcmVmPXtyZWZ9XHJcbiAgICA+XHJcbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cclxuICAgICAgICB7aXRlbXMgJiZcclxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cclxuICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICkpfVxyXG4gICAgICA8L01lbnU+XHJcbiAgICA8L01lbnVDb250YWluZXI+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBJY29uUHJvcHMgPSB7XHJcbiAgYWx0Pzogc3RyaW5nO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xyXG59O1xyXG5mdW5jdGlvbiBJY29uKHtcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG59OiBJY29uUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGltZ1xyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmljb24sXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXHJcbiAgICAgIGFsdD17YWx0fVxyXG4gICAgICBzcmM9e3NyY31cclxuICAgIC8+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJZQTJJSFFENG9wcE9pb1pJQ0h3end3PT1cIixcInNtYWxsXCI6XCJxZHpzMkVNbUJkYjBNek5TMGlEaE1BPT1cIixcIm1lZGl1bVwiOlwiSTZlRUdJQks1OU9rZHB3VW91YWF1UT09XCIsXCJsYXJnZVwiOlwiXzJiaTZJRVloZE1iUGdQSmZ3b1BqdUE9PVwiLFwieGxhcmdlXCI6XCJja2tyNFpGT1ZHdUNONEVqUE1xZUdBPT1cIixcImludmVydGVkXCI6XCJlbTVyTDRuQUgxSXdmM01IZUllUG1nPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGlzT3Blbj86IGJvb2xlYW47XHJcbiAgaGVhZGVyPzogc3RyaW5nO1xyXG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1lbnUoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBjbGFzc05hbWUsXHJcbiAgaXNPcGVuID0gdHJ1ZSxcclxuICBoZWFkZXIsXHJcbiAgZm9vdGVyLFxyXG59OiBNZW51UHJvcHMpIHtcclxuICBpZiAoIWlzT3Blbikge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXHJcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxyXG4gICAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgIF0pfVxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxDb250YWluZXJ9PlxyXG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cclxuICAgICAgICAgIDx1bD57aXNPcGVuICYmIGNoaWxkcmVufTwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxyXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxyXG4gICAgICAgICAgICBdKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2Zvb3Rlcn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCIsXCJzY3JvbGxDb250YWluZXJcIjpcIlQrYklwYWwrV0hVSC1oQTBHdzVyVmc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHtcclxuICBSZWFjdE5vZGUsXHJcbiAgUmVhY3RFbGVtZW50LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgRm9yd2FyZGVkUmVmLFxyXG59IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVDb250YWluZXIubW9kdWxlLmNzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcclxuICBob3Jpem9udGFsOiBcInJpZ2h0XCIgfCBcImxlZnRcIjtcclxuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XHJcbn07XHJcblxyXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGJ1dHRvbj86IFJlYWN0RWxlbWVudDtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXHJcbiAge1xyXG4gICAgY2hpbGRyZW4sXHJcbiAgICBidXR0b24sXHJcbiAgICBjbGFzc05hbWUsXHJcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxyXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcclxuICByZWY6IEZvcndhcmRlZFJlZjxIVE1MRGl2RWxlbWVudD5cclxuKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cclxuICAgICAge2J1dHRvbn1cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgIHN0eWxlcy5tZW51Q29udGFpbmVyLFxyXG4gICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC5ob3Jpem9udGFsXSxcclxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxyXG4gICAgICAgIF0pfVxyXG4gICAgICA+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJxY3ZEU2ZGdCt3MGphMmZxUGMwUzV3PT1cIixcIm1lbnVDb250YWluZXJcIjpcIkx3cjFhM2JQLTk1YWV6em1hY29KZnc9PVwiLFwidG9wXCI6XCJiQkhicytGV2k2LXp3V01aSW1GK05BPT1cIixcInJpZ2h0XCI6XCJCOE00Mk53b1o4cFVWbTVSNEpKdjFnPT1cIixcImxlZnRcIjpcInBPRzd0WGZURms4cXFYdE5DMEUtT3c9PVwiLFwiYm90dG9tXCI6XCJ1Y3ZOMEVGTW5zOGJmVnZzaTlqOXlRPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxMSUVsZW1lbnQ+KSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudUl0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBvbkNsaWNrLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIGlzQWN0aXZlID0gZmFsc2UsXHJcbn06IE1lbnVJdGVtUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcclxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcclxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwibUpkN2RSWk5Pd1llOEk5Q3FGbHpyZz09XCIsXCJub1BhZGRpbmdcIjpcInhja0RPZG5QUFlLVGt5bTJhd3RyakE9PVwiLFwiYWN0aXZlXCI6XCJ4K3lyQ3E1QnUramdYN1NSVXI5ZmV3PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGFzOiBFbGVtZW50VHlwZTtcclxuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIC4uLnByb3BzXHJcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxDb21wb25lbnRcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudUxpbmtJdGVtO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wicHJvbXB0XCI6XCJQQ2o1M0FycnhDbUt4bnBPcEU3amdnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0IDVMNy41IDEyTDEgNScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XHJcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XHJcblxyXG50eXBlIFByb3BzID0ge1xyXG4gIG9uQ2hhbmdlOiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBhY2NlcHQ/OiBzdHJpbmc7XHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcclxuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFjY2VwdCxcclxuICBvbkNoYW5nZSxcclxuICBpbnB1dFJlZixcclxuICBtdWx0aXBsZSA9IGZhbHNlLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXHJcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbn06IFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxsYWJlbFxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMubGFiZWwsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICA+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxyXG4gICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICBpZD1cImZpbGVcIlxyXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxyXG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cclxuICAgICAgICByZWY9e2lucHV0UmVmfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XHJcbiAgICAgIC8+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvbGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIFBsYWNlbWVudCA9IHtcclxuICBob3Jpem9udGFsOlxyXG4gICAgfCBcInJpZ2h0XCJcclxuICAgIHwgXCJyaWdodEVkZ2VcIlxyXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcclxuICAgIHwgXCJsZWZ0XCJcclxuICAgIHwgXCJsZWZ0RWRnZVwiXHJcbiAgICB8IFwibGVmdE9uRWRnZVwiXHJcbiAgICB8IFwibGVmdE9uRWRnZVwiXHJcbiAgICB8IFwiY2VudGVyXCI7XHJcbiAgdmVydGljYWw6XHJcbiAgICB8IFwidG9wXCJcclxuICAgIHwgXCJ0b3BFZGdlXCJcclxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxyXG4gICAgfCBcImJvdHRvbVwiXHJcbiAgICB8IFwiYm90dG9tRWRnZVwiXHJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcclxuICAgIHwgXCJjZW50ZXJcIjtcclxuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XHJcbn07XHJcblxyXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XHJcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXHJcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcclxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XHJcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XHJcbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxyXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXHJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XHJcblxyXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cclxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxyXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcclxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxyXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwia1VUQ3E3c081Y1FIcm4yMFBKVUNtdz09XCIsXCJyb3dcIjpcInRkbmMxYkRIRG1HYmdBYzdTSnI2OVE9PVwiLFwiY29sdW1uXCI6XCJNbXQwNzZONkF4eUg0TlJEcENPN1dBPT1cIixcImZpeGVkXCI6XCJfOTJlYlF2SjV4TktKUzh6YWtLN1MyQT09XCIsXCJwbGFpblwiOlwieStpZER4Wis1TXBwN09JM0dQTEFFZz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiQ0Rxb2lLMGdDVEpwbkpnVm9ZZ0pEUT09XCIsXCJ0b3BcIjpcIkdQc0hsTlBEYkQ2S2ROUUVHajh6UVE9PVwiLFwidG9wRWRnZVwiOlwieFJnMG9BTnJ4c3hYTkJ5SXBuTkp2dz09XCIsXCJ0b3BPbkVkZ2VcIjpcIlFBeWVGRkdSb254WFM5RmdKMmQrV3c9PVwiLFwicmlnaHRcIjpcIkk4RURDSnpvMFp3VHRnYlZUTW16ZGc9PVwiLFwicmlnaHRFZGdlXCI6XCJXMkFobTN4dWEydmVDM0lDVDJLUU5BPT1cIixcInJpZ2h0T25FZGdlXCI6XCJ5akJDUVlFQThtV2lJOThDRlg1THN3PT1cIixcImJvdHRvbVwiOlwiV0p4elhRTC01TlB2RGduZVZna1Z3QT09XCIsXCJib3R0b21FZGdlXCI6XCJHVkpzLS1wTERqV3Z1OUMteTM0eWN3PT1cIixcImJvdHRvbU9uRWRnZVwiOlwiRERWZC1QcGx4bkxwU0xGbEd0Rmhudz09XCIsXCJsZWZ0XCI6XCJvVVRNdmpMMEh4R2VuVTdrSmRTeEhBPT1cIixcImxlZnRFZGdlXCI6XCJCaU5zQWtNWnVpKzVpLUt6WXhxMGNRPT1cIixcImxlZnRPbkVkZ2VcIjpcIl8xdjhpbUgwTVRqLXJNWjByQy1paFFnPT1cIixcImhvcml6b250YWxDZW50ZXJcIjpcIkQ0cDVBYTA2M1RubTdtMHVhR2hMa3c9PVwiLFwidmVydGljYWxDZW50ZXJcIjpcIl8yZGVHLVkyQTN6dzZrRitXQm5FbWp3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IHtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBzcmM6IHN0cmluZztcclxuICBhbHQ6IHN0cmluZztcclxuICBiYWRnZUNvbnRlbnQ/OiBSZWFjdE5vZGU7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICByb3VuZGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcclxuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XHJcbiAgY2xhc3NOYW1lLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXHJcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcclxuICBvbkNsaWNrID0gKCkgPT4ge30sXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICB0eXBlID0gXCJidXR0b25cIixcclxufTogSWNvbkJ1dHRvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cclxuICAgICAge2JhZGdlQ29udGVudCAmJiA8QnV0dG9uQmFkZ2U+e2JhZGdlQ29udGVudH08L0J1dHRvbkJhZGdlPn1cclxuICAgIDwvYnV0dG9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJCdlF0c1VBYS1mUVBtWGJ2VlNWQ05RPT1cIixcInNtYWxsXCI6XCJfOFpmNEx6Y2VpSW9lcjdQSVZSOEJZQT09XCIsXCJtZWRpdW1cIjpcIl83UEYyZG5KZ1p4SUUrdFMzM3hLNEtBPT1cIixcImxhcmdlXCI6XCJFYk9ZdkdLWGlBYWJvaGk0T3kxQ013PT1cIixcInhsYXJnZVwiOlwidU9mWjlMaUd6bmFCR0l1eDQwcEZHZz09XCIsXCJyb3VuZGVkXCI6XCJ2QWoweG1qWEpUZkRiV0lDVktCbzJnPT1cIixcInRvcE9mZnNldFwiOlwiXzhZU3Mta2hJRHpJZWZSUmg1ekgzK1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcInE0aklsMlhGT2J2c0RNLTRReHZ0dXc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfODJLYkVjRVp6Y1I1VnFIbHg4NjJQUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJ4bmMxK09ERm1CUGlpZjVKb3FUbmRBPT1cIixcImludmVydGVkXCI6XCJiaFZVVGRrUWx0Y3RtclplMFQ3Mmt3PT1cIixcIm5vU2hhZG93XCI6XCJuc2doMmM2Y0h0enhhUnJMa3Y2Rnp3PT1cIixcIm5vQm9yZGVyXCI6XCJWenk2QzRkanRwZkwycFY1b1ljT1B3PT1cIixcInRyYW5zcGFyZW50XCI6XCJGdmRQUy0rMXRsc1RaMWNpRWxzdnhRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XHJcblxyXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xyXG5cclxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cclxuICB8IHtcclxuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcclxuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcclxuICAgICAgc3JjOiBzdHJpbmc7XHJcbiAgICAgIGFsdDogc3RyaW5nO1xyXG4gICAgICBiYWRnZUNvbnRlbnQ/OiBSZWFjdE5vZGU7XHJcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcclxuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcclxuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICAgICAgc2l6ZT86IFNpemU7XHJcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XHJcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBjbGFzc05hbWUsXHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICAuLi5wcm9wc1xyXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxDb21wb25lbnRcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICB7Li4ucHJvcHN9XHJcbiAgICA+XHJcbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxyXG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcclxuICBhbHQ/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHNyY1dpZHRoPzogbnVtYmVyO1xyXG4gIHNyY0hlaWdodD86IG51bWJlcjtcclxuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCIsXHJcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBzcmNXaWR0aCxcclxuICBzcmNIZWlnaHQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxyXG4gIGRlY29kaW5nPSBcImF1dG9cIixcclxuICBsb2FkaW5nPSBcImVhZ2VyXCJcclxufTogSW1hZ2VQcm9wcykge1xyXG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcclxuICAgIDxpbWdcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxyXG4gICAgICBhbHQ9e2FsdH1cclxuICAgICAgc3JjPXtzcmN9XHJcbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cclxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XHJcbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cclxuICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgIC8+XHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cclxuICAgID5cclxuICAgICAge2ltYWdlRWxlbWVudH1cclxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cclxuICAgIDwvZGl2PlxyXG4gICkgOiAoXHJcbiAgICBpbWFnZUVsZW1lbnRcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl85Z1FTUi0rZ3FvNXJEdldQbVFvQWVRPT1cIixcImhhc092ZXJsYXlcIjpcImlpMys2SytGVzRZamVRRm0tSU4zc0E9PVwiLFwib3ZlcmxheVwiOlwiXzAwRXhOYzNLdytIT2ZUQ0ZhMzRHSXc9PVwiLFwiaW1hZ2VcIjpcInJ3RDVySGNaRlJOYTRkSG82ajNKeVE9PVwiLFwiY292ZXJcIjpcIl82QWFOMVQ2U1k2RWVqK0ZhUXRhNDJnPT1cIixcImNvbnRhaW5cIjpcIkVRRGtQMEY1enpKaXRGOHVPNkgrbUE9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiR0JLUGtjOHJzeWpVVnVDcDFPbEJvUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzVTendTSis2WjRSLVlhMTFnd0xyU1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBoZWFkZXI/OiBzdHJpbmc7XHJcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExpc3RWaWV3KHtcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGhlYWRlcixcclxuICBoZWFkZXJBY3Rpb25zLFxyXG59OiBMaXN0Vmlld1Byb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cclxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cclxuICAgICAgICAgIHtoZWFkZXIgJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlckxhYmVsfT57aGVhZGVyfTwvaDM+fVxyXG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT57Y2hpbGRyZW59PC91bD5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwibEp6ZFAwbW5mcGdsRlNZdEtLWXpKdz09XCIsXCJoZWFkZXJcIjpcIl84MnZDUTd4cjBOa1k0VWx5U1BrcGt3PT1cIixcImhlYWRlckxhYmVsXCI6XCJ1bldlUGRJS240WGF3UnVMN0NQRDBnPT1cIixcImxpc3RcIjpcIl81QlgrWlotQWFRdXRjemJEUzJlNS13PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcclxuICBjaGlsZHJlbixcclxuICBhY3RpdmUgPSBmYWxzZSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XHJcbiAgICAgIDxCdXR0b25cclxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxyXG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cclxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cclxuICAgICAgICBhbGlnbj17YWxpZ259XHJcbiAgICAgICAgc2l6ZT17c2l6ZX1cclxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XHJcbiAgICAgICAgbm9TaGFkb3dcclxuICAgICAgICBub0JvcmRlclxyXG4gICAgICA+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L0J1dHRvbj5cclxuICAgIDwvbGk+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XHJcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcclxuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XHJcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcclxuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICAgICAgc2l6ZTogU2l6ZTtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgYWN0aXZlID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBhbGlnbiA9IFwiY2VudGVyXCIsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgLi4ucHJvcHNcclxufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxyXG4gICAgICA8QnV0dG9uTGlua1xyXG4gICAgICAgIGFzPXtDb21wb25lbnR9XHJcbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cclxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XHJcbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XHJcbiAgICAgICAgYWxpZ249e2FsaWdufVxyXG4gICAgICAgIHNpemU9e3NpemV9XHJcbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxyXG4gICAgICAgIG5vU2hhZG93XHJcbiAgICAgICAgbm9Cb3JkZXJcclxuICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvQnV0dG9uTGluaz5cclxuICAgIDwvbGk+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBPdmVybGF5UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBpc0ZpeGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE92ZXJsYXkoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIGlzRml4ZWQgPSBmYWxzZSxcclxuICBvbkNsaWNrID0gKCkgPT4ge30sXHJcbn06IE92ZXJsYXlQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMub3ZlcmxheSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xyXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XHJcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xyXG4gIGxhYmVsLFxyXG4gIG9uQ2hhbmdlLFxyXG4gIG9uQmx1cixcclxuICBvbktleURvd24sXHJcbiAgcGxhY2Vob2xkZXIsXHJcbiAgdmFsdWUsXHJcbiAgbmFtZSxcclxuICBpbnB1dFJlZixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICB0eXBlID0gXCJ0ZXh0XCIsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxufTogVGV4dElucHV0UHJvcHMpIHtcclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcclxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIFtvbkNoYW5nZV1cclxuICApO1xyXG5cclxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXHJcbiAgICA8aW5wdXRcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXHJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50ZXh0SW5wdXQsIHN0eWxlc1tzaXplXSwge1tzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcn1dKX1cclxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgb25CbHVyPXtvbkJsdXJ9XHJcbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxyXG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHZhbHVlPXt2YWx1ZX1cclxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAvPlxyXG4gICk7XHJcbiAgaWYgKGxhYmVsKSB7XHJcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIFRvYXN0UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ2V2EyLTFtT0ZVK2lWMTRqcTdRUHNRPT1cIixcImVudHJhbmNlXCI6XCJmVHNXc0tyQUtsd1QrR09FNHdBeVNRPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cclxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxyXG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXHJcbiAqXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcclxuICovXHJcblxyXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XHJcblxyXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBsYXlvdXQ/OiBMYXlvdXQ7XHJcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xyXG4gIGxvb3A/OiBib29sZWFuO1xyXG4gIG11dGVkPzogYm9vbGVhbjtcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIHBvc3Rlcj86IHN0cmluZztcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZpZGVvKHtcclxuICBzcmMsXHJcbiAgdHlwZSxcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgcG9zdGVyLFxyXG4gIG11dGVkID0gdHJ1ZSxcclxuICBsb29wID0gdHJ1ZSxcclxuICBhdXRvUGxheSA9IHRydWUsXHJcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXHJcbn06IFZpZGVvUHJvcHMpIHtcclxuICByZXR1cm4gY2hpbGRyZW4gPyAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxyXG4gICAgPlxyXG4gICAgICA8dmlkZW9cclxuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcclxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxyXG4gICAgICAgIG11dGVkPXttdXRlZH1cclxuICAgICAgICBsb29wPXtsb29wfVxyXG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cclxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cclxuICAgICAgICBwbGF5c0lubGluZVxyXG4gICAgICA+XHJcbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxyXG4gICAgICA8L3ZpZGVvPlxyXG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxyXG4gICAgPC9kaXY+XHJcbiAgKSA6IChcclxuICAgIDx2aWRlb1xyXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcclxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XHJcbiAgICAgIG11dGVkPXttdXRlZH1cclxuICAgICAgbG9vcD17bG9vcH1cclxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxyXG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cclxuICAgICAgcGxheXNJbmxpbmVcclxuICAgID5cclxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxyXG4gICAgPC92aWRlbz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVsV0UtRXByODVGMG1VdDdPMWdVVFE9PVwiLFwiaGFzT3ZlcmxheVwiOlwieks3dTFua2pjOHg3WURBZllRQ1Rwdz09XCIsXCJ2aWRlb1wiOlwiZlI0RDU2TGZkdW9CVy1maW1mYlQwdz09XCIsXCJjb3ZlclwiOlwiVlhRczRQVW5XR3l3NTZnNjBadGZXZz09XCIsXCJjb250YWluXCI6XCJneGZsVXpPNHJxQ0JBR3V6c1lFSWV3PT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkktNjNLbTROWTFXNFFnTWhmZ1U1TWc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInZOTmhKbGdJVE0rb25mN3pkemF1Zmc9PVwiLFwib3ZlcmxheVwiOlwid3h1bDdVVVpsbWFyRjg2U0dyZC10dz09XCJ9OyIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VTdGF0ZSwgY3JlYXRlRWxlbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyB9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBwb3NzaWJseSBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuICBQcmV0dGllciBpZ25vcmUgYW5kIGV4dHJhIHBhcmVudGhlc2VzIGFyZSBuZWNlc3NhcnkgaGVyZVxuLy8gdG8gZW5zdXJlIHRoYXQgdHNjIGRvZXNuJ3QgcmVtb3ZlIHRoZSBfX05PSU5MSU5FX18gY29tbWVudC5cbi8vIHByZXR0aWVyLWlnbm9yZVxudmFyIFVOREVGSU5FRCA9ICggLyojX19OT0lOTElORV9fKi9ub29wKCkpO1xudmFyIE9CSkVDVCA9IE9iamVjdDtcbnZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ID09PSBVTkRFRklORUQ7IH07XG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB0eXBlb2YgdiA9PSAnZnVuY3Rpb24nOyB9O1xudmFyIG1lcmdlT2JqZWN0cyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBPQkpFQ1QuYXNzaWduKHt9LCBhLCBiKTsgfTtcbnZhciBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgZnVuY3Rpb24gdG8gZ3VhcmFudGVlIGl0J3MgcmUtZXZhbHVhdGVkIGJldHdlZW4ganNkb20gYW5kIG5vZGUgcnVudGltZSBmb3IgdGVzdHMuXG52YXIgaGFzV2luZG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEOyB9O1xudmFyIGhhc0RvY3VtZW50ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7IH07XG52YXIgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBoYXNXaW5kb3coKSAmJiB0eXBlb2Ygd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSAhPSBTVFJfVU5ERUZJTkVEO1xufTtcblxuLy8gdXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIG9iamVjdC0+a2V5IG1hcHBpbmdcbi8vIHNvIHRoZSBvYmplY3RzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlYWtNYXAgdXNlcyBhIGhhc2h0YWJsZSB1bmRlciB0aGUgaG9vZCwgc28gdGhlIGxvb2t1cFxuLy8gY29tcGxleGl0eSBpcyBhbG1vc3QgTygxKS5cbnZhciB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbnZhciBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNpYmxlLlxudmFyIHN0YWJsZUhhc2ggPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFyZyAmJiBhcmcuY29uc3RydWN0b3I7XG4gICAgdmFyIGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB2YXIgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcmcubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlICghaXNVbmRlZmluZWQoKGluZGV4ID0ga2V5cy5wb3AoKSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggKyAnOicgKyBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZVxuICAgICAgICAgICAgPyBhcmcudG9KU09OKClcbiAgICAgICAgICAgIDogdHlwZSA9PSAnc3ltYm9sJ1xuICAgICAgICAgICAgICAgID8gYXJnLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICA6IHR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShhcmcpXG4gICAgICAgICAgICAgICAgICAgIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrIGFyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqL1xudmFyIG9ubGluZSA9IHRydWU7XG52YXIgaXNPbmxpbmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmxpbmU7IH07XG52YXIgaGFzV2luID0gaGFzV2luZG93KCk7XG52YXIgaGFzRG9jID0gaGFzRG9jdW1lbnQoKTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG52YXIgb25XaW5kb3dFdmVudCA9IGhhc1dpbiAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lclxuICAgID8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG4gICAgOiBub29wO1xudmFyIG9uRG9jdW1lbnRFdmVudCA9IGhhc0RvYyA/IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuYmluZChkb2N1bWVudCkgOiBub29wO1xudmFyIG9mZldpbmRvd0V2ZW50ID0gaGFzV2luICYmIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgPyB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbiAgICA6IG5vb3A7XG52YXIgb2ZmRG9jdW1lbnRFdmVudCA9IGhhc0RvY1xuICAgID8gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGRvY3VtZW50KVxuICAgIDogbm9vcDtcbnZhciBpc1Zpc2libGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZpc2liaWxpdHlTdGF0ZSA9IGhhc0RvYyAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG52YXIgaW5pdEZvY3VzID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIG9uRG9jdW1lbnRFdmVudCgndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBvZmZEb2N1bWVudEV2ZW50KCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG52YXIgaW5pdFJlY29ubmVjdCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICB2YXIgb25PbmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICB2YXIgb25PZmZsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG52YXIgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lOiBpc09ubGluZSxcbiAgICBpc1Zpc2libGU6IGlzVmlzaWJsZVxufTtcbnZhciBkZWZhdWx0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBpbml0Rm9jdXM6IGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0OiBpbml0UmVjb25uZWN0XG59O1xuXG52YXIgSVNfU0VSVkVSID0gIWhhc1dpbmRvdygpIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciByQUYgPSBmdW5jdGlvbiAoZikge1xuICAgIHJldHVybiBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xufTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBJU19TRVJWRVIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3Q7XG4vLyBUaGlzIGFzc2lnbm1lbnQgaXMgdG8gZXh0ZW5kIHRoZSBOYXZpZ2F0b3IgdHlwZSB0byB1c2UgZWZmZWN0aXZlVHlwZS5cbnZhciBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbi8vIEFkanVzdCB0aGUgY29uZmlnIGJhc2VkIG9uIHNsb3cgY29ubmVjdGlvbiBzdGF0dXMgKDw9IDcwS2JwcykuXG52YXIgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmXG4gICAgbmF2aWdhdG9yQ29ubmVjdGlvbiAmJlxuICAgIChbJ3Nsb3ctMmcnLCAnMmcnXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8XG4gICAgICAgIG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG52YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBhcmdzID0gW10uY29uY2F0KGtleSk7XG4gICAgLy8gSWYga2V5IGlzIG5vdCBmYWxzeSwgb3Igbm90IGFuIGVtcHR5IGFycmF5LCBoYXNoIGl0LlxuICAgIGtleSA9XG4gICAgICAgIHR5cGVvZiBrZXkgPT0gJ3N0cmluZydcbiAgICAgICAgICAgID8ga2V5XG4gICAgICAgICAgICA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KVxuICAgICAgICAgICAgICAgID8gc3RhYmxlSGFzaChrZXkpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICB2YXIgaW5mb0tleSA9IGtleSA/ICckc3dyJCcgKyBrZXkgOiAnJztcbiAgICByZXR1cm4gW2tleSwgYXJncywgaW5mb0tleV07XG59O1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG52YXIgU1dSR2xvYmFsU3RhdGUgPSBuZXcgV2Vha01hcCgpO1xuXG52YXIgRk9DVVNfRVZFTlQgPSAwO1xudmFyIFJFQ09OTkVDVF9FVkVOVCA9IDE7XG52YXIgTVVUQVRFX0VWRU5UID0gMjtcblxudmFyIGJyb2FkY2FzdFN0YXRlID0gZnVuY3Rpb24gKGNhY2hlLCBrZXksIGRhdGEsIGVycm9yLCBpc1ZhbGlkYXRpbmcsIHJldmFsaWRhdGUsIGJyb2FkY2FzdCkge1xuICAgIGlmIChicm9hZGNhc3QgPT09IHZvaWQgMCkgeyBicm9hZGNhc3QgPSB0cnVlOyB9XG4gICAgdmFyIF9hID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgRVZFTlRfUkVWQUxJREFUT1JTID0gX2FbMF0sIFNUQVRFX1VQREFURVJTID0gX2FbMV0sIEZFVENIID0gX2FbM107XG4gICAgdmFyIHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgIHZhciB1cGRhdGVycyA9IFNUQVRFX1VQREFURVJTW2tleV07XG4gICAgLy8gQ2FjaGUgd2FzIHBvcHVsYXRlZCwgdXBkYXRlIHN0YXRlcyBvZiBhbGwgaG9va3MuXG4gICAgaWYgKGJyb2FkY2FzdCAmJiB1cGRhdGVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB1cGRhdGVyc1tpXShkYXRhLCBlcnJvciwgaXNWYWxpZGF0aW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBhbHNvIG5lZWQgdG8gcmV2YWxpZGF0ZSwgb25seSBkbyBpdCBmb3IgdGhlIGZpcnN0IGhvb2suXG4gICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUga2V5IGJ5IGRlbGV0aW5nIHRoZSBjb25jdXJyZW50IHJlcXVlc3QgbWFya2VycyBzbyBuZXdcbiAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnMgJiYgcmV2YWxpZGF0b3JzWzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xufTtcblxuLy8gR2xvYmFsIHRpbWVzdGFtcC5cbnZhciBfX3RpbWVzdGFtcCA9IDA7XG52YXIgZ2V0VGltZXN0YW1wID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKytfX3RpbWVzdGFtcDsgfTtcblxudmFyIGludGVybmFsTXV0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHMsIG9wdGlvbnMsIHBvcHVsYXRlQ2FjaGUsIHJldmFsaWRhdGUsIHJvbGxiYWNrT25FcnJvciwgb3B0aW1pc3RpY0RhdGEsIF9hLCBrZXksIGtleUluZm8sIF9iLCBNVVRBVElPTiwgZGF0YSwgZXJyb3IsIGJlZm9yZU11dGF0aW9uVHMsIGhhc09wdGltaXN0aWNEYXRhLCByb2xsYmFja0RhdGEsIHJlcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBhcmdzWzBdLCBfa2V5ID0gYXJnc1sxXSwgX2RhdGEgPSBhcmdzWzJdLCBfb3B0cyA9IGFyZ3NbM107XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHsgcmV2YWxpZGF0ZTogX29wdHMgfSA6IF9vcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gaXNVbmRlZmluZWQob3B0aW9ucy5wb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrT25FcnJvciA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgICAgICAgICBfYSA9IHNlcmlhbGl6ZShfa2V5KSwga2V5ID0gX2FbMF0sIGtleUluZm8gPSBfYVsyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIF9iID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgTVVUQVRJT04gPSBfYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBjYWNoZS5nZXQoa2V5KSwgVU5ERUZJTkVELCBVTkRFRklORUQsIHJldmFsaWRhdGUsIHRydWUpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtiZWZvcmVNdXRhdGlvblRzLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgaGFzT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQob3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByb2xsYmFja0RhdGEgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY2FjaGUuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIShkYXRhICYmIGlzRnVuY3Rpb24oZGF0YS50aGVuKSkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBkYXRhLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvbGxiYWNrLiBBbHdheXMgcG9wdWxhdGUgdGhlIGNhY2hlIGluIHRoaXMgY2FzZSBidXQgd2l0aG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcm9sbGJhY2tEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleSwgcm9sbGJhY2tEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgcm9sbGJhY2tEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgb3IgcmVzZXQgdGhlIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleUluZm8sIG1lcmdlT2JqZWN0cyhjYWNoZS5nZXQoa2V5SW5mbyksIHsgZXJyb3I6IGVycm9yIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgdGltZXN0YW1wIHRvIG1hcmsgdGhlIG11dGF0aW9uIGhhcyBlbmRlZC5cbiAgICAgICAgICAgICAgICAgICAgTVVUQVRJT05ba2V5XVsxXSA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBkYXRhLCBlcnJvciwgVU5ERUZJTkVELCByZXZhbGlkYXRlLCAhIXBvcHVsYXRlQ2FjaGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG52YXIgcmV2YWxpZGF0ZUFsbEtleXMgPSBmdW5jdGlvbiAocmV2YWxpZGF0b3JzLCB0eXBlKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHJldmFsaWRhdG9ycykge1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzW2tleV1bMF0pXG4gICAgICAgICAgICByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xudmFyIGluaXRDYWNoZSA9IGZ1bmN0aW9uIChwcm92aWRlciwgb3B0aW9ucykge1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFByb3ZpZGVyJ3MgZ2xvYmFsIHN0YXRlIG1pZ2h0IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuIExldCdzIHRyeSB0byBnZXQgdGhlXG4gICAgLy8gZ2xvYmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZXIgZmlyc3QuXG4gICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgIHZhciBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIHZhciBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgdmFyIG11dGF0ZSA9IGludGVybmFsTXV0YXRlLmJpbmQoVU5ERUZJTkVELCBwcm92aWRlcik7XG4gICAgICAgIHZhciB1bm1vdW50ID0gbm9vcDtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICBTV1JHbG9iYWxTdGF0ZS5zZXQocHJvdmlkZXIsIFtFVkVOVF9SRVZBTElEQVRPUlMsIHt9LCB7fSwge30sIG11dGF0ZV0pO1xuICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3ZpZGVyLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaXQgYW5kIHNldHVwIERPTSBldmVudHNcbiAgICAgICAgLy8gbGlzdGVuZXJzIGZvciBgZm9jdXNgIGFuZCBgcmVjb25uZWN0YCBhY3Rpb25zLlxuICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgLy8gV2hlbiBsaXN0ZW5pbmcgdG8gdGhlIG5hdGl2ZSBldmVudHMgZm9yIGF1dG8gcmV2YWxpZGF0aW9ucyxcbiAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gcG9zc2libHkgYmVcbiAgICAgICAgICAgIC8vIFJlYWN0J3Mgc3RhdGUgdXBkYXRlcy5cbiAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgIHZhciByZWxlYXNlRm9jdXNfMSA9IG9wdHMuaW5pdEZvY3VzKHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIEZPQ1VTX0VWRU5UKSkpO1xuICAgICAgICAgICAgdmFyIHJlbGVhc2VSZWNvbm5lY3RfMSA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICB1bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1c18xICYmIHJlbGVhc2VGb2N1c18xKCk7XG4gICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdF8xICYmIHJlbGVhc2VSZWNvbm5lY3RfMSgpO1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdW4tbW91bnRpbmcsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjYWNoZSBwcm92aWRlciBmcm9tIHRoZSBzdGF0ZVxuICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2Ugd2hlbiByZS1tb3VudGluZyB3ZVxuICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBtaWdodCB3YW50IHRvIGluamVjdCBhbiBleHRyYSBsYXllciBvbiB0b3Agb2YgYHByb3ZpZGVyYCBpbiB0aGUgZnV0dXJlLFxuICAgICAgICAvLyBzdWNoIGFzIGtleSBzZXJpYWxpemF0aW9uLCBhdXRvIEdDLCBldGMuXG4gICAgICAgIC8vIEZvciBub3csIGl0J3MganVzdCBhIGBNYXBgIGludGVyZmFjZSB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zLlxuICAgICAgICByZXR1cm4gW3Byb3ZpZGVyLCBtdXRhdGUsIHVubW91bnRdO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb3ZpZGVyLCBTV1JHbG9iYWxTdGF0ZS5nZXQocHJvdmlkZXIpWzRdXTtcbn07XG5cbi8vIGVycm9yIHJldHJ5XG52YXIgb25FcnJvclJldHJ5ID0gZnVuY3Rpb24gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpIHtcbiAgICB2YXIgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgdmFyIGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICB2YXIgdGltZW91dCA9IH5+KChNYXRoLnJhbmRvbSgpICsgMC41KSAqXG4gICAgICAgICgxIDw8IChjdXJyZW50UmV0cnlDb3VudCA8IDggPyBjdXJyZW50UmV0cnlDb3VudCA6IDgpKSkgKiBjb25maWcuZXJyb3JSZXRyeUludGVydmFsO1xuICAgIGlmICghaXNVbmRlZmluZWQobWF4UmV0cnlDb3VudCkgJiYgY3VycmVudFJldHJ5Q291bnQgPiBtYXhSZXRyeUNvdW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dChyZXZhbGlkYXRlLCB0aW1lb3V0LCBvcHRzKTtcbn07XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG52YXIgX2EgPSBpbml0Q2FjaGUobmV3IE1hcCgpKSwgY2FjaGUgPSBfYVswXSwgbXV0YXRlID0gX2FbMV07XG4vLyBEZWZhdWx0IGNvbmZpZ1xudmFyIGRlZmF1bHRDb25maWcgPSBtZXJnZU9iamVjdHMoe1xuICAgIC8vIGV2ZW50c1xuICAgIG9uTG9hZGluZ1Nsb3c6IG5vb3AsXG4gICAgb25TdWNjZXNzOiBub29wLFxuICAgIG9uRXJyb3I6IG5vb3AsXG4gICAgb25FcnJvclJldHJ5OiBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmU6IGZ1bmN0aW9uIChjdXJyZW50RGF0YSwgbmV3RGF0YSkge1xuICAgICAgICByZXR1cm4gc3RhYmxlSGFzaChjdXJyZW50RGF0YSkgPT0gc3RhYmxlSGFzaChuZXdEYXRhKTtcbiAgICB9LFxuICAgIGlzUGF1c2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgbXV0YXRlOiBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCBcbi8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbnZhciBtZXJnZUNvbmZpZ3MgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICB2YXIgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgdmFyIHUxID0gYS51c2UsIGYxID0gYS5mYWxsYmFjaztcbiAgICAgICAgdmFyIHUyID0gYi51c2UsIGYyID0gYi5mYWxsYmFjaztcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG52YXIgU1dSQ29uZmlnQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xudmFyIFNXUkNvbmZpZyQxID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICB2YXIgZXh0ZW5kZWRDb25maWcgPSBtZXJnZUNvbmZpZ3ModXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSwgdmFsdWUpO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgdmFyIHByb3ZpZGVyID0gdmFsdWUgJiYgdmFsdWUucHJvdmlkZXI7XG4gICAgLy8gVXNlIGEgbGF6eSBpbml0aWFsaXplZCBzdGF0ZSB0byBjcmVhdGUgdGhlIGNhY2hlIG9uIGZpcnN0IGFjY2Vzcy5cbiAgICB2YXIgY2FjaGVDb250ZXh0ID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcHJvdmlkZXJcbiAgICAgICAgICAgID8gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgdmFsdWUpXG4gICAgICAgICAgICA6IFVOREVGSU5FRDtcbiAgICB9KVswXTtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiAoY2FjaGVDb250ZXh0ID8gY2FjaGVDb250ZXh0WzJdIDogVU5ERUZJTkVEKTsgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqL1xudmFyIHVzZVN0YXRlV2l0aERlcHMgPSBmdW5jdGlvbiAoc3RhdGUsIHVubW91bnRlZFJlZikge1xuICAgIHZhciByZXJlbmRlciA9IHVzZVN0YXRlKHt9KVsxXTtcbiAgICB2YXIgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICB2YXIgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogc2V0U3RhdGUoe1xuICAgICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICAgKiB9KVxuICAgICAqXG4gICAgICogc2V0U3RhdGUoe1xuICAgICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB2YXIgc2V0U3RhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocGF5bG9hZCkge1xuICAgICAgICB2YXIgc2hvdWxkUmVyZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvciAodmFyIF8gaW4gcGF5bG9hZCkge1xuICAgICAgICAgICAgdmFyIGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgIH1cbiAgICB9LCBcbiAgICAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlIHN0YXRlIHJlZmVyZW5jZS5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RhdGVSZWYuY3VycmVudCA9IHN0YXRlO1xuICAgIH0pO1xuICAgIHJldHVybiBbc3RhdGVSZWYsIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsIHNldFN0YXRlXTtcbn07XG5cbnZhciBub3JtYWxpemUgPSBmdW5jdGlvbiAoYXJncykge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFyZ3NbMV0pXG4gICAgICAgID8gW2FyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0gfHwge31dXG4gICAgICAgIDogW2FyZ3NbMF0sIG51bGwsIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XTtcbn07XG5cbnZhciB1c2VTV1JDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbi8vIEl0J3MgdHJpY2t5IHRvIHBhc3MgZ2VuZXJpYyB0eXBlcyBhcyBwYXJhbWV0ZXJzLCBzbyB3ZSBqdXN0IGRpcmVjdGx5IG92ZXJyaWRlXG4vLyB0aGUgdHlwZXMgaGVyZS5cbnZhciB3aXRoQXJncyA9IGZ1bmN0aW9uIChob29rKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNXUkFyZ3MoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgdmFyIGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIHZhciBfYSA9IG5vcm1hbGl6ZShhcmdzKSwga2V5ID0gX2FbMF0sIGZuID0gX2FbMV0sIF9jb25maWcgPSBfYVsyXTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIHZhciBjb25maWcgPSBtZXJnZUNvbmZpZ3MoZmFsbGJhY2tDb25maWcsIF9jb25maWcpO1xuICAgICAgICAvLyBBcHBseSBtaWRkbGV3YXJlXG4gICAgICAgIHZhciBuZXh0ID0gaG9vaztcbiAgICAgICAgdmFyIHVzZSA9IGNvbmZpZy51c2U7XG4gICAgICAgIGlmICh1c2UpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB1c2UubGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgICAgICAgICAgIG5leHQgPSB1c2VbaV0obmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG52YXIgc3Vic2NyaWJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbnZhciBXSVRIX0RFRFVQRSA9IHsgZGVkdXBlOiB0cnVlIH07XG52YXIgdXNlU1dSSGFuZGxlciA9IGZ1bmN0aW9uIChfa2V5LCBmZXRjaGVyLCBjb25maWcpIHtcbiAgICB2YXIgY2FjaGUgPSBjb25maWcuY2FjaGUsIGNvbXBhcmUgPSBjb25maWcuY29tcGFyZSwgZmFsbGJhY2tEYXRhID0gY29uZmlnLmZhbGxiYWNrRGF0YSwgc3VzcGVuc2UgPSBjb25maWcuc3VzcGVuc2UsIHJldmFsaWRhdGVPbk1vdW50ID0gY29uZmlnLnJldmFsaWRhdGVPbk1vdW50LCByZWZyZXNoSW50ZXJ2YWwgPSBjb25maWcucmVmcmVzaEludGVydmFsLCByZWZyZXNoV2hlbkhpZGRlbiA9IGNvbmZpZy5yZWZyZXNoV2hlbkhpZGRlbiwgcmVmcmVzaFdoZW5PZmZsaW5lID0gY29uZmlnLnJlZnJlc2hXaGVuT2ZmbGluZTtcbiAgICB2YXIgX2EgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpLCBFVkVOVF9SRVZBTElEQVRPUlMgPSBfYVswXSwgU1RBVEVfVVBEQVRFUlMgPSBfYVsxXSwgTVVUQVRJT04gPSBfYVsyXSwgRkVUQ0ggPSBfYVszXTtcbiAgICAvLyBga2V5YCBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgU1dSIGBkYXRhYCBzdGF0ZSwgYGtleUluZm9gIGhvbGRzIGV4dHJhXG4gICAgLy8gc3RhdGVzIHN1Y2ggYXMgYGVycm9yYCBhbmQgYGlzVmFsaWRhdGluZ2AgaW5zaWRlLFxuICAgIC8vIGFsbCBvZiB0aGVtIGFyZSBkZXJpdmVkIGZyb20gYF9rZXlgLlxuICAgIC8vIGBmbkFyZ3NgIGlzIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBwYXJzZWQgZnJvbSB0aGUga2V5LCB3aGljaCB3aWxsIGJlIHBhc3NlZFxuICAgIC8vIHRvIHRoZSBmZXRjaGVyLlxuICAgIHZhciBfYiA9IHNlcmlhbGl6ZShfa2V5KSwga2V5ID0gX2JbMF0sIGZuQXJncyA9IF9iWzFdLCBrZXlJbmZvID0gX2JbMl07XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIHZhciBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgdmFyIHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gUmVmcyB0byBrZWVwIHRoZSBrZXkgYW5kIGNvbmZpZy5cbiAgICB2YXIga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgdmFyIGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgdmFyIGNvbmZpZ1JlZiA9IHVzZVJlZihjb25maWcpO1xuICAgIHZhciBnZXRDb25maWcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWdSZWYuY3VycmVudDsgfTtcbiAgICB2YXIgaXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRDb25maWcoKS5pc1Zpc2libGUoKSAmJiBnZXRDb25maWcoKS5pc09ubGluZSgpOyB9O1xuICAgIHZhciBwYXRjaEZldGNoSW5mbyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5zZXQoa2V5SW5mbywgbWVyZ2VPYmplY3RzKGNhY2hlLmdldChrZXlJbmZvKSwgaW5mbykpO1xuICAgIH07XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgdmFyIGNhY2hlZCA9IGNhY2hlLmdldChrZXkpO1xuICAgIHZhciBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSlcbiAgICAgICAgPyBjb25maWcuZmFsbGJhY2tba2V5XVxuICAgICAgICA6IGZhbGxiYWNrRGF0YTtcbiAgICB2YXIgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZCkgPyBmYWxsYmFjayA6IGNhY2hlZDtcbiAgICB2YXIgaW5mbyA9IGNhY2hlLmdldChrZXlJbmZvKSB8fCB7fTtcbiAgICB2YXIgZXJyb3IgPSBpbmZvLmVycm9yO1xuICAgIHZhciBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgdmFyIHNob3VsZFJldmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgaWYgKGlzSW5pdGlhbE1vdW50ICYmICFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpXG4gICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdXNwZW5zZVxuICAgICAgICAgICAgPyAvLyBVbmRlciBzdXNwZW5zZSBtb2RlLCBpdCB3aWxsIGFsd2F5cyBmZXRjaCBvbiByZW5kZXIgaWYgdGhlcmUgaXMgbm9cbiAgICAgICAgICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBvbiBtb3VudCBhZ2Fpbi5cbiAgICAgICAgICAgICAgICAhaXNVbmRlZmluZWQoZGF0YSlcbiAgICAgICAgICAgIDogLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIG9uIG1vdW50O1xuICAgICAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgICAgICAgICAgaXNVbmRlZmluZWQoZGF0YSkgfHwgY29uZmlnLnJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH07XG4gICAgLy8gUmVzb2x2ZSB0aGUgY3VycmVudCB2YWxpZGF0aW5nIHN0YXRlLlxuICAgIHZhciByZXNvbHZlVmFsaWRhdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWZldGNoZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmZvLmlzVmFsaWRhdGluZylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBJZiBpdCdzIG5vdCBtb3VudGVkIHlldCBhbmQgaXQgc2hvdWxkIHJldmFsaWRhdGUgb24gbW91bnQsIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGRSZXZhbGlkYXRlKCk7XG4gICAgfTtcbiAgICB2YXIgaXNWYWxpZGF0aW5nID0gcmVzb2x2ZVZhbGlkYXRpbmcoKTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZVdpdGhEZXBzKHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGlzVmFsaWRhdGluZ1xuICAgIH0sIHVubW91bnRlZFJlZiksIHN0YXRlUmVmID0gX2NbMF0sIHN0YXRlRGVwZW5kZW5jaWVzID0gX2NbMV0sIHNldFN0YXRlID0gX2NbMl07XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgdmFyIHJldmFsaWRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocmV2YWxpZGF0ZU9wdHMpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJyZW50RmV0Y2hlciwgbmV3RGF0YSwgc3RhcnRBdCwgbG9hZGluZywgb3B0cywgc2hvdWxkU3RhcnROZXdSZXF1ZXN0LCBpc0N1cnJlbnRLZXlNb3VudGVkLCBjbGVhbnVwU3RhdGUsIG5ld1N0YXRlLCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUsIG11dGF0aW9uSW5mbywgZXJyXzE7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudEZldGNoZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvcHRzID0gcmV2YWxpZGF0ZU9wdHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCA9ICFGRVRDSFtrZXldIHx8ICFvcHRzLmRlZHVwZTtcbiAgICAgICAgICAgICAgICAgICAgaXNDdXJyZW50S2V5TW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdW5tb3VudGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0SW5mbyA9IEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEluZm8gJiYgcmVxdWVzdEluZm9bMV0gPT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB7IGlzVmFsaWRhdGluZzogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIG9ubHkgc2V0IHN0YXRlIGlmIGl0J3Mgc2FmZSAoc3RpbGwgbW91bnRlZCB3aXRoIHRoZSBzYW1lIGtleSkuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oe1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IGlzVmFsaWRhdGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVsbCBhbGwgb3RoZXIgaG9va3MgdG8gY2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIHN0YXRlUmVmLmN1cnJlbnQuZGF0YSwgc3RhdGVSZWYuY3VycmVudC5lcnJvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxvYWRpbmdUaW1lb3V0ICYmICFjYWNoZS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uTG9hZGluZ1Nsb3coa2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW2N1cnJlbnRGZXRjaGVyLmFwcGx5KHZvaWQgMCwgZm5BcmdzKSwgZ2V0VGltZXN0YW1wKCldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9hID0gRkVUQ0hba2V5XSwgbmV3RGF0YSA9IF9hWzBdLCBzdGFydEF0ID0gX2FbMV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIG5ld0RhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0YSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2xlYW51cFN0YXRlLCBjb25maWcuZGVkdXBpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBpZ25vcmUgdGhlIGN1cnJlbnQgb25lIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uczpcbiAgICAgICAgICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlcXVlc3QgdGhhdCBmaXJlZCBsYXRlciB3aWxsIGFsd2F5cyBiZSBrZXB0LlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbkluZm8gPSBNVVRBVElPTltrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMVxuICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzBdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbkluZm9bMV0gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgd2l0aCBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgYW5kIG5ld0RhdGEgYXJlIGRlZXBseSBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIHNhZmUgdG8gYnJvYWRjYXN0IHRoZSBzdGFsZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5kYXRhID0gc3RhdGVSZWYuY3VycmVudC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBgYnJvY2FzdFN0YXRlYCBpbnZva2VzIHRoZSBgb25TdGF0ZVVwZGF0ZWAgZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB0YWtlcyBjYXJlIG9mIGF2b2lkaW5nIHRoZSByZS1yZW5kZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZ2xvYmFsIHN0YXRlLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGtleSBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvcHVsbC8xMDU4XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjYWNoZS5nZXQoa2V5KSwgbmV3RGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIG5ld0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uU3VjY2VzcyhuZXdEYXRhLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlIGRpc2NhcmQgaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7IGVycm9yOiBlcnJfMSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLmVycm9yID0gZXJyXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0ICYmIGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRXJyb3IoZXJyXzEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yID09PSAnYm9vbGVhbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oY29uZmlnLnNob3VsZFJldHJ5T25FcnJvcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IoZXJyXzEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGUgaXMgYWx3YXlzIGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8gcmV2YWxpZGF0ZSB3aGVuIHJlZm9jdXNpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRXJyb3JSZXRyeShlcnJfMSwga2V5LCBjb25maWcsIHJldmFsaWRhdGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1cGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgaXMgdGhlIHNvdXJjZSBvZiB0aGUgcmVxdWVzdCwgbmVlZCB0byB0ZWxsIGFsbCBvdGhlciBob29rcyB0b1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlaXIgc3RhdGVzLlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpICYmIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgbmV3U3RhdGUuZGF0YSwgbmV3U3RhdGUuZXJyb3IsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdHJ1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBcbiAgICAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ3NgLCBga2V5SW5mb2AsXG4gICAgLy8gYW5kIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtrZXldKTtcbiAgICAvLyBTaW1pbGFyIHRvIHRoZSBnbG9iYWwgbXV0YXRlLCBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB2YXIgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAvLyBCeSB1c2luZyBgYmluZGAgd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgdGhlIHNpemUgb2YgdGhlIHJlc3QgYXJndW1lbnRzLlxuICAgIC8vIER1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzM3MTgxLCB3ZSBoYXZlIHRvXG4gICAgLy8gY2FzdCBpdCB0byBhbnkgZm9yIG5vdy5cbiAgICBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgY2FjaGUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleVJlZi5jdXJyZW50OyB9KSwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWtleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGtleUNoYW5nZWQgPSBrZXkgIT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB2YXIgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSBzdGF0ZSB1cGRhdGVyIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB1cGRhdGUgaG9vaydzXG4gICAgICAgIC8vIGludGVybmFsIHN0YXRlIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIHZhciBvblN0YXRlVXBkYXRlID0gZnVuY3Rpb24gKHVwZGF0ZWREYXRhLCB1cGRhdGVkRXJyb3IsIHVwZGF0ZWRJc1ZhbGlkYXRpbmcpIHtcbiAgICAgICAgICAgIHNldFN0YXRlKG1lcmdlT2JqZWN0cyh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHVwZGF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHVwZGF0ZWRJc1ZhbGlkYXRpbmdcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gU2luY2UgYHNldFN0YXRlYCBvbmx5IHNoYWxsb3dseSBjb21wYXJlcyBzdGF0ZXMsIHdlIGRvIGEgZGVlcFxuICAgICAgICAgICAgLy8gY29tcGFyaXNvbiBoZXJlLlxuICAgICAgICAgICAgY29tcGFyZShzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHVwZGF0ZWREYXRhKVxuICAgICAgICAgICAgICAgID8gVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHVwZGF0ZWREYXRhXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIHZhciBvblJldmFsaWRhdGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiZcbiAgICAgICAgICAgICAgICAgICAgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBSRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IE1VVEFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIHZhciB1bnN1YlVwZGF0ZSA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgU1RBVEVfVVBEQVRFUlMsIG9uU3RhdGVVcGRhdGUpO1xuICAgICAgICB2YXIgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2hlbiBga2V5YCB1cGRhdGVzLCByZXNldCB0aGUgc3RhdGUgdG8gdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgICAgLy8gYW5kIHRyaWdnZXIgYSByZXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgICAgIGlmIChrZXlDaGFuZ2VkKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGRSZXZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJVcGRhdGUoKTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW2tleSwgcmV2YWxpZGF0ZV0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRpbWVyO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBwYXNzZWQgaW50ZXJ2YWxcbiAgICAgICAgICAgIC8vIC4uLm9yIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBkYXRhIHRvIGdldCB0aGUgaW50ZXJ2YWxcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKVxuICAgICAgICAgICAgICAgID8gcmVmcmVzaEludGVydmFsKGRhdGEpXG4gICAgICAgICAgICAgICAgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSBhbmQgbm90IGVycm9yZWQuXG4gICAgICAgICAgICBpZiAoIXN0YXRlUmVmLmN1cnJlbnQuZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHRpbWVyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW3JlZnJlc2hJbnRlcnZhbCwgcmVmcmVzaFdoZW5IaWRkZW4sIHJlZnJlc2hXaGVuT2ZmbGluZSwgcmV2YWxpZGF0ZV0pO1xuICAgIC8vIERpc3BsYXkgZGVidWcgaW5mbyBpbiBSZWFjdCBEZXZUb29scy5cbiAgICB1c2VEZWJ1Z1ZhbHVlKGRhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcyBldmVuIHdpdGggdGhlIFN1c3BlbnNlIG1vZGUuXG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBpc1VuZGVmaW5lZChlcnJvcikgPyByZXZhbGlkYXRlKFdJVEhfREVEVVBFKSA6IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtdXRhdGU6IGJvdW5kTXV0YXRlLFxuICAgICAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZygpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdCcsIHtcbiAgICB2YWx1ZTogZGVmYXVsdENvbmZpZ1xufSk7XG52YXIgdW5zdGFibGVfc2VyaWFsaXplID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VyaWFsaXplKGtleSlbMF07IH07XG52YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCBtdXRhdGUsIHVuc3RhYmxlX3NlcmlhbGl6ZSwgdXNlU1dSQ29uZmlnIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsIi8qIVxuICogaG90a2V5cy1qcyB2My44LjdcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMSBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT5cbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzXG4gKiBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAoIWtleXNJbmZvKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLm1hcChmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcblxuICAgICAgaWYgKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlKSB7XG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJzsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXlcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSk7XG4gICAgfSk7XG4gICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfZG93bktleXMgPSBbXTtcbiAgICB9KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB1bmJpbmQ6IHVuYmluZFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhvdGtleXM7XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50KSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
24
|
+
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var u={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},f={},s=1;s<20;s++)u["f".concat(s)]=111+s;var v=[],p=!1,m="all",h=[],y=function(e){return u[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function b(e){m=e||"all"}function g(){return m||"all"}var _=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,u=void 0===a?"+":a;i(t).forEach((function(e){var t=e.split(u),a=t.length,i=t[a-1],d="*"===i?"*":y(i);if(f[d]){n||(n=g());var c=a>1?o(l,t):[];f[d]=f[d].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,c))}))}}))};function O(e,t,n,r){var a;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var o in a=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,o)&&(!c[o]&&t.mods.indexOf(+o)>-1||c[o]&&-1===t.mods.indexOf(+o))&&(a=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!a&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=f["*"],r=e.keyCode||e.which||e.charCode;if(P.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in c){for(var a in c[r]=!0,l)l[a]===r&&(P[a]=!0);if(!n)return}for(var o in c)Object.prototype.hasOwnProperty.call(c,o)&&(c[o]=e[d[o]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),c[17]=!0,c[18]=!0);var i=g();if(n)for(var u=0;u<n.length;u++)n[u].scope===i&&("keydown"===e.type&&n[u].keydown||"keyup"===e.type&&n[u].keyup)&&O(e,n[u],i,t);if(r in f)for(var s=0;s<f[r].length;s++)if(("keydown"===e.type&&f[r][s].keydown||"keyup"===e.type&&f[r][s].keyup)&&f[r][s].key){for(var p=f[r][s],m=p.splitKey,h=p.key.split(m),b=[],_=0;_<h.length;_++)b.push(y(h[_]));b.sort().join("")===v.sort().join("")&&O(e,p,i,t)}}}function P(e,t,n){v=[];var r=i(e),u=[],d="all",s=document,m=0,b=!1,g=!0,_="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(s=t.element),t.keyup&&(b=t.keyup),void 0!==t.keydown&&(g=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(_=t.splitKey)),"string"==typeof t&&(d=t);m<r.length;m++)u=[],(e=r[m].split(_)).length>1&&(u=o(l,e)),(e="*"===(e=e[e.length-1])?"*":y(e))in f||(f[e]=[]),f[e].push({keyup:b,keydown:g,scope:d,mods:u,shortcut:r[m],method:n,key:r[m],splitKey:_,element:s});void 0!==s&&!function(e){return h.indexOf(e)>-1}(s)&&window&&(h.push(s),a(s,"keydown",(function(e){w(e,s)}),O),p||(p=!0,a(window,"focus",(function(){v=[]}),O)),a(s,"keyup",(function(e){w(e,s),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,l)l[r]===t&&(P[r]=!1)}(e)}),O))}var j={setScope:b,getScope:g,deleteScope:function(e,t){var n,r;for(var a in e||(e=g()),f)if(Object.prototype.hasOwnProperty.call(f,a))for(n=f[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;g()===e&&b(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=y(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(f).forEach((function(n){var r=f[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&_(e)}));else if("object"==typeof e)e.key&&_(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),_({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(f).forEach((function(e){return delete f[e]}))},keyMap:u,modifier:l,modifierMap:d};for(var M in j)Object.prototype.hasOwnProperty.call(j,M)&&(P[M]=j[M]);if("undefined"!=typeof window){var E=window.hotkeys;P.noConflict=function(e){return e&&window.hotkeys===P&&(window.hotkeys=E),P},window.hotkeys=P}var k=n(0);function C(){return P.isPressed}P.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function N(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,i=a.filter,u=a.keyup,l=a.keydown,d=a.filterPreventDefault,c=void 0===d||d,f=a.enabled,s=void 0===f||f,v=a.enableOnContentEditable,p=void 0!==v&&v,m=Object(k.useRef)(null),h=Object(k.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(x(e,["INPUT","TEXTAREA","SELECT"])&&!x(e,o)||null!=(r=e.target)&&r.isContentEditable&&!p)||(null===m.current||document.activeElement===m.current)&&(t(e,n),!0)}),r?[m,o,i].concat(r):[m,o,i]);return Object(k.useEffect)((function(){if(s)return u&&!0!==l&&(n.keydown=!1),P(e,n||{},h),function(){return P.unbind(e,h)};P.unbind(e,h)}),[h,e,s]),m}var S=P.isPressed}]));
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzPzlhNGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9jZDQ2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzMyYWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz8wODQxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz8xZjExIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/NGVlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/MjNlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzP2UxODgiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzBlZGYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz8yN2IzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiY2hpbGRyZW4iLCJjb250YWluZXJSZWYiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwidHlwZSIsInJlZiIsImxlZnRPZmZzZXQiLCJpbmNsdWRlcyIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJidXR0b25CYWRnZSIsIkNvbXBvbmVudCIsInByb3BzIiwibGFiZWwiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJ1c2VDYWxsYmFjayIsImUiLCJ0YXJnZXQiLCJMYWJlbCIsImlucHV0UmVmIiwiY2hlY2tib3giLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJkaXJlY3Rpb24iLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIm1hcCIsImNvbG9yIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiaGV4Q29kZSIsInNyT25seSIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiaGVhZGVyIiwiaXNPcGVuIiwiYnV0dG9uc0xlZnQiLCJidXR0b25zUmlnaHQiLCJvbkNsb3NlIiwibm9PdmVybGF5IiwiYmFzZVpJbmRleCIsIk1vZGFsIiwibW9kYWxIZWFkZXIiLCJtb2RhbENvbnRlbnQiLCJtb2RhbEJ1dHRvbnNDb250YWluZXIiLCJtb2RhbEJ1dHRvbnMiLCJkaXNwbGF5TmFtZSIsImJ1dHRvbiIsInVzZUhvdGtleXMiLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJvdmVybGF5IiwibW9kYWwiLCJtb2RhbEJ1dHRvbiIsIkRyb3Bkb3duIiwiQ2xpY2thYmxlIiwiaXRlbUJvZHlSZW5kZXJlciIsIml0ZW1zIiwiaGFuZGxlU2VsZWN0IiwicmVuZGVyQ2xpY2thYmxlIiwic2VsZWN0ZWRJdGVtIiwidXNlU3RhdGUiLCJzZXRJc09wZW4iLCJ1c2VPdXRzaWRlQ2xpY2siLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwicGxhY2VtZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTWVudSIsIml0ZW0iLCJNZW51SXRlbSIsImlzQWN0aXZlIiwiaWQiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJmb290ZXIiLCJtZW51Iiwib3BlbiIsInNjcm9sbENvbnRhaW5lciIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJhY3RpdmUiLCJtZW51TGlua0l0ZW0iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwibGF5b3V0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJiYWRnZUNvbnRlbnQiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJCdXR0b25CYWRnZSIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJ3aWR0aCIsImhlaWdodCIsImhhc092ZXJsYXkiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiaXNGaXhlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJOdW1wYWQiLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwiZW1pdE51bWJlciIsIm5ld051bWJlciIsInByZXZlbnREZWZhdWx0IiwiTnVtcGFkS2V5cyIsImZpbGwiLCJfIiwiaW5kZXgiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsIm51bWJlcnMiLCJNYXRoIiwiZmxvb3IiLCJjYWxsYmFjayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsImciLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJpdGVyYXRvciIsInRoaXMiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJwdXNoIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwicHJvbWlzZSIsImVycm9yXzEiLCJob29rIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiYXNzaWduIiwiaGFzV2luZG93Iiwid2luZG93IiwidGFibGUiLCJXZWFrTWFwIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJSZWdFeHAiLCJ0b0pTT04iLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXQiLCJrZXlzIiwic29ydCIsIm9ubGluZSIsImhhc1dpbiIsImhhc0RvYyIsIm9uV2luZG93RXZlbnQiLCJvbkRvY3VtZW50RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsIm9mZkRvY3VtZW50RXZlbnQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfU0VSVkVSIiwickFGIiwic2V0VGltZW91dCIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiZWZmZWN0aXZlVHlwZSIsInNhdmVEYXRhIiwic2VyaWFsaXplIiwiZXJyIiwiYXJncyIsImNvbmNhdCIsIlNXUkdsb2JhbFN0YXRlIiwiYnJvYWRjYXN0U3RhdGUiLCJjYWNoZSIsImlzVmFsaWRhdGluZyIsInJldmFsaWRhdGUiLCJicm9hZGNhc3QiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJTVEFURV9VUERBVEVSUyIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwidXBkYXRlcnMiLCJfX3RpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsImludGVybmFsTXV0YXRlIiwiX2kiLCJhcmd1bWVudHMiLCJfa2V5IiwiX2RhdGEiLCJfb3B0cyIsIm9wdGlvbnMiLCJwb3B1bGF0ZUNhY2hlIiwicm9sbGJhY2tPbkVycm9yIiwiY3VzdG9tT3B0aW1pc3RpY0RhdGEiLCJrZXlJbmZvIiwiX2IiLCJNVVRBVElPTiIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNDdXN0b21PcHRpbWlzdGljRGF0YSIsInJvbGxiYWNrRGF0YSIsIm9wdGltaXN0aWNEYXRhIiwicmVzIiwiX2MiLCJjYXRjaCIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInJlbGVhc2VGb2N1c18xIiwicmVsZWFzZVJlY29ubmVjdF8xIiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJjdXJyZW50RGF0YSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwibWVyZ2VDb25maWdzIiwidTEiLCJ1c2UiLCJmMSIsInUyIiwiZjIiLCJTV1JDb25maWdDb250ZXh0Iiwibm9ybWFsaXplIiwidXNlU1dSQ29uZmlnIiwic3Vic2NyaWJlQ2FsbGJhY2siLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsImluZGV4T2YiLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsImV4dGVuZGVkQ29uZmlnIiwiY2FjaGVDb250ZXh0IiwiUHJvdmlkZXIiLCJmZXRjaGVyIiwiZmFsbGJhY2tEYXRhIiwic3VzcGVuc2UiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwiZm5BcmdzIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwicGF0Y2hGZXRjaEluZm8iLCJpbmZvIiwiY2FjaGVkIiwiaXNJbml0aWFsTW91bnQiLCJzaG91bGRSZXZhbGlkYXRlIiwic3RhdGUiLCJyZXJlbmRlciIsInN0YXRlUmVmIiwic3RhdGVEZXBlbmRlbmNpZXNSZWYiLCJzZXRTdGF0ZSIsInBheWxvYWQiLCJzaG91bGRSZXJlbmRlciIsImN1cnJlbnRTdGF0ZSIsInVzZVN0YXRlV2l0aERlcHMiLCJzdGF0ZURlcGVuZGVuY2llcyIsInJldmFsaWRhdGVPcHRzIiwiY3VycmVudEZldGNoZXIiLCJzdGFydEF0Iiwic2hvdWxkU3RhcnROZXdSZXF1ZXN0IiwiaXNDdXJyZW50S2V5TW91bnRlZCIsImNsZWFudXBTdGF0ZSIsIm5ld1N0YXRlIiwiZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlIiwibXV0YXRpb25JbmZvIiwiZXJyXzEiLCJyZXF1ZXN0SW5mbyIsImJvdW5kTXV0YXRlIiwia2V5Q2hhbmdlZCIsInNvZnRSZXZhbGlkYXRlIiwibmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCIsInVuc3ViVXBkYXRlIiwidXBkYXRlZERhdGEiLCJ1cGRhdGVkRXJyb3IiLCJ1cGRhdGVkSXNWYWxpZGF0aW5nIiwidW5zdWJFdmVudHMiLCJub3ciLCJ0aW1lciIsImludGVydmFsIiwiZXhlY3V0ZSIsImNsZWFyVGltZW91dCIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImlzZmYiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImFkZEV2ZW50IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsImZpbHRlciIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50Iiwiam9pbiIsImNhcHR1cmUiLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFP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VixFQUFNaVYsSUFDckJuakIsRUFHVCxJQUFJMmpCLEVBQWtCbEQsRUFBUWlCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEyKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xyXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcclxuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcclxuXHJcbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcclxuXHJcbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XHJcblxyXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFxyXG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcclxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxyXG4+ICYge1xyXG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcclxuICBkaXNwbGF5LFxyXG4gIGlzRGlzYWJsZWQsXHJcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXHJcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxCdXR0b25cclxuICAgICAgYWxpZ249XCJsZWZ0XCJcclxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XHJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgc3RyZXRjaEhvcml6b250YWxseVxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XHJcbiAgICAgICAge2Rpc3BsYXl9XHJcbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQnV0dG9uPlxyXG4gICk7XHJcbn1cclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSBcIi4vTWVudVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVMaW5rSXRlbSB9IGZyb20gXCIuL01lbnVMaW5rSXRlbVwiO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiVktZb050V1RadWkyQU8xSWx5Sk1Udz09XCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbGVJbnB1dFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RvYXN0XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQnV0dG9uUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcclxuICBzaXplPzogU2l6ZTtcclxuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XHJcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCdXR0b24oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBvbkNsaWNrLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUsXHJcbn06IEJ1dHRvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieHludU11OFhaU3NvbkR1a3NsNkFRZz09XCIsXCJsZWZ0XCI6XCJQa3AwSGhOSHR0b1dJYjJkd3BHbnR3PT1cIixcInNtYWxsXCI6XCJ3RE9lZUpHQ1ptMGsyWnBOekZiZUhnPT1cIixcImxhcmdlXCI6XCJfNVFqQld0bDdZWHk0ZW00WDNHUGJSQT09XCIsXCJ4bGFyZ2VcIjpcImtOMExnYTRmQk9nY2lnRHF0T0RSZGc9PVwiLFwiaW52ZXJ0ZWRcIjpcIis1bnNUbkxsTk9YOEtGUWlVaFQxa1E9PVwiLFwicm91bmRlZFwiOlwiQmpQLUpOV0pqb0JmTk1NenRueVdPUT09XCIsXCJyaWdodE9mZnNldFwiOlwibEdKd05jb2w4Q0FrbnF4WSs4RGZxZz09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJFVitnNmhVQTFxdjhMUTlScWdyUVJRPT1cIixcIm5vU2hhZG93XCI6XCJaM3VQTHJyeXFJTmZSalpwcHdVNk5RPT1cIixcIm5vQm9yZGVyXCI6XCJlRWdoRzZHWEI5SXp5RDNqck5aZkFBPT1cIixcInRyYW5zcGFyZW50XCI6XCJzczdEaFZnRjVKR3NwQ0FTZFpVWUJnPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImk4UVBTcjRjSFloSjdBaXVlK2N4MGc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIldTeGltVU05a3hZR2M1VlJjMGlabEE9PVwiLFwibm9QYWRkaW5nXCI6XCJTZ1hjaGp6NGRKcit0Yzh5a0xuRTFBPT1cIixcImNvbnRlbnRcIjpcInhuOHlmak42bWV4UlhJZ3lOaG1raXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xyXG5cclxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XHJcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcclxuICAgICAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgICAgIHNpemU/OiBTaXplO1xyXG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XHJcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gQnV0dG9uTGluayh7XHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgc2l6ZSxcclxuICBjb250YWluZXJSZWYsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICAuLi5wcm9wc1xyXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxyXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgY2hpbGRyZW5cclxuICAgICAgKX1cclxuICAgIDwvQ29tcG9uZW50PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaSXI5dy0tZlNpdnFXVkdvU3AxNHRBPT1cIixcImxlZnRcIjpcInJSeXU5QVZHd1grLXhqVE9NVFNFMXc9PVwiLFwic21hbGxcIjpcIl8wREJoR0p2Y2JqRU1sU3FFb2ZGLXJ3PT1cIixcIm1lZGl1bVwiOlwiYTYremNVWTZYS3k5NHpBcVVZYUU2dz09XCIsXCJsYXJnZVwiOlwiVyt2NHZGZWJRa3h3MWNkaUtZLUt2Zz09XCIsXCJ4bGFyZ2VcIjpcImRZOTFEUVJZVWFXVDRFek9KSitHQmc9PVwiLFwiaW52ZXJ0ZWRcIjpcInlwbENweWxMNElkZXMrY09ycVNpbVE9PVwiLFwicm91bmRlZFwiOlwiTVJFWTA5K2Q2OXZWODRoWm5KdUxZdz09XCIsXCJyaWdodE9mZnNldFwiOlwiSHNhbzdtRlczbFlUck5oZld2ZnhXdz09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJNWGxMM084S1VZZVZBWWNTc25Oczl3PT1cIixcIm5vU2hhZG93XCI6XCJIcXo0Q3FRY080czBNVGF3ckRyMG9BPT1cIixcInRyYW5zcGFyZW50XCI6XCJoMWhOd2MyVWxNMEM1Ri14ZGdhNWR3PT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlRteXE0K3VIVStKSmVZTmRCSDhMMlE9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIkp6ekduVHQ0YU0zKzlyVmxOUVdpMEE9PVwiLFwibm9QYWRkaW5nXCI6XCJVdkk4VW5qYzlYMHpOMmw1Vyt0bXJRPT1cIixcIm5vQm9yZGVyXCI6XCJRcDV1Qm5RZ0pGb1pIZ1lTaHpBUGN3PT1cIixcImRpc2FibGVkXCI6XCJaWGxqa1lwUFdqREpMQzRCRUdNcHJ3PT1cIixcImNvbnRlbnRcIjpcIl8wbjJNbk9mSlBtMnd4czRNMm5iR0hBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIGNoZWNrZWQ/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG5cclxufTtcclxuXHJcbmZ1bmN0aW9uIENoZWNrYm94KHtcclxuICBsYWJlbCxcclxuICBvbkNoYW5nZSxcclxuICBwbGFjZWhvbGRlcixcclxuICBjaGVja2VkLFxyXG4gIGRpc2FibGVkLFxyXG4gIG5hbWUsXHJcbiAgY2xhc3NOYW1lLFxyXG4gIGluZGV0ZXJtaW5hdGUsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbn06IENoZWNrYm94UHJvcHMpIHtcclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcclxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XHJcbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcclxuICAgIFtvbkNoYW5nZV1cclxuICApO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPExhYmVsIHZhbHVlPXtsYWJlbH0gPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcclxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xyXG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19XHJcbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxyXG4gICAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgICAgLz5cclxuICAgIDwvTGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XHJcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxhYmVsXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cclxuICAgID5cclxuICAgICAge3ZhbHVlfVxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xhYmVsPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiYlI3UE84eVJGdFVsTjF2c1A3ZWNSUT09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcIkNCUVo0UHAxY2xiKzVSOElsQ080Z1E9PVwiLFwic21hbGxcIjpcIl81amJqdXQ3R2d0N2d4ZW5qeWY5TGJRPT1cIixcIm1lZGl1bVwiOlwiaVBBT3cyWnNOSkEwbldEWHFXQzM3Zz09XCIsXCJsYXJnZVwiOlwiTEV5a1hzOW1FRVNkd282aVpvTWRVdz09XCIsXCJ4bGFyZ2VcIjpcInVxcEFDRUoxb2JBNGJSbGFlQVQyN2c9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcclxuICBjb2xvcnM6IENvbG9yW107XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcclxuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcclxuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XHJcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcclxuICBjb2xvcnMsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIG9uU2VsZWN0LFxyXG4gIHNlbGVjdGVkQ29sb3IsXHJcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxyXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxyXG59OiBDb2xvclBpY2tlclByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cclxuICAgID5cclxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcclxuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxDb2xvclN3YXRjaFxyXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cclxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxyXG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleX1cclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG4gICAgICB9KX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbG9yUGlja2VyO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xyXG4gIGNvbG9yOiBDb2xvcjtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xyXG4gIGNvbG9yLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBpc1NlbGVjdGVkID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgb25DbGljayxcclxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxyXG4gICAgPlxyXG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cclxuICAgIDwvYnV0dG9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJ1VGY3bVlmWGVOVDdHbjB6bm5SOERRPT1cIixcInNtYWxsXCI6XCJhQWJlempPbXcyTnlUOVJVN1B1eU9BPT1cIixcImxhcmdlXCI6XCJRYzZTQ3ZxYm5uaEozenRnelBaT0ZBPT1cIixcInhsYXJnZVwiOlwiXzZvQkJaRGtSa3pmN3RGNGJoeUR0QUE9PVwiLFwic2VsZWN0ZWRcIjpcIm5pY1pmZ01rK3VRRlB5cEpJa1F1Ync9PVwiLFwic3JPbmx5XCI6XCJHSHBIRUIxUVhEeWplUjlWbkVkMVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclBpY2tlclwiOlwiREt0UDU1Yk9mVVRCMWtEYS1pVUhxUT09XCIsXCJob3Jpem9udGFsXCI6XCJfMzRMajgtYi0xM0M4TDA5UnNNaW5lZz09XCIsXCJ2ZXJ0aWNhbFwiOlwiXzF5dWdHUXM0RWswdDNUOHRnb0t4VlE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XHJcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcclxuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGhlYWRlcj86IHN0cmluZztcclxuICBpc09wZW46IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBub092ZXJsYXk/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBoZWFkZXIsXHJcbiAgaXNPcGVuLFxyXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXHJcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXHJcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgYmFzZVpJbmRleCA9IDEwMTksXHJcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPE1vZGFsXHJcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBpc09wZW49e2lzT3Blbn1cclxuICAgICAgb25DbG9zZT17b25DbG9zZX1cclxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XHJcbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cclxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxyXG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXHJcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcclxuICAgICAgICAgIF0pfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9Nb2RhbD5cclxuICApO1xyXG59XHJcblxyXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBNb2RhbFByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBpc09wZW46IGJvb2xlYW47XHJcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XHJcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTW9kYWwoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBpc09wZW4sXHJcbiAgYnV0dG9uLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub092ZXJsYXkgPSBmYWxzZSxcclxuICBvbkNsb3NlID0gKCkgPT4ge30sXHJcbiAgYmFzZVpJbmRleCA9IDEwMDksXHJcbn06IE1vZGFsUHJvcHMpIHtcclxuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xyXG5cclxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICBvbkNsb3NlKCk7XHJcbiAgfSwgW29uQ2xvc2VdKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGlzT3BlbiAmJiAoXHJcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxyXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXHJcbiAgICAgICAgICBdKX1cclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXHJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0pfVxyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtidXR0b24gJiYgKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7YnV0dG9ufVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwicFU2SUIycjBMcENGUFhnVHZPcjJnQT09XCIsXCJub092ZXJsYXlcIjpcIl81U1VSOUZoLWZIVHk0WHI2bVFDK3BBPT1cIixcIm1vZGFsXCI6XCJMQ0FUODNtdVhzQUdyUFVIUTF5K2hRPT1cIixcInRyYW5zcGFyZW50XCI6XCJXSFU4UWJweitBdlQtWXB1UWVVSy1RPT1cIixcIm5vU2hhZG93XCI6XCJHaTFWVG1nM0dQTnhuWDkxLW0wLTVnPT1cIixcIm1vZGFsQnV0dG9uXCI6XCJsZm5mSHUreHllRWpjUWJBUXdqSVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImp2S1NpLWZLdWZjcEs5ZUJXV0ZDTGc9PVwiLFwibW9kYWxIZWFkZXJcIjpcImN4MVJvUWRnQWJlbnZWWFU4QjdmU3c9PVwiLFwibW9kYWxDb250ZW50XCI6XCJaRDR2M0hFLUFZWlhWMElUV0RGN0dnPT1cIixcIm5vUGFkZGluZ1wiOlwiXzF6RkY4eHF5bzc3VXhHMnY1NDlCZUE9PVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfNGhRaENlNVU3WUJ5aG5oTystR3Fpdz09XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIkpvSUxiVzVGblppeGFKN0VUdm84K3c9PVwifTsiLCJleHBvcnQge1xyXG4gIERyb3Bkb3duLFxyXG4gIERyb3Bkb3duUHJvcHMsXHJcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXHJcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxyXG4gIFJlbmRlckNsaWNrYWJsZUZuIGFzIERyb3Bkb3duUmVuZGVyQ2xpY2thYmxlRm4sXHJcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxyXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XHJcbmV4cG9ydCB7XHJcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxyXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcclxufSBmcm9tIFwiLi9DbGlja2FibGVcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XHJcblxyXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcclxuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0gfSBmcm9tIFwiLi4vTWVudVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XHJcblxyXG5leHBvcnQgdHlwZSBSZW5kZXJEaXNwbGF5UHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gUGljazxcclxuICBEcm9wZG93blByb3BzPFQ+LFxyXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxyXG4+ICYgeyBpc0Rpc2FibGVkOiBib29sZWFuOyB0b2dnbGVJc09wZW46ICgpID0+IHZvaWQgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcclxuICBwcm9wczogUmVuZGVyRGlzcGxheVByb3BzPFQ+XHJcbikgPT4gUmVhY3RFbGVtZW50O1xyXG5cclxuZXhwb3J0IHR5cGUgSXRlbUJvZHlSZW5kZXJlckZuPFQgZXh0ZW5kcyBJdGVtPiA9IChzdGF0ZToge1xyXG4gIGl0ZW06IFQ7XHJcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcclxufSkgPT4gUmVhY3RDaGlsZDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xyXG4gIGl0ZW1Cb2R5UmVuZGVyZXI/OiBJdGVtQm9keVJlbmRlcmVyRm48VD47XHJcbiAgaXRlbXM6IFRbXTtcclxuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XHJcbiAgZGlzcGxheTogUmVhY3RDaGlsZDtcclxuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcclxuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcclxuICBpdGVtQm9keVJlbmRlcmVyLFxyXG4gIGl0ZW1zLFxyXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXHJcbiAgZGlzcGxheSxcclxuICByZW5kZXJDbGlja2FibGUsXHJcbiAgc2VsZWN0ZWRJdGVtLFxyXG59OiBEcm9wZG93blByb3BzPFQ+KSB7XHJcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XHJcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xyXG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcclxuICB9O1xyXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xyXG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxNZW51Q29udGFpbmVyXHJcbiAgICAgIGJ1dHRvbj17XHJcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxyXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcclxuICAgICAgICAgICAgZGlzcGxheSxcclxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxyXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8Q2xpY2thYmxlXHJcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XHJcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIHBsYWNlbWVudD17eyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfX1cclxuICAgICAgcmVmPXtyZWZ9XHJcbiAgICA+XHJcbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cclxuICAgICAgICB7aXRlbXMgJiZcclxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cclxuICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICkpfVxyXG4gICAgICA8L01lbnU+XHJcbiAgICA8L01lbnVDb250YWluZXI+XHJcbiAgKTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgSWNvblByb3BzID0ge1xyXG4gIGFsdD86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEljb24oe1xyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbn06IEljb25Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8aW1nXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuaWNvbixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcclxuICAgICAgYWx0PXthbHR9XHJcbiAgICAgIHNyYz17c3JjfVxyXG4gICAgLz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJY29uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcIllBMklIUUQ0b3BwT2lvWklDSHd6d3c9PVwiLFwic21hbGxcIjpcInFkenMyRU1tQmRiME16TlMwaURoTUE9PVwiLFwibWVkaXVtXCI6XCJJNmVFR0lCSzU5T2tkcHdVb3VhYXVRPT1cIixcImxhcmdlXCI6XCJfMmJpNklFWWhkTWJQZ1BKZndvUGp1QT09XCIsXCJ4bGFyZ2VcIjpcImNra3I0WkZPVkd1Q040RWpQTXFlR0E9PVwiLFwiaW52ZXJ0ZWRcIjpcImVtNXJMNG5BSDFJd2YzTUhlSWVQbWc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidzBDcGFzall5TFItaTJQTkluOUVzZz09XCJ9OyIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNCA1TDcuNSAxMkwxIDUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTWVudVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgaXNPcGVuPzogYm9vbGVhbjtcclxuICBoZWFkZXI/OiBzdHJpbmc7XHJcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGNsYXNzTmFtZSxcclxuICBpc09wZW4gPSB0cnVlLFxyXG4gIGhlYWRlcixcclxuICBmb290ZXIsXHJcbn06IE1lbnVQcm9wcykge1xyXG4gIGlmICghaXNPcGVuKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICBzdHlsZXMubWVudSxcclxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXHJcbiAgICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgICAgXSl9XHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbENvbnRhaW5lcn0+XHJcbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxyXG4gICAgICAgICAgPHVsPntpc09wZW4gJiYgY2hpbGRyZW59PC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXHJcbiAgICAgICAgICAgIF0pfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7Zm9vdGVyfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcInJTQmZzRk5qam9vSnNESC1YK1lYYnc9PVwiLFwib3BlblwiOlwidlg3dmdBOVpsRjdUOUVSOVZKb2RiUT09XCIsXCJlbnRyYW5jZVwiOlwiR3BCMkxzYWRodUdKWnZLb05PZG96QT09XCIsXCJoZWFkZXJcIjpcIm9BVGxCRmdlcFo1Z0FaQXItQ3huQUE9PVwiLFwiZm9vdGVyXCI6XCJ3S2VFNzN6WWZiLTdjUk4tRjhPWTFnPT1cIixcIm5vQm9yZGVyXCI6XCJMRDZMRHZzLXlsTXJQZ3NsajR4M2hnPT1cIixcInNjcm9sbENvbnRhaW5lclwiOlwiVCtiSXBhbCtXSFVILWhBMEd3NXJWZz09XCJ9OyIsImltcG9ydCBSZWFjdCwge1xyXG4gIFJlYWN0Tm9kZSxcclxuICBSZWFjdEVsZW1lbnQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBGb3J3YXJkZWRSZWYsXHJcbn0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNZW51UGxhY2VtZW50ID0ge1xyXG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xyXG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcclxufTtcclxuXHJcbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudUNvbnRhaW5lcihcclxuICB7XHJcbiAgICBjaGlsZHJlbixcclxuICAgIGJ1dHRvbixcclxuICAgIGNsYXNzTmFtZSxcclxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXHJcbiAgfTogTWVudUNvbnRhaW5lclByb3BzLFxyXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxyXG4pIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxyXG4gICAgICB7YnV0dG9ufVxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXHJcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxyXG4gICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXHJcbiAgICAgICAgXSl9XHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZihNZW51Q29udGFpbmVyKTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInFjdkRTZkZ0K3cwamEyZnFQYzBTNXc9PVwiLFwibWVudUNvbnRhaW5lclwiOlwiTHdyMWEzYlAtOTVhZXp6bWFjb0pmdz09XCIsXCJ0b3BcIjpcImJCSGJzK0ZXaTYtendXTVpJbUYrTkE9PVwiLFwicmlnaHRcIjpcIkI4TTQyTndvWjhwVVZtNVI0Skp2MWc9PVwiLFwibGVmdFwiOlwicE9HN3RYZlRGazhxcVh0TkMwRS1Pdz09XCIsXCJib3R0b21cIjpcInVjdk4wRUZNbnM4YmZWdnNpOWo5eVE9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVJdGVtLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBpc0FjdGl2ZT86IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNZW51SXRlbSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIG9uQ2xpY2ssXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgaXNBY3RpdmUgPSBmYWxzZSxcclxufTogTWVudUl0ZW1Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGlcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxyXG4gICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSB9LFxyXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xpPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVJdGVtXCI6XCJtSmQ3ZFJaTk93WWU4STlDcUZsenJnPT1cIixcIm5vUGFkZGluZ1wiOlwieGNrRE9kblBQWUtUa3ltMmF3dHJqQT09XCIsXCJhY3RpdmVcIjpcIngreXJDcTVCdStqZ1g3U1JVcjlmZXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cclxuICB8IHtcclxuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU6IHN0cmluZztcclxuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgLi4ucHJvcHNcclxufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICBkYXRhLXRlc3RpZD1cIm1lbnUtbGluay1pdGVtXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L0NvbXBvbmVudD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJvRXI4WkpYTG5aeURKQk9SWnRJVjR3PT1cIixcIm5vUGFkZGluZ1wiOlwiXzNUTklKQWV0QVN5emJJK0tsTFRIQ3c9PVwiLFwiYWN0aXZlXCI6XCJnaGF1Q1RQVEJFSkF1QW82MzJ6NWZRPT1cIixcIm1lbnVJdGVtXCI6XCJuMXhuNEVZdXhFcU9jM2ZDRWFtejNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcclxuZXhwb3J0IHsgRmlsZUlucHV0U2l6ZSB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcclxuXHJcbnR5cGUgUHJvcHMgPSB7XHJcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIGFjY2VwdD86IHN0cmluZztcclxuICBtdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcclxuICByb3VuZGVkPzogYm9vbGVhbjtcclxuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgYWNjZXB0LFxyXG4gIG9uQ2hhbmdlLFxyXG4gIGlucHV0UmVmLFxyXG4gIG11bHRpcGxlID0gZmFsc2UsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxufTogUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxhYmVsXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgID5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XHJcbiAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgIGlkPVwiZmlsZVwiXHJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XHJcbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxyXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cclxuICAgICAgLz5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9sYWJlbD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcImVVcWEzNStFbTJMY2gyNk54amJ1K1E9PVwiLFwibGFiZWxcIjpcIm54VzIxaDhVSTBNTnR3bzJrY0FkSXc9PVwiLFwic21hbGxcIjpcIk5kYTFwQWNHSmN5RERFUzVFVkpzb3c9PVwiLFwibGFyZ2VcIjpcInpxTFMzWUhYdGpsTUJzRk96cnZFWmc9PVwiLFwieGxhcmdlXCI6XCJWWmw1V3lBa3YzMDEtaENDemU1TW5RPT1cIixcImludmVydGVkXCI6XCJ2bFNhSlFKaHp0NklOdldpOE50VXdnPT1cIixcInJvdW5kZWRcIjpcImIteDVUcnlTTkdDRjlIWThKM0h0QUE9PVwiLFwibm9TaGFkb3dcIjpcIl81d2wxNEpqZjF5eEh3QUx4bUV3Nk1RPT1cIixcIm5vQm9yZGVyXCI6XCJkbFhXUU9sTmUrYUZrVmJQeERMbTRBPT1cIixcIm5vUGFkZGluZ1wiOlwiaVB4VUctT04xWExPa2ZWUHp0N05ZUT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiQlBYSTl1M2hnQXlkQWM1Qnp6a0NOZz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKTTNKVlh0NzduSDl1cithTCtSWURnPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJNWGFza2ZmV3oyay1ocXRIUnQydk9RPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgUGxhY2VtZW50ID0ge1xyXG4gIGhvcml6b250YWw6XHJcbiAgICB8IFwicmlnaHRcIlxyXG4gICAgfCBcInJpZ2h0RWRnZVwiXHJcbiAgICB8IFwicmlnaHRPbkVkZ2VcIlxyXG4gICAgfCBcImxlZnRcIlxyXG4gICAgfCBcImxlZnRFZGdlXCJcclxuICAgIHwgXCJsZWZ0T25FZGdlXCJcclxuICAgIHwgXCJsZWZ0T25FZGdlXCJcclxuICAgIHwgXCJjZW50ZXJcIjtcclxuICB2ZXJ0aWNhbDpcclxuICAgIHwgXCJ0b3BcIlxyXG4gICAgfCBcInRvcEVkZ2VcIlxyXG4gICAgfCBcInRvcE9uRWRnZVwiXHJcbiAgICB8IFwiYm90dG9tXCJcclxuICAgIHwgXCJib3R0b21FZGdlXCJcclxuICAgIHwgXCJib3R0b21PbkVkZ2VcIlxyXG4gICAgfCBcImNlbnRlclwiO1xyXG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcclxufTtcclxuXHJcbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcclxuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcclxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxyXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcclxuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cclxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXHJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcclxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcclxuXHJcbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxyXG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxyXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXHJcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZsb2F0aW5nUGFuZWw7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIGFsdDogc3RyaW5nO1xyXG4gIGJhZGdlQ29udGVudD86IFJlYWN0Tm9kZTtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xyXG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcclxuICBjbGFzc05hbWUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgYmFkZ2VDb250ZW50ID0gbnVsbCxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxyXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgdHlwZT17dHlwZX1cclxuICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxyXG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkJ2UXRzVUFhLWZRUG1YYnZWU1ZDTlE9PVwiLFwic21hbGxcIjpcIl84WmY0THpjZWlJb2VyN1BJVlI4QllBPT1cIixcIm1lZGl1bVwiOlwiXzdQRjJkbkpnWnhJRSt0UzMzeEs0S0E9PVwiLFwibGFyZ2VcIjpcIkViT1l2R0tYaUFhYm9oaTRPeTFDTXc9PVwiLFwieGxhcmdlXCI6XCJ1T2ZaOUxpR3puYUJHSXV4NDBwRkdnPT1cIixcInJvdW5kZWRcIjpcInZBajB4bWpYSlRmRGJXSUNWS0JvMmc9PVwiLFwidG9wT2Zmc2V0XCI6XCJfOFlTcy1raElEekllZlJSaDV6SDMrUT09XCIsXCJyaWdodE9mZnNldFwiOlwicTRqSWwyWEZPYnZzRE0tNFF4dnR1dz09XCIsXCJib3R0b21PZmZzZXRcIjpcIl84MktiRWNFWnpjUjVWcUhseDg2MlBRPT1cIixcImxlZnRPZmZzZXRcIjpcInhuYzErT0RGbUJQaWlmNUpvcVRuZEE9PVwiLFwiaW52ZXJ0ZWRcIjpcImJoVlVUZGtRbHRjdG1yWmUwVDcya3c9PVwiLFwibm9TaGFkb3dcIjpcIm5zZ2gyYzZjSHR6eGFSckxrdjZGenc9PVwiLFwibm9Cb3JkZXJcIjpcIlZ6eTZDNGRqdHBmTDJwVjVvWWNPUHc9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkZ2ZFBTLSsxdGxzVFoxY2lFbHN2eFE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcclxuXHJcbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XHJcblxyXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xyXG4gICAgICBzcmM6IHN0cmluZztcclxuICAgICAgYWx0OiBzdHJpbmc7XHJcbiAgICAgIGJhZGdlQ29udGVudD86IFJlYWN0Tm9kZTtcclxuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gICAgICBzaXplPzogU2l6ZTtcclxuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcclxuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGNsYXNzTmFtZSxcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIC4uLnByb3BzXHJcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XHJcbiAgICAgIHtiYWRnZUNvbnRlbnQgJiYgPEJ1dHRvbkJhZGdlPntiYWRnZUNvbnRlbnR9PC9CdXR0b25CYWRnZT59XHJcbiAgICA8L0NvbXBvbmVudD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIm1VaEM3WEJZZWhObDFmK041aFJPNEE9PVwiLFwic21hbGxcIjpcInNNUzFGZ00zd3dMZytMZ3V2Y1hEd2c9PVwiLFwibWVkaXVtXCI6XCJfMWpVODVtRVA1aWFXeW5jTExiOGxTQT09XCIsXCJsYXJnZVwiOlwiY0lnZ2dTMmY1UGFCQ0lUZnRzMHJBZz09XCIsXCJ4bGFyZ2VcIjpcIlQyemFvbXdMWUhReC1ZRi12RHR3SHc9PVwiLFwicm91bmRlZFwiOlwiRk1BaDZnc0ZSclVmRi1DK2h4RkpTQT09XCIsXCJ0b3BPZmZzZXRcIjpcInlZdnJJbVFaeXBLdEowY2IraEVkV1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkVpTFFVZStCRDh1YnhkaitKUXVIenc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfMHFITklSc20rTVI5cnlYcEptRU5RUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJMbUlNbHh2cWtSamlJZ1lMSHhhWkJnPT1cIixcImludmVydGVkXCI6XCJCYytSaDZCOTcrNzRqa2VNZEN0cnpnPT1cIixcIm5vU2hhZG93XCI6XCJpR0dDR2lmMnlTY01JU0RrLTJta0ZRPT1cIixcIm5vQm9yZGVyXCI6XCJkbmpuMW9GdE5WRk4yZlJXbUtrWjNBPT1cIixcInRyYW5zcGFyZW50XCI6XCJad2lGMHU2S1RKRGd3UkM0V1NMM3JBPT1cIixcImRpc2FibGVkXCI6XCJtY1pMSnpUN1ZzN2JsUTlSeHc3UlV3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xyXG4gIGFsdD86IHN0cmluZztcclxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgc3JjV2lkdGg/OiBudW1iZXI7XHJcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xyXG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIixcclxuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCJcclxufTtcclxuXHJcbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIHNyY1dpZHRoLFxyXG4gIHNyY0hlaWdodCxcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXHJcbiAgZGVjb2Rpbmc9IFwiYXV0b1wiLFxyXG4gIGxvYWRpbmc9IFwiZWFnZXJcIlxyXG59OiBJbWFnZVByb3BzKSB7XHJcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gKFxyXG4gICAgPGltZ1xyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XHJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXHJcbiAgICAgIGFsdD17YWx0fVxyXG4gICAgICBzcmM9e3NyY31cclxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxyXG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cclxuICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxyXG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgLz5cclxuICApO1xyXG5cclxuICByZXR1cm4gY2hpbGRyZW4gPyAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxyXG4gICAgPlxyXG4gICAgICB7aW1hZ2VFbGVtZW50fVxyXG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxyXG4gICAgPC9kaXY+XHJcbiAgKSA6IChcclxuICAgIGltYWdlRWxlbWVudFxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzlnUVNSLStncW81ckR2V1BtUW9BZVE9PVwiLFwiaGFzT3ZlcmxheVwiOlwiaWkzKzZLK0ZXNFlqZVFGbS1JTjNzQT09XCIsXCJvdmVybGF5XCI6XCJfMDBFeE5jM0t3K0hPZlRDRmEzNEdJdz09XCIsXCJpbWFnZVwiOlwicndENXJIY1pGUk5hNGRIbzZqM0p5UT09XCIsXCJjb3ZlclwiOlwiXzZBYU4xVDZTWTZFZWorRmFRdGE0Mmc9PVwiLFwiY29udGFpblwiOlwiRVFEa1AwRjV6ekppdEY4dU82SCttQT09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJHQktQa2M4cnN5alVWdUNwMU9sQm9RPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfNVN6d1NKKzZaNFItWWExMWd3THJTUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGhlYWRlcj86IHN0cmluZztcclxuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXcoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBjb250YWluZXJSZWYsXHJcbiAgaGVhZGVyLFxyXG4gIGhlYWRlckFjdGlvbnMsXHJcbn06IExpc3RWaWV3UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxyXG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxyXG4gICAgICAgICAge2hlYWRlciAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9PntoZWFkZXJ9PC9oMz59XHJcbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PntjaGlsZHJlbn08L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFjdGl2ZSA9IGZhbHNlLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICBhbGlnbiA9IFwiY2VudGVyXCIsXHJcbiAgb25DbGljayA9ICgpID0+IHt9LFxyXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cclxuICAgICAgPEJ1dHRvblxyXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XHJcbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxyXG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxyXG4gICAgICAgIGFsaWduPXthbGlnbn1cclxuICAgICAgICBzaXplPXtzaXplfVxyXG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcclxuICAgICAgICBub1NoYWRvd1xyXG4gICAgICAgIG5vQm9yZGVyXHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XHJcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cclxuICB8IHtcclxuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcclxuICAgICAgYWN0aXZlOiBib29sZWFuO1xyXG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcclxuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xyXG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gICAgICBzaXplOiBTaXplO1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBhY3RpdmUgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICAuLi5wcm9wc1xyXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XHJcbiAgICAgIDxCdXR0b25MaW5rXHJcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cclxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxyXG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cclxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cclxuICAgICAgICBhbGlnbj17YWxpZ259XHJcbiAgICAgICAgc2l6ZT17c2l6ZX1cclxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XHJcbiAgICAgICAgbm9TaGFkb3dcclxuICAgICAgICBub0JvcmRlclxyXG4gICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgPlxyXG4gICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgPC9CdXR0b25MaW5rPlxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIGlzRml4ZWQ/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gT3ZlcmxheSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgaXNGaXhlZCA9IGZhbHNlLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxufTogT3ZlcmxheVByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkVJQjktbDU4Z0MzWnZ0Vzh2dFVBTEE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkNNMS1uM3NHOFlOZDczcUpWWE0yMmc9PVwiLFwiZml4ZWRcIjpcIm9PMWlUTmxQamRhMWZqcllleUx1VUE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcclxuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB0eXBlPzogVGV4dElucHV0VHlwZTtcclxuICBzaXplPzogU2l6ZTtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcclxuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIFRleHRJbnB1dCh7XHJcbiAgbGFiZWwsXHJcbiAgb25DaGFuZ2UsXHJcbiAgb25CbHVyLFxyXG4gIG9uS2V5RG93bixcclxuICBwbGFjZWhvbGRlcixcclxuICB2YWx1ZSxcclxuICBuYW1lLFxyXG4gIGlucHV0UmVmLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUgPSBcInRleHRcIixcclxuICBhdXRvRm9jdXMgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG59OiBUZXh0SW5wdXRQcm9wcykge1xyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICBpZiAob25DaGFuZ2UpIHtcclxuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgW29uQ2hhbmdlXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcclxuICAgIDxpbnB1dFxyXG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcclxuICAgICAgcmVmPXtpbnB1dFJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRleHRJbnB1dCwgc3R5bGVzW3NpemVdLCB7W3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyfV0pfVxyXG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICBvbkJsdXI9e29uQmx1cn1cclxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XHJcbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cclxuICAgICAgbmFtZT17bmFtZX1cclxuICAgICAgdHlwZT17dHlwZX1cclxuICAgICAgdmFsdWU9e3ZhbHVlfVxyXG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgIC8+XHJcbiAgKTtcclxuICBpZiAobGFiZWwpIHtcclxuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiaDZQWUpBenl0Vk9rOUJlSzVaMCtrZz09XCIsXCJzbWFsbFwiOlwiVVhuLUJDVmc4MXlNZDhGb1VmeEtTQT09XCIsXCJtZWRpdW1cIjpcIl80YWlQNmd4TkhocldiYWM0azFnclV3PT1cIixcImxhcmdlXCI6XCJNbG5QWFlPVXlRN2hnSTdzdzFvMHhBPT1cIixcInhsYXJnZVwiOlwiSEdCdUtKYTlYanhCOHVWaEtvcDAzQT09XCIsXCJub0JvcmRlclwiOlwic1BuU0NHVU5aWHJvRWxTUVIxOTNHUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgVG9hc3RQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XHJcbn07XHJcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxyXG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiXzItWHUyc1pNdk45dGdEcytpeUxjOVE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xyXG5cclxuLyoqXHJcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XHJcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcclxuICpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcclxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxyXG4gKi9cclxuXHJcbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIGxheW91dD86IExheW91dDtcclxuICBhdXRvUGxheT86IGJvb2xlYW47XHJcbiAgbG9vcD86IGJvb2xlYW47XHJcbiAgbXV0ZWQ/OiBib29sZWFuO1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgcG9zdGVyPzogc3RyaW5nO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gVmlkZW8oe1xyXG4gIHNyYyxcclxuICB0eXBlLFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBwb3N0ZXIsXHJcbiAgbXV0ZWQgPSB0cnVlLFxyXG4gIGxvb3AgPSB0cnVlLFxyXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcclxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcclxufTogVmlkZW9Qcm9wcykge1xyXG4gIHJldHVybiBjaGlsZHJlbiA/IChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XHJcbiAgICA+XHJcbiAgICAgIDx2aWRlb1xyXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxyXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XHJcbiAgICAgICAgbXV0ZWQ9e211dGVkfVxyXG4gICAgICAgIGxvb3A9e2xvb3B9XHJcbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxyXG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxyXG4gICAgICAgIHBsYXlzSW5saW5lXHJcbiAgICAgID5cclxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XHJcbiAgICAgIDwvdmlkZW8+XHJcbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XHJcbiAgICA8L2Rpdj5cclxuICApIDogKFxyXG4gICAgPHZpZGVvXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cclxuICAgICAgbXV0ZWQ9e211dGVkfVxyXG4gICAgICBsb29wPXtsb29wfVxyXG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XHJcbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxyXG4gICAgICBwbGF5c0lubGluZVxyXG4gICAgPlxyXG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XHJcbiAgICA8L3ZpZGVvPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidWxXRS1FcHI4NUYwbVV0N08xZ1VUUT09XCIsXCJoYXNPdmVybGF5XCI6XCJ6Szd1MW5ramM4eDdZREFmWVFDVHB3PT1cIixcInZpZGVvXCI6XCJmUjRENTZMZmR1b0JXLWZpbWZiVDB3PT1cIixcImNvdmVyXCI6XCJWWFFzNFBVbldHeXc1Nmc2MFp0ZldnPT1cIixcImNvbnRhaW5cIjpcImd4ZmxVek80cnFDQkFHdXpzWUVJZXc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSS02M0ttNE5ZMVc0UWdNaGZnVTVNZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwidk5OaEpsZ0lUTStvbmY3emR6YXVmZz09XCIsXCJvdmVybGF5XCI6XCJ3eHVsN1VVWmxtYXJGODZTR3JkLXR3PT1cIn07IiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XHJcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xyXG5cclxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xyXG5cclxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XHJcblxyXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcclxuXHJcbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcclxuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xyXG4gIG51bWJlcjogbnVtYmVyO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxyXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7XHJcbiAgICBjb25zdCBlbWl0TnVtYmVyID1cclxuICAgICAgKG5ld051bWJlcjogbnVtYmVyKSA9PlxyXG4gICAgICAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcclxuICAgICAgfTtcclxuXHJcbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXHJcbiAgICAgIC5maWxsKDApXHJcbiAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgICAgICBub0JvcmRlclxyXG4gICAgICAgICAgICBub1NoYWRvd1xyXG4gICAgICAgICAgICBvbkNsaWNrPXtlbWl0TnVtYmVyKGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IGRhdGEtdGVzdGlkPVwibnVtcGFkXCIgcmVmPXtyZWZ9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XHJcbiAgICAgICAgICB7TnVtcGFkS2V5c31cclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgICAgICBub0JvcmRlclxyXG4gICAgICAgICAgICBub1NoYWRvd1xyXG4gICAgICAgICAgICB0cmFuc3BhcmVudFxyXG4gICAgICAgICAgICBvbkNsaWNrPXtlbWl0TnVtYmVyKE1hdGguZmxvb3IobnVtYmVyIC8gMTApKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbik7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJQZU8rMnBCSUxtR2h1WGYrbVFQSkNnPT1cIixcIm51bWJlcnNcIjpcIl8zK1k4RGRPNHZCSkp0T09xUkJodHFnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIHBvc3NpYmx5IGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG52YXIgVU5ERUZJTkVEID0gKCAvKiNfX05PSU5MSU5FX18qL25vb3AoKSk7XG52YXIgT0JKRUNUID0gT2JqZWN0O1xudmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IFVOREVGSU5FRDsgfTtcbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09ICdmdW5jdGlvbic7IH07XG52YXIgbWVyZ2VPYmplY3RzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIE9CSkVDVC5hc3NpZ24oe30sIGEsIGIpOyB9O1xudmFyIFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbnZhciBoYXNXaW5kb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7IH07XG52YXIgaGFzRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDsgfTtcbnZhciBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhhc1dpbmRvdygpICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxudmFyIHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxudmFyIGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2libGUuXG52YXIgc3RhYmxlSGFzaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFpc1VuZGVmaW5lZCgoaW5kZXggPSBrZXlzLnBvcCgpKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlXG4gICAgICAgICAgICA/IGFyZy50b0pTT04oKVxuICAgICAgICAgICAgOiB0eXBlID09ICdzeW1ib2wnXG4gICAgICAgICAgICAgICAgPyBhcmcudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogdHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGFyZylcbiAgICAgICAgICAgICAgICAgICAgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmsgYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovXG52YXIgb25saW5lID0gdHJ1ZTtcbnZhciBpc09ubGluZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ubGluZTsgfTtcbnZhciBoYXNXaW4gPSBoYXNXaW5kb3coKTtcbnZhciBoYXNEb2MgPSBoYXNEb2N1bWVudCgpO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbnZhciBvbldpbmRvd0V2ZW50ID0gaGFzV2luICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyXG4gICAgPyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbiAgICA6IG5vb3A7XG52YXIgb25Eb2N1bWVudEV2ZW50ID0gaGFzRG9jID8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGRvY3VtZW50KSA6IG5vb3A7XG52YXIgb2ZmV2luZG93RXZlbnQgPSBoYXNXaW4gJiYgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICA/IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuICAgIDogbm9vcDtcbnZhciBvZmZEb2N1bWVudEV2ZW50ID0gaGFzRG9jXG4gICAgPyBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoZG9jdW1lbnQpXG4gICAgOiBub29wO1xudmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmlzaWJpbGl0eVN0YXRlID0gaGFzRG9jICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbnZhciBpbml0Rm9jdXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgb25Eb2N1bWVudEV2ZW50KCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZkRvY3VtZW50RXZlbnQoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbnZhciBpbml0UmVjb25uZWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIHZhciBvbk9ubGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIHZhciBvbk9mZmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbnZhciBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmU6IGlzT25saW5lLFxuICAgIGlzVmlzaWJsZTogaXNWaXNpYmxlXG59O1xudmFyIGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1czogaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Q6IGluaXRSZWNvbm5lY3Rcbn07XG5cbnZhciBJU19TRVJWRVIgPSAhaGFzV2luZG93KCkgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIHJBRiA9IGZ1bmN0aW9uIChmKSB7XG4gICAgcmV0dXJuIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG59O1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxudmFyIG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbnZhciBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiZcbiAgICBuYXZpZ2F0b3JDb25uZWN0aW9uICYmXG4gICAgKFsnc2xvdy0yZycsICcyZyddLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHxcbiAgICAgICAgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBbXS5jb25jYXQoa2V5KTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID1cbiAgICAgICAgdHlwZW9mIGtleSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgIDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpXG4gICAgICAgICAgICAgICAgPyBzdGFibGVIYXNoKGtleSlcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgIHZhciBpbmZvS2V5ID0ga2V5ID8gJyRzd3IkJyArIGtleSA6ICcnO1xuICAgIHJldHVybiBba2V5LCBhcmdzLCBpbmZvS2V5XTtcbn07XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbnZhciBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbnZhciBGT0NVU19FVkVOVCA9IDA7XG52YXIgUkVDT05ORUNUX0VWRU5UID0gMTtcbnZhciBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgYnJvYWRjYXN0U3RhdGUgPSBmdW5jdGlvbiAoY2FjaGUsIGtleSwgZGF0YSwgZXJyb3IsIGlzVmFsaWRhdGluZywgcmV2YWxpZGF0ZSwgYnJvYWRjYXN0KSB7XG4gICAgaWYgKGJyb2FkY2FzdCA9PT0gdm9pZCAwKSB7IGJyb2FkY2FzdCA9IHRydWU7IH1cbiAgICB2YXIgX2EgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpLCBFVkVOVF9SRVZBTElEQVRPUlMgPSBfYVswXSwgU1RBVEVfVVBEQVRFUlMgPSBfYVsxXSwgRkVUQ0ggPSBfYVszXTtcbiAgICB2YXIgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgdmFyIHVwZGF0ZXJzID0gU1RBVEVfVVBEQVRFUlNba2V5XTtcbiAgICAvLyBDYWNoZSB3YXMgcG9wdWxhdGVkLCB1cGRhdGUgc3RhdGVzIG9mIGFsbCBob29rcy5cbiAgICBpZiAoYnJvYWRjYXN0ICYmIHVwZGF0ZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHVwZGF0ZXJzW2ldKGRhdGEsIGVycm9yLCBpc1ZhbGlkYXRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGFsc28gbmVlZCB0byByZXZhbGlkYXRlLCBvbmx5IGRvIGl0IGZvciB0aGUgZmlyc3QgaG9vay5cbiAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxudmFyIF9fdGltZXN0YW1wID0gMDtcbnZhciBnZXRUaW1lc3RhbXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiArK19fdGltZXN0YW1wOyB9O1xuXG52YXIgaW50ZXJuYWxNdXRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0cywgb3B0aW9ucywgcG9wdWxhdGVDYWNoZSwgcmV2YWxpZGF0ZSwgcm9sbGJhY2tPbkVycm9yLCBjdXN0b21PcHRpbWlzdGljRGF0YSwgX2EsIGtleSwga2V5SW5mbywgX2IsIE1VVEFUSU9OLCBkYXRhLCBlcnJvciwgYmVmb3JlTXV0YXRpb25UcywgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEsIHJvbGxiYWNrRGF0YSwgb3B0aW1pc3RpY0RhdGEsIHJlcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBhcmdzWzBdLCBfa2V5ID0gYXJnc1sxXSwgX2RhdGEgPSBhcmdzWzJdLCBfb3B0cyA9IGFyZ3NbM107XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHsgcmV2YWxpZGF0ZTogX29wdHMgfSA6IF9vcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gaXNVbmRlZmluZWQob3B0aW9ucy5wb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrT25FcnJvciA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tT3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgICAgICAgICBfYSA9IHNlcmlhbGl6ZShfa2V5KSwga2V5ID0gX2FbMF0sIGtleUluZm8gPSBfYVsyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIF9iID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgTVVUQVRJT04gPSBfYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBjYWNoZS5nZXQoa2V5KSwgVU5ERUZJTkVELCBVTkRFRklORUQsIHJldmFsaWRhdGUsIHRydWUpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtiZWZvcmVNdXRhdGlvblRzLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQoY3VzdG9tT3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByb2xsYmFja0RhdGEgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24oY3VzdG9tT3B0aW1pc3RpY0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXN0b21PcHRpbWlzdGljRGF0YShyb2xsYmFja0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXN0b21PcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjYWNoZS5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGRhdGEuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm9yICYmIGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByb2xsYmFja0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBvciByZXNldCB0aGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5SW5mbywgbWVyZ2VPYmplY3RzKGNhY2hlLmdldChrZXlJbmZvKSwgeyBlcnJvcjogZXJyb3IgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICAgICAgICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIGRhdGEsIGVycm9yLCBVTkRFRklORUQsIHJldmFsaWRhdGUsICEhcG9wdWxhdGVDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXMgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbnZhciByZXZhbGlkYXRlQWxsS2V5cyA9IGZ1bmN0aW9uIChyZXZhbGlkYXRvcnMsIHR5cGUpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmV2YWxpZGF0b3JzKSB7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSlcbiAgICAgICAgICAgIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG52YXIgaW5pdENhY2hlID0gZnVuY3Rpb24gKHByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gUHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgdmFyIG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgdmFyIEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICB2YXIgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgdmFyIHVubW91bnQgPSBub29wO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW0VWRU5UX1JFVkFMSURBVE9SUywge30sIHt9LCB7fSwgbXV0YXRlXSk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgLy8gd2UgaW50ZW50aW9uYWxseSBwdXQgYSBkZWxheSAoc2V0VGltZW91dCkgaGVyZSB0byBtYWtlIHN1cmUgdGhleSBhcmVcbiAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBwb3NzaWJseSBiZVxuICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgLy8gVGhpcyBhdm9pZHMgc29tZSB1bm5lY2Vzc2FyeSByZXZhbGlkYXRpb25zIHN1Y2ggYXNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgdmFyIHJlbGVhc2VGb2N1c18xID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICB2YXIgcmVsZWFzZVJlY29ubmVjdF8xID0gb3B0cy5pbml0UmVjb25uZWN0KHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIFJFQ09OTkVDVF9FVkVOVCkpKTtcbiAgICAgICAgICAgIHVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzXzEgJiYgcmVsZWFzZUZvY3VzXzEoKTtcbiAgICAgICAgICAgICAgICByZWxlYXNlUmVjb25uZWN0XzEgJiYgcmVsZWFzZVJlY29ubmVjdF8xKCk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gc3RvcmFnZSB0b28gYmVjYXVzZSBpdCdzIGEgc2lkZS1lZmZlY3QuIE90aGVyd2lzZSB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgcmUtcmVnaXN0ZXIgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbcHJvdmlkZXIsIG11dGF0ZSwgdW5tb3VudF07XG4gICAgfVxuICAgIHJldHVybiBbcHJvdmlkZXIsIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1dO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbnZhciBvbkVycm9yUmV0cnkgPSBmdW5jdGlvbiAoXywgX18sIGNvbmZpZywgcmV2YWxpZGF0ZSwgb3B0cykge1xuICAgIHZhciBtYXhSZXRyeUNvdW50ID0gY29uZmlnLmVycm9yUmV0cnlDb3VudDtcbiAgICB2YXIgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIHZhciB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICpcbiAgICAgICAgKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbi8vIERlZmF1bHQgY2FjaGUgcHJvdmlkZXJcbnZhciBfYSA9IGluaXRDYWNoZShuZXcgTWFwKCkpLCBjYWNoZSA9IF9hWzBdLCBtdXRhdGUgPSBfYVsxXTtcbi8vIERlZmF1bHQgY29uZmlnXG52YXIgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnk6IG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZTogZnVuY3Rpb24gKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gICAgICAgIHJldHVybiBzdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuICAgIH0sXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBtdXRhdGU6IG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIFxuLy8gdXNlIHdlYiBwcmVzZXQgYnkgZGVmYXVsdFxucHJlc2V0KTtcblxudmFyIG1lcmdlQ29uZmlncyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBoZXJlLlxuICAgIHZhciB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICB2YXIgdTEgPSBhLnVzZSwgZjEgPSBhLmZhbGxiYWNrO1xuICAgICAgICB2YXIgdTIgPSBiLnVzZSwgZjIgPSBiLmZhbGxiYWNrO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbnZhciBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgU1dSQ29uZmlnJDEgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAvLyBFeHRlbmQgcGFyZW50IGNvbnRleHQgdmFsdWVzIGFuZCBtaWRkbGV3YXJlLlxuICAgIHZhciBleHRlbmRlZENvbmZpZyA9IG1lcmdlQ29uZmlncyh1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpLCB2YWx1ZSk7XG4gICAgLy8gU2hvdWxkIG5vdCB1c2UgdGhlIGluaGVyaXRlZCBwcm92aWRlci5cbiAgICB2YXIgcHJvdmlkZXIgPSB2YWx1ZSAmJiB2YWx1ZS5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIHZhciBjYWNoZUNvbnRleHQgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlclxuICAgICAgICAgICAgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCB2YWx1ZSlcbiAgICAgICAgICAgIDogVU5ERUZJTkVEO1xuICAgIH0pWzBdO1xuICAgIC8vIE92ZXJyaWRlIHRoZSBjYWNoZSBpZiBhIG5ldyBwcm92aWRlciBpcyBnaXZlbi5cbiAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLmNhY2hlID0gY2FjaGVDb250ZXh0WzBdO1xuICAgICAgICBleHRlbmRlZENvbmZpZy5tdXRhdGUgPSBjYWNoZUNvbnRleHRbMV07XG4gICAgfVxuICAgIC8vIFVuc3Vic2NyaWJlIGV2ZW50cy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjYWNoZUNvbnRleHQgPyBjYWNoZUNvbnRleHRbMl0gOiBVTkRFRklORUQpOyB9LCBbXSk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoU1dSQ29uZmlnQ29udGV4dC5Qcm92aWRlciwgbWVyZ2VPYmplY3RzKHByb3BzLCB7XG4gICAgICAgIHZhbHVlOiBleHRlbmRlZENvbmZpZ1xuICAgIH0pKTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovXG52YXIgdXNlU3RhdGVXaXRoRGVwcyA9IGZ1bmN0aW9uIChzdGF0ZSwgdW5tb3VudGVkUmVmKSB7XG4gICAgdmFyIHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIHZhciBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3Igb3IgaXNWYWxpZGF0aW5nKSBpcyBhY2Nlc3NlZCBieSB0aGUgcmVuZGVyXG4gICAgLy8gZnVuY3Rpb24sIHdlIG1hcmsgdGhlIHByb3BlcnR5IGFzIGEgZGVwZW5kZW5jeSBzbyBpZiBpdCBpcyB1cGRhdGVkIGFnYWluXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSwgd2UgdHJpZ2dlciBhIHJlcmVuZGVyLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBrbm93biBhcyBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICAgIHZhciBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBUbyBjaGFuZ2Ugc3RhdGVSZWYsIHBhc3MgdGhlIHZhbHVlcyBleHBsaWNpdGx5IHRvIHNldFN0YXRlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICAgKiAgIGVycm9yOiB1bmRlZmluZWQgLy8gc2V0IGVycm9yIHRvIHVuZGVmaW5lZFxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAgICogICBlcnJvcjogZXJyIC8vIHNldCBlcnJvciB0byBlcnJcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHZhciBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIHZhciBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgZm9yICh2YXIgXyBpbiBwYXlsb2FkKSB7XG4gICAgICAgICAgICB2YXIgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlcmVuZGVyKHt9KTtcbiAgICAgICAgfVxuICAgIH0sIFxuICAgIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgc3RhdGUgcmVmZXJlbmNlLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGF0ZVJlZi5jdXJyZW50ID0gc3RhdGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdGF0ZVJlZiwgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCwgc2V0U3RhdGVdO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSlcbiAgICAgICAgPyBbYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSB8fCB7fV1cbiAgICAgICAgOiBbYXJnc1swXSwgbnVsbCwgKGFyZ3NbMV0gPT09IG51bGwgPyBhcmdzWzJdIDogYXJnc1sxXSkgfHwge31dO1xufTtcblxudmFyIHVzZVNXUkNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWcsIHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCkpO1xufTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxudmFyIHdpdGhBcmdzID0gZnVuY3Rpb24gKGhvb2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncygpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgYW5kIGluaGVyaXRlZCBjb25maWd1cmF0aW9uLlxuICAgICAgICB2YXIgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgdmFyIF9hID0gbm9ybWFsaXplKGFyZ3MpLCBrZXkgPSBfYVswXSwgZm4gPSBfYVsxXSwgX2NvbmZpZyA9IF9hWzJdO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgdmFyIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgdmFyIG5leHQgPSBob29rO1xuICAgICAgICB2YXIgdXNlID0gY29uZmlnLnVzZTtcbiAgICAgICAgaWYgKHVzZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHVzZS5sZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IHVzZVtpXShuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vLyBBZGQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGxpc3Qgb2Yga2V5ZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZXR1cm5cbi8vIHRoZSB1bnN1YnNjcmliZSBmdW5jdGlvbi5cbnZhciBzdWJzY3JpYmVDYWxsYmFjayA9IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spIHtcbiAgICB2YXIga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxudmFyIFdJVEhfREVEVVBFID0geyBkZWR1cGU6IHRydWUgfTtcbnZhciB1c2VTV1JIYW5kbGVyID0gZnVuY3Rpb24gKF9rZXksIGZldGNoZXIsIGNvbmZpZykge1xuICAgIHZhciBjYWNoZSA9IGNvbmZpZy5jYWNoZSwgY29tcGFyZSA9IGNvbmZpZy5jb21wYXJlLCBmYWxsYmFja0RhdGEgPSBjb25maWcuZmFsbGJhY2tEYXRhLCBzdXNwZW5zZSA9IGNvbmZpZy5zdXNwZW5zZSwgcmV2YWxpZGF0ZU9uTW91bnQgPSBjb25maWcucmV2YWxpZGF0ZU9uTW91bnQsIHJlZnJlc2hJbnRlcnZhbCA9IGNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuID0gY29uZmlnLnJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUgPSBjb25maWcucmVmcmVzaFdoZW5PZmZsaW5lO1xuICAgIHZhciBfYSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIEVWRU5UX1JFVkFMSURBVE9SUyA9IF9hWzBdLCBTVEFURV9VUERBVEVSUyA9IF9hWzFdLCBNVVRBVElPTiA9IF9hWzJdLCBGRVRDSCA9IF9hWzNdO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnc2AgaXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgdmFyIF9iID0gc2VyaWFsaXplKF9rZXkpLCBrZXkgPSBfYlswXSwgZm5BcmdzID0gX2JbMV0sIGtleUluZm8gPSBfYlsyXTtcbiAgICAvLyBJZiBpdCdzIHRoZSBpbml0aWFsIHJlbmRlciBvZiB0aGlzIGhvb2suXG4gICAgdmFyIGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICB2YXIgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIHZhciBrZXlSZWYgPSB1c2VSZWYoa2V5KTtcbiAgICB2YXIgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICB2YXIgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgdmFyIGdldENvbmZpZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZ1JlZi5jdXJyZW50OyB9O1xuICAgIHZhciBpc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7IH07XG4gICAgdmFyIHBhdGNoRmV0Y2hJbmZvID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLnNldChrZXlJbmZvLCBtZXJnZU9iamVjdHMoY2FjaGUuZ2V0KGtleUluZm8pLCBpbmZvKSk7XG4gICAgfTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgdmFyIGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKVxuICAgICAgICA/IGNvbmZpZy5mYWxsYmFja1trZXldXG4gICAgICAgIDogZmFsbGJhY2tEYXRhO1xuICAgIHZhciBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkKSA/IGZhbGxiYWNrIDogY2FjaGVkO1xuICAgIHZhciBpbmZvID0gY2FjaGUuZ2V0KGtleUluZm8pIHx8IHt9O1xuICAgIHZhciBlcnJvciA9IGluZm8uZXJyb3I7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICB2YXIgc2hvdWxkUmV2YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSlcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG9uIG1vdW50IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKVxuICAgICAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiBjb25maWcucmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSBvbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9O1xuICAgIC8vIFJlc29sdmUgdGhlIGN1cnJlbnQgdmFsaWRhdGluZyBzdGF0ZS5cbiAgICB2YXIgcmVzb2x2ZVZhbGlkYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgha2V5IHx8ICFmZXRjaGVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5pc1ZhbGlkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gSWYgaXQncyBub3QgbW91bnRlZCB5ZXQgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIG9uIG1vdW50LCByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkUmV2YWxpZGF0ZSgpO1xuICAgIH07XG4gICAgdmFyIGlzVmFsaWRhdGluZyA9IHJlc29sdmVWYWxpZGF0aW5nKCk7XG4gICAgdmFyIF9jID0gdXNlU3RhdGVXaXRoRGVwcyh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICB9LCB1bm1vdW50ZWRSZWYpLCBzdGF0ZVJlZiA9IF9jWzBdLCBzdGF0ZURlcGVuZGVuY2llcyA9IF9jWzFdLCBzZXRTdGF0ZSA9IF9jWzJdO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIHZhciByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHJldmFsaWRhdGVPcHRzKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudEZldGNoZXIsIG5ld0RhdGEsIHN0YXJ0QXQsIGxvYWRpbmcsIG9wdHMsIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCwgaXNDdXJyZW50S2V5TW91bnRlZCwgY2xlYW51cFN0YXRlLCBuZXdTdGF0ZSwgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlLCBtdXRhdGlvbkluZm8sIGVycl8xO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRGZXRjaGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEtleU1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0geyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHsgaXNWYWxpZGF0aW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHNldCBzdGF0ZSBpZiBpdCdzIHNhZmUgKHN0aWxsIG1vdW50ZWQgd2l0aCB0aGUgc2FtZSBrZXkpLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoeyBpc1ZhbGlkYXRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlbGwgYWxsIG90aGVyIGhvb2tzIHRvIGNoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHN0YXRlUmVmLmN1cnJlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiAhY2FjaGUuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtjdXJyZW50RmV0Y2hlci5hcHBseSh2b2lkIDAsIGZuQXJncyksIGdldFRpbWVzdGFtcCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYSA9IEZFVENIW2tleV0sIG5ld0RhdGEgPSBfYVswXSwgc3RhcnRBdCA9IF9hWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBuZXdEYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCBuZXdEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIGFuZCBuZXdEYXRhIGFyZSBkZWVwbHkgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBzYWZlIHRvIGJyb2FkY2FzdCB0aGUgc3RhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IHN0YXRlUmVmLmN1cnJlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgYGJyb2Nhc3RTdGF0ZWAgaW52b2tlcyB0aGUgYG9uU3RhdGVVcGRhdGVgIGZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGFrZXMgY2FyZSBvZiBhdm9pZGluZyB0aGUgcmUtcmVuZGVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGdsb2JhbCBzdGF0ZSwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBrZXkgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL3B1bGwvMTA1OFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY2FjaGUuZ2V0KGtleSksIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBuZXdEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBlcnJvcjogZXJyXzEgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IGVycl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yKGVycl8xLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvciA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yKGVycl8xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBlIGlzIGFsd2F5cyBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvIHJldmFsaWRhdGUgd2hlbiByZWZvY3VzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yUmV0cnkoZXJyXzEsIGtleSwgY29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3QsIG5lZWQgdG8gdGVsbCBhbGwgb3RoZXIgaG9va3MgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZWlyIHN0YXRlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSAmJiBzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG5ld1N0YXRlLmRhdGEsIG5ld1N0YXRlLmVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRydWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgXG4gICAgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdzYCwgYGtleUluZm9gLFxuICAgIC8vIGFuZCBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBba2V5XSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSwgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgdmFyIGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgLy8gQnkgdXNpbmcgYGJpbmRgIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSByZXN0IGFyZ3VtZW50cy5cbiAgICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zNzE4MSwgd2UgaGF2ZSB0b1xuICAgIC8vIGNhc3QgaXQgdG8gYW55IGZvciBub3cuXG4gICAgaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIGNhY2hlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlSZWYuY3VycmVudDsgfSksIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZXlDaGFuZ2VkID0ga2V5ICE9PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2Ugc3RhdGUgdXBkYXRlciB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdXBkYXRlIGhvb2snc1xuICAgICAgICAvLyBpbnRlcm5hbCBzdGF0ZSBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgb25TdGF0ZVVwZGF0ZSA9IGZ1bmN0aW9uICh1cGRhdGVkRGF0YSwgdXBkYXRlZEVycm9yLCB1cGRhdGVkSXNWYWxpZGF0aW5nKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShtZXJnZU9iamVjdHMoe1xuICAgICAgICAgICAgICAgIGVycm9yOiB1cGRhdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB1cGRhdGVkSXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIFNpbmNlIGBzZXRTdGF0ZWAgb25seSBzaGFsbG93bHkgY29tcGFyZXMgc3RhdGVzLCB3ZSBkbyBhIGRlZXBcbiAgICAgICAgICAgIC8vIGNvbXBhcmlzb24gaGVyZS5cbiAgICAgICAgICAgIGNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCB1cGRhdGVkRGF0YSlcbiAgICAgICAgICAgICAgICA/IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVkRGF0YVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdmFyIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICB2YXIgb25SZXZhbGlkYXRlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IEZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmXG4gICAgICAgICAgICAgICAgICAgIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdW5zdWJVcGRhdGUgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIFNUQVRFX1VQREFURVJTLCBvblN0YXRlVXBkYXRlKTtcbiAgICAgICAgdmFyIHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIFdoZW4gYGtleWAgdXBkYXRlcywgcmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIC8vIGFuZCB0cmlnZ2VyIGEgcmVyZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoa2V5Q2hhbmdlZCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogaXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkUmV2YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViVXBkYXRlKCk7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtrZXksIHJldmFsaWRhdGVdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbClcbiAgICAgICAgICAgICAgICA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKVxuICAgICAgICAgICAgICAgIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZVJlZi5jdXJyZW50LmVycm9yICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJlxuICAgICAgICAgICAgICAgIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtyZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUsIHJldmFsaWRhdGVdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShkYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHQnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xudmFyIHVuc3RhYmxlX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlcmlhbGl6ZShrZXkpWzBdOyB9O1xudmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgbXV0YXRlLCB1bnN0YWJsZV9zZXJpYWxpemUsIHVzZVNXUkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjMgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAoIWtleXNJbmZvKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLmZpbHRlcihmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcbiAgICAgIHJldHVybiAhKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlLCBlbGVtZW50KSB7XG4gIGlmIChoYW5kbGVyLmVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50LCBlbGVtZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7XG4gIHZhciBjYXB0dXJlID0gZmFsc2U7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSBjYXB0dXJlID0gb3B0aW9uLmNhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5LFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICB9LCBjYXB0dXJlKTtcblxuICAgIGlmICghd2luTGlzdGVuZEZvY3VzKSB7XG4gICAgICB3aW5MaXN0ZW5kRm9jdXMgPSB0cnVlO1xuICAgICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgICAgfSwgY2FwdHVyZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9LCBjYXB0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHNob3J0Y3V0KSB7XG4gIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2FsbCc7XG4gIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSBfaGFuZGxlcnNba2V5XS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5zY29wZSA9PT0gc2NvcGUgJiYgaXRlbS5zaG9ydGN1dCA9PT0gc2hvcnRjdXQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLm1ldGhvZCkge1xuICAgICAgZGF0YS5tZXRob2QoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgdW5iaW5kOiB1bmJpbmQsXG4gIGtleU1hcDogX2tleU1hcCxcbiAgbW9kaWZpZXI6IF9tb2RpZmllcixcbiAgbW9kaWZpZXJNYXA6IG1vZGlmaWVyTWFwXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IHsgaG90a2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50KSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
|