diff --git a/main/main.bundle.js b/main/main.bundle.js index 04d644ae..bb3dd0d2 100644 --- a/main/main.bundle.js +++ b/main/main.bundle.js @@ -1,2 +1,2 @@ -(()=>{var n={800:(n,e,t)=>{"use strict";t.d(e,{Z:()=>h});var o=t(537),i=t.n(o),r=t(645),a=t.n(r),s=t(667),c=t.n(s),u=new URL(t(790),t.b),l=new URL(t(373),t.b),d=new URL(t(516),t.b),A=new URL(t(82),t.b),p=new URL(t(837),t.b),b=a()(i()),f=c()(u),g=c()(l),w=c()(d),m=c()(A),v=c()(p);b.push([n.id,":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url("+f+");\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url("+g+");\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url("+w+");\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url("+m+") !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url("+v+") !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n","",{version:3,sources:["webpack://./playground/style.css"],names:[],mappings:"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",sourcesContent:[":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url(../resources/chevron_right.svg);\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url(../resources/github_icon.svg);\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url(../resources/robot-off-outline.svg);\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url(../resources/robot-outline.svg) !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url(../resources/alert-circle-outline.svg) !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n"],sourceRoot:""}]);const h=b},645:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",o=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),o&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),o&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,o,i,r){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(o)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=r),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),i&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=i):l[4]="".concat(i)),e.push(l))}},e}},667:n=>{"use strict";n.exports=function(n,e){return e||(e={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),e.hash&&(n+=e.hash),/["'() \t\n]|(%20)/.test(n)||e.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},537:n=>{"use strict";n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),r="/*# ".concat(i," */"),a=t.sources.map((function(n){return"/*# sourceURL=".concat(t.sourceRoot||"").concat(n," */")}));return[e].concat(a).concat([r]).join("\n")}return[e].join("\n")}},379:n=>{"use strict";var e=[];function t(n){for(var t=-1,o=0;o{"use strict";var e={};n.exports=function(n,t){var o=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}},216:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},795:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var o="";t.supports&&(o+="@supports (".concat(t.supports,") {")),t.media&&(o+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(o+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),o+=t.css,i&&(o+="}"),t.media&&(o+="}"),t.supports&&(o+="}");var r=t.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(o,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},238:function(n,e,t){var o;!function(i,r){"use strict";var a="function",s="undefined",c="object",u="string",l="major",d="model",A="name",p="type",b="vendor",f="version",g="architecture",w="console",m="mobile",v="tablet",h="smarttv",E="wearable",C="embedded",x="Amazon",B="Apple",y="ASUS",k="BlackBerry",_="Browser",S="Chrome",T="Firefox",z="Google",P="Huawei",j="LG",q="Microsoft",L="Motorola",O="Opera",M="Samsung",W="Sharp",I="Sony",R="Xiaomi",N="Zebra",D="Facebook",Y="Chromium OS",U="Mac OS",F=function(n){for(var e={},t=0;t0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,l):this[s[0]]=s[1]:3===s.length?typeof s[1]!==a||s[1].exec&&s[1].test?this[s[0]]=l?l.replace(s[1],s[2]):r:this[s[0]]=l?s[1].call(this,l,s[2]):r:4===s.length&&(this[s[0]]=l?s[3].call(this,l.replace(s[1],s[2])):r):this[s]=l||r;d+=2}},X=function(n,e){for(var t in e)if(typeof e[t]===c&&e[t].length>0){for(var o=0;o2&&(n[d]="iPad",n[p]=v),n},this.getEngine=function(){var n={};return n[A]=r,n[f]=r,K.call(n,o,h.engine),n},this.getOS=function(){var n={};return n[A]=r,n[f]=r,K.call(n,o,h.os),E&&!n[A]&&w&&"Unknown"!=w.platform&&(n[A]=w.platform.replace(/chrome os/i,Y).replace(/macos/i,U)),n},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(n){return o=typeof n===u&&n.length>350?V(n,350):n,this},this.setUA(o),this};J.VERSION="1.0.35",J.BROWSER=F([A,f,l]),J.CPU=F([g]),J.DEVICE=F([d,b,p,w,m,h,v,E,C]),J.ENGINE=J.OS=F([A,f]),typeof e!==s?(n.exports&&(e=n.exports=J),e.UAParser=J):t.amdO?(o=function(){return J}.call(e,t,e,n))===r||(n.exports=o):typeof i!==s&&(i.UAParser=J);var Q=typeof i!==s&&(i.jQuery||i.Zepto);if(Q&&!Q.ua){var nn=new J;Q.ua=nn.getResult(),Q.ua.get=function(){return nn.getUA()},Q.ua.set=function(n){nn.setUA(n);var e=nn.getResult();for(var t in e)Q.ua[t]=e[t]}}}("object"==typeof window?window:this)},837:(n,e,t)=>{"use strict";n.exports=t.p+"bf468b98f99fe3cb600c.svg"},790:(n,e,t)=>{"use strict";n.exports=t.p+"cb3e629604702ef8bc66.svg"},373:(n,e,t)=>{"use strict";n.exports=t.p+"550985caaa8859d4b95f.svg"},516:(n,e,t)=>{"use strict";n.exports=t.p+"80392182d321c655d4d0.svg"},82:(n,e,t)=>{"use strict";n.exports=t.p+"52d88d31d700c20dcc04.svg"}},e={};function t(o){var i=e[o];if(void 0!==i)return i.exports;var r=e[o]={id:o,exports:{}};return n[o].call(r.exports,r,r.exports,t),r.exports}t.m=n,t.amdO={},t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var o in e)t.o(e,o)&&!t.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n;t.g.importScripts&&(n=t.g.location+"");var e=t.g.document;if(!n&&e&&(e.currentScript&&(n=e.currentScript.src),!n)){var o=e.getElementsByTagName("script");o.length&&(n=o[o.length-1].src)}if(!n)throw new Error("Automatic publicPath is not supported in this browser");n=n.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=n})(),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{"use strict";var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,e){n.__proto__=e}||function(n,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])},n(e,t)};function e(n,e,t,o){return new(t||(t=Promise))((function(i,r){function a(n){try{c(o.next(n))}catch(n){r(n)}}function s(n){try{c(o.throw(n))}catch(n){r(n)}}function c(n){var e;n.done?i(n.value):(e=n.value,e instanceof t?e:new t((function(n){n(e)}))).then(a,s)}c((o=o.apply(n,e||[])).next())}))}function o(n,e){var t,o,i,r,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(s){return function(c){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;r&&(r=0,s[0]&&(a=0)),a;)try{if(t=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,o=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=5?"chromium":z(["ApplePayError"in t,"CSSPrimitiveValue"in t,"Counter"in t,0===o.vendor.indexOf("Apple"),"getStorageUpdates"in o,"WebKitMediaKeys"in t])>=4?"webkit":z(["buildID"in navigator,"MozAppearance"in(null!==(e=null===(n=document.documentElement)||void 0===n?void 0:n.style)&&void 0!==e?e:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4?"gecko":"unknown"}function q(){var n,e=null===(n=navigator.userAgent)||void 0===n?void 0:n.toLowerCase();return _(e,"edg/")?"edge":_(e,"trident")||_(e,"msie")?"internet_explorer":_(e,"wechat")?"wechat":_(e,"firefox")?"firefox":_(e,"opera")||_(e,"opr")?"opera":_(e,"chrome")?"chrome":_(e,"safari")?"safari":"unknown"}function L(){var n=j(),e="chromium"===n,t="gecko"===n;if(!e&&!t)return!1;var o=window;return z(["onorientationchange"in o,"orientation"in o,e&&!("SharedWorker"in o),t&&/android/i.test(navigator.appVersion)])>=2}function O(){if(void 0===window.CSS)throw new B(-1,"window.CSS is undefined");return CSS.supports("-moz-appearance","auto")}function M(){return void 0!==document.hasFocus&&document.hasFocus()}function W(){if("iPad"===navigator.platform)return!0;var n=screen,e=n.width/n.height;return z(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,e>.65&&e<1.53])>=2}var I={android:L,browserKind:q,browserEngineKind:j,documentFocus:M,userAgent:function(){return navigator.userAgent},appVersion:function(){var n=navigator.appVersion;if(null==n)throw new B(-1,"navigator.appVersion is undefined");return n},rtt:function(){if(void 0===navigator.connection)throw new B(-1,"navigator.connection is undefined");if(void 0===navigator.connection.rtt)throw new B(-1,"navigator.connection.rtt is undefined");return navigator.connection.rtt},windowSize:function(){return{outerWidth:window.outerWidth,outerHeight:window.outerHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight}},pluginsLength:function(){if(void 0===navigator.plugins)throw new B(-1,"navigator.plugins is undefined");if(void 0===navigator.plugins.length)throw new B(-3,"navigator.plugins.length is undefined");return navigator.plugins.length},pluginsArray:function(){if(void 0===navigator.plugins)throw new B(-1,"navigator.plugins is undefined");if(void 0===window.PluginArray)throw new B(-1,"window.PluginArray is undefined");return navigator.plugins instanceof PluginArray},errorTrace:function(){try{null[0]()}catch(n){if(n instanceof Error&&null!=n.stack)return n.stack.toString()}throw new B(-3,"errorTrace signal unexpected behaviour")},productSub:function(){var n=navigator.productSub;if(void 0===n)throw new B(-1,"navigator.productSub is undefined");return n},windowExternal:function(){if(void 0===window.external)throw new B(-1,"window.external is undefined");var n=window.external;if("function"!=typeof n.toString)throw new B(-2,"window.external.toString is not a function");return n.toString()},mimeTypesConsistent:function(){if(void 0===navigator.mimeTypes)throw new B(-1,"navigator.mimeTypes is undefined");for(var n=navigator.mimeTypes,e=Object.getPrototypeOf(n)===MimeTypeArray.prototype,t=0;t=3||t.push(e.languages);else if("string"==typeof e.languages){var i=e.languages;i&&t.push(i.split(","))}return t},notificationPermissions:function(){return e(this,void 0,void 0,(function(){var n,e;return o(this,(function(t){switch(t.label){case 0:if(void 0===window.Notification)throw new B(-1,"window.Notification is undefined");if(void 0===navigator.permissions)throw new B(-1,"navigator.permissions is undefined");if("function"!=typeof(n=navigator.permissions).query)throw new B(-2,"navigator.permissions.query is not a function");t.label=1;case 1:return t.trys.push([1,3,,4]),[4,n.query({name:"notifications"})];case 2:return e=t.sent(),[2,"denied"===window.Notification.permission&&"prompt"===e.state];case 3:throw t.sent(),new B(-3,"notificationPermissions signal unexpected behaviour");case 4:return[2]}}))}))},documentElementKeys:function(){if(void 0===document.documentElement)throw new B(-1,"document.documentElement is undefined");var n=document.documentElement;if("function"!=typeof n.getAttributeNames)throw new B(-2,"document.documentElement.getAttributeNames is not a function");return n.getAttributeNames()},functionBind:function(){if(void 0===Function.prototype.bind)throw new B(-2,"Function.prototype.bind is undefined");return Function.prototype.bind.toString()},process:function(){if(void 0===window.process)throw new B(-1,"window.process is undefined");return window.process},distinctiveProps:function(){var n,e,t=((n={})[a]={window:["awesomium"]},n[s]={window:["RunPerfTest"]},n[c]={window:["CefSharp"]},n[u]={window:["emit"]},n[d]={window:["fmget_targets"]},n[A]={window:["geb"]},n[p]={window:["__nightmare","nightmare"]},n[b]={window:["__phantomas"]},n[f]={window:["callPhantom","_phantom"]},n[g]={window:["spawn"]},n[w]={window:["_Selenium_IDE_Recorder","_selenium","calledSelenium",/^([a-z]){3}_.*_(Array|Promise|Symbol)$/],document:["__selenium_evaluate","selenium-evaluate","__selenium_unwrapped"]},n[h]={window:["wdioElectron"]},n[E]={window:["webdriver","__webdriverFunc","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_WEBDRIVER_ELEM_CACHE","ChromeDriverw"],document:["__webdriver_script_fn","__driver_evaluate","__webdriver_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__fxdriver_unwrapped","__webdriver_script_fn","__webdriver_script_func","__webdriver_script_function","$cdc_asdjflasutopfhvcZLmcf","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor"]},n[C]={window:["domAutomation","domAutomationController"]},n),o={},r=S(window),l=[];for(e in void 0!==window.document&&(l=S(window.document)),t){var m=t[e];if(void 0!==m){var v=void 0!==m.window&&T.apply(void 0,i([r],m.window,!1)),x=!(void 0===m.document||!l.length)&&T.apply(void 0,i([l],m.document,!1));o[e]=v||x}}return o}},R=function(){function n(){this.components=void 0,this.detections=void 0}return n.prototype.getComponents=function(){return this.components},n.prototype.getDetections=function(){return this.detections},n.prototype.detect=function(){if(void 0===this.components)throw new Error("BotDetector.detect can't be called before BotDetector.collect");var n=function(n,e){var t={},o={bot:!1};for(var i in e){var r=(0,e[i])(n),a={bot:!1};"string"==typeof r?a={bot:!0,botKind:r}:r&&(a={bot:!0,botKind:x}),t[i]=a,a.bot&&(o=a)}return[t,o]}(this.components,P),e=n[0],t=n[1];return this.detections=e,t},n.prototype.collect=function(){return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return n=this,[4,y(I)];case 1:return n.components=e.sent(),[2,this.components]}}))}))},n}();const N=R;function D(n){var t=(void 0===n?{}:n).monitoring,i=void 0===t||t;return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return i&&function(){if(!(window.__fpjs_d_m||Math.random()>=.001))try{var n=new XMLHttpRequest;n.open("get","https://m1.openfpcdn.io/botd/v".concat(r.i8,"/npm-monitoring"),!0),n.send()}catch(n){console.error(n)}}(),[4,(n=new N).collect()];case 1:return e.sent(),[2,n]}}))}))}var Y=t(238);function U(){var n=(new Y.UAParser).getBrowser().version;if(void 0!==n)return{major:parseInt(n.split(".")[0]),minor:parseInt(n.split(".")[1])}}var F=t(379),Z=t.n(F),H=t(795),V=t.n(H),K=t(569),X=t.n(K),G=t(565),$=t.n(G),J=t(216),Q=t.n(J),nn=t(589),en=t.n(nn),tn=t(800),on={};on.styleTagTransform=en(),on.setAttributes=$(),on.insert=X().bind(null,"head"),on.domAPI=V(),on.insertStyleElement=Q(),Z()(tn.Z,on),tn.Z&&tn.Z.locals&&tn.Z.locals;var rn=void 0,an=function(){return e(void 0,void 0,void 0,(function(){var n;return o(this,(function(t){switch(t.label){case 0:return[4,e(void 0,void 0,void 0,(function(){var n,e,t,i,r,a,s,c,u,l;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),n=performance.now(),[4,D()];case 1:return e=o.sent(),t=performance.now()-n,i=e.detect(),r=performance.now()-n,a=null!==(u=e.getComponents())&&void 0!==u?u:{},s=null!==(l=e.getDetections())&&void 0!==l?l:{},c={browserEngineKind:j(),browserKind:q(),browserVersion:U(),documentFocus:M(),mozAppearanceSupport:O(),isAndroid:L(),isDesktopWebKit:(d=window,A=d.HTMLElement,p=d.Document,z(["safari"in d,!("ongestureend"in d),!("TouchEvent"in d),!("orientation"in d),A&&!("autocapitalize"in A.prototype),p&&"pointerLockElement"in p.prototype])>=4),isIPad:W()},[2,{isError:!1,collectionTime:t,detectionTime:r,detectionResult:i,detectedBot:(null==i?void 0:i.bot)?i.botKind:void 0,collectedData:a,detectorsResults:s,debugData:c}];case 2:return[2,{isError:!0,error:o.sent()}];case 3:return[2]}var d,A,p}))}))];case 1:return n=t.sent(),rn=n,function(n){var e=document.getElementById("result"),t=document.getElementById("result-text"),o=document.getElementById("collection-time"),i=document.getElementById("detection-time"),r=document.getElementById("detection-result"),a=document.getElementById("detectors"),s=document.getElementById("debug-data"),c=document.getElementById("collected-data"),u=document.getElementById("error-container"),l=document.getElementById("error-message");if(e.classList.remove("result-detected","result-error"),n.isError)return t.innerHTML="An error occured",e.classList.add("result-error"),u.classList.add("error-container-visible"),void(l.textContent=n.error.message);u.classList.remove("error-container-visible"),null!=n.detectedBot?(t.innerHTML="".concat(n.detectedBot," detected."),e.classList.add("result-detected")):t.innerHTML="You are not a bot.",o.textContent="".concat(n.collectionTime.toFixed(2),"ms"),i.textContent="".concat(n.detectionTime.toFixed(2),"ms"),r.textContent=JSON.stringify(n.detectionResult,null,4),a.textContent=JSON.stringify(n.detectorsResults,null,4),s.textContent=JSON.stringify(n.debugData,null,4),c.textContent=JSON.stringify(n.collectedData,null,4)}(n),[2]}}))}))};window.onload=function(){var n=document.getElementById("detect-button"),e=document.getElementById("copy-logs-button");n.addEventListener("click",(function(){an()})),e.addEventListener("click",(function(){navigator.clipboard.writeText(JSON.stringify(rn)).then((function(){alert("BotD logs copied to clipboard")}))})),an()}})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW1DLEVBQWVDLGlCQUFpQixTQUFTLFdBQ3JDdlUsVUFBVXdVLFVBQVVDLFVBQVUzZCxLQUFLQyxVQUFVbWIsS0FBVXRNLE1BQUssV0FDeEQ4TyxNQUFNLGdDQUNWLEdBQ0osSUFDQXZDLElBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9wbGF5Z3JvdW5kL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3VhLXBhcnNlci1qcy9zcmMvdWEtcGFyc2VyLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3R5cGVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvYXBpLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvcG9ueWZpbGxzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvbWlzYy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9hcHBfdmVyc2lvbi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kb2N1bWVudF9lbGVtZW50X2tleXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXZhbF9sZW5ndGgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZnVuY3Rpb25fYmluZC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9sYW5ndWFnZXNfaW5jb25zaXN0ZW5jeS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wbHVnaW5zX2luY29uc2lzdGVuY3kudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcHJvY2Vzcy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy91c2VyX2FnZW50LnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3JzL3dlYmRyaXZlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvd2luZG93X3NpemUudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvbWltZV90eXBlc19jb25zaXN0ZW5jZS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wcm9kdWN0X3N1Yi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvYnJvd3Nlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3VzZXJfYWdlbnQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2FwcF92ZXJzaW9uLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9ydHQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3dpbmRvd19zaXplLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wbHVnaW5zX2xlbmd0aC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3Byb2R1Y3Rfc3ViLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL21pbWVfdHlwZXNfY29uc2lzdGVuY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2V2YWxfbGVuZ3RoLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvd2ViZHJpdmVyLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9sYW5ndWFnZXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZG9jdW1lbnRfZWxlbWVudF9rZXlzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9mdW5jdGlvbl9iaW5kLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wcm9jZXNzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vdGVzdHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvc3R5bGUuY3NzP2RhNjIiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9naXRodWJfaWNvbi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuLi9yZXNvdXJjZXMvcm9ib3Qtb2ZmLW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL2FsZXJ0LWNpcmNsZS1vdXRsaW5lLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxuICAtLWFjY2VudC1jb2xvcjogcmdiKDI0MCwgNjgsIDUpO1xcbiAgLS1hY2NlbnQtZGFyay1jb2xvcjogcmdiKDE0MCwgMzksIDMpO1xcbiAgLS1lcnJvci1jb2xvcjogI2IzMjYxZTtcXG4gIC0tZm9udC1mYW1pbHk6ICdGaXJhIE1vbm8nLCBtb25vc3BhY2U7XFxuICAtLWZvbnQtZmFtaWx5LWNvbnNvbGFzOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2U7XFxufVxcblxcbmJvZHkge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBtYXJnaW46IDBweDtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjc7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLmNvbnRhaW5lciB7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gMTI4cHgpO1xcbiAgbWF4LXdpZHRoOiAxNTM2cHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuLm1lZGl1bS1jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4jbmF2YmFyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA5NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuI25hdmJhciBhIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4jbmF2YmFyIC5jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbiNuYXZiYXItY2hldnJvbiB7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuI25hdmJhciAubG9nby1yZWYge1xcbiAgd2lkdGg6IG1heC1jb250ZW50O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvIHtcXG4gIHdpZHRoOiAxOTZweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MDBweCkge1xcbiAgI25hdmJhciB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmNvbnRhaW5lciB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvLXJlZiB7XFxuICAgIG1hcmdpbi10b3A6IDMycHg7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgd2lkdGg6IDI1NnB4O1xcbiAgfVxcblxcbiAgI25hdmJhciAjbmF2YmFyLWNoZXZyb24ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICB9XFxuXFxuICAjbmF2YmFyICNwbGF5Z3JvdW5kLWFjdGlvbnMge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgbWFyZ2luOiAzMnB4IDBweDtcXG4gIH1cXG59XFxuXFxuaDEsXFxuaDIge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiAjMGQxMDJiO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbmgyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuXFxuLmNvbnRlbnQge1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA2NHB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweDtcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNik7XFxuICB0cmFuc2l0aW9uOiAwLjE1cztcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmFjdGl2ZSxcXG4uZ2l0aHViLWNhcmQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG5cXG4jcGxheWdyb3VuZC1hY3Rpb25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sdW1uLWdhcDogMTZweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uYnV0dG9uIHtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBwYWRkaW5nOiAxMnB4IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgbWFyZ2luOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzIGJhY2tncm91bmQtY29sb3I7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtZGFyay1jb2xvcik7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0MCwgNjgsIDUsIDAuMTIpO1xcbn1cXG5cXG4uY29udGVudC1jYXJkIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jb250ZW50LWNhcmQtaGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBwYWRkaW5nOiB2YXIoLS1jb250ZW50LWNhcmQtcGFkZGluZyk7XFxufVxcblxcbiNyZXN1bHQge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIG1hcmdpbjogOTZweCBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogIzRjYWY1MDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZXN1bHQtZXJyb3Ige1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpICFpbXBvcnRhbnQ7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9wbGF5Z3JvdW5kL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLCtCQUErQjtFQUMvQixvQ0FBb0M7RUFDcEMsc0JBQXNCO0VBQ3RCLHFDQUFxQztFQUNyQyw4RUFBOEU7QUFDaEY7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWU7RUFDZixXQUFXO0VBQ1gsWUFBWTtFQUNaLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLCtCQUErQjtFQUMvQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDRCQUE0QjtFQUM1QiwyQkFBMkI7RUFDM0IseURBQXFEO0VBQ3JELFlBQVk7RUFDWixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osZUFBZTtBQUNqQjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkOztFQUVBO0lBQ0Usc0JBQXNCO0lBQ3RCLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLGdCQUFnQjtFQUNsQjs7RUFFQTtJQUNFLGFBQWE7SUFDYixZQUFZO0VBQ2Q7O0VBRUE7SUFDRSx3QkFBd0I7RUFDMUI7O0VBRUE7SUFDRSxjQUFjO0lB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LGNBQWM7RUFDZCxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgLS1hY2NlbnQtY29sb3I6IHJnYigyNDAsIDY4LCA1KTtcXG4gIC0tYWNjZW50LWRhcmstY29sb3I6IHJnYigxNDAsIDM5LCAzKTtcXG4gIC0tZXJyb3ItY29sb3I6ICNiMzI2MWU7XFxuICAtLWZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgbW9ub3NwYWNlO1xcbiAgLS1mb250LWZhbWlseS1jb25zb2xhczogQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcbn1cXG5cXG5ib2R5IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgbWFyZ2luOiAwcHg7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY3O1xcbiAgY29sb3I6ICMwMDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG5cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDEyOHB4KTtcXG4gIG1heC13aWR0aDogMTUzNnB4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5tZWRpdW0tY29udGFpbmVyIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuI25hdmJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogOTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbiNuYXZiYXIgYSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuI25hdmJhciAuY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jbmF2YmFyLWNoZXZyb24ge1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Zyk7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvLXJlZiB7XFxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XFxufVxcblxcbiNuYXZiYXIgLmxvZ28ge1xcbiAgd2lkdGg6IDE5NnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDcwMHB4KSB7XFxuICAjbmF2YmFyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgI25hdmJhciAuY29udGFpbmVyIHtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28tcmVmIHtcXG4gICAgbWFyZ2luLXRvcDogMzJweDtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICB3aWR0aDogMjU2cHg7XFxuICB9XFxuXFxuICAjbmF2YmFyICNuYXZiYXItY2hldnJvbiB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIH1cXG5cXG4gICNuYXZiYXIgI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICBtYXJnaW46IDMycHggMHB4O1xcbiAgfVxcbn1cXG5cXG5oMSxcXG5oMiB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6ICMwZDEwMmI7XFxufVxcbmgxIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbn1cXG5cXG4uY29udGVudCB7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDY0cHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5naXRodWItY2FyZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6YWN0aXZlLFxcbi5naXRodWItY2FyZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbiAgdHJhbnNpdGlvbjogMC4xNXM7XFxufVxcblxcbi5naXRodWItY2FyZDo6YmVmb3JlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogJyc7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9yZXNvdXJjZXMvZ2l0aHViX2ljb24uc3ZnKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuXFxuI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbHVtbi1nYXA6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMTJweCAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG1hcmdpbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSk7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBiYWNrZ3JvdW5kLWNvbG9yO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWFjY2VudC1jb2xvcik7XFxuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbjpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbjphY3RpdmUsXFxuLm9yYW5nZS1idXR0b246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWRhcmstY29sb3IpO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDphY3RpdmUsXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDY4LCA1LCAwLjEyKTtcXG59XFxuXFxuLmNvbnRlbnQtY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jYXJkLWhlYWRlciB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgcGFkZGluZzogdmFyKC0tY29udGVudC1jYXJkLXBhZGRpbmcpO1xcbn1cXG5cXG4jcmVzdWx0IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBtYXJnaW46IDk2cHggYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC0tYm90LWljb24tY29sb3I6ICM0Y2FmNTA7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKC4uL3Jlc291cmNlcy9yb2JvdC1vZmYtb3V0bGluZS5zdmcpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWVycm9yIHtcXG4gIC0tYm90LWljb24tY29sb3I6IHZhcigtLWVycm9yLWNvbG9yKSAhaW1wb3J0YW50O1xcbiAgLS1ib3QtaWNvbi11cmw6IHVybCguLi9yZXNvdXJjZXMvYWxlcnQtY2lyY2xlLW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpOyAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKiBVQVBhcnNlci5qcyB2MS4wLjM1XG4gICBDb3B5cmlnaHQgwqkgMjAxMi0yMDIxIEZhaXNhbCBTYWxtYW4gPGZAZmFpc2FsbWFuLmNvbT5cbiAgIE1JVCBMaWNlbnNlICovLypcbiAgIERldGVjdCBCcm93c2VyLCBFbmdpbmUsIE9TLCBDUFUsIGFuZCBEZXZpY2UgdHlwZS9tb2RlbCBmcm9tIFVzZXItQWdlbnQgZGF0YS5cbiAgIFN1cHBvcnRzIGJyb3dzZXIgJiBub2RlLmpzIGVudmlyb25tZW50LiBcbiAgIERlbW8gICA6IGh0dHBzOi8vZmFpc2FsbWFuLmdpdGh1Yi5pby91YS1wYXJzZXItanNcbiAgIFNvdXJjZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzICovXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuKGZ1bmN0aW9uICh3aW5kb3csIHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdGFudHNcbiAgICAvLy8vLy8vLy8vLy8vXG5cblxuICAgIHZhciBMSUJWRVJTSU9OICA9ICcxLjAuMzUnLFxuICAgICAgICBFTVBUWSAgICAgICA9ICcnLFxuICAgICAgICBVTktOT1dOICAgICA9ICc/JyxcbiAgICAgICAgRlVOQ19UWVBFICAgPSAnZnVuY3Rpb24nLFxuICAgICAgICBVTkRFRl9UWVBFICA9ICd1bmRlZmluZWQnLFxuICAgICAgICBPQkpfVFlQRSAgICA9ICdvYmplY3QnLFxuICAgICAgICBTVFJfVFlQRSAgICA9ICdzdHJpbmcnLFxuICAgICAgICBNQUpPUiAgICAgICA9ICdtYWpvcicsXG4gICAgICAgIE1PREVMICAgICAgID0gJ21vZGVsJyxcbiAgICAgICAgTkFNRSAgICAgICAgPSAnbmFtZScsXG4gICAgICAgIFRZUEUgICAgICAgID0gJ3R5cGUnLFxuICAgICAgICBWRU5ET1IgICAgICA9ICd2ZW5kb3InLFxuICAgICAgICBWRVJTSU9OICAgICA9ICd2ZXJzaW9uJyxcbiAgICAgICAgQVJDSElURUNUVVJFPSAnYXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgQ09OU09MRSAgICAgPSAnY29uc29sZScsXG4gICAgICAgIE1PQklMRSAgICAgID0gJ21vYmlsZScsXG4gICAgICAgIFRBQkxFVCAgICAgID0gJ3RhYmxldCcsXG4gICAgICAgIFNNQVJUVFYgICAgID0gJ3NtYXJ0dHYnLFxuICAgICAgICBXRUFSQUJMRSAgICA9ICd3ZWFyYWJsZScsXG4gICAgICAgIEVNQkVEREVEICAgID0gJ2VtYmVkZGVkJyxcbiAgICAgICAgVUFfTUFYX0xFTkdUSCA9IDM1MDtcblxuICAgIHZhciBBTUFaT04gID0gJ0FtYXpvbicsXG4gICAgICAgIEFQUExFICAgPSAnQXBwbGUnLFxuICAgICAgICBBU1VTICAgID0gJ0FTVVMnLFxuICAgICAgICBCTEFDS0JFUlJZID0gJ0JsYWNrQmVycnknLFxuICAgICAgICBCUk9XU0VSID0gJ0Jyb3dzZXInLFxuICAgICAgICBDSFJPTUUgID0gJ0Nocm9tZScsXG4gICAgICAgIEVER0UgICAgPSAnRWRnZScsXG4gICAgICAgIEZJUkVGT1ggPSAnRmlyZWZveCcsXG4gICAgICAgIEdPT0dMRSAgPSAnR29vZ2xlJyxcbiAgICAgICAgSFVBV0VJICA9ICdIdWF3ZWknLFxuICAgICAgICBMRyAgICAgID0gJ0xHJyxcbiAgICAgICAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdCcsXG4gICAgICAgIE1PVE9ST0xBICA9ICdNb3Rvcm9sYScsXG4gICAgICAgIE9QRVJBICAgPSAnT3BlcmEnLFxuICAgICAgICBTQU1TVU5HID0gJ1NhbXN1bmcnLFxuICAgICAgICBTSEFSUCAgID0gJ1NoYXJwJyxcbiAgICAgICAgU09OWSAgICA9ICdTb255JyxcbiAgICAgICAgVklFUkEgICA9ICdWaWVyYScsXG4gICAgICAgIFhJQU9NSSAgPSAnWGlhb21pJyxcbiAgICAgICAgWkVCUkEgICA9ICdaZWJyYScsXG4gICAgICAgIEZBQ0VCT09LICAgID0gJ0ZhY2Vib29rJyxcbiAgICAgICAgQ0hST01JVU1fT1MgPSAnQ2hyb21pdW0gT1MnLFxuICAgICAgICBNQUNfT1MgID0gJ01hYyBPUyc7XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlclxuICAgIC8vLy8vLy8vLy9cblxuICAgIHZhciBleHRlbmQgPSBmdW5jdGlvbiAocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVnZXhlcykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gZXh0ZW5zaW9uc1tpXS5jb25jYXQocmVnZXhlc1tpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVnZXhlc1tpXSA9IHJlZ2V4ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZFJlZ2V4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcml6ZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHZhciBlbnVtcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVudW1zW2FycltpXS50b1VwcGVyQ2FzZSgpXSA9IGFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnVtcztcbiAgICAgICAgfSxcbiAgICAgICAgaGFzID0gZnVuY3Rpb24gKHN0cjEsIHN0cjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJpemUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ham9yaXplID0gZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YodmVyc2lvbikgPT09IFNUUl9UWVBFID8gdmVyc2lvbi5yZXBsYWNlKC9bXlxcZFxcLl0vZywgRU1QVFkpLnNwbGl0KCcuJylbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0gPSBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RyKSA9PT0gU1RSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCBFTVBUWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihsZW4pID09PSBVTkRFRl9UWVBFID8gc3RyIDogc3RyLnN1YnN0cmluZygwLCBVQV9NQVhfTEVOR1RIKTtcbiAgICAgICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTWFwIGhlbHBlclxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmd4TWFwcGVyID0gZnVuY3Rpb24gKHVhLCBhcnJheXMpIHtcblxuICAgICAgICAgICAgdmFyIGkgPSAwLCBqLCBrLCBwLCBxLCBtYXRjaGVzLCBtYXRjaDtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXlzLmxlbmd0aCAmJiAhbWF0Y2hlcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLCAgICAgICAvLyBldmVuIHNlcXVlbmNlICgwLDIsNCwuLilcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdOyAgIC8vIG9kZCBzZXF1ZW5jZSAoMSwzLDUsLi4pXG4gICAgICAgICAgICAgICAgaiA9IGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgcmVnZXgubGVuZ3RoICYmICFtYXRjaGVzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdleFtqXSkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcHJvcHNbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHEgPT09IE9CSl9UWVBFICYmIHEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gbW9kaWZpZWQgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXS5jYWxsKHRoaXMsIG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIGdpdmVuIHZhbHVlLCBpZ25vcmUgcmVnZXggbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiBvciByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBxWzFdID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5pdGl6ZSBtYXRjaCB1c2luZyBnaXZlbiByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FdID0gbWF0Y2ggPyBtYXRjaCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHN0ck1hcHBlciA9IGZ1bmN0aW9uIChzdHIsIG1hcCkge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMobWFwW2ldW2pdLCBzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU3RyaW5nIG1hcFxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICB2YXIgb2xkU2FmYXJpTWFwID0ge1xuICAgICAgICAgICAgJzEuMCcgICA6ICcvOCcsXG4gICAgICAgICAgICAnMS4yJyAgIDogJy8xJyxcbiAgICAgICAgICAgICcxLjMnICAgOiAnLzMnLFxuICAgICAgICAgICAgJzIuMCcgICA6ICcvNDEyJyxcbiAgICAgICAgICAgICcyLjAuMicgOiAnLzQxNicsXG4gICAgICAgICAgICAnMi4wLjMnIDogJy80MTcnLFxuICAgICAgICAgICAgJzIuMC40JyA6ICcvNDE5JyxcbiAgICAgICAgICAgICc/JyAgICAgOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93c1ZlcnNpb25NYXAgPSB7XG4gICAgICAgICAgICAnTUUnICAgICAgICA6ICc0LjkwJyxcbiAgICAgICAgICAgICdOVCAzLjExJyAgIDogJ05UMy41MScsXG4gICAgICAgICAgICAnTlQgNC4wJyAgICA6ICdOVDQuMCcsXG4gICAgICAgICAgICAnMjAwMCcgICAgICA6ICdOVCA1LjAnLFxuICAgICAgICAgICAgJ1hQJyAgICAgICAgOiBbJ05UIDUuMScsICdOVCA1LjInXSxcbiAgICAgICAgICAgICdWaXN0YScgICAgIDogJ05UIDYuMCcsXG4gICAgICAgICAgICAnNycgICAgICAgICA6ICdOVCA2LjEnLFxuICAgICAgICAgICAgJzgnICAgICAgICAgOiAnTlQgNi4yJyxcbiAgICAgICAgICAgICc4LjEnICAgICAgIDogJ05UIDYuMycsXG4gICAgICAgICAgICAnMTAnICAgICAgICA6IFsnTlQgNi40JywgJ05UIDEwLjAnXSxcbiAgICAgICAgICAgICdSVCcgICAgICAgIDogJ0FSTSdcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZWdleCBtYXBcbiAgICAvLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmVnZXhlcyA9IHtcblxuICAgICAgICBicm93c2VyIDogW1tcblxuICAgICAgICAgICAgL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIGZvciBBbmRyb2lkL2lPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ2hyb21lJ11dLCBbXG4gICAgICAgICAgICAvZWRnKD86ZXxpb3N8YSk/XFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdFZGdlJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIFByZXN0byBiYXNlZFxuICAgICAgICAgICAgLyhvcGVyYSBtaW5pKVxcLyhbLVxcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNaW5pXG4gICAgICAgICAgICAvKG9wZXJhIFttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFstXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNb2JpL1RhYmxldFxuICAgICAgICAgICAgLyhvcGVyYSkoPzouK3ZlcnNpb25cXC98W1xcLyBdKykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL29waW9zW1xcLyBdKyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBtaW5pIG9uIGlwaG9uZSA+PSA4LjBcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkErJyBNaW5pJ11dLCBbXG4gICAgICAgICAgICAvXFxib3ByXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBXZWJraXRcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkFdXSwgW1xuXG4gICAgICAgICAgICAvLyBNaXhlZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgLy8gTHVuYXNjYXBlL01heHRob24vTmV0ZnJvbnQvSmFzbWluZS9CbGF6ZXJcbiAgICAgICAgICAgIC8vIFRyaWRlbnQgYmFzZWRcbiAgICAgICAgICAgIC8oYXZhbnQgfGllbW9iaWxlfHNsaW0pKD86YnJvd3Nlcik/W1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgLy8gQXZhbnQvSUVNb2JpbGUvU2xpbUJyb3dzZXJcbiAgICAgICAgICAgIC8oYmE/aWR1YnJvd3NlcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFpZHUgQnJvd3NlclxuICAgICAgICAgICAgLyg/Om1zfFxcKCkoaWUpIChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuXG4gICAgICAgICAgICAvLyBXZWJraXQvS0hUTUwgYmFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsb2NrL1JvY2tNZWx0L01pZG9yaS9FcGlwaGFueS9TaWxrL1NreWZpcmUvQm9sdC9Jcm9uL0lyaWRpdW0vUGhhbnRvbUpTL0Jvd3Nlci9RdXBaaWxsYS9GYWxrb25cbiAgICAgICAgICAgIC8oZmxvY2t8cm9ja21lbHR8bWlkb3JpfGVwaXBoYW55fHNpbGt8c2t5ZmlyZXxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29ufHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGUoPyEuK25hdmVyKXxxcWJyb3dzZXJsaXRlfHFxfGR1Y2tkdWNrZ28pXFwvKFstXFx3XFwuXSspL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJla29ucS9QdWZmaW4vQnJhdmUvV2hhbGUvUVFCcm93c2VyTGl0ZS9RUSwgYWthIFNob3VRXG4gICAgICAgICAgICAvKGhleXRhcHxvdmkpYnJvd3NlclxcLyhbXFxkXFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhleXRhcC9PdmlcbiAgICAgICAgICAgIC8od2VpYm8pX18oW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlib1xuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKD86XFxidWM/ID9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC8gXT8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAvLyBVQ0Jyb3dzZXJcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1VDJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9taWNyb20uK1xcYnFiY29yZVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdCBEZXNrdG9wIGZvciBXaW5kb3dzIEJ1aWx0LWluIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXGJxYmNvcmVcXC8oW1xcd1xcLl0rKS4rbWljcm9tL2lcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1dlQ2hhdChXaW4pIERlc2t0b3AnXV0sIFtcbiAgICAgICAgICAgIC9taWNyb21lc3NlbmdlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VDaGF0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdXZUNoYXQnXV0sIFtcbiAgICAgICAgICAgIC9rb25xdWVyb3JcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS29ucXVlcm9yXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdLb25xdWVyb3InXV0sIFtcbiAgICAgICAgICAgIC90cmlkZW50Litydls6IF0oW1xcd1xcLl17MSw5fSlcXGIuK2xpa2UgZ2Vja28vaSAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUxMVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnSUUnXV0sIFtcbiAgICAgICAgICAgIC95YSg/OnNlYXJjaCk/YnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWFuZGV4XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdZYW5kZXgnXV0sIFtcbiAgICAgICAgICAgIC8oYXZhc3R8YXZnKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZhc3QvQVZHIFNlY3VyZSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxIFNlY3VyZSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmZvY3VzXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBGb2N1c1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgRm9jdXMnXV0sIFtcbiAgICAgICAgICAgIC9cXGJvcHRcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIFRvdWNoXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgVG91Y2gnXV0sIFtcbiAgICAgICAgICAgIC9jb2NfY29jXFx3K1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYyBDb2MgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ29jIENvYyddXSwgW1xuICAgICAgICAgICAgL2RvbGZpblxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2xwaGluXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEb2xwaGluJ11dLCBbXG4gICAgICAgICAgICAvY29hc3RcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIENvYXN0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgQ29hc3QnXV0sIFtcbiAgICAgICAgICAgIC9taXVpYnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlVSSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNSVVJICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvZnhpb3NcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZm9yIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YXV0sIFtcbiAgICAgICAgICAgIC9cXGJxaWh1fChxaT9obz9vP3wzNjApYnJvd3Nlci9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM2MFxuICAgICAgICAgICAgXSwgW1tOQU1FLCAnMzYwICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvKG9jdWx1c3xzYW1zdW5nfHNhaWxmaXNofGh1YXdlaSlicm93c2VyXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAvKC4rKS8sICckMSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgWyAgICAgICAgICAgICAgICAgICAgICAvLyBPY3VsdXMvU2Ftc3VuZy9TYWlsZmlzaC9IdWF3ZWkgQnJvd3NlclxuICAgICAgICAgICAgLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21vZG8gRHJhZ29uXG4gICAgICAgICAgICBdLCBbW05BTUUsIC9fL2csICcgJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspIHNhZmFyaS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsZWN0cm9uLWJhc2VkIEFwcFxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcLygyMFxcZFxcZFxcLlstXFx3XFwuXSspKS9pLCAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcLyBdPyhbXFx3XFwuXSspL2kgICAgICAgICAgICAvLyBRUUJyb3dzZXIvQmFpZHUgQXBwLzIzNDUgQnJvd3NlclxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKG1ldGFzcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvdUdvdUJyb3dzZXJcbiAgICAgICAgICAgIC8obGJicm93c2VyKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGllQmFvIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXFsobGlua2VkaW4pYXBwXFxdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rZWRJbiBBcHAgZm9yIGlPUyAmIEFuZHJvaWRcbiAgICAgICAgICAgIF0sIFtOQU1FXSwgW1xuXG4gICAgICAgICAgICAvLyBXZWJWaWV3XG4gICAgICAgICAgICAvKCg/OmZiYW5cXC9mYmlvc3xmYl9pYWJcXC9mYjRhKSg/IS4rZmJhdil8O2ZiYXZcXC8oW1xcd1xcLl0rKTspL2kgICAgICAgLy8gRmFjZWJvb2sgQXBwIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICBdLCBbW05BTUUsIEZBQ0VCT09LXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oa2FrYW8oPzp0YWxrfHN0b3J5KSlbXFwvIF0oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FrYW8gQXBwXG4gICAgICAgICAgICAvKG5hdmVyKVxcKC4qPyhcXGQrXFwuW1xcd1xcLl0rKS4qXFwpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmVyIEluQXBwXG4gICAgICAgICAgICAvc2FmYXJpIChsaW5lKVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgQXBwIGZvciBpT1NcbiAgICAgICAgICAgIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIEFwcCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgLyhjaHJvbWl1bXxpbnN0YWdyYW0pW1xcLyBdKFstXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWl1bS9JbnN0YWdyYW1cbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmdzYVxcLyhbXFx3XFwuXSspIC4qc2FmYXJpXFwvL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBTZWFyY2ggQXBwbGlhbmNlIG9uIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnR1NBJ11dLCBbXG4gICAgICAgICAgICAvbXVzaWNhbF9seSg/Oi4rYXBwXz92ZXJzaW9uXFwvfF8pKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpa1Rva1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnVGlrVG9rJ11dLCBbXG5cbiAgICAgICAgICAgIC9oZWFkbGVzc2Nocm9tZSg/OlxcLyhbXFx3XFwuXSspfCApL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIEhlYWRsZXNzXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIENIUk9NRSsnIEhlYWRsZXNzJ11dLCBbXG5cbiAgICAgICAgICAgIC8gd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBXZWJWaWV3XG4gICAgICAgICAgICBdLCBbW05BTUUsIENIUk9NRSsnIFdlYlZpZXcnXSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL2Ryb2lkLisgdmVyc2lvblxcLyhbXFx3XFwuXSspXFxiLisoPzptb2JpbGUgc2FmYXJpfHNhZmFyaSkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdBbmRyb2lkICcrQlJPV1NFUl1dLCBbXG5cbiAgICAgICAgICAgIC8oY2hyb21lfG9tbml3ZWJ8YXJvcmF8W3RpemVub2thXXs1fSA/YnJvd3NlcilcXC92PyhbXFx3XFwuXSspL2kgICAgICAgLy8gQ2hyb21lL09tbmlXZWIvQXJvcmEvVGl6ZW4vTm9raWFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuXG4gICAgICAgICAgICAvdmVyc2lvblxcLyhbXFx3XFwuXFwsXSspIC4qbW9iaWxlXFwvXFx3KyAoc2FmYXJpKS9pICAgICAgICAgICAgICAgICAgICAgIC8vIE1vYmlsZSBTYWZhcmlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ01vYmlsZSBTYWZhcmknXV0sIFtcbiAgICAgICAgICAgIC92ZXJzaW9uXFwvKFtcXHcoXFwufFxcLCldKykgLioobW9iaWxlID9zYWZhcml8c2FmYXJpKS9pICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAmIFNhZmFyaSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXSwgW1xuICAgICAgICAgICAgL3dlYmtpdC4rPyhtb2JpbGUgP3NhZmFyaXxzYWZhcmkpKFxcL1tcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgc3RyTWFwcGVyLCBvbGRTYWZhcmlNYXBdXSwgW1xuXG4gICAgICAgICAgICAvKHdlYmtpdHxraHRtbClcXC8oW1xcd1xcLl0rKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgLy8gR2Vja28gYmFzZWRcbiAgICAgICAgICAgIC8obmF2aWdhdG9yfG5ldHNjYXBlXFxkPylcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldHNjYXBlXG4gICAgICAgICAgICBdLCBbW05BTUUsICdOZXRzY2FwZSddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL21vYmlsZSB2cjsgcnY6KFtcXHdcXC5dKylcXCkuK2ZpcmVmb3gvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IFJlYWxpdHlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgRklSRUZPWCsnIFJlYWxpdHknXV0sIFtcbiAgICAgICAgICAgIC9la2lvaGYuKyhmbG93KVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvd1xuICAgICAgICAgICAgLyhzd2lmdGZveCkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2lmdGZveFxuICAgICAgICAgICAgLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtbyBicm93c2VyfG1pbmltb3xjb25rZXJvcnxrbGFyKVtcXC8gXT8oW1xcd1xcLlxcK10rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2VEcmFnb24vSWNld2Vhc2VsL0NhbWluby9DaGltZXJhL0Zlbm5lYy9NYWVtby9NaW5pbW8vQ29ua2Vyb3IvS2xhclxuICAgICAgICAgICAgLyhzZWFtb25rZXl8ay1tZWxlb258aWNlY2F0fGljZWFwZXxmaXJlYmlyZHxwaG9lbml4fHBhbGVtb29ufGJhc2lsaXNrfHdhdGVyZm94KVxcLyhbLVxcd1xcLl0rKSQvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveC9TZWFNb25rZXkvSy1NZWxlb24vSWNlQ2F0L0ljZUFwZS9GaXJlYmlyZC9QaG9lbml4XG4gICAgICAgICAgICAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIEZpcmVmb3gtYmFzZWRcbiAgICAgICAgICAgIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKSAuK3J2XFw6LitnZWNrb1xcL1xcZCsvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW96aWxsYVxuXG4gICAgICAgICAgICAvLyBPdGhlclxuICAgICAgICAgICAgLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZnxzbGVpcG5pcnxvYmlnb3xtb3NhaWN8KD86Z298aWNlfHVwKVtcXC4gXT9icm93c2VyKVstXFwvIF0/dj8oW1xcd1xcLl0rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb2xhcmlzL0x5bngvRGlsbG8vaUNhYi9Eb3Jpcy9BbWF5YS93M20vTmV0U3VyZi9TbGVpcG5pci9PYmlnby9Nb3NhaWMvR28vSUNFL1VQLkJyb3dzZXJcbiAgICAgICAgICAgIC8obGlua3MpIFxcKChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua3NcbiAgICAgICAgICAgIC9wYW5hc29uaWM7KHZpZXJhKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFuYXNvbmljIFZpZXJhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyhjb2JhbHQpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2JhbHRcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgL21hc3Rlci58bHRzLi8sIFwiXCJdXVxuICAgICAgICBdLFxuXG4gICAgICAgIGNwdSA6IFtbXG5cbiAgICAgICAgICAgIC8oPzooYW1kfHgoPzooPzo4Nnw2NClbLV9dKT98d293fHdpbik2NClbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgIC8vIEFNRDY0ICh4NjQpXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FtZDY0J11dLCBbXG5cbiAgICAgICAgICAgIC8oaWEzMig/PTspKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAocXVpY2t0aW1lKVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAoeDg2KVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdpYTMyJ11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYWFyY2g2NHxhcm0odj84ZT9sP3xfPzY0KSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFSTTY0XG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FybTY0J11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYXJtKD86dls2N10pP2h0P24/W2ZsXXA/KVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBUk1IRlxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm1oZiddXSwgW1xuXG4gICAgICAgICAgICAvLyBQb2NrZXRQQyBtaXN0YWtlbmx5IGlkZW50aWZpZWQgYXMgUG93ZXJQQ1xuICAgICAgICAgICAgL3dpbmRvd3MgKGNlfG1vYmlsZSk7IHBwYzsvaVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm0nXV0sIFtcblxuICAgICAgICAgICAgLygoPzpwcGN8cG93ZXJwYykoPzo2NCk/KSg/OiBtYWN8O3xcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXJQQ1xuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIC9vd2VyLywgRU1QVFksIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLyhzdW40XFx3KVs7XFwpXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNQQVJDXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ3NwYXJjJ11dLCBbXG5cbiAgICAgICAgICAgIC8oKD86YXZyMzJ8aWE2NCg/PTspKXw2OGsoPz1cXCkpfFxcYmFybSg/PXYoPzpbMS03XXxbNS03XTEpbD98O3xlYWJpKXwoPz1hdG1lbCApYXZyfCg/OmlyaXh8bWlwc3xzcGFyYykoPzo2NCk/XFxifHBhLXJpc2MpL2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUE2NCwgNjhLLCBBUk0vNjQsIEFWUi8zMiwgSVJJWC82NCwgTUlQUy82NCwgU1BBUkMvNjQsIFBBLVJJU0NcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCBsb3dlcml6ZV1dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZGV2aWNlIDogW1tcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIE1PQklMRVMgJiBUQUJMRVRTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIC9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0eF1cXHd7Miw0fXxndC1bcG5dXFxkezIsNH18c2doLXQ4WzU2XTl8bmV4dXMgMTApL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoPzpzW2NncF1ofGd0fHNtKS1cXHcrfHNjW2ctXT9bXFxkXSthP3xnYWxheHkgbmV4dXMpL2ksXG4gICAgICAgICAgICAvc2Ftc3VuZ1stIF0oWy1cXHddKykvaSxcbiAgICAgICAgICAgIC9zZWMtKHNnaFxcdyspL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBcHBsZVxuICAgICAgICAgICAgLyg/OlxcL3xcXCgpKGlwKD86aG9uZXxvZClbXFx3LCBdKikoPzpcXC98OykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBvZC9pUGhvbmVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXCgoaXBhZCk7Wy1cXHdcXCksOyBdK2FwcGxlL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBhZFxuICAgICAgICAgICAgL2FwcGxlY29yZW1lZGlhXFwvW1xcd1xcLl0rIFxcKChpcGFkKS9pLFxuICAgICAgICAgICAgL1xcYihpcGFkKVxcZFxcZD8sXFxkXFxkP1s7XFxdXS4raW9zL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obWFjaW50b3NoKTsvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFNoYXJwXG4gICAgICAgICAgICAvXFxiKHNoLT9bYWx0dnpdP1xcZFxcZFthLWVrbV0/KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNIQVJQXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEh1YXdlaVxuICAgICAgICAgICAgL1xcYigoPzphZ1tyc11bMjNdP3xiYWgyP3xzaHQ/fGJ0diktYT9bbHddXFxkezJ9KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKD86aHVhd2VpfGhvbm9yKShbLVxcdyBdKylbO1xcKV0vaSxcbiAgICAgICAgICAgIC9cXGIobmV4dXMgNnB8XFx3ezIsNH1lPy1bYXR1XT9bbG5dW1xcZHhdWzAxMjM1OWNdW2Fkbl0/KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFhpYW9taVxuICAgICAgICAgICAgL1xcYihwb2NvW1xcdyBdKykoPzogYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWkgUE9DT1xuICAgICAgICAgICAgL1xcYjsgKFxcdyspIGJ1aWxkXFwvaG1cXDEvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWGlhb21pIEhvbmdtaSAnbnVtZXJpYycgbW9kZWxzXG4gICAgICAgICAgICAvXFxiKGhtWy1fIF0/bm90ZT9bXyBdPyg/OlxcZFxcdyk/KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBIb25nbWlcbiAgICAgICAgICAgIC9cXGIocmVkbWlbXFwtXyBdPyg/Om5vdGV8ayk/W1xcd18gXSspKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBSZWRtaVxuICAgICAgICAgICAgL1xcYihtaVstXyBdPyg/OmFcXGR8b25lfG9uZVtfIF1wbHVzfG5vdGUgbHRlfG1heHxjYyk/W18gXT8oPzpcXGQ/XFx3PylbXyBdPyg/OnBsdXN8c2V8bGl0ZSk/KSg/OiBidWl8XFwpKS9pIC8vIFhpYW9taSBNaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKG1pWy1fIF0/KD86cGFkKSg/OltcXHdfIF0rKSkoPzogYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pIFBhZCB0YWJsZXRzXG4gICAgICAgICAgICBdLFtbTU9ERUwsIC9fL2csICcgJ10sIFtWRU5ET1IsIFhJQU9NSV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBPUFBPXG4gICAgICAgICAgICAvOyAoXFx3KykgYnVpLisgb3Bwby9pLFxuICAgICAgICAgICAgL1xcYihjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3fGExMDFvcClcXGIvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnT1BQTyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gVml2b1xuICAgICAgICAgICAgL3Zpdm8gKFxcdyspKD86IGJ1aXxcXCkpL2ksXG4gICAgICAgICAgICAvXFxiKHZbMTJdXFxkezN9XFx3P1thdF0pKD86IGJ1aXw7KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdWaXZvJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBSZWFsbWVcbiAgICAgICAgICAgIC9cXGIocm14WzEyXVxcZHszfSkoPzogYnVpfDt8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSZWFsbWUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1vdG9yb2xhXG4gICAgICAgICAgICAvXFxiKG1pbGVzdG9uZXxkcm9pZCg/OlsyLTR4XXwgKD86YmlvbmljfHgyfHByb3xyYXpyKSk/Oj8oIDRnKT8pXFxiW1xcdyBdK2J1aWxkXFwvL2ksXG4gICAgICAgICAgICAvXFxibW90KD86b3JvbGEpP1stIF0oXFx3KikvaSxcbiAgICAgICAgICAgIC8oKD86bW90b1tcXHdcXChcXCkgXSt8eHRcXGR7Myw0fXxuZXh1cyA2KSg/PSBidWl8XFwpKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBNT1RPUk9MQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihtejYwXFxkfHhvb21bMiBdezAsMn0pIGJ1aWxkXFwvL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTU9UT1JPTEFdLCBbVFlQRSwgVEFCTEVUXV0sIFtcblxuICAgICAgICAgICAgLy8gTEdcbiAgICAgICAgICAgIC8oKD89bGcpP1t2bF1rXFwtP1xcZHszfSkgYnVpfCAzXFwuWy1cXHc7IF17MTB9bGc/LShbMDZjdjldezMsNH0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obG0oPzotP2YxMDBbbnZdP3wtW1xcd1xcLl0rKSg/PSBidWl8XFwpKXxuZXh1cyBbNDVdKS9pLFxuICAgICAgICAgICAgL1xcYmxnWy1lO1xcLyBdKygoPyFicm93c2VyfG5ldGNhc3R8YW5kcm9pZCB0dilcXHcrKS9pLFxuICAgICAgICAgICAgL1xcYmxnLT8oW1xcZFxcd10rKSBidWkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBMR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBMZW5vdm9cbiAgICAgICAgICAgIC8oaWRlYXRhYlstXFx3IF0rKS9pLFxuICAgICAgICAgICAgL2xlbm92byA/KHNbNTZdMDAwWy1cXHddK3x0YWIoPzpbXFx3IF0rKXx5dFstXFxkXFx3XXs2fXx0YlstXFxkXFx3XXs2fSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTGVub3ZvJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBOb2tpYVxuICAgICAgICAgICAgLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWEgXFxkKykvaSxcbiAgICAgICAgICAgIC9ub2tpYVstXyBdPyhbLVxcd1xcLl0qKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvXy9nLCAnICddLCBbVkVORE9SLCAnTm9raWEnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEdvb2dsZVxuICAgICAgICAgICAgLyhwaXhlbCBjKVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsIENcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgR09PR0xFXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHBpeGVsW1xcZGF4bCBdezAsNn0pKD86IGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICAvZHJvaWQuKyAoYT9cXGRbMC0yXXsyfXNvfFtjLWddXFxkezR9fHNvWy1nbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89IGJ1aXxcXCkuK2Nocm9tZVxcLyg/IVsxLTZdezAsMX1cXGRcXC4pKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9zb255IHRhYmxldCBbcHNdL2ksXG4gICAgICAgICAgICAvXFxiKD86c29ueSk/c2dwXFx3Kyg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAnWHBlcmlhIFRhYmxldCddLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9uZVBsdXNcbiAgICAgICAgICAgIC8gKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLFxuICAgICAgICAgICAgLyg/Om9uZSk/KD86cGx1cyk/IChhXFxkMFxcZFxcZCkoPzogYnxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ09uZVBsdXMnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEFtYXpvblxuICAgICAgICAgICAgLyhhbGV4YSl3ZWJtL2ksXG4gICAgICAgICAgICAvKGtmW2Etel17Mn13aXxhZW9bYy1yXXsyfSkoIGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSB3aXRob3V0IFNpbGsgLyBFY2hvIFNob3dcbiAgICAgICAgICAgIC8oa2ZbYS16XSspKCBidWl8XFwpKS4rc2lsa1xcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSBIRFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oKD86c2R8a2YpWzAzNDloaWpvcnN0dXddKykoIGJ1aXxcXCkpLitzaWxrXFwvL2kgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFBob25lXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvKC4rKS9nLCAnRmlyZSBQaG9uZSAkMSddLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQmxhY2tCZXJyeVxuICAgICAgICAgICAgLyhwbGF5Ym9vayk7Wy1cXHdcXCksOyBdKyhyaW0pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkgUGxheUJvb2tcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgVkVORE9SLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSxcbiAgICAgICAgICAgIC9cXChiYjEwOyAoXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEJMQUNLQkVSUlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXN1c1xuICAgICAgICAgICAgLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZSBdezQsMTB9IFxcdyt8ZWVlcGN8c2xpZGVyIFxcdyt8bmV4dXMgN3xwYWRmb25lfHAwMFtjal0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyAoeltiZXNdNlswMjddWzAxMl1ba21dW2xzXXx6ZW5mb25lIFxcZFxcdz8pXFxiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIVENcbiAgICAgICAgICAgIC8obmV4dXMgOSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDIE5leHVzIDlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0hUQyddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oaHRjKVstO18gXXsxLDJ9KFtcXHcgXSsoPz1cXCl8IGJ1aSl8XFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDXG5cbiAgICAgICAgICAgIC8vIFpURVxuICAgICAgICAgICAgLyh6dGUpWy0gXShbXFx3IF0rPykoPzogYnVpfFxcL3xcXCkpL2ksXG4gICAgICAgICAgICAvKGFsY2F0ZWx8Z2Vla3NwaG9uZXxuZXhpYW58cGFuYXNvbmljKD8hKD86O3xcXC4pKXxzb255KD8hLWJyYSkpWy1fIF0/KFstXFx3XSopL2kgICAgICAgICAvLyBBbGNhdGVsL0dlZWtzUGhvbmUvTmV4aWFuL1BhbmFzb25pYy9Tb255XG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIC9fL2csICcgJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBY2VyXG4gICAgICAgICAgICAvZHJvaWQuKzsgKFthYl1bMS03XS0/WzAxNzhhXVxcZFxcZD8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FjZXInXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1laXp1XG4gICAgICAgICAgICAvZHJvaWQuKzsgKG1bMS01XSBub3RlKSBidWkvaSxcbiAgICAgICAgICAgIC9cXGJtei0oWy1cXHddezIsfSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTWVpenUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1JWEVEXG4gICAgICAgICAgICAvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pWy1fIF0/KFstXFx3XSopL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkvQmVuUS9QYWxtL1NvbnktRXJpY3Nzb24vQWNlci9Bc3VzL0RlbGwvTWVpenUvTW90b3JvbGEvUG9seXRyb25cbiAgICAgICAgICAgIC8oaHApIChbXFx3IF0rXFx3KS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBpUEFRXG4gICAgICAgICAgICAvKGFzdXMpLT8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3VzXG4gICAgICAgICAgICAvKG1pY3Jvc29mdCk7IChsdW1pYVtcXHcgXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgTHVtaWFcbiAgICAgICAgICAgIC8obGVub3ZvKVstXyBdPyhbLVxcd10rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlbm92b1xuICAgICAgICAgICAgLyhqb2xsYSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xsYVxuICAgICAgICAgICAgLyhvcHBvKSA/KFtcXHcgXSspIGJ1aS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1BQT1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvKGtvYm8pXFxzKGVyZWFkZXJ8dG91Y2gpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLb2JvXG4gICAgICAgICAgICAvKGFyY2hvcykgKGdhbWVwYWQyPykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyY2hvc1xuICAgICAgICAgICAgLyhocCkuKyh0b3VjaHBhZCg/IS4rdGFibGV0KXx0YWJsZXQpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBUb3VjaFBhZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obm9vaylbXFx3IF0rYnVpbGRcXC8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9va1xuICAgICAgICAgICAgLyhkZWxsKSAoc3RyZWFba3ByXFxkIF0qW1xcZGtvXSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgU3RyZWFrXG4gICAgICAgICAgICAvKGxlWy0gXStwYW4pWy0gXSsoXFx3ezEsOX0pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZSBQYW4gVGFibGV0c1xuICAgICAgICAgICAgLyh0cmluaXR5KVstIF0qKHRcXGR7M30pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbml0eSBUYWJsZXRzXG4gICAgICAgICAgICAvKGdpZ2FzZXQpWy0gXSsocVxcd3sxLDl9KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaWdhc2V0IFRhYmxldHNcbiAgICAgICAgICAgIC8odm9kYWZvbmUpIChbXFx3IF0rKSg/OlxcKXwgYnVpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWb2RhZm9uZVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvKHN1cmZhY2UgZHVvKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgRHVvXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkIFtcXGRcXC5dKzsgKGZwXFxkdT8pKD86IGJ8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpcnBob25lXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdGYWlycGhvbmUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvKHUzMDRhYSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUJlRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FUJlQnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxic2llLShcXHcqKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2llbWVuc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU2llbWVucyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIocmN0XFx3KykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSQ0EgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnUkNBJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih2ZW51ZVtcXGQgXXsyLDd9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgVmVudWUgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRGVsbCddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIocSg/Om12fHRhKVxcdyspIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpem9uIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVmVyaXpvbiddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoPzpiYXJuZXNbJiBdK25vYmxlIHxibltydF0pKFtcXHdcXCsgXSopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFybmVzICYgTm9ibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdCYXJuZXMgJiBOb2JsZSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIodG1cXGR7M31cXHcrKSBiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ051VmlzaW9uJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihrODgpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWlRFIEsgU2VyaWVzIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihueFxcZHszfWopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpURSBOdWJpYVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihnZW5cXGR7M30pIGIuKzQ5aC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIEdFTiBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih6dXJcXGR7M30pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIFpVUiBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoemVraSk/dGIuKlxcYikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpla2kgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWmVraSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoW3lyXVxcZHsyfSkgYi9pLFxuICAgICAgICAgICAgL1xcYihkcmFnb25bLSBdK3RvdWNoIHxkdCkoXFx3ezV9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYWdvbiBUb3VjaCBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnRHJhZ29uIFRvdWNoJ10sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIobnMtP1xcd3swLDl9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNpZ25pYSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdJbnNpZ25pYSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKG54YXxuZXh0KS0/XFx3ezAsOX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0Qm9vayBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOZXh0Qm9vayddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKSBiL2kgICAgICAgICAgICAgICAgICAvLyBWb2ljZSBYdHJlbWUgUGhvbmVzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgJ1ZvaWNlJ10sIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIobHZ0ZWxcXC0pPyh2MVsxMl0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMdlRlbCBQaG9uZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnTHZUZWwnXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihwaC0xKSAvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNzZW50aWFsIFBILTFcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vzc2VudGlhbCddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIodigxMDBtZHw3MDBuYXw3MDExfDkxN2cpLipcXGIpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnZpemVuIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vudml6ZW4nXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKHRyaW9bLVxcd1xcLiBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hY2hTcGVlZCBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdNYWNoU3BlZWQnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxidHVfKDE0OTEpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3RvciBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSb3RvciddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oc2hpZWxkW1xcdyBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE52aWRpYSBTaGllbGQgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTnZpZGlhJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhzcHJpbnQpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ByaW50IFBob25lc1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgLyhraW5cXC5bb25ldHddezN9KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEtpblxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL1xcLi9nLCAnICddLCBbVkVORE9SLCBNSUNST1NPRlRdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoY2M2NjY2P3xldDVbMTZdfG1jWzIzOV1bMjNdeD98dmM4WzAzXXg/KVxcKS9pICAgICAgICAgICAgIC8vIFplYnJhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGVjMzB8cHMyMHx0Y1syLThdXFxkW2t4XSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBTTUFSVFRWU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvc21hcnQtdHYuKyhzYW1zdW5nKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9oYmJ0di4rbWFwbGU7KFxcZCspL2lcbiAgICAgICAgICAgIF0sIFtbTU9ERUwsIC9eLywgJ1NtYXJ0VFYnXSwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obnV4OyBuZXRjYXN0LitzbWFydHR2fGxnIChuZXRjYXN0XFwudHYtMjAxXFxkfGFuZHJvaWQgdHYpKS9pICAgICAgICAvLyBMRyBTbWFydFRWXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgTEddLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKGFwcGxlKSA/dHYvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxlIFRWXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIEFQUExFKycgVFYnXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL2Nya2V5L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgQ0hST01FKydjYXN0J10sIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rYWZ0KFxcdykoIGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFRWXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXChkdHZbXFwpO10uKyhhcXVvcykvaSxcbiAgICAgICAgICAgIC8oYXF1b3MtdHZbXFx3IF0rKVxcKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGFycFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTSEFSUF0sIFtUWVBFLCBTTUFSVFRWXV0sW1xuICAgICAgICAgICAgLyhicmF2aWFbXFx3IF0rKSggYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKG1pdHYtXFx3ezV9KSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL0hiYnR2LioodGVjaG5pc2F0KSAoLiopOy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmlTQVRcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvXFxiKHJva3UpW1xcZHhdKltcXClcXC9dKCg/OmR2cC0pP1tcXGRcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJva3VcbiAgICAgICAgICAgIC9oYmJ0dlxcL1xcZCtcXC5cXGQrXFwuXFxkKyArXFwoW1xcd1xcKyBdKjsgKihbXFx3XFxkXVteO10qKTsoW147XSopL2kgICAgICAgICAvLyBIYmJUViBkZXZpY2VzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgdHJpbV0sIFtNT0RFTCwgdHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIoYW5kcm9pZCB0dnxzbWFydFstIF0/dHZ8b3BlcmEgdHZ8dHY7IHJ2OilcXGIvaSAgICAgICAgICAgICAgICAgICAvLyBTbWFydFRWIGZyb20gVW5pZGVudGlmaWVkIFZlbmRvcnNcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgU01BUlRUVl1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIENPTlNPTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8ob3V5YSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V5YVxuICAgICAgICAgICAgLyhuaW50ZW5kbykgKFt3aWRzM3V0Y2hdKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOaW50ZW5kb1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBDT05TT0xFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoc2hpZWxkKSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnZpZGlhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOdmlkaWEnXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgLyhwbGF5c3RhdGlvbiBbMzQ1cG9ydGFibGV2aV0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF5c3RhdGlvblxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih4Ym94KD86IG9uZSk/KD8hOyB4Ym94KSlbXFwpOyBdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBYYm94XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBDT05TT0xFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gV0VBUkFCTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8oKHBlYmJsZSkpYXBwL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGViYmxlXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8od2F0Y2gpKD86ID9vc1ssXFwvXXxcXGQsXFxkXFwvKVtcXGRcXC5dKy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGUgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7IChnbGFzcykgXFxkL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIEdsYXNzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHd0NjM/MHsyLDN9KVxcKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8ocXVlc3QoIDJ8IHBybyk/KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2N1bHVzIFF1ZXN0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEZBQ0VCT09LXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gRU1CRURERURcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcL1stXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFtcbiAgICAgICAgICAgIC8oYWVvYmMpXFxiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVjaG8gRG90XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBFTUJFRERFRF1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBNSVhFRCAoR0VORVJJQylcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgL2Ryb2lkIC4rPzsgKFteO10rPykoPzogYnVpfFxcKSBhcHBsZXcpLis/IG1vYmlsZSBzYWZhcmkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBQaG9uZXMgZnJvbSBVbmlkZW50aWZpZWQgVmVuZG9yc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXjtdKz8pKD86IGJ1aXxcXCkgYXBwbGV3KS4rPyg/ISBtb2JpbGUpIHNhZmFyaS9pICAgICAgIC8vIEFuZHJvaWQgVGFibGV0cyBmcm9tIFVuaWRlbnRpZmllZCBWZW5kb3JzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigodGFibGV0fHRhYilbO1xcL118Zm9jdXNcXC9cXGQoPyEuK21vYmlsZSkpL2kgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZGVudGlmaWFibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKHBob25lfG1vYmlsZSg/Ols7XFwvXXwgWyBcXHdcXC9cXC5dKnNhZmFyaSl8cGRhKD89Lit3aW5kb3dzIGNlKSkvaSAgICAvLyBVbmlkZW50aWZpYWJsZSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC8oYW5kcm9pZFstXFx3XFwuIF17MCw5fSk7LitidWlsL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmljIEFuZHJvaWQgRGV2aWNlXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdHZW5lcmljJ11dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZW5naW5lIDogW1tcblxuICAgICAgICAgICAgL3dpbmRvd3MuKyBlZGdlXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVkZ2VIVE1MXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEVER0UrJ0hUTUwnXV0sIFtcblxuICAgICAgICAgICAgL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsaW5rXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCbGluayddXSwgW1xuXG4gICAgICAgICAgICAvKHByZXN0bylcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXN0b1xuICAgICAgICAgICAgLyh3ZWJraXR8dHJpZGVudHxuZXRmcm9udHxuZXRzdXJmfGFtYXlhfGx5bnh8dzNtfGdvYW5uYSlcXC8oW1xcd1xcLl0rKS9pLCAvLyBXZWJLaXQvVHJpZGVudC9OZXRGcm9udC9OZXRTdXJmL0FtYXlhL0x5bngvdzNtL0dvYW5uYVxuICAgICAgICAgICAgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKGtodG1sfHRhc21hbnxsaW5rcylbXFwvIF1cXCg/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLSFRNTC9UYXNtYW4vTGlua3NcbiAgICAgICAgICAgIC8oaWNhYilbXFwvIF0oWzIzXVxcLltcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlDYWJcbiAgICAgICAgICAgIC9cXGIobGlid2ViKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3J2XFw6KFtcXHdcXC5dezEsOX0pXFxiLisoZ2Vja28pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja29cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXVxuICAgICAgICBdLFxuXG4gICAgICAgIG9zIDogW1tcblxuICAgICAgICAgICAgLy8gV2luZG93c1xuICAgICAgICAgICAgL21pY3Jvc29mdCAod2luZG93cykgKHZpc3RhfHhwKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIChpVHVuZXMpXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od2luZG93cykgbnQgNlxcLjI7IChhcm0pL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbmRvd3MgUlRcbiAgICAgICAgICAgIC8od2luZG93cyAoPzpwaG9uZSg/OiBvcyk/fG1vYmlsZSkpW1xcLyBdPyhbXFxkXFwuXFx3IF0qKS9pLCAgICAgICAgICAgIC8vIFdpbmRvd3MgUGhvbmVcbiAgICAgICAgICAgIC8od2luZG93cylbXFwvIF0/KFtudGNlXFxkXFwuIF0rXFx3KSg/IS4reGJveCkvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcbiAgICAgICAgICAgIC8od2luKD89M3w5fG4pfHdpbiA5eCApKFtudFxcZFxcLl0rKS9pXG4gICAgICAgICAgICBdLCBbW05BTUUsICdXaW5kb3dzJ10sIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcblxuICAgICAgICAgICAgLy8gaU9TL21hY09TXG4gICAgICAgICAgICAvaXBbaG9uZWFkXXsyLDR9XFxiKD86LipvcyAoW1xcd10rKSBsaWtlIG1hY3w7IG9wZXJhKS9pLCAgICAgICAgICAgICAgLy8gaU9TXG4gICAgICAgICAgICAvaW9zO2Zic3ZcXC8oW1xcZFxcLl0rKS9pLFxuICAgICAgICAgICAgL2NmbmV0d29ya1xcLy4rZGFyd2luL2lcbiAgICAgICAgICAgIF0sIFtbVkVSU0lPTiwgL18vZywgJy4nXSwgW05BTUUsICdpT1MnXV0sIFtcbiAgICAgICAgICAgIC8obWFjIG9zIHgpID8oW1xcd1xcLiBdKikvaSxcbiAgICAgICAgICAgIC8obWFjaW50b3NofG1hY19wb3dlcnBjXFxiKSg/IS4raGFpa3UpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hYyBPU1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBNQUNfT1NdLCBbVkVSU0lPTiwgL18vZywgJy4nXV0sIFtcblxuICAgICAgICAgICAgLy8gTW9iaWxlIE9TZXNcbiAgICAgICAgICAgIC9kcm9pZCAoW1xcd1xcLl0rKVxcYi4rKGFuZHJvaWRbLSBdeDg2fGhhcm1vbnlvcykvaSAgICAgICAgICAgICAgICAgICAgLy8gQW5kcm9pZC14ODYvSGFybW9ueU9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQvV2ViT1MvUU5YL0JhZGEvUklNL01hZW1vL01lZUdvL1NhaWxmaXNoIE9TXG4gICAgICAgICAgICAvKGFuZHJvaWR8d2Vib3N8cW54fGJhZGF8cmltIHRhYmxldCBvc3xtYWVtb3xtZWVnb3xzYWlsZmlzaClbLVxcLyBdPyhbXFx3XFwuXSopL2ksXG4gICAgICAgICAgICAvKGJsYWNrYmVycnkpXFx3KlxcLyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja2JlcnJ5XG4gICAgICAgICAgICAvKHRpemVufGthaW9zKVtcXC8gXShbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpemVuL0thaU9TXG4gICAgICAgICAgICAvXFwoKHNlcmllczQwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJpZXMgNDBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcKGJiKDEwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxhY2tCZXJyeSAxMFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBCTEFDS0JFUlJZXV0sIFtcbiAgICAgICAgICAgIC8oPzpzeW1iaWFuID9vc3xzeW1ib3N8czYwKD89Oyl8c2VyaWVzNjApWy1cXC8gXT8oW1xcd1xcLl0qKS9pICAgICAgICAgLy8gU3ltYmlhblxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnU3ltYmlhbiddXSwgW1xuICAgICAgICAgICAgL21vemlsbGFcXC9bXFxkXFwuXSsgXFwoKD86bW9iaWxlfHRhYmxldHx0dnxtb2JpbGU7IFtcXHcgXSspOyBydjouKyBnZWNrb1xcLyhbXFx3XFwuXSspL2kgLy8gRmlyZWZveCBPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgT1MnXV0sIFtcbiAgICAgICAgICAgIC93ZWIwczsuK3J0KHR2KS9pLFxuICAgICAgICAgICAgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dlYk9TJ11dLCBbXG4gICAgICAgICAgICAvd2F0Y2goPzogP29zWyxcXC9dfFxcZCxcXGRcXC8pKFtcXGRcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNoT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dhdGNoT1MnXV0sIFtcblxuICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIC9jcmtleVxcLyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgQ0hST01FKydjYXN0J11dLCBbXG4gICAgICAgICAgICAvKGNyb3MpIFtcXHddKyg/OlxcKXwgKFtcXHdcXC5dKylcXGIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21pdW0gT1NcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgQ0hST01JVU1fT1NdLCBWRVJTSU9OXSxbXG5cbiAgICAgICAgICAgIC8vIFNtYXJ0IFRWc1xuICAgICAgICAgICAgL3BhbmFzb25pYzsodmllcmEpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYW5hc29uaWMgVmllcmFcbiAgICAgICAgICAgIC8obmV0cmFuZ2UpbW1oL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV0cmFuZ2VcbiAgICAgICAgICAgIC8obmV0dHYpXFwvKFxcZCtcXC5bXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRUVlxuXG4gICAgICAgICAgICAvLyBDb25zb2xlXG4gICAgICAgICAgICAvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKSAoW3dpZHMzNDVwb3J0YWJsZXZ1Y2hdKykvaSwgICAgICAgICAgICAgICAgIC8vIE5pbnRlbmRvL1BsYXlzdGF0aW9uXG4gICAgICAgICAgICAvKHhib3gpOyAreGJveCAoW15cXCk7XSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgWGJveCAoMzYwLCBPbmUsIFgsIFMsIFNlcmllcyBYLCBTZXJpZXMgUylcblxuICAgICAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgICAgIC9cXGIoam9saXxwYWxtKVxcYiA/KD86b3MpP1xcLz8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xpL1BhbG1cbiAgICAgICAgICAgIC8obWludClbXFwvXFwoXFwpIF0/KFxcdyopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbnRcbiAgICAgICAgICAgIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7IF0vaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFnZWlhL1ZlY3RvckxpbnV4XG4gICAgICAgICAgICAvKFtreGxuXT91YnVudHV8ZGViaWFufHN1c2V8b3BlbnN1c2V8Z2VudG9vfGFyY2goPz0gbGludXgpfHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWQgP2hhdHx6ZW53YWxrfGxpbnB1c3xyYXNwYmlhbnxwbGFuIDl8bWluaXh8cmlzYyBvc3xjb250aWtpfGRlZXBpbnxtYW5qYXJvfGVsZW1lbnRhcnkgb3N8c2FiYXlvbnxsaW5zcGlyZSkoPzogZ251XFwvbGludXgpPyg/OiBlbnRlcnByaXNlKT8oPzpbLSBdbGludXgpPyg/Oi1nbnUpP1stXFwvIF0/KD8hY2hyb218cGFja2FnZSkoWy1cXHdcXC5dKikvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVWJ1bnR1L0RlYmlhbi9TVVNFL0dlbnRvby9BcmNoL1NsYWNrd2FyZS9GZWRvcmEvTWFuZHJpdmEvQ2VudE9TL1BDTGludXhPUy9SZWRIYXQvWmVud2Fsay9MaW5wdXMvUmFzcGJpYW4vUGxhbjkvTWluaXgvUklTQ09TL0NvbnRpa2kvRGVlcGluL01hbmphcm8vZWxlbWVudGFyeS9TYWJheW9uL0xpbnNwaXJlXG4gICAgICAgICAgICAvKGh1cmR8bGludXgpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSHVyZC9MaW51eFxuICAgICAgICAgICAgLyhnbnUpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdOVVxuICAgICAgICAgICAgL1xcYihbLWZyZW50b3BjZ2hzXXswLDV9YnNkfGRyYWdvbmZseSlbXFwvIF0/KD8hYW1kfFtpeDM0Nl17MSwyfTg2KShbXFx3XFwuXSopL2ksIC8vIEZyZWVCU0QvTmV0QlNEL09wZW5CU0QvUEMtQlNEL0dob3N0QlNEL0RyYWdvbkZseVxuICAgICAgICAgICAgLyhoYWlrdSkgKFxcdyspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFpa3VcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLyhzdW5vcykgPyhbXFx3XFwuXFxkXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2xhcmlzXG4gICAgICAgICAgICBdLCBbW05BTUUsICdTb2xhcmlzJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKCg/Om9wZW4pP3NvbGFyaXMpWy1cXC8gXT8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbGFyaXNcbiAgICAgICAgICAgIC8oYWl4KSAoKFxcZCkoPz1cXC58XFwpfCApW1xcd1xcLl0pKi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBSVhcbiAgICAgICAgICAgIC9cXGIoYmVvc3xvc1xcLzJ8YW1pZ2Fvc3xtb3JwaG9zfG9wZW52bXN8ZnVjaHNpYXxocC11eHxzZXJlbml0eW9zKS9pLCAvLyBCZU9TL09TMi9BbWlnYU9TL01vcnBoT1MvT3BlblZNUy9GdWNoc2lhL0hQLVVYL1NlcmVuaXR5T1NcbiAgICAgICAgICAgIC8odW5peCkgPyhbXFx3XFwuXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVTklYXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl1cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gKHVhLCBleHRlbnNpb25zKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1YSA9PT0gT0JKX1RZUEUpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbnMgPSB1YTtcbiAgICAgICAgICAgIHVhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVBUGFyc2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVQVBhcnNlcih1YSwgZXh0ZW5zaW9ucykuZ2V0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX25hdmlnYXRvciA9ICh0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFICYmIHdpbmRvdy5uYXZpZ2F0b3IpID8gd2luZG93Lm5hdmlnYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF91YSA9IHVhIHx8ICgoX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBfbmF2aWdhdG9yLnVzZXJBZ2VudCA6IEVNUFRZKTtcbiAgICAgICAgdmFyIF91YWNoID0gKF9uYXZpZ2F0b3IgJiYgX25hdmlnYXRvci51c2VyQWdlbnREYXRhKSA/IF9uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gZXh0ZW5kKHJlZ2V4ZXMsIGV4dGVuc2lvbnMpIDogcmVnZXhlcztcbiAgICAgICAgdmFyIF9pc1NlbGZOYXYgPSBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IudXNlckFnZW50ID09IF91YTtcblxuICAgICAgICB0aGlzLmdldEJyb3dzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2Jyb3dzZXIgPSB7fTtcbiAgICAgICAgICAgIF9icm93c2VyW05BTUVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2Jyb3dzZXJbVkVSU0lPTl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgICAgICAgX2Jyb3dzZXJbTUFKT1JdID0gbWFqb3JpemUoX2Jyb3dzZXJbVkVSU0lPTl0pO1xuICAgICAgICAgICAgLy8gQnJhdmUtc3BlY2lmaWMgZGV0ZWN0aW9uXG4gICAgICAgICAgICBpZiAoX2lzU2VsZk5hdiAmJiBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IuYnJhdmUgJiYgdHlwZW9mIF9uYXZpZ2F0b3IuYnJhdmUuaXNCcmF2ZSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBfYnJvd3NlcltOQU1FXSA9ICdCcmF2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jyb3dzZXI7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0Q1BVID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9jcHUgPSB7fTtcbiAgICAgICAgICAgIF9jcHVbQVJDSElURUNUVVJFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9jcHUsIF91YSwgX3JneG1hcC5jcHUpO1xuICAgICAgICAgICAgcmV0dXJuIF9jcHU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9kZXZpY2UgPSB7fTtcbiAgICAgICAgICAgIF9kZXZpY2VbVkVORE9SXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9kZXZpY2VbTU9ERUxdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgIV9kZXZpY2VbVFlQRV0gJiYgX3VhY2ggJiYgX3VhY2gubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IE1PQklMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlQYWRPUy1zcGVjaWZpYyBkZXRlY3Rpb246IGlkZW50aWZpZWQgYXMgTWFjLCBidXQgaGFzIHNvbWUgaU9TLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgX2RldmljZVtNT0RFTF0gPT0gJ01hY2ludG9zaCcgJiYgX25hdmlnYXRvciAmJiB0eXBlb2YgX25hdmlnYXRvci5zdGFuZGFsb25lICE9PSBVTkRFRl9UWVBFICYmIF9uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgX25hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIpIHtcbiAgICAgICAgICAgICAgICBfZGV2aWNlW01PREVMXSA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICBfZGV2aWNlW1RZUEVdID0gVEFCTEVUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIF9lbmdpbmVbTkFNRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfZW5naW5lW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmd4TWFwcGVyLmNhbGwoX2VuZ2luZSwgX3VhLCBfcmd4bWFwLmVuZ2luZSk7XG4gICAgICAgICAgICByZXR1cm4gX2VuZ2luZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRPUyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfb3MgPSB7fTtcbiAgICAgICAgICAgIF9vc1tOQU1FXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9vc1tWRVJTSU9OXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9vcywgX3VhLCBfcmd4bWFwLm9zKTtcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmICFfb3NbTkFNRV0gJiYgX3VhY2ggJiYgX3VhY2gucGxhdGZvcm0gIT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgICAgICAgX29zW05BTUVdID0gX3VhY2gucGxhdGZvcm0gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Nocm9tZSBvcy9pLCBDSFJPTUlVTV9PUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9tYWNvcy9pLCBNQUNfT1MpOyAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVhICAgICAgOiB0aGlzLmdldFVBKCksXG4gICAgICAgICAgICAgICAgYnJvd3NlciA6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICAgICAgICAgIGVuZ2luZSAgOiB0aGlzLmdldEVuZ2luZSgpLFxuICAgICAgICAgICAgICAgIG9zICAgICAgOiB0aGlzLmdldE9TKCksXG4gICAgICAgICAgICAgICAgZGV2aWNlICA6IHRoaXMuZ2V0RGV2aWNlKCksXG4gICAgICAgICAgICAgICAgY3B1ICAgICA6IHRoaXMuZ2V0Q1BVKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0VUEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3VhO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFVBID0gZnVuY3Rpb24gKHVhKSB7XG4gICAgICAgICAgICBfdWEgPSAodHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIKSA/IHRyaW0odWEsIFVBX01BWF9MRU5HVEgpIDogdWE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRVQShfdWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgVUFQYXJzZXIuVkVSU0lPTiA9IExJQlZFUlNJT047XG4gICAgVUFQYXJzZXIuQlJPV1NFUiA9ICBlbnVtZXJpemUoW05BTUUsIFZFUlNJT04sIE1BSk9SXSk7XG4gICAgVUFQYXJzZXIuQ1BVID0gZW51bWVyaXplKFtBUkNISVRFQ1RVUkVdKTtcbiAgICBVQVBhcnNlci5ERVZJQ0UgPSBlbnVtZXJpemUoW01PREVMLCBWRU5ET1IsIFRZUEUsIENPTlNPTEUsIE1PQklMRSwgU01BUlRUViwgVEFCTEVULCBXRUFSQUJMRSwgRU1CRURERURdKTtcbiAgICBVQVBhcnNlci5FTkdJTkUgPSBVQVBhcnNlci5PUyA9IGVudW1lcml6ZShbTkFNRSwgVkVSU0lPTl0pO1xuXG4gICAgLy8vLy8vLy8vLy9cbiAgICAvLyBFeHBvcnRcbiAgICAvLy8vLy8vLy8vXG5cbiAgICAvLyBjaGVjayBqcyBlbnZpcm9ubWVudFxuICAgIGlmICh0eXBlb2YoZXhwb3J0cykgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgLy8gbm9kZWpzIGVudlxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlcXVpcmVqcyBlbnYgKG9wdGlvbmFsKVxuICAgICAgICBpZiAodHlwZW9mKGRlZmluZSkgPT09IEZVTkNfVFlQRSAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBVQVBhcnNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGpRdWVyeS9aZXB0byBzcGVjaWZpYyAob3B0aW9uYWwpXG4gICAgLy8gTm90ZTpcbiAgICAvLyAgIEluIEFNRCBlbnYgdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUga2VwdCBjbGVhbiwgYnV0IGpRdWVyeSBpcyBhbiBleGNlcHRpb24uXG4gICAgLy8gICBqUXVlcnkgYWx3YXlzIGV4cG9ydHMgdG8gZ2xvYmFsIHNjb3BlLCB1bmxlc3MgalF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSkgaXMgdXNlZCxcbiAgICAvLyAgIGFuZCB3ZSBzaG91bGQgY2F0Y2ggdGhhdC5cbiAgICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcbiAgICBpZiAoJCAmJiAhJC51YSkge1xuICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gICAgICAgICQudWEgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICQudWEuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5nZXRVQSgpO1xuICAgICAgICB9O1xuICAgICAgICAkLnVhLnNldCA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgICAgICAgcGFyc2VyLnNldFVBKHVhKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICQudWFbcHJvcF0gPSByZXN1bHRbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG59KSh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHRoaXMpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MTc5OiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuLyoqXG4gKiBFbnVtIGZvciB0eXBlcyBvZiBib3RzLlxuICogU3BlY2lmaWMgdHlwZXMgb2YgYm90cyBjb21lIGZpcnN0LCBmb2xsb3dlZCBieSBhdXRvbWF0aW9uIHRlY2hub2xvZ2llcy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgQm90S2luZCA9IHtcbiAgICAvLyBPYmplY3QgaXMgdXNlZCBpbnN0ZWFkIG9mIFR5cGVzY3JpcHQgZW51bSB0byBhdm9pZCBlbWl0dGluZyBJSUZFIHdoaWNoIG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IGZ1cnRoZXIgdHJlZS1zaGFraW5nLlxuICAgIC8vIFNlZSBleGFtcGxlIG9mIGNvbXBpbGVkIGVudW1zIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS80NzM2Mzk5NilcbiAgICBBd2Vzb21pdW06ICdhd2Vzb21pdW0nLFxuICAgIENlZjogJ2NlZicsXG4gICAgQ2VmU2hhcnA6ICdjZWZzaGFycCcsXG4gICAgQ29hY2hKUzogJ2NvYWNoanMnLFxuICAgIEVsZWN0cm9uOiAnZWxlY3Ryb24nLFxuICAgIEZNaW5lcjogJ2ZtaW5lcicsXG4gICAgR2ViOiAnZ2ViJyxcbiAgICBOaWdodG1hcmVKUzogJ25pZ2h0bWFyZWpzJyxcbiAgICBQaGFudG9tYXM6ICdwaGFudG9tYXMnLFxuICAgIFBoYW50b21KUzogJ3BoYW50b21qcycsXG4gICAgUmhpbm86ICdyaGlubycsXG4gICAgU2VsZW5pdW06ICdzZWxlbml1bScsXG4gICAgU2VxdWVudHVtOiAnc2VxdWVudHVtJyxcbiAgICBTbGltZXJKUzogJ3NsaW1lcmpzJyxcbiAgICBXZWJEcml2ZXJJTzogJ3dlYmRyaXZlcmlvJyxcbiAgICBXZWJEcml2ZXI6ICd3ZWJkcml2ZXInLFxuICAgIEhlYWRsZXNzQ2hyb21lOiAnaGVhZGxlc3NfY2hyb21lJyxcbiAgICBVbmtub3duOiAndW5rbm93bicsXG59O1xuLyoqXG4gKiBCb3QgZGV0ZWN0aW9uIGVycm9yLlxuICovXG52YXIgQm90ZEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCb3RkRXJyb3IsIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCb3RkRXJyb3IuXG4gICAgICpcbiAgICAgKiBAY2xhc3NcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCb3RkRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgX3RoaXMubmFtZSA9ICdCb3RkRXJyb3InO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEJvdGRFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBCb3RkRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnQgeyBCb3RkRXJyb3IgfTtcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdGRFcnJvciwgQm90S2luZCwgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3QoY29tcG9uZW50cywgZGV0ZWN0b3JzKSB7XG4gICAgdmFyIGRldGVjdGlvbnMgPSB7fTtcbiAgICB2YXIgZmluYWxEZXRlY3Rpb24gPSB7XG4gICAgICAgIGJvdDogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKHZhciBkZXRlY3Rvck5hbWUgaW4gZGV0ZWN0b3JzKSB7XG4gICAgICAgIHZhciBkZXRlY3RvciA9IGRldGVjdG9yc1tkZXRlY3Rvck5hbWVdO1xuICAgICAgICB2YXIgZGV0ZWN0b3JSZXMgPSBkZXRlY3Rvcihjb21wb25lbnRzKTtcbiAgICAgICAgdmFyIGRldGVjdGlvbiA9IHsgYm90OiBmYWxzZSB9O1xuICAgICAgICBpZiAodHlwZW9mIGRldGVjdG9yUmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGV0ZWN0aW9uID0geyBib3Q6IHRydWUsIGJvdEtpbmQ6IGRldGVjdG9yUmVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGV0ZWN0b3JSZXMpIHtcbiAgICAgICAgICAgIGRldGVjdGlvbiA9IHsgYm90OiB0cnVlLCBib3RLaW5kOiBCb3RLaW5kLlVua25vd24gfTtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3Rpb25zW2RldGVjdG9yTmFtZV0gPSBkZXRlY3Rpb247XG4gICAgICAgIGlmIChkZXRlY3Rpb24uYm90KSB7XG4gICAgICAgICAgICBmaW5hbERldGVjdGlvbiA9IGRldGVjdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW2RldGVjdGlvbnMsIGZpbmFsRGV0ZWN0aW9uXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wb25lbnRzLCBzb3VyY2VzS2V5cztcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VzS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbChzb3VyY2VzS2V5cy5tYXAoZnVuY3Rpb24gKHNvdXJjZUtleSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMsIF9hLCBfYiwgZXJyb3JfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9kLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gc291cmNlc1tzb3VyY2VLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gY29tcG9uZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYiA9IHNvdXJjZUtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJlcygpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYVtfYl0gPSAoX2MudmFsdWUgPSBfZC5zZW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnN0YXRlID0gMCAvKiBTdGF0ZS5TdWNjZXNzICovLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9kLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfMSBpbnN0YW5jZW9mIEJvdGRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW3NvdXJjZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZXJyb3JfMS5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlwiLmNvbmNhdChlcnJvcl8xLm5hbWUsIFwiOiBcIikuY29uY2F0KGVycm9yXzEubWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW3NvdXJjZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xIGluc3RhbmNlb2YgRXJyb3IgPyBcIlwiLmNvbmNhdChlcnJvcl8xLm5hbWUsIFwiOiBcIikuY29uY2F0KGVycm9yXzEubWVzc2FnZSkgOiBTdHJpbmcoZXJyb3JfMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgY29tcG9uZW50c107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyLCB2YWx1ZSkge1xuICAgIHJldHVybiBhcnIuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0ckluY2x1ZGVzKHN0ciwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUZpbmQoYXJyYXksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCdmaW5kJyBpbiBhcnJheSlcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbmQoY2FsbGJhY2spO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKGFycmF5W2ldLCBpLCBhcnJheSkpXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCJpbXBvcnQgeyBhcnJheUZpbmQsIGFycmF5SW5jbHVkZXMgfSBmcm9tICcuL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0UHJvcHMob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyKSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBrZXlzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoYXJyYXlJbmNsdWRlcyhhcnIsIGtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGFycmF5RmluZChhcnIsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4ga2V5LnRlc3QodmFsdWUpOyB9KTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAodmFyIF9hID0gMCwga2V5c18xID0ga2V5czsgX2EgPCBrZXlzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzXzFbX2FdO1xuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZV8xID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzEudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb3VudFRydXRoeSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWx1ZSkgeyByZXR1cm4gc3VtICsgKHZhbHVlID8gMSA6IDApOyB9LCAwKTtcbn1cbiIsImltcG9ydCB7IGRldGVjdEFwcFZlcnNpb24gfSBmcm9tICcuL2FwcF92ZXJzaW9uJztcbmltcG9ydCB7IGRldGVjdERvY3VtZW50QXR0cmlidXRlcyB9IGZyb20gJy4vZG9jdW1lbnRfZWxlbWVudF9rZXlzJztcbmltcG9ydCB7IGRldGVjdEVycm9yVHJhY2UgfSBmcm9tICcuL2Vycm9yX3RyYWNlJztcbmltcG9ydCB7IGRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5IH0gZnJvbSAnLi9ldmFsX2xlbmd0aCc7XG5pbXBvcnQgeyBkZXRlY3RGdW5jdGlvbkJpbmQgfSBmcm9tICcuL2Z1bmN0aW9uX2JpbmQnO1xuaW1wb3J0IHsgZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vbGFuZ3VhZ2VzX2luY29uc2lzdGVuY3knO1xuaW1wb3J0IHsgZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudCB9IGZyb20gJy4vbWltZV90eXBlc19jb25zaXN0ZW5jZSc7XG5pbXBvcnQgeyBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyB9IGZyb20gJy4vbm90aWZpY2F0aW9uX3Blcm1pc3Npb25zJztcbmltcG9ydCB7IGRldGVjdFBsdWdpbnNBcnJheSB9IGZyb20gJy4vcGx1Z2luc19hcnJheSc7XG5pbXBvcnQgeyBkZXRlY3RQbHVnaW5zTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vcGx1Z2luc19pbmNvbnNpc3RlbmN5JztcbmltcG9ydCB7IGRldGVjdFByb2Nlc3MgfSBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvZHVjdFN1YiB9IGZyb20gJy4vcHJvZHVjdF9zdWInO1xuaW1wb3J0IHsgZGV0ZWN0VXNlckFnZW50IH0gZnJvbSAnLi91c2VyX2FnZW50JztcbmltcG9ydCB7IGRldGVjdFdlYkRyaXZlciB9IGZyb20gJy4vd2ViZHJpdmVyJztcbmltcG9ydCB7IGRldGVjdFdlYkdMIH0gZnJvbSAnLi93ZWJnbCc7XG5pbXBvcnQgeyBkZXRlY3RXaW5kb3dFeHRlcm5hbCB9IGZyb20gJy4vd2luZG93X2V4dGVybmFsJztcbmltcG9ydCB7IGRldGVjdFdpbmRvd1NpemUgfSBmcm9tICcuL3dpbmRvd19zaXplJztcbmltcG9ydCB7IGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyB9IGZyb20gJy4vZGlzdGluY3RpdmVfcHJvcGVydGllcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IHZhciBkZXRlY3RvcnMgPSB7XG4gICAgZGV0ZWN0QXBwVmVyc2lvbjogZGV0ZWN0QXBwVmVyc2lvbixcbiAgICBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXM6IGRldGVjdERvY3VtZW50QXR0cmlidXRlcyxcbiAgICBkZXRlY3RFcnJvclRyYWNlOiBkZXRlY3RFcnJvclRyYWNlLFxuICAgIGRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5OiBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeSxcbiAgICBkZXRlY3RGdW5jdGlvbkJpbmQ6IGRldGVjdEZ1bmN0aW9uQmluZCxcbiAgICBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5OiBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5LFxuICAgIGRldGVjdE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOiBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyxcbiAgICBkZXRlY3RQbHVnaW5zQXJyYXk6IGRldGVjdFBsdWdpbnNBcnJheSxcbiAgICBkZXRlY3RQbHVnaW5zTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3ksXG4gICAgZGV0ZWN0UHJvY2VzczogZGV0ZWN0UHJvY2VzcyxcbiAgICBkZXRlY3RVc2VyQWdlbnQ6IGRldGVjdFVzZXJBZ2VudCxcbiAgICBkZXRlY3RXZWJEcml2ZXI6IGRldGVjdFdlYkRyaXZlcixcbiAgICBkZXRlY3RXZWJHTDogZGV0ZWN0V2ViR0wsXG4gICAgZGV0ZWN0V2luZG93RXh0ZXJuYWw6IGRldGVjdFdpbmRvd0V4dGVybmFsLFxuICAgIGRldGVjdFdpbmRvd1NpemU6IGRldGVjdFdpbmRvd1NpemUsXG4gICAgZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudDogZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudCxcbiAgICBkZXRlY3RQcm9kdWN0U3ViOiBkZXRlY3RQcm9kdWN0U3ViLFxuICAgIGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllczogZGV0ZWN0RGlzdGluY3RpdmVQcm9wZXJ0aWVzLFxufTtcbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0QXBwVmVyc2lvbihfYSkge1xuICAgIHZhciBhcHBWZXJzaW9uID0gX2EuYXBwVmVyc2lvbjtcbiAgICBpZiAoYXBwVmVyc2lvbi5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9oZWFkbGVzcy9pLnRlc3QoYXBwVmVyc2lvbi52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIGlmICgvZWxlY3Ryb24vaS50ZXN0KGFwcFZlcnNpb24udmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbiAgICBpZiAoL3NsaW1lcmpzL2kudGVzdChhcHBWZXJzaW9uLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuU2xpbWVySlM7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5jbHVkZXMgfSBmcm9tICcuLi91dGlscy9taXNjJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMoX2EpIHtcbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50S2V5cyA9IF9hLmRvY3VtZW50RWxlbWVudEtleXM7XG4gICAgaWYgKGRvY3VtZW50RWxlbWVudEtleXMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlcyhkb2N1bWVudEVsZW1lbnRLZXlzLnZhbHVlLCAnc2VsZW5pdW0nLCAnd2ViZHJpdmVyJywgJ2RyaXZlcicpKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNlbGVuaXVtO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RXJyb3JUcmFjZShfYSkge1xuICAgIHZhciBlcnJvclRyYWNlID0gX2EuZXJyb3JUcmFjZTtcbiAgICBpZiAoZXJyb3JUcmFjZS5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9QaGFudG9tSlMvaS50ZXN0KGVycm9yVHJhY2UudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5QaGFudG9tSlM7XG59XG4iLCJpbXBvcnQgeyBhcnJheUluY2x1ZGVzIH0gZnJvbSAnLi4vdXRpbHMvcG9ueWZpbGxzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeShfYSkge1xuICAgIHZhciBldmFsTGVuZ3RoID0gX2EuZXZhbExlbmd0aCwgYnJvd3NlcktpbmQgPSBfYS5icm93c2VyS2luZCwgYnJvd3NlckVuZ2luZUtpbmQgPSBfYS5icm93c2VyRW5naW5lS2luZDtcbiAgICBpZiAoZXZhbExlbmd0aC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBsZW5ndGggPSBldmFsTGVuZ3RoLnZhbHVlO1xuICAgIGlmIChicm93c2VyRW5naW5lS2luZC52YWx1ZSA9PT0gXCJ1bmtub3duXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuVW5rbm93biAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoKGxlbmd0aCA9PT0gMzcgJiYgIWFycmF5SW5jbHVkZXMoW1wid2Via2l0XCIgLyogQnJvd3NlckVuZ2luZUtpbmQuV2Via2l0ICovLCBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi9dLCBicm93c2VyRW5naW5lS2luZC52YWx1ZSkpIHx8XG4gICAgICAgIChsZW5ndGggPT09IDM5ICYmICFhcnJheUluY2x1ZGVzKFtcImludGVybmV0X2V4cGxvcmVyXCIgLyogQnJvd3NlcktpbmQuSUUgKi9dLCBicm93c2VyS2luZC52YWx1ZSkpIHx8XG4gICAgICAgIChsZW5ndGggPT09IDMzICYmICFhcnJheUluY2x1ZGVzKFtcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi9dLCBicm93c2VyRW5naW5lS2luZC52YWx1ZSkpKTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RnVuY3Rpb25CaW5kKF9hKSB7XG4gICAgdmFyIGZ1bmN0aW9uQmluZCA9IF9hLmZ1bmN0aW9uQmluZDtcbiAgICBpZiAoZnVuY3Rpb25CaW5kLnN0YXRlID09PSAtMiAvKiBTdGF0ZS5Ob3RGdW5jdGlvbiAqLylcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5KF9hKSB7XG4gICAgdmFyIGxhbmd1YWdlcyA9IF9hLmxhbmd1YWdlcztcbiAgICBpZiAobGFuZ3VhZ2VzLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgbGFuZ3VhZ2VzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKF9hKSB7XG4gICAgdmFyIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zID0gX2Eubm90aWZpY2F0aW9uUGVybWlzc2lvbnMsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQ7XG4gICAgaWYgKGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHwgYnJvd3NlcktpbmQudmFsdWUgIT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG5vdGlmaWNhdGlvblBlcm1pc3Npb25zLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgbm90aWZpY2F0aW9uUGVybWlzc2lvbnMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQbHVnaW5zQXJyYXkoX2EpIHtcbiAgICB2YXIgcGx1Z2luc0FycmF5ID0gX2EucGx1Z2luc0FycmF5O1xuICAgIGlmIChwbHVnaW5zQXJyYXkuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyAmJiAhcGx1Z2luc0FycmF5LnZhbHVlKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3koX2EpIHtcbiAgICB2YXIgcGx1Z2luc0xlbmd0aCA9IF9hLnBsdWdpbnNMZW5ndGgsIGFuZHJvaWQgPSBfYS5hbmRyb2lkLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kLCBicm93c2VyRW5naW5lS2luZCA9IF9hLmJyb3dzZXJFbmdpbmVLaW5kO1xuICAgIGlmIChwbHVnaW5zTGVuZ3RoLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYW5kcm9pZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChicm93c2VyS2luZC52YWx1ZSAhPT0gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi8gfHxcbiAgICAgICAgYW5kcm9pZC52YWx1ZSB8fFxuICAgICAgICBicm93c2VyRW5naW5lS2luZC52YWx1ZSAhPT0gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHBsdWdpbnNMZW5ndGgudmFsdWUgPT09IDApXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQcm9jZXNzKF9hKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBwcm9jZXNzID0gX2EucHJvY2VzcztcbiAgICBpZiAocHJvY2Vzcy5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByb2Nlc3MudmFsdWUudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCAoKF9iID0gcHJvY2Vzcy52YWx1ZS52ZXJzaW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmVsZWN0cm9uKSAhPSBudWxsKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0VXNlckFnZW50KF9hKSB7XG4gICAgdmFyIHVzZXJBZ2VudCA9IF9hLnVzZXJBZ2VudDtcbiAgICBpZiAodXNlckFnZW50LnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoL1BoYW50b21KUy9pLnRlc3QodXNlckFnZW50LnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xuICAgIGlmICgvSGVhZGxlc3MvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIGlmICgvRWxlY3Ryb24vaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkVsZWN0cm9uO1xuICAgIGlmICgvc2xpbWVyanMvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNsaW1lckpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXZWJEcml2ZXIoX2EpIHtcbiAgICB2YXIgd2ViRHJpdmVyID0gX2Eud2ViRHJpdmVyO1xuICAgIGlmICh3ZWJEcml2ZXIuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyAmJiB3ZWJEcml2ZXIudmFsdWUpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXZWJHTChfYSkge1xuICAgIHZhciB3ZWJHTCA9IF9hLndlYkdMO1xuICAgIGlmICh3ZWJHTC5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKSB7XG4gICAgICAgIHZhciBfYiA9IHdlYkdMLnZhbHVlLCB2ZW5kb3IgPSBfYi52ZW5kb3IsIHJlbmRlcmVyID0gX2IucmVuZGVyZXI7XG4gICAgICAgIGlmICh2ZW5kb3IgPT0gJ0JyaWFuIFBhdWwnICYmIHJlbmRlcmVyID09ICdNZXNhIE9mZlNjcmVlbicpIHtcbiAgICAgICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXaW5kb3dFeHRlcm5hbChfYSkge1xuICAgIHZhciB3aW5kb3dFeHRlcm5hbCA9IF9hLndpbmRvd0V4dGVybmFsO1xuICAgIGlmICh3aW5kb3dFeHRlcm5hbC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9TZXF1ZW50dW0vaS50ZXN0KHdpbmRvd0V4dGVybmFsLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuU2VxdWVudHVtO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXaW5kb3dTaXplKF9hKSB7XG4gICAgdmFyIHdpbmRvd1NpemUgPSBfYS53aW5kb3dTaXplLCBkb2N1bWVudEZvY3VzID0gX2EuZG9jdW1lbnRGb2N1cztcbiAgICBpZiAod2luZG93U2l6ZS5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8IGRvY3VtZW50Rm9jdXMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBfYiA9IHdpbmRvd1NpemUudmFsdWUsIG91dGVyV2lkdGggPSBfYi5vdXRlcldpZHRoLCBvdXRlckhlaWdodCA9IF9iLm91dGVySGVpZ2h0O1xuICAgIC8vIFdoZW4gYSBwYWdlIGlzIG9wZW5lZCBpbiBhIG5ldyB0YWIgd2l0aG91dCBmb2N1c2luZyBpdCByaWdodCBhd2F5LCB0aGUgd2luZG93IG91dGVyIHNpemUgaXMgMHgwXG4gICAgaWYgKCFkb2N1bWVudEZvY3VzLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKG91dGVyV2lkdGggPT09IDAgJiYgb3V0ZXJIZWlnaHQgPT09IDApXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RNaW1lVHlwZXNDb25zaXN0ZW50KF9hKSB7XG4gICAgdmFyIG1pbWVUeXBlc0NvbnNpc3RlbnQgPSBfYS5taW1lVHlwZXNDb25zaXN0ZW50O1xuICAgIGlmIChtaW1lVHlwZXNDb25zaXN0ZW50LnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgIW1pbWVUeXBlc0NvbnNpc3RlbnQudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuVW5rbm93bjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFByb2R1Y3RTdWIoX2EpIHtcbiAgICB2YXIgcHJvZHVjdFN1YiA9IF9hLnByb2R1Y3RTdWIsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQ7XG4gICAgaWYgKHByb2R1Y3RTdWIuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fCBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKChicm93c2VyS2luZC52YWx1ZSA9PT0gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi8gfHxcbiAgICAgICAgYnJvd3NlcktpbmQudmFsdWUgPT09IFwic2FmYXJpXCIgLyogQnJvd3NlcktpbmQuU2FmYXJpICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcIm9wZXJhXCIgLyogQnJvd3NlcktpbmQuT3BlcmEgKi8gfHxcbiAgICAgICAgYnJvd3NlcktpbmQudmFsdWUgPT09IFwid2VjaGF0XCIgLyogQnJvd3NlcktpbmQuV2VDaGF0ICovKSAmJlxuICAgICAgICBwcm9kdWN0U3ViLnZhbHVlICE9PSAnMjAwMzAxMDcnKVxuICAgICAgICByZXR1cm4gQm90S2luZC5Vbmtub3duO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyhfYSkge1xuICAgIHZhciBkaXN0aW5jdGl2ZVByb3BzID0gX2EuZGlzdGluY3RpdmVQcm9wcztcbiAgICBpZiAoZGlzdGluY3RpdmVQcm9wcy5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlID0gZGlzdGluY3RpdmVQcm9wcy52YWx1ZTtcbiAgICB2YXIgYm90O1xuICAgIGZvciAoYm90IGluIHZhbHVlKVxuICAgICAgICBpZiAodmFsdWVbYm90XSlcbiAgICAgICAgICAgIHJldHVybiBib3Q7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjb3VudFRydXRoeSB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBzdHJJbmNsdWRlcyB9IGZyb20gJy4vcG9ueWZpbGxzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyRW5naW5lS2luZCgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIC8vIEJhc2VkIG9uIHJlc2VhcmNoIGluIE9jdG9iZXIgMjAyMC4gVGVzdGVkIHRvIGRldGVjdCBDaHJvbWl1bSA0Mi04Ni5cbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICB2YXIgbiA9IG5hdmlnYXRvcjtcbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnd2Via2l0UGVyc2lzdGVudFN0b3JhZ2UnIGluIG4sXG4gICAgICAgICd3ZWJraXRUZW1wb3JhcnlTdG9yYWdlJyBpbiBuLFxuICAgICAgICBuLnZlbmRvci5pbmRleE9mKCdHb29nbGUnKSA9PT0gMCxcbiAgICAgICAgJ3dlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwnIGluIHcsXG4gICAgICAgICdCYXR0ZXJ5TWFuYWdlcicgaW4gdyxcbiAgICAgICAgJ3dlYmtpdE1lZGlhU3RyZWFtJyBpbiB3LFxuICAgICAgICAnd2Via2l0U3BlZWNoR3JhbW1hcicgaW4gdyxcbiAgICBdKSA+PSA1KSB7XG4gICAgICAgIHJldHVybiBcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi87XG4gICAgfVxuICAgIGlmIChjb3VudFRydXRoeShbXG4gICAgICAgICdBcHBsZVBheUVycm9yJyBpbiB3LFxuICAgICAgICAnQ1NTUHJpbWl0aXZlVmFsdWUnIGluIHcsXG4gICAgICAgICdDb3VudGVyJyBpbiB3LFxuICAgICAgICBuLnZlbmRvci5pbmRleE9mKCdBcHBsZScpID09PSAwLFxuICAgICAgICAnZ2V0U3RvcmFnZVVwZGF0ZXMnIGluIG4sXG4gICAgICAgICdXZWJLaXRNZWRpYUtleXMnIGluIHcsXG4gICAgXSkgPj0gNCkge1xuICAgICAgICByZXR1cm4gXCJ3ZWJraXRcIiAvKiBCcm93c2VyRW5naW5lS2luZC5XZWJraXQgKi87XG4gICAgfVxuICAgIGlmIChjb3VudFRydXRoeShbXG4gICAgICAgICdidWlsZElEJyBpbiBuYXZpZ2F0b3IsXG4gICAgICAgICdNb3pBcHBlYXJhbmNlJyBpbiAoKF9iID0gKF9hID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3R5bGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9KSxcbiAgICAgICAgJ29ubW96ZnVsbHNjcmVlbmNoYW5nZScgaW4gdyxcbiAgICAgICAgJ21veklubmVyU2NyZWVuWCcgaW4gdyxcbiAgICAgICAgJ0NTU01vekRvY3VtZW50UnVsZScgaW4gdyxcbiAgICAgICAgJ0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbScgaW4gdyxcbiAgICBdKSA+PSA0KSB7XG4gICAgICAgIHJldHVybiBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi87XG4gICAgfVxuICAgIHJldHVybiBcInVua25vd25cIiAvKiBCcm93c2VyRW5naW5lS2luZC5Vbmtub3duICovO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJLaW5kKCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgdXNlckFnZW50ID0gKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ2VkZy8nKSkge1xuICAgICAgICByZXR1cm4gXCJlZGdlXCIgLyogQnJvd3NlcktpbmQuRWRnZSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAndHJpZGVudCcpIHx8IHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ21zaWUnKSkge1xuICAgICAgICByZXR1cm4gXCJpbnRlcm5ldF9leHBsb3JlclwiIC8qIEJyb3dzZXJLaW5kLklFICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICd3ZWNoYXQnKSkge1xuICAgICAgICByZXR1cm4gXCJ3ZWNoYXRcIiAvKiBCcm93c2VyS2luZC5XZUNoYXQgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ2ZpcmVmb3gnKSkge1xuICAgICAgICByZXR1cm4gXCJmaXJlZm94XCIgLyogQnJvd3NlcktpbmQuRmlyZWZveCAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnb3BlcmEnKSB8fCBzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdvcHInKSkge1xuICAgICAgICByZXR1cm4gXCJvcGVyYVwiIC8qIEJyb3dzZXJLaW5kLk9wZXJhICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdjaHJvbWUnKSkge1xuICAgICAgICByZXR1cm4gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ3NhZmFyaScpKSB7XG4gICAgICAgIHJldHVybiBcInNhZmFyaVwiIC8qIEJyb3dzZXJLaW5kLlNhZmFyaSAqLztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcInVua25vd25cIiAvKiBCcm93c2VyS2luZC5Vbmtub3duICovO1xuICAgIH1cbn1cbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZpbmdlcnByaW50anMvZmluZ2VycHJpbnRqcy9ibG9iL21hc3Rlci9zcmMvdXRpbHMvYnJvd3Nlci50cyNMMjIzXG5leHBvcnQgZnVuY3Rpb24gaXNBbmRyb2lkKCkge1xuICAgIHZhciBicm93c2VyRW5naW5lS2luZCA9IGdldEJyb3dzZXJFbmdpbmVLaW5kKCk7XG4gICAgdmFyIGlzSXRDaHJvbWl1bSA9IGJyb3dzZXJFbmdpbmVLaW5kID09PSBcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi87XG4gICAgdmFyIGlzSXRHZWNrbyA9IGJyb3dzZXJFbmdpbmVLaW5kID09PSBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi87XG4gICAgLy8gT25seSAyIGJyb3dzZXIgZW5naW5lcyBhcmUgcHJlc2VudGVkIG9uIEFuZHJvaWQuXG4gICAgLy8gQWN0dWFsbHksIHRoZXJlIGlzIGFsc28gQW5kcm9pZCA0LjEgYnJvd3NlciwgYnV0IGl0J3Mgbm90IHdvcnRoIGRldGVjdGluZyBpdCBhdCB0aGUgbW9tZW50LlxuICAgIGlmICghaXNJdENocm9taXVtICYmICFpc0l0R2Vja28pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICAvLyBDaHJvbWUgcmVtb3ZlcyBhbGwgd29yZHMgXCJBbmRyb2lkXCIgZnJvbSBgbmF2aWdhdG9yYCB3aGVuIGRlc2t0b3AgdmVyc2lvbiBpcyByZXF1ZXN0ZWRcbiAgICAvLyBGaXJlZm94IGtlZXBzIFwiQW5kcm9pZFwiIGluIGBuYXZpZ2F0b3IuYXBwVmVyc2lvbmAgd2hlbiBkZXNrdG9wIHZlcnNpb24gaXMgcmVxdWVzdGVkXG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICdvbm9yaWVudGF0aW9uY2hhbmdlJyBpbiB3LFxuICAgICAgICAnb3JpZW50YXRpb24nIGluIHcsXG4gICAgICAgIGlzSXRDaHJvbWl1bSAmJiAhKCdTaGFyZWRXb3JrZXInIGluIHcpLFxuICAgICAgICBpc0l0R2Vja28gJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSxcbiAgICBdKSA+PSAyKTtcbn1cbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZpbmdlcnByaW50anMvZmluZ2VycHJpbnRqcy9ibG9iLzEwOWY4ZWY4MDIxNjlkZjNmYTFjNWQxYmFhNGI3YmMwYWJiYzFkOTEvc3JjL3V0aWxzL2Jyb3dzZXIudHMjTDEwMkMxLUwxMThDMlxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVza3RvcFdlYktpdCgpIHtcbiAgICAvLyBDaGVja2VkIGluIFNhZmFyaSBhbmQgRHVja0R1Y2tHb1xuICAgIHZhciB3ID0gd2luZG93O1xuICAgIHZhciBIVE1MRWxlbWVudCA9IHcuSFRNTEVsZW1lbnQsIERvY3VtZW50ID0gdy5Eb2N1bWVudDtcbiAgICByZXR1cm4gKGNvdW50VHJ1dGh5KFtcbiAgICAgICAgJ3NhZmFyaScgaW4gdyxcbiAgICAgICAgISgnb25nZXN0dXJlZW5kJyBpbiB3KSxcbiAgICAgICAgISgnVG91Y2hFdmVudCcgaW4gdyksXG4gICAgICAgICEoJ29yaWVudGF0aW9uJyBpbiB3KSxcbiAgICAgICAgSFRNTEVsZW1lbnQgJiYgISgnYXV0b2NhcGl0YWxpemUnIGluIEhUTUxFbGVtZW50LnByb3RvdHlwZSksXG4gICAgICAgIERvY3VtZW50ICYmICdwb2ludGVyTG9ja0VsZW1lbnQnIGluIERvY3VtZW50LnByb3RvdHlwZSxcbiAgICBdKSA+PSA0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCgpIHtcbiAgICBpZiAod2luZG93LkNTUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnd2luZG93LkNTUyBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIENTUy5zdXBwb3J0cygnLW1vei1hcHBlYXJhbmNlJywgJ2F1dG8nKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2N1bWVudEZvY3VzKCkge1xuICAgIGlmIChkb2N1bWVudC5oYXNGb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDaHJvbWl1bTg2T3JOZXdlcigpIHtcbiAgICAvLyBDaGVja2VkIGluIENocm9tZSA4NSB2cyBDaHJvbWUgODYgYm90aCBvbiBkZXNrdG9wIGFuZCBBbmRyb2lkXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICEoJ01lZGlhU2V0dGluZ3NSYW5nZScgaW4gdyksXG4gICAgICAgICdSVENFbmNvZGVkQXVkaW9GcmFtZScgaW4gdyxcbiAgICAgICAgJycgKyB3LkludGwgPT09ICdbb2JqZWN0IEludGxdJyxcbiAgICAgICAgJycgKyB3LlJlZmxlY3QgPT09ICdbb2JqZWN0IFJlZmxlY3RdJyxcbiAgICBdKSA+PSAzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0lQYWQoKSB7XG4gICAgLy8gQ2hlY2tlZCBvbjpcbiAgICAvLyBTYWZhcmkgb24gaVBhZE9TIChib3RoIG1vYmlsZSBhbmQgZGVza3RvcCBtb2Rlcyk6IDgsIDExLCAxMiwgMTMsIDE0XG4gICAgLy8gQ2hyb21lIG9uIGlQYWRPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiAxMSwgMTIsIDEzLCAxNFxuICAgIC8vIFNhZmFyaSBvbiBpT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogOSwgMTAsIDExLCAxMiwgMTMsIDE0XG4gICAgLy8gQ2hyb21lIG9uIGlPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiA5LCAxMCwgMTEsIDEyLCAxMywgMTRcbiAgICAvLyBCZWZvcmUgaU9TIDEzLiBTYWZhcmkgdGFtcGVycyB0aGUgdmFsdWUgaW4gXCJyZXF1ZXN0IGRlc2t0b3Agc2l0ZVwiIG1vZGUgc2luY2UgaU9TIDEzLlxuICAgIGlmIChuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdpUGFkJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHMgPSBzY3JlZW47XG4gICAgdmFyIHNjcmVlblJhdGlvID0gcy53aWR0aCAvIHMuaGVpZ2h0O1xuICAgIHJldHVybiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnTWVkaWFTb3VyY2UnIGluIHdpbmRvdyxcbiAgICAgICAgISFFbGVtZW50LnByb3RvdHlwZS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbixcbiAgICAgICAgLy8gaVBob25lIDRTIHRoYXQgcnVucyBpT1MgOSBtYXRjaGVzIHRoaXMuIEJ1dCBpdCB3b24ndCBtYXRjaCB0aGUgY3JpdGVyaWEgYWJvdmUsIHNvIGl0IHdvbid0IGJlIGRldGVjdGVkIGFzIGlQYWQuXG4gICAgICAgIHNjcmVlblJhdGlvID4gMC42NSAmJiBzY3JlZW5SYXRpbyA8IDEuNTMsXG4gICAgXSkgPj0gMik7XG59XG4iLCJpbXBvcnQgZ2V0QXBwVmVyc2lvbiBmcm9tICcuL2FwcF92ZXJzaW9uJztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnRLZXlzIGZyb20gJy4vZG9jdW1lbnRfZWxlbWVudF9rZXlzJztcbmltcG9ydCBnZXRFcnJvclRyYWNlIGZyb20gJy4vZXJyb3JfdHJhY2UnO1xuaW1wb3J0IGdldEV2YWxMZW5ndGggZnJvbSAnLi9ldmFsX2xlbmd0aCc7XG5pbXBvcnQgZ2V0RnVuY3Rpb25CaW5kIGZyb20gJy4vZnVuY3Rpb25fYmluZCc7XG5pbXBvcnQgZ2V0TGFuZ3VhZ2VzIGZyb20gJy4vbGFuZ3VhZ2VzJztcbmltcG9ydCBhcmVNaW1lVHlwZXNDb25zaXN0ZW50IGZyb20gJy4vbWltZV90eXBlc19jb25zaXN0ZW5jZSc7XG5pbXBvcnQgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMnO1xuaW1wb3J0IGdldFBsdWdpbnNBcnJheSBmcm9tICcuL3BsdWdpbnNfYXJyYXknO1xuaW1wb3J0IGdldFBsdWdpbnNMZW5ndGggZnJvbSAnLi9wbHVnaW5zX2xlbmd0aCc7XG5pbXBvcnQgZ2V0UHJvY2VzcyBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0IGdldFByb2R1Y3RTdWIgZnJvbSAnLi9wcm9kdWN0X3N1Yic7XG5pbXBvcnQgZ2V0UlRUIGZyb20gJy4vcnR0JztcbmltcG9ydCBnZXRVc2VyQWdlbnQgZnJvbSAnLi91c2VyX2FnZW50JztcbmltcG9ydCBnZXRXZWJEcml2ZXIgZnJvbSAnLi93ZWJkcml2ZXInO1xuaW1wb3J0IGdldFdlYkdMIGZyb20gJy4vd2ViZ2wnO1xuaW1wb3J0IGdldFdpbmRvd0V4dGVybmFsIGZyb20gJy4vd2luZG93X2V4dGVybmFsJztcbmltcG9ydCBnZXRXaW5kb3dTaXplIGZyb20gJy4vd2luZG93X3NpemUnO1xuaW1wb3J0IGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzIGZyb20gJy4vZGlzdGluY3RpdmVfcHJvcGVydGllcyc7XG5pbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgZ2V0QnJvd3NlcktpbmQsIGdldERvY3VtZW50Rm9jdXMsIGlzQW5kcm9pZCB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IHZhciBzb3VyY2VzID0ge1xuICAgIGFuZHJvaWQ6IGlzQW5kcm9pZCxcbiAgICBicm93c2VyS2luZDogZ2V0QnJvd3NlcktpbmQsXG4gICAgYnJvd3NlckVuZ2luZUtpbmQ6IGdldEJyb3dzZXJFbmdpbmVLaW5kLFxuICAgIGRvY3VtZW50Rm9jdXM6IGdldERvY3VtZW50Rm9jdXMsXG4gICAgdXNlckFnZW50OiBnZXRVc2VyQWdlbnQsXG4gICAgYXBwVmVyc2lvbjogZ2V0QXBwVmVyc2lvbixcbiAgICBydHQ6IGdldFJUVCxcbiAgICB3aW5kb3dTaXplOiBnZXRXaW5kb3dTaXplLFxuICAgIHBsdWdpbnNMZW5ndGg6IGdldFBsdWdpbnNMZW5ndGgsXG4gICAgcGx1Z2luc0FycmF5OiBnZXRQbHVnaW5zQXJyYXksXG4gICAgZXJyb3JUcmFjZTogZ2V0RXJyb3JUcmFjZSxcbiAgICBwcm9kdWN0U3ViOiBnZXRQcm9kdWN0U3ViLFxuICAgIHdpbmRvd0V4dGVybmFsOiBnZXRXaW5kb3dFeHRlcm5hbCxcbiAgICBtaW1lVHlwZXNDb25zaXN0ZW50OiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50LFxuICAgIGV2YWxMZW5ndGg6IGdldEV2YWxMZW5ndGgsXG4gICAgd2ViR0w6IGdldFdlYkdMLFxuICAgIHdlYkRyaXZlcjogZ2V0V2ViRHJpdmVyLFxuICAgIGxhbmd1YWdlczogZ2V0TGFuZ3VhZ2VzLFxuICAgIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zOiBnZXROb3RpZmljYXRpb25QZXJtaXNzaW9ucyxcbiAgICBkb2N1bWVudEVsZW1lbnRLZXlzOiBnZXREb2N1bWVudEVsZW1lbnRLZXlzLFxuICAgIGZ1bmN0aW9uQmluZDogZ2V0RnVuY3Rpb25CaW5kLFxuICAgIHByb2Nlc3M6IGdldFByb2Nlc3MsXG4gICAgZGlzdGluY3RpdmVQcm9wczogY2hlY2tEaXN0aW5jdGl2ZVByb3BlcnRpZXMsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXBwVmVyc2lvbigpIHtcbiAgICB2YXIgYXBwVmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xuICAgIGlmIChhcHBWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5hcHBWZXJzaW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwVmVyc2lvbjtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFJUVCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5jb25uZWN0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24ucnR0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBvdXRlckhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBpbm5lcldpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgaW5uZXJIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0xlbmd0aCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5wbHVnaW5zIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMyAvKiBTdGF0ZS5VbmV4cGVjdGVkQmVoYXZpb3VyICovLCAnbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0FycmF5KCkge1xuICAgIGlmIChuYXZpZ2F0b3IucGx1Z2lucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLnBsdWdpbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICh3aW5kb3cuUGx1Z2luQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ3dpbmRvdy5QbHVnaW5BcnJheSBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zIGluc3RhbmNlb2YgUGx1Z2luQXJyYXk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvclRyYWNlKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBudWxsWzBdKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvclsnc3RhY2snXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3Iuc3RhY2sudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sICdlcnJvclRyYWNlIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UHJvZHVjdFN1YigpIHtcbiAgICB2YXIgcHJvZHVjdFN1YiA9IG5hdmlnYXRvci5wcm9kdWN0U3ViO1xuICAgIGlmIChwcm9kdWN0U3ViID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucHJvZHVjdFN1YiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2R1Y3RTdWI7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dFeHRlcm5hbCgpIHtcbiAgICBpZiAod2luZG93LmV4dGVybmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuZXh0ZXJuYWwgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBleHRlcm5hbCA9IHdpbmRvdy5leHRlcm5hbDtcbiAgICBpZiAodHlwZW9mIGV4dGVybmFsLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICd3aW5kb3cuZXh0ZXJuYWwudG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVybmFsLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50KCkge1xuICAgIGlmIChuYXZpZ2F0b3IubWltZVR5cGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IubWltZVR5cGVzIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgbWltZVR5cGVzID0gbmF2aWdhdG9yLm1pbWVUeXBlcztcbiAgICB2YXIgaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlcykgPT09IE1pbWVUeXBlQXJyYXkucHJvdG90eXBlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlzQ29uc2lzdGVudCAmJiAoaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlc1tpXSkgPT09IE1pbWVUeXBlLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbnNpc3RlbnQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFdmFsTGVuZ3RoKCkge1xuICAgIHJldHVybiBldmFsLnRvU3RyaW5nKCkubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2ViR0woKSB7XG4gICAgdmFyIGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBpZiAodHlwZW9mIGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgd2ViR0xDb250ZXh0ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCd3ZWJnbCcpO1xuICAgIGlmICh3ZWJHTENvbnRleHQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtNCAvKiBTdGF0ZS5OdWxsICovLCAnV2ViR0xSZW5kZXJpbmdDb250ZXh0IGlzIG51bGwnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdXZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0UGFyYW1ldGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciB2ZW5kb3IgPSB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyKHdlYkdMQ29udGV4dC5WRU5ET1IpO1xuICAgIHZhciByZW5kZXJlciA9IHdlYkdMQ29udGV4dC5nZXRQYXJhbWV0ZXIod2ViR0xDb250ZXh0LlJFTkRFUkVSKTtcbiAgICByZXR1cm4geyB2ZW5kb3I6IHZlbmRvciwgcmVuZGVyZXI6IHJlbmRlcmVyIH07XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXZWJEcml2ZXIoKSB7XG4gICAgaWYgKG5hdmlnYXRvci53ZWJkcml2ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLndlYmRyaXZlciBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci53ZWJkcml2ZXI7XG59XG4iLCJpbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgaXNDaHJvbWl1bTg2T3JOZXdlciB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VzKCkge1xuICAgIHZhciBuID0gbmF2aWdhdG9yO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBuLmxhbmd1YWdlIHx8IG4udXNlckxhbmd1YWdlIHx8IG4uYnJvd3Nlckxhbmd1YWdlIHx8IG4uc3lzdGVtTGFuZ3VhZ2U7XG4gICAgaWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW2xhbmd1YWdlXSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG4ubGFuZ3VhZ2VzKSkge1xuICAgICAgICB2YXIgYnJvd3NlckVuZ2luZSA9IGdldEJyb3dzZXJFbmdpbmVLaW5kKCk7XG4gICAgICAgIC8vIFN0YXJ0aW5nIGZyb20gQ2hyb21pdW0gODYsIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdmFsdWUgaW4gYG5hdmlnYXRvci5sYW5ndWFnZWAgaW4gSW5jb2duaXRvIG1vZGU6XG4gICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBgbmF2aWdhdG9yLmxhbmd1YWdlYC4gVGhlcmVmb3JlLCB0aGUgdmFsdWUgaXMgaWdub3JlZCBpbiB0aGlzIGJyb3dzZXIuXG4gICAgICAgIGlmICghKGJyb3dzZXJFbmdpbmUgPT09IFwiY2hyb21pdW1cIiAvKiBCcm93c2VyRW5naW5lS2luZC5DaHJvbWl1bSAqLyAmJiBpc0Nocm9taXVtODZPck5ld2VyKCkpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLmxhbmd1YWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG4ubGFuZ3VhZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2VzID0gbi5sYW5ndWFnZXM7XG4gICAgICAgIGlmIChsYW5ndWFnZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxhbmd1YWdlcy5zcGxpdCgnLCcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGVybWlzc2lvbnMsIHBlcm1pc3Npb25TdGF0dXMsIGVfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5Ob3RpZmljYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuTm90aWZpY2F0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IucGVybWlzc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSBuYXZpZ2F0b3IucGVybWlzc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbnMucXVlcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6ICdub3RpZmljYXRpb25zJyB9KV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uU3RhdHVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgd2luZG93Lk5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZGVuaWVkJyAmJiBwZXJtaXNzaW9uU3RhdHVzLnN0YXRlID09PSAncHJvbXB0J107XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgJ25vdGlmaWNhdGlvblBlcm1pc3Npb25zIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudEtleXMoKSB7XG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25CaW5kKCkge1xuICAgIGlmIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQcm9jZXNzKCkge1xuICAgIGlmICh3aW5kb3cucHJvY2VzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnd2luZG93LnByb2Nlc3MgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3cucHJvY2Vzcztcbn1cbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRPYmplY3RQcm9wcywgaW5jbHVkZXMgfSBmcm9tICcuLi91dGlscy9taXNjJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzKCkge1xuICAgIHZhciBfYTtcbiAgICAvLyBUaGUgb3JkZXIgaW4gdGhlIGZvbGxvd2luZyBsaXN0IG1hdHRlcnMsIGJlY2F1c2Ugc3BlY2lmaWMgdHlwZXMgb2YgYm90cyBjb21lIGZpcnN0LCBmb2xsb3dlZCBieSBhdXRvbWF0aW9uIHRlY2hub2xvZ2llcy5cbiAgICB2YXIgZGlzdGluY3RpdmVQcm9wc0xpc3QgPSAoX2EgPSB7fSxcbiAgICAgICAgX2FbQm90S2luZC5Bd2Vzb21pdW1dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ2F3ZXNvbWl1bSddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLkNlZl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnUnVuUGVyZlRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5DZWZTaGFycF0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnQ2VmU2hhcnAnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5Db2FjaEpTXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydlbWl0J10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuRk1pbmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydmbWdldF90YXJnZXRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuR2ViXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydnZWInXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5OaWdodG1hcmVKU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX19uaWdodG1hcmUnLCAnbmlnaHRtYXJlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuUGhhbnRvbWFzXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydfX3BoYW50b21hcyddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLlBoYW50b21KU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnY2FsbFBoYW50b20nLCAnX3BoYW50b20nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5SaGlub10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnc3Bhd24nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5TZWxlbml1bV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX1NlbGVuaXVtX0lERV9SZWNvcmRlcicsICdfc2VsZW5pdW0nLCAnY2FsbGVkU2VsZW5pdW0nLCAvXihbYS16XSl7M31fLipfKEFycmF5fFByb21pc2V8U3ltYm9sKSQvXSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBbJ19fc2VsZW5pdW1fZXZhbHVhdGUnLCAnc2VsZW5pdW0tZXZhbHVhdGUnLCAnX19zZWxlbml1bV91bndyYXBwZWQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5XZWJEcml2ZXJJT10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnd2Rpb0VsZWN0cm9uJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuV2ViRHJpdmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogW1xuICAgICAgICAgICAgICAgICd3ZWJkcml2ZXInLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlckZ1bmMnLFxuICAgICAgICAgICAgICAgICdfX2xhc3RXYXRpckFsZXJ0JyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJQcm9tcHQnLFxuICAgICAgICAgICAgICAgICdfV0VCRFJJVkVSX0VMRU1fQ0FDSEUnLFxuICAgICAgICAgICAgICAgICdDaHJvbWVEcml2ZXJ3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkb2N1bWVudDogW1xuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZm4nLFxuICAgICAgICAgICAgICAgICdfX2RyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX2V2YWx1YXRlJyxcbiAgICAgICAgICAgICAgICAnX19meGRyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fZnhkcml2ZXJfdW53cmFwcGVkJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2ZuJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2Z1bmMnLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgICckY2RjX2FzZGpmbGFzdXRvcGZodmNaTG1jZicsXG4gICAgICAgICAgICAgICAgJyRjZGNfYXNkamZsYXN1dG9wZmh2Y1pMbWNmbF8nLFxuICAgICAgICAgICAgICAgICckY2hyb21lX2FzeW5jU2NyaXB0SW5mbycsXG4gICAgICAgICAgICAgICAgJ19fJHdlYmRyaXZlckFzeW5jRXhlY3V0b3InLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5IZWFkbGVzc0Nocm9tZV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZG9tQXV0b21hdGlvbicsICdkb21BdXRvbWF0aW9uQ29udHJvbGxlciddLFxuICAgICAgICB9LFxuICAgICAgICBfYSk7XG4gICAgdmFyIGJvdE5hbWU7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciB3aW5kb3dQcm9wcyA9IGdldE9iamVjdFByb3BzKHdpbmRvdyk7XG4gICAgdmFyIGRvY3VtZW50UHJvcHMgPSBbXTtcbiAgICBpZiAod2luZG93LmRvY3VtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGRvY3VtZW50UHJvcHMgPSBnZXRPYmplY3RQcm9wcyh3aW5kb3cuZG9jdW1lbnQpO1xuICAgIGZvciAoYm90TmFtZSBpbiBkaXN0aW5jdGl2ZVByb3BzTGlzdCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBkaXN0aW5jdGl2ZVByb3BzTGlzdFtib3ROYW1lXTtcbiAgICAgICAgaWYgKHByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dDb250YWlucyA9IHByb3BzLndpbmRvdyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpbmNsdWRlcy5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3dpbmRvd1Byb3BzXSwgcHJvcHMud2luZG93LCBmYWxzZSkpO1xuICAgICAgICAgICAgdmFyIGRvY3VtZW50Q29udGFpbnMgPSBwcm9wcy5kb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8ICFkb2N1bWVudFByb3BzLmxlbmd0aCA/IGZhbHNlIDogaW5jbHVkZXMuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtkb2N1bWVudFByb3BzXSwgcHJvcHMuZG9jdW1lbnQsIGZhbHNlKSk7XG4gICAgICAgICAgICByZXN1bHRbYm90TmFtZV0gPSB3aW5kb3dDb250YWlucyB8fCBkb2N1bWVudENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjb2xsZWN0LCBkZXRlY3QgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBzb3VyY2VzIH0gZnJvbSAnLi9zb3VyY2VzJztcbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgYm90IGRldGVjdG9yLlxuICpcbiAqIEBjbGFzc1xuICogQGltcGxlbWVudHMge0JvdERldGVjdG9ySW50ZXJmYWNlfVxuICovXG52YXIgQm90RGV0ZWN0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQm90RGV0ZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kZXRlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZ2V0Q29tcG9uZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cztcbiAgICB9O1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5nZXREZXRlY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRlY3Rpb25zO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJvdERldGVjdG9yLmRldGVjdCBjYW4ndCBiZSBjYWxsZWQgYmVmb3JlIEJvdERldGVjdG9yLmNvbGxlY3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gZGV0ZWN0KHRoaXMuY29tcG9uZW50cywgZGV0ZWN0b3JzKSwgZGV0ZWN0aW9ucyA9IF9hWzBdLCBmaW5hbERldGVjdGlvbiA9IF9hWzFdO1xuICAgICAgICB0aGlzLmRldGVjdGlvbnMgPSBkZXRlY3Rpb25zO1xuICAgICAgICByZXR1cm4gZmluYWxEZXRlY3Rpb247XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb2xsZWN0KHNvdXJjZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EuY29tcG9uZW50cyA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNvbXBvbmVudHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBCb3REZXRlY3Rvcjtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBCb3REZXRlY3RvcjtcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IEJvdERldGVjdG9yIGZyb20gJy4vZGV0ZWN0b3InO1xuaW1wb3J0IHsgc291cmNlcyB9IGZyb20gJy4vc291cmNlcyc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBCb3RkRXJyb3IsIEJvdEtpbmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNvbGxlY3QsIGRldGVjdCB9IGZyb20gJy4vYXBpJztcbi8qKlxuICogU2VuZHMgYW4gdW5wZXJzb25hbGl6ZWQgQUpBWCByZXF1ZXN0IHRvIGNvbGxlY3QgaW5zdGFsbGF0aW9uIHN0YXRpc3RpY3NcbiAqL1xuZnVuY3Rpb24gbW9uaXRvcigpIHtcbiAgICAvLyBUaGUgRmluZ2VycHJpbnRKUyBDRE4gKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2NkbikgcmVwbGFjZXMgYHdpbmRvdy5fX2ZwanNfZF9tYCB3aXRoIGB0cnVlYFxuICAgIGlmICh3aW5kb3cuX19mcGpzX2RfbSB8fCBNYXRoLnJhbmRvbSgpID49IDAuMDAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKCdnZXQnLCBcImh0dHBzOi8vbTEub3BlbmZwY2RuLmlvL2JvdGQvdlwiLmNvbmNhdCh2ZXJzaW9uLCBcIi9ucG0tbW9uaXRvcmluZ1wiKSwgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvciBpcyBvayBoZXJlIGJlY2F1c2UgaXQncyBhbiB1bmV4cGVjdGVkIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoX2EpIHtcbiAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2MgPSBfYi5tb25pdG9yaW5nLCBtb25pdG9yaW5nID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYztcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXRlY3RvcjtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbml0b3JpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXRlY3RvciA9IG5ldyBCb3REZXRlY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBkZXRlY3Rvci5jb2xsZWN0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2Quc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGV0ZWN0b3JdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHsgbG9hZDogbG9hZCB9O1xuLy8gVGhlIGV4cG9ydHMgYmVsb3cgYXJlIGZvciBwcml2YXRlIHVzYWdlLiBUaGV5IG1heSBjaGFuZ2UgdW5leHBlY3RlZGx5LiBVc2UgdGhlbSBhdCB5b3VyIG93biByaXNrLlxuLyoqIE5vdCBkb2N1bWVudGVkLCBvdXQgb2YgU2VtYW50aWMgVmVyc2lvbmluZywgdXNhZ2UgaXMgYXQgeW91ciBvd24gcmlzayAqL1xuZXhwb3J0IHsgc291cmNlcywgZGV0ZWN0b3JzLCBjb2xsZWN0LCBkZXRlY3QsIEJvdGRFcnJvciwgQm90S2luZCwgfTtcbiIsImltcG9ydCB7IFVBUGFyc2VyIH0gZnJvbSAndWEtcGFyc2VyLWpzJztcbi8qXG4gKiBTb21ldGltZXMgdGVzdHMgbmVlZCB0byBrbm93IHdoYXQgYnJvd3NlciB0aGV5IHJ1biBpbiB0byBtYWtlIHByb3BlciBhc3NlcnRpb25zLlxuICogS2FybWEgZG9lc24ndCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uXG4gKiBUaGUgYnJvd3NlciBkZXRlY3QgZnVuY3Rpb25zIGluIHRoZSBgc3JjYCBkaXJlY3RvcnkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIG9iamVjdHMgb2YgdGVzdGluZy5cbiAqIFRoZXJlZm9yZSBhIHBvcHVsYXIgdGhpcmQgcGFydHkgbGlicmFyeSBpcyB1c2VkIHRvIGRldGVjdCBicm93c2VyLlxuICogVGhlIGxpYnJhcnkgaXNuJ3QgdXNlZCBpbiB0aGUgbWFpbiBjb2RlIGJlY2F1c2Ugc29tZSB2aXNpdG9ycyB0YW1wZXIgdXNlciBhZ2VudCB3aGlsZSB0aGUgdGVzdCBlbnZpcm9ubWVudHMgZG9uJ3QuXG4gKlxuICogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gcGFzcyBicm93c2VyIHNldHRpbmdzIGZyb20gdGhlIEthcm1hIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHRlc3RzLFxuICogb3RoZXJ3aXNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIGluY29nbml0byBicm93c2VycyBmcm9tIHJlZ3VsYXIgYnJvd3NlcnMsIEJyYXZlIGZyb20gQ2hyb21lLCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nocm9taXVtKCkge1xuICAgIHJldHVybiBuZXcgVUFQYXJzZXIoKS5nZXRFbmdpbmUoKS5uYW1lID09PSAnQmxpbmsnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGxlc3NDaHJvbWUoKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ0hlYWRsZXNzQ2hyb21lJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNHZWNrbygpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ0dlY2tvJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ1dlYktpdCc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldERldmljZSgpLnR5cGUgPT09ICdtb2JpbGUnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFjT1MoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldE9TKCkubmFtZSA9PT0gJ01hYyBPUyc7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3NNYWpvclZlcnNpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSBuZXcgVUFQYXJzZXIoKS5nZXRPUygpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xuICAgIHZhciB2ZXJzaW9uID0gbmV3IFVBUGFyc2VyKCkuZ2V0QnJvd3NlcigpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyVmVyc2lvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IG5ldyBVQVBhcnNlcigpLmdldEJyb3dzZXIoKS52ZXJzaW9uO1xuICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWFqb3I6IHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSksXG4gICAgICAgIG1pbm9yOiBwYXJzZUludCh2ZXJzaW9uLnNwbGl0KCcuJylbMV0pLFxuICAgIH07XG59XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBsb2FkIH0gZnJvbSAnLi4vc3JjJztcbmltcG9ydCB7IGdldEJyb3dzZXJFbmdpbmVLaW5kLCBnZXRCcm93c2VyS2luZCwgZ2V0RG9jdW1lbnRGb2N1cywgZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQsIGlzQW5kcm9pZCwgaXNEZXNrdG9wV2ViS2l0LCBpc0lQYWQsIH0gZnJvbSAnLi4vc3JjL3V0aWxzL2Jyb3dzZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlclZlcnNpb24gfSBmcm9tICcuLi90ZXN0cy91dGlscyc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbnZhciBfcmVzdWx0ID0gdW5kZWZpbmVkO1xudmFyIHJ1bkRldGVjdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQwLCBpbnN0YW5jZSwgY29sbGVjdGlvblRpbWUsIGRldGVjdGlvblJlc3VsdCwgZGV0ZWN0aW9uVGltZSwgY29tcG9uZW50cywgZGV0ZWN0aW9ucywgZGVidWdEYXRhLCBlXzE7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbG9hZCgpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uUmVzdWx0ID0gaW5zdGFuY2UuZGV0ZWN0KCk7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IChfYSA9IGluc3RhbmNlLmdldENvbXBvbmVudHMoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9ucyA9IChfYiA9IGluc3RhbmNlLmdldERldGVjdGlvbnMoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgICAgICAgICAgZGVidWdEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBicm93c2VyRW5naW5lS2luZDogZ2V0QnJvd3NlckVuZ2luZUtpbmQoKSxcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlcktpbmQ6IGdldEJyb3dzZXJLaW5kKCksXG4gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJWZXJzaW9uOiBnZXRCcm93c2VyVmVyc2lvbigpLFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZvY3VzOiBnZXREb2N1bWVudEZvY3VzKCksXG4gICAgICAgICAgICAgICAgICAgIG1vekFwcGVhcmFuY2VTdXBwb3J0OiBnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0FuZHJvaWQ6IGlzQW5kcm9pZCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc2t0b3BXZWJLaXQ6IGlzRGVza3RvcFdlYktpdCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0lQYWQ6IGlzSVBhZCgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU6IGNvbGxlY3Rpb25UaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZTogZGV0ZWN0aW9uVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGlvblJlc3VsdDogZGV0ZWN0aW9uUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRCb3Q6IChkZXRlY3Rpb25SZXN1bHQgPT09IG51bGwgfHwgZGV0ZWN0aW9uUmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXRlY3Rpb25SZXN1bHQuYm90KSA/IGRldGVjdGlvblJlc3VsdC5ib3RLaW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkRGF0YTogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdG9yc1Jlc3VsdHM6IGRldGVjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RhdGE6IGRlYnVnRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgZV8xID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IGlzRXJyb3I6IHRydWUsIGVycm9yOiBlXzEgfV07XG4gICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG52YXIgcmVuZGVyRGV0ZWN0aW9uUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHZhciByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKTtcbiAgICB2YXIgcmVzdWx0VGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC10ZXh0Jyk7XG4gICAgdmFyIGNvbGxlY3Rpb25UaW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sbGVjdGlvbi10aW1lJyk7XG4gICAgdmFyIGRldGVjdGlvblRpbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tdGltZScpO1xuICAgIHZhciBkZXRlY3Rpb25SZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tcmVzdWx0Jyk7XG4gICAgdmFyIGRldGVjdG9yc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGVjdG9ycycpO1xuICAgIHZhciBkZWJ1Z0RhdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVidWctZGF0YScpO1xuICAgIHZhciBjb2xsZWN0ZWREYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbGxlY3RlZC1kYXRhJyk7XG4gICAgdmFyIGVycm9yQ29udGFpbmVyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItY29udGFpbmVyJyk7XG4gICAgdmFyIGVycm9yTWVzc2FnZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKTtcbiAgICByZXN1bHRFbC5jbGFzc0xpc3QucmVtb3ZlKCdyZXN1bHQtZGV0ZWN0ZWQnLCAncmVzdWx0LWVycm9yJyk7XG4gICAgaWYgKHJlc3VsdC5pc0Vycm9yKSB7XG4gICAgICAgIHJlc3VsdFRleHRFbC5pbm5lckhUTUwgPSAnQW4gZXJyb3Igb2NjdXJlZCc7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1lcnJvcicpO1xuICAgICAgICBlcnJvckNvbnRhaW5lckVsLmNsYXNzTGlzdC5hZGQoJ2Vycm9yLWNvbnRhaW5lci12aXNpYmxlJyk7XG4gICAgICAgIGVycm9yTWVzc2FnZUVsLnRleHRDb250ZW50ID0gcmVzdWx0LmVycm9yLm1lc3NhZ2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXJyb3JDb250YWluZXJFbC5jbGFzc0xpc3QucmVtb3ZlKCdlcnJvci1jb250YWluZXItdmlzaWJsZScpO1xuICAgIGlmIChyZXN1bHQuZGV0ZWN0ZWRCb3QgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHRUZXh0RWwuaW5uZXJIVE1MID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGVkQm90LCBcIiBkZXRlY3RlZC5cIik7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1kZXRlY3RlZCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0VGV4dEVsLmlubmVySFRNTCA9ICdZb3UgYXJlIG5vdCBhIGJvdC4nO1xuICAgIH1cbiAgICBjb2xsZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmNvbGxlY3Rpb25UaW1lLnRvRml4ZWQoMiksIFwibXNcIik7XG4gICAgZGV0ZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGlvblRpbWUudG9GaXhlZCgyKSwgXCJtc1wiKTtcbiAgICBkZXRlY3Rpb25SZXN1bHRFbC50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZXRlY3Rpb25SZXN1bHQsIG51bGwsIDQpO1xuICAgIGRldGVjdG9yc0VsLnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LmRldGVjdG9yc1Jlc3VsdHMsIG51bGwsIDQpO1xuICAgIGRlYnVnRGF0YS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZWJ1Z0RhdGEsIG51bGwsIDQpO1xuICAgIGNvbGxlY3RlZERhdGEudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuY29sbGVjdGVkRGF0YSwgbnVsbCwgNCk7XG59O1xudmFyIHJ1bkFuZFJlbmRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgcnVuRGV0ZWN0aW9uKCldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBfcmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbmRlckRldGVjdGlvblJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG53aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZXRlY3RCdXR0b25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3QtYnV0dG9uJyk7XG4gICAgdmFyIGNvcHlMb2dzQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHktbG9ncy1idXR0b24nKTtcbiAgICBkZXRlY3RCdXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVuQW5kUmVuZGVyKCk7XG4gICAgfSk7XG4gICAgY29weUxvZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KF9yZXN1bHQpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFsZXJ0KCdCb3REIGxvZ3MgY29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBydW5BbmRSZW5kZXIoKTtcbn07XG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18iLCJVUkwiLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18iLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyIsIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJ1cmwiLCJvcHRpb25zIiwiU3RyaW5nIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0ZXN0Iiwic2xpY2UiLCJoYXNoIiwibmVlZFF1b3RlcyIsInJlcGxhY2UiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIkZVTkNfVFlQRSIsIlVOREVGX1RZUEUiLCJPQkpfVFlQRSIsIlNUUl9UWVBFIiwiTUFKT1IiLCJNT0RFTCIsIk5BTUUiLCJUWVBFIiwiVkVORE9SIiwiVkVSU0lPTiIsIkFSQ0hJVEVDVFVSRSIsIkNPTlNPTEUiLCJNT0JJTEUiLCJUQUJMRVQiLCJTTUFSVFRWIiwiV0VBUkFCTEUiLCJFTUJFRERFRCIsIkFNQVpPTiIsIkFQUExFIiwiQVNVUyIsIkJMQUNLQkVSUlkiLCJCUk9XU0VSIiwiQ0hST01FIiwiRklSRUZPWCIsIkdPT0dMRSIsIkhVQVdFSSIsIkxHIiwiTUlDUk9TT0ZUIiwiTU9UT1JPTEEiLCJPUEVSQSIsIlNBTVNVTkciLCJTSEFSUCIsIlNPTlkiLCJYSUFPTUkiLCJaRUJSQSIsIkZBQ0VCT09LIiwiQ0hST01JVU1fT1MiLCJNQUNfT1MiLCJlbnVtZXJpemUiLCJhcnIiLCJlbnVtcyIsInRvVXBwZXJDYXNlIiwiaGFzIiwic3RyMSIsInN0cjIiLCJsb3dlcml6ZSIsImluZGV4T2YiLCJzdHIiLCJ0b0xvd2VyQ2FzZSIsInRyaW0iLCJsZW4iLCJzdWJzdHJpbmciLCJyZ3hNYXBwZXIiLCJ1YSIsImFycmF5cyIsImoiLCJwIiwicSIsIm1hdGNoZXMiLCJtYXRjaCIsInJlZ2V4IiwicHJvcHMiLCJleGVjIiwiY2FsbCIsInN0ck1hcHBlciIsIndpbmRvd3NWZXJzaW9uTWFwIiwicmVnZXhlcyIsImJyb3dzZXIiLCJjcHUiLCJkZXZpY2UiLCJlbmdpbmUiLCJFREdFIiwib3MiLCJVQVBhcnNlciIsImV4dGVuc2lvbnMiLCJnZXRSZXN1bHQiLCJfbmF2aWdhdG9yIiwibmF2aWdhdG9yIiwiX3VhIiwidXNlckFnZW50IiwiX3VhY2giLCJ1c2VyQWdlbnREYXRhIiwiX3JneG1hcCIsIm1lcmdlZFJlZ2V4ZXMiLCJleHRlbmQiLCJfaXNTZWxmTmF2IiwiZ2V0QnJvd3NlciIsInZlcnNpb24iLCJfYnJvd3NlciIsInNwbGl0IiwiYnJhdmUiLCJpc0JyYXZlIiwiZ2V0Q1BVIiwiX2NwdSIsImdldERldmljZSIsIl9kZXZpY2UiLCJtb2JpbGUiLCJzdGFuZGFsb25lIiwibWF4VG91Y2hQb2ludHMiLCJnZXRFbmdpbmUiLCJfZW5naW5lIiwiZ2V0T1MiLCJfb3MiLCJwbGF0Zm9ybSIsImdldFVBIiwic2V0VUEiLCJDUFUiLCJERVZJQ0UiLCJFTkdJTkUiLCJPUyIsIiQiLCJqUXVlcnkiLCJaZXB0byIsInBhcnNlciIsImdldCIsInNldCIsInByb3AiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJuIiwiZ2V0dGVyIiwiZCIsImEiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJiIiwiYmFzZVVSSSIsInNlbGYiLCJocmVmIiwibmMiLCJleHRlbmRTdGF0aWNzIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwiZG9uZSIsInRoZW4iLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsInQiLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJTeW1ib2wiLCJpdGVyYXRvciIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsIl9fc3ByZWFkQXJyYXkiLCJ0byIsImZyb20iLCJwYWNrIiwiYXJndW1lbnRzIiwiYXIiLCJsIiwiY3JlYXRlIiwiQm90S2luZCIsIkJvdGRFcnJvciIsIl9zdXBlciIsInN0YXRlIiwibWVzc2FnZSIsIl90aGlzIiwibmFtZSIsIl9fIiwiY29uc3RydWN0b3IiLCJfX2V4dGVuZHMiLCJjb2xsZWN0IiwiY29tcG9uZW50cyIsInNvdXJjZXNLZXlzIiwiX2EiLCJrZXlzIiwiYWxsIiwic291cmNlS2V5IiwicmVzIiwiX2IiLCJlcnJvcl8xIiwiX2MiLCJfZCIsImVycm9yIiwiYXJyYXlJbmNsdWRlcyIsInN0ckluY2x1ZGVzIiwiZ2V0T2JqZWN0UHJvcHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaW5jbHVkZXMiLCJfbG9vcF8xIiwiYXJyYXkiLCJjYWxsYmFjayIsImZpbmQiLCJhcnJheUZpbmQiLCJrZXlzXzEiLCJzdGF0ZV8xIiwiY291bnRUcnV0aHkiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJzdW0iLCJkZXRlY3RvcnMiLCJkZXRlY3RBcHBWZXJzaW9uIiwiYXBwVmVyc2lvbiIsImRldGVjdERvY3VtZW50QXR0cmlidXRlcyIsImRvY3VtZW50RWxlbWVudEtleXMiLCJkZXRlY3RFcnJvclRyYWNlIiwiZXJyb3JUcmFjZSIsImRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5IiwiZXZhbExlbmd0aCIsImJyb3dzZXJLaW5kIiwiYnJvd3NlckVuZ2luZUtpbmQiLCJkZXRlY3RGdW5jdGlvbkJpbmQiLCJmdW5jdGlvbkJpbmQiLCJkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5IiwibGFuZ3VhZ2VzIiwiZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMiLCJub3RpZmljYXRpb25QZXJtaXNzaW9ucyIsImRldGVjdFBsdWdpbnNBcnJheSIsInBsdWdpbnNBcnJheSIsImRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5IiwicGx1Z2luc0xlbmd0aCIsImFuZHJvaWQiLCJkZXRlY3RQcm9jZXNzIiwicHJvY2VzcyIsInR5cGUiLCJ2ZXJzaW9ucyIsImVsZWN0cm9uIiwiZGV0ZWN0VXNlckFnZW50IiwiZGV0ZWN0V2ViRHJpdmVyIiwid2ViRHJpdmVyIiwiZGV0ZWN0V2ViR0wiLCJ3ZWJHTCIsInZlbmRvciIsInJlbmRlcmVyIiwiZGV0ZWN0V2luZG93RXh0ZXJuYWwiLCJ3aW5kb3dFeHRlcm5hbCIsImRldGVjdFdpbmRvd1NpemUiLCJ3aW5kb3dTaXplIiwiZG9jdW1lbnRGb2N1cyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsImRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQiLCJtaW1lVHlwZXNDb25zaXN0ZW50IiwiZGV0ZWN0UHJvZHVjdFN1YiIsInByb2R1Y3RTdWIiLCJkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMiLCJkaXN0aW5jdGl2ZVByb3BzIiwiYm90IiwiZ2V0QnJvd3NlckVuZ2luZUtpbmQiLCJ3IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0QnJvd3NlcktpbmQiLCJpc0FuZHJvaWQiLCJpc0l0Q2hyb21pdW0iLCJpc0l0R2Vja28iLCJnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCIsIkNTUyIsImdldERvY3VtZW50Rm9jdXMiLCJoYXNGb2N1cyIsImlzSVBhZCIsInMiLCJzY3JlZW4iLCJzY3JlZW5SYXRpbyIsIndpZHRoIiwiaGVpZ2h0IiwiRWxlbWVudCIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwicnR0IiwiY29ubmVjdGlvbiIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInBsdWdpbnMiLCJQbHVnaW5BcnJheSIsInN0YWNrIiwiZXh0ZXJuYWwiLCJtaW1lVHlwZXMiLCJpc0NvbnNpc3RlbnQiLCJnZXRQcm90b3R5cGVPZiIsIk1pbWVUeXBlQXJyYXkiLCJNaW1lVHlwZSIsImV2YWwiLCJjYW52YXNFbGVtZW50IiwiZ2V0Q29udGV4dCIsIndlYkdMQ29udGV4dCIsImdldFBhcmFtZXRlciIsIlJFTkRFUkVSIiwid2ViZHJpdmVyIiwibGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2UiLCJicm93c2VyTGFuZ3VhZ2UiLCJzeXN0ZW1MYW5ndWFnZSIsImlzQXJyYXkiLCJJbnRsIiwiUmVmbGVjdCIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvblN0YXR1cyIsIk5vdGlmaWNhdGlvbiIsInF1ZXJ5IiwicGVybWlzc2lvbiIsImdldEF0dHJpYnV0ZU5hbWVzIiwiYmluZCIsImJvdE5hbWUiLCJkaXN0aW5jdGl2ZVByb3BzTGlzdCIsIndpbmRvd1Byb3BzIiwiZG9jdW1lbnRQcm9wcyIsIndpbmRvd0NvbnRhaW5zIiwiZG9jdW1lbnRDb250YWlucyIsIkJvdERldGVjdG9yIiwiZGV0ZWN0aW9ucyIsImdldENvbXBvbmVudHMiLCJnZXREZXRlY3Rpb25zIiwiZGV0ZWN0IiwiZmluYWxEZXRlY3Rpb24iLCJkZXRlY3Rvck5hbWUiLCJkZXRlY3RvclJlcyIsImRldGVjdG9yIiwiZGV0ZWN0aW9uIiwiYm90S2luZCIsImxvYWQiLCJtb25pdG9yaW5nIiwiX19mcGpzX2RfbSIsIk1hdGgiLCJyYW5kb20iLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2VuZCIsImNvbnNvbGUiLCJtb25pdG9yIiwiZ2V0QnJvd3NlclZlcnNpb24iLCJtYWpvciIsInBhcnNlSW50IiwibWlub3IiLCJfcmVzdWx0IiwicnVuQW5kUmVuZGVyIiwidDAiLCJpbnN0YW5jZSIsImNvbGxlY3Rpb25UaW1lIiwiZGV0ZWN0aW9uUmVzdWx0IiwiZGV0ZWN0aW9uVGltZSIsImRlYnVnRGF0YSIsInBlcmZvcm1hbmNlIiwibm93IiwiYnJvd3NlclZlcnNpb24iLCJtb3pBcHBlYXJhbmNlU3VwcG9ydCIsImlzRGVza3RvcFdlYktpdCIsIkhUTUxFbGVtZW50IiwiRG9jdW1lbnQiLCJpc0Vycm9yIiwiZGV0ZWN0ZWRCb3QiLCJjb2xsZWN0ZWREYXRhIiwiZGV0ZWN0b3JzUmVzdWx0cyIsInJlc3VsdEVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZXN1bHRUZXh0RWwiLCJjb2xsZWN0aW9uVGltZUVsIiwiZGV0ZWN0aW9uVGltZUVsIiwiZGV0ZWN0aW9uUmVzdWx0RWwiLCJkZXRlY3RvcnNFbCIsImVycm9yQ29udGFpbmVyRWwiLCJlcnJvck1lc3NhZ2VFbCIsImNsYXNzTGlzdCIsImlubmVySFRNTCIsImFkZCIsInRleHRDb250ZW50IiwidG9GaXhlZCIsInJlbmRlckRldGVjdGlvblJlc3VsdCIsIm9ubG9hZCIsImRldGVjdEJ1dHRvbkVsIiwiY29weUxvZ3NCdXR0b24iLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiYWxlcnQiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +(()=>{var n={800:(n,e,t)=>{"use strict";t.d(e,{Z:()=>h});var o=t(537),i=t.n(o),r=t(645),a=t.n(r),s=t(667),c=t.n(s),u=new URL(t(790),t.b),l=new URL(t(373),t.b),d=new URL(t(516),t.b),A=new URL(t(82),t.b),p=new URL(t(837),t.b),b=a()(i()),f=c()(u),g=c()(l),w=c()(d),m=c()(A),v=c()(p);b.push([n.id,":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url("+f+");\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url("+g+");\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url("+w+");\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url("+m+") !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url("+v+") !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n","",{version:3,sources:["webpack://./playground/style.css"],names:[],mappings:"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",sourcesContent:[":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url(../resources/chevron_right.svg);\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url(../resources/github_icon.svg);\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url(../resources/robot-off-outline.svg);\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url(../resources/robot-outline.svg) !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url(../resources/alert-circle-outline.svg) !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n"],sourceRoot:""}]);const h=b},645:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",o=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),o&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),o&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,o,i,r){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(o)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=r),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),i&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=i):l[4]="".concat(i)),e.push(l))}},e}},667:n=>{"use strict";n.exports=function(n,e){return e||(e={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),e.hash&&(n+=e.hash),/["'() \t\n]|(%20)/.test(n)||e.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},537:n=>{"use strict";n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),r="/*# ".concat(i," */"),a=t.sources.map((function(n){return"/*# sourceURL=".concat(t.sourceRoot||"").concat(n," */")}));return[e].concat(a).concat([r]).join("\n")}return[e].join("\n")}},379:n=>{"use strict";var e=[];function t(n){for(var t=-1,o=0;o{"use strict";var e={};n.exports=function(n,t){var o=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}},216:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},565:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},795:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var o="";t.supports&&(o+="@supports (".concat(t.supports,") {")),t.media&&(o+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(o+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),o+=t.css,i&&(o+="}"),t.media&&(o+="}"),t.supports&&(o+="}");var r=t.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(o,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},589:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},238:function(n,e,t){var o;!function(i,r){"use strict";var a="function",s="undefined",c="object",u="string",l="major",d="model",A="name",p="type",b="vendor",f="version",g="architecture",w="console",m="mobile",v="tablet",h="smarttv",E="wearable",C="embedded",x="Amazon",B="Apple",y="ASUS",k="BlackBerry",_="Browser",S="Chrome",T="Firefox",z="Google",P="Huawei",j="LG",q="Microsoft",L="Motorola",O="Opera",M="Samsung",W="Sharp",I="Sony",R="Xiaomi",N="Zebra",D="Facebook",Y="Chromium OS",U="Mac OS",F=function(n){for(var e={},t=0;t0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,l):this[s[0]]=s[1]:3===s.length?typeof s[1]!==a||s[1].exec&&s[1].test?this[s[0]]=l?l.replace(s[1],s[2]):r:this[s[0]]=l?s[1].call(this,l,s[2]):r:4===s.length&&(this[s[0]]=l?s[3].call(this,l.replace(s[1],s[2])):r):this[s]=l||r;d+=2}},X=function(n,e){for(var t in e)if(typeof e[t]===c&&e[t].length>0){for(var o=0;o2&&(n[d]="iPad",n[p]=v),n},this.getEngine=function(){var n={};return n[A]=r,n[f]=r,K.call(n,o,h.engine),n},this.getOS=function(){var n={};return n[A]=r,n[f]=r,K.call(n,o,h.os),E&&!n[A]&&w&&"Unknown"!=w.platform&&(n[A]=w.platform.replace(/chrome os/i,Y).replace(/macos/i,U)),n},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(n){return o=typeof n===u&&n.length>350?V(n,350):n,this},this.setUA(o),this};J.VERSION="1.0.35",J.BROWSER=F([A,f,l]),J.CPU=F([g]),J.DEVICE=F([d,b,p,w,m,h,v,E,C]),J.ENGINE=J.OS=F([A,f]),typeof e!==s?(n.exports&&(e=n.exports=J),e.UAParser=J):t.amdO?(o=function(){return J}.call(e,t,e,n))===r||(n.exports=o):typeof i!==s&&(i.UAParser=J);var Q=typeof i!==s&&(i.jQuery||i.Zepto);if(Q&&!Q.ua){var nn=new J;Q.ua=nn.getResult(),Q.ua.get=function(){return nn.getUA()},Q.ua.set=function(n){nn.setUA(n);var e=nn.getResult();for(var t in e)Q.ua[t]=e[t]}}}("object"==typeof window?window:this)},837:(n,e,t)=>{"use strict";n.exports=t.p+"bf468b98f99fe3cb600c.svg"},790:(n,e,t)=>{"use strict";n.exports=t.p+"cb3e629604702ef8bc66.svg"},373:(n,e,t)=>{"use strict";n.exports=t.p+"550985caaa8859d4b95f.svg"},516:(n,e,t)=>{"use strict";n.exports=t.p+"80392182d321c655d4d0.svg"},82:(n,e,t)=>{"use strict";n.exports=t.p+"52d88d31d700c20dcc04.svg"}},e={};function t(o){var i=e[o];if(void 0!==i)return i.exports;var r=e[o]={id:o,exports:{}};return n[o].call(r.exports,r,r.exports,t),r.exports}t.m=n,t.amdO={},t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var o in e)t.o(e,o)&&!t.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n;t.g.importScripts&&(n=t.g.location+"");var e=t.g.document;if(!n&&e&&(e.currentScript&&(n=e.currentScript.src),!n)){var o=e.getElementsByTagName("script");o.length&&(n=o[o.length-1].src)}if(!n)throw new Error("Automatic publicPath is not supported in this browser");n=n.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=n})(),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{"use strict";var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,e){n.__proto__=e}||function(n,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])},n(e,t)};function e(n,e,t,o){return new(t||(t=Promise))((function(i,r){function a(n){try{c(o.next(n))}catch(n){r(n)}}function s(n){try{c(o.throw(n))}catch(n){r(n)}}function c(n){var e;n.done?i(n.value):(e=n.value,e instanceof t?e:new t((function(n){n(e)}))).then(a,s)}c((o=o.apply(n,e||[])).next())}))}function o(n,e){var t,o,i,r,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(s){return function(c){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;r&&(r=0,s[0]&&(a=0)),a;)try{if(t=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,o=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=5?"chromium":z(["ApplePayError"in t,"CSSPrimitiveValue"in t,"Counter"in t,0===o.vendor.indexOf("Apple"),"getStorageUpdates"in o,"WebKitMediaKeys"in t])>=4?"webkit":z(["buildID"in navigator,"MozAppearance"in(null!==(e=null===(n=document.documentElement)||void 0===n?void 0:n.style)&&void 0!==e?e:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4?"gecko":"unknown"}function q(){var n,e=null===(n=navigator.userAgent)||void 0===n?void 0:n.toLowerCase();return _(e,"edg/")?"edge":_(e,"trident")||_(e,"msie")?"internet_explorer":_(e,"wechat")?"wechat":_(e,"firefox")?"firefox":_(e,"opera")||_(e,"opr")?"opera":_(e,"chrome")?"chrome":_(e,"safari")?"safari":"unknown"}function L(){var n=j(),e="chromium"===n,t="gecko"===n;if(!e&&!t)return!1;var o=window;return z(["onorientationchange"in o,"orientation"in o,e&&!("SharedWorker"in o),t&&/android/i.test(navigator.appVersion)])>=2}function O(){if(void 0===window.CSS)throw new B(-1,"window.CSS is undefined");return CSS.supports("-moz-appearance","auto")}function M(){return void 0!==document.hasFocus&&document.hasFocus()}function W(){if("iPad"===navigator.platform)return!0;var n=screen,e=n.width/n.height;return z(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,e>.65&&e<1.53])>=2}var I={android:L,browserKind:q,browserEngineKind:j,documentFocus:M,userAgent:function(){return navigator.userAgent},appVersion:function(){var n=navigator.appVersion;if(null==n)throw new B(-1,"navigator.appVersion is undefined");return n},rtt:function(){if(void 0===navigator.connection)throw new B(-1,"navigator.connection is undefined");if(void 0===navigator.connection.rtt)throw new B(-1,"navigator.connection.rtt is undefined");return navigator.connection.rtt},windowSize:function(){return{outerWidth:window.outerWidth,outerHeight:window.outerHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight}},pluginsLength:function(){if(void 0===navigator.plugins)throw new B(-1,"navigator.plugins is undefined");if(void 0===navigator.plugins.length)throw new B(-3,"navigator.plugins.length is undefined");return navigator.plugins.length},pluginsArray:function(){if(void 0===navigator.plugins)throw new B(-1,"navigator.plugins is undefined");if(void 0===window.PluginArray)throw new B(-1,"window.PluginArray is undefined");return navigator.plugins instanceof PluginArray},errorTrace:function(){try{null[0]()}catch(n){if(n instanceof Error&&null!=n.stack)return n.stack.toString()}throw new B(-3,"errorTrace signal unexpected behaviour")},productSub:function(){var n=navigator.productSub;if(void 0===n)throw new B(-1,"navigator.productSub is undefined");return n},windowExternal:function(){if(void 0===window.external)throw new B(-1,"window.external is undefined");var n=window.external;if("function"!=typeof n.toString)throw new B(-2,"window.external.toString is not a function");return n.toString()},mimeTypesConsistent:function(){if(void 0===navigator.mimeTypes)throw new B(-1,"navigator.mimeTypes is undefined");for(var n=navigator.mimeTypes,e=Object.getPrototypeOf(n)===MimeTypeArray.prototype,t=0;t=3||t.push(e.languages);else if("string"==typeof e.languages){var i=e.languages;i&&t.push(i.split(","))}return t},notificationPermissions:function(){return e(this,void 0,void 0,(function(){var n,e;return o(this,(function(t){switch(t.label){case 0:if(void 0===window.Notification)throw new B(-1,"window.Notification is undefined");if(void 0===navigator.permissions)throw new B(-1,"navigator.permissions is undefined");if("function"!=typeof(n=navigator.permissions).query)throw new B(-2,"navigator.permissions.query is not a function");t.label=1;case 1:return t.trys.push([1,3,,4]),[4,n.query({name:"notifications"})];case 2:return e=t.sent(),[2,"denied"===window.Notification.permission&&"prompt"===e.state];case 3:throw t.sent(),new B(-3,"notificationPermissions signal unexpected behaviour");case 4:return[2]}}))}))},documentElementKeys:function(){if(void 0===document.documentElement)throw new B(-1,"document.documentElement is undefined");var n=document.documentElement;if("function"!=typeof n.getAttributeNames)throw new B(-2,"document.documentElement.getAttributeNames is not a function");return n.getAttributeNames()},functionBind:function(){if(void 0===Function.prototype.bind)throw new B(-2,"Function.prototype.bind is undefined");return Function.prototype.bind.toString()},process:function(){var n=window.process,e="window.process is";if(void 0===n)throw new B(-1,"".concat(e," undefined"));if(n&&"object"!=typeof n)throw new B(-3,"".concat(e," not an object"));return n},distinctiveProps:function(){var n,e,t=((n={})[a]={window:["awesomium"]},n[s]={window:["RunPerfTest"]},n[c]={window:["CefSharp"]},n[u]={window:["emit"]},n[d]={window:["fmget_targets"]},n[A]={window:["geb"]},n[p]={window:["__nightmare","nightmare"]},n[b]={window:["__phantomas"]},n[f]={window:["callPhantom","_phantom"]},n[g]={window:["spawn"]},n[w]={window:["_Selenium_IDE_Recorder","_selenium","calledSelenium",/^([a-z]){3}_.*_(Array|Promise|Symbol)$/],document:["__selenium_evaluate","selenium-evaluate","__selenium_unwrapped"]},n[h]={window:["wdioElectron"]},n[E]={window:["webdriver","__webdriverFunc","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_WEBDRIVER_ELEM_CACHE","ChromeDriverw"],document:["__webdriver_script_fn","__driver_evaluate","__webdriver_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__fxdriver_unwrapped","__webdriver_script_fn","__webdriver_script_func","__webdriver_script_function","$cdc_asdjflasutopfhvcZLmcf","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor"]},n[C]={window:["domAutomation","domAutomationController"]},n),o={},r=S(window),l=[];for(e in void 0!==window.document&&(l=S(window.document)),t){var m=t[e];if(void 0!==m){var v=void 0!==m.window&&T.apply(void 0,i([r],m.window,!1)),x=!(void 0===m.document||!l.length)&&T.apply(void 0,i([l],m.document,!1));o[e]=v||x}}return o}},R=function(){function n(){this.components=void 0,this.detections=void 0}return n.prototype.getComponents=function(){return this.components},n.prototype.getDetections=function(){return this.detections},n.prototype.detect=function(){if(void 0===this.components)throw new Error("BotDetector.detect can't be called before BotDetector.collect");var n=function(n,e){var t={},o={bot:!1};for(var i in e){var r=(0,e[i])(n),a={bot:!1};"string"==typeof r?a={bot:!0,botKind:r}:r&&(a={bot:!0,botKind:x}),t[i]=a,a.bot&&(o=a)}return[t,o]}(this.components,P),e=n[0],t=n[1];return this.detections=e,t},n.prototype.collect=function(){return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return n=this,[4,y(I)];case 1:return n.components=e.sent(),[2,this.components]}}))}))},n}();const N=R;function D(n){var t=(void 0===n?{}:n).monitoring,i=void 0===t||t;return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return i&&function(){if(!(window.__fpjs_d_m||Math.random()>=.001))try{var n=new XMLHttpRequest;n.open("get","https://m1.openfpcdn.io/botd/v".concat(r.i8,"/npm-monitoring"),!0),n.send()}catch(n){console.error(n)}}(),[4,(n=new N).collect()];case 1:return e.sent(),[2,n]}}))}))}var Y=t(238);function U(){var n=(new Y.UAParser).getBrowser().version;if(void 0!==n)return{major:parseInt(n.split(".")[0]),minor:parseInt(n.split(".")[1])}}var F=t(379),Z=t.n(F),H=t(795),V=t.n(H),K=t(569),X=t.n(K),G=t(565),$=t.n(G),J=t(216),Q=t.n(J),nn=t(589),en=t.n(nn),tn=t(800),on={};on.styleTagTransform=en(),on.setAttributes=$(),on.insert=X().bind(null,"head"),on.domAPI=V(),on.insertStyleElement=Q(),Z()(tn.Z,on),tn.Z&&tn.Z.locals&&tn.Z.locals;var rn=void 0,an=function(){return e(void 0,void 0,void 0,(function(){var n;return o(this,(function(t){switch(t.label){case 0:return[4,e(void 0,void 0,void 0,(function(){var n,e,t,i,r,a,s,c,u,l;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),n=performance.now(),[4,D()];case 1:return e=o.sent(),t=performance.now()-n,i=e.detect(),r=performance.now()-n,a=null!==(u=e.getComponents())&&void 0!==u?u:{},s=null!==(l=e.getDetections())&&void 0!==l?l:{},c={browserEngineKind:j(),browserKind:q(),browserVersion:U(),documentFocus:M(),mozAppearanceSupport:O(),isAndroid:L(),isDesktopWebKit:(d=window,A=d.HTMLElement,p=d.Document,z(["safari"in d,!("ongestureend"in d),!("TouchEvent"in d),!("orientation"in d),A&&!("autocapitalize"in A.prototype),p&&"pointerLockElement"in p.prototype])>=4),isIPad:W()},[2,{isError:!1,collectionTime:t,detectionTime:r,detectionResult:i,detectedBot:(null==i?void 0:i.bot)?i.botKind:void 0,collectedData:a,detectorsResults:s,debugData:c}];case 2:return[2,{isError:!0,error:o.sent()}];case 3:return[2]}var d,A,p}))}))];case 1:return n=t.sent(),rn=n,function(n){var e=document.getElementById("result"),t=document.getElementById("result-text"),o=document.getElementById("collection-time"),i=document.getElementById("detection-time"),r=document.getElementById("detection-result"),a=document.getElementById("detectors"),s=document.getElementById("debug-data"),c=document.getElementById("collected-data"),u=document.getElementById("error-container"),l=document.getElementById("error-message");if(e.classList.remove("result-detected","result-error"),n.isError)return t.innerHTML="An error occured",e.classList.add("result-error"),u.classList.add("error-container-visible"),void(l.textContent=n.error.message);u.classList.remove("error-container-visible"),null!=n.detectedBot?(t.innerHTML="".concat(n.detectedBot," detected."),e.classList.add("result-detected")):t.innerHTML="You are not a bot.",o.textContent="".concat(n.collectionTime.toFixed(2),"ms"),i.textContent="".concat(n.detectionTime.toFixed(2),"ms"),r.textContent=JSON.stringify(n.detectionResult,null,4),a.textContent=JSON.stringify(n.detectorsResults,null,4),s.textContent=JSON.stringify(n.debugData,null,4),c.textContent=JSON.stringify(n.collectedData,null,4)}(n),[2]}}))}))};window.onload=function(){var n=document.getElementById("detect-button"),e=document.getElementById("copy-logs-button");n.addEventListener("click",(function(){an()})),e.addEventListener("click",(function(){navigator.clipboard.writeText(JSON.stringify(rn)).then((function(){alert("BotD logs copied to clipboard")}))})),an()}})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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aUMsT0FBTzJhLE9BQVMsV0FDWixJQUFJQyxFQUFpQjlhLFNBQVMrWixlQUFlLGlCQUN6Q2dCLEVBQWlCL2EsU0FBUytaLGVBQWUsb0JBQzdDZSxFQUFlRSxpQkFBaUIsU0FBUyxXQUNyQ3BDLElBQ0osSUFDQW1DLEVBQWVDLGlCQUFpQixTQUFTLFdBQ3JDeFUsVUFBVXlVLFVBQVVDLFVBQVU1ZCxLQUFLQyxVQUFVb2IsS0FBVXZNLE1BQUssV0FDeEQrTyxNQUFNLGdDQUNWLEdBQ0osSUFDQXZDLElBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9wbGF5Z3JvdW5kL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3VhLXBhcnNlci1qcy9zcmMvdWEtcGFyc2VyLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3R5cGVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvYXBpLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvcG9ueWZpbGxzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvbWlzYy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9hcHBfdmVyc2lvbi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kb2N1bWVudF9lbGVtZW50X2tleXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXZhbF9sZW5ndGgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZnVuY3Rpb25fYmluZC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9sYW5ndWFnZXNfaW5jb25zaXN0ZW5jeS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wbHVnaW5zX2luY29uc2lzdGVuY3kudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcHJvY2Vzcy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy91c2VyX2FnZW50LnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3JzL3dlYmRyaXZlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvd2luZG93X3NpemUudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvbWltZV90eXBlc19jb25zaXN0ZW5jZS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wcm9kdWN0X3N1Yi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvYnJvd3Nlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3VzZXJfYWdlbnQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2FwcF92ZXJzaW9uLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9ydHQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3dpbmRvd19zaXplLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wbHVnaW5zX2xlbmd0aC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3Byb2R1Y3Rfc3ViLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL21pbWVfdHlwZXNfY29uc2lzdGVuY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2V2YWxfbGVuZ3RoLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvd2ViZHJpdmVyLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9sYW5ndWFnZXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZG9jdW1lbnRfZWxlbWVudF9rZXlzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9mdW5jdGlvbl9iaW5kLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wcm9jZXNzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vdGVzdHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvc3R5bGUuY3NzP2RhNjIiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9naXRodWJfaWNvbi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuLi9yZXNvdXJjZXMvcm9ib3Qtb2ZmLW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL2FsZXJ0LWNpcmNsZS1vdXRsaW5lLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxuICAtLWFjY2VudC1jb2xvcjogcmdiKDI0MCwgNjgsIDUpO1xcbiAgLS1hY2NlbnQtZGFyay1jb2xvcjogcmdiKDE0MCwgMzksIDMpO1xcbiAgLS1lcnJvci1jb2xvcjogI2IzMjYxZTtcXG4gIC0tZm9udC1mYW1pbHk6ICdGaXJhIE1vbm8nLCBtb25vc3BhY2U7XFxuICAtLWZvbnQtZmFtaWx5LWNvbnNvbGFzOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2U7XFxufVxcblxcbmJvZHkge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBtYXJnaW46IDBweDtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjc7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLmNvbnRhaW5lciB7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gMTI4cHgpO1xcbiAgbWF4LXdpZHRoOiAxNTM2cHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuLm1lZGl1bS1jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4jbmF2YmFyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA5NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuI25hdmJhciBhIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4jbmF2YmFyIC5jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbiNuYXZiYXItY2hldnJvbiB7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuI25hdmJhciAubG9nby1yZWYge1xcbiAgd2lkdGg6IG1heC1jb250ZW50O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvIHtcXG4gIHdpZHRoOiAxOTZweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MDBweCkge1xcbiAgI25hdmJhciB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmNvbnRhaW5lciB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvLXJlZiB7XFxuICAgIG1hcmdpbi10b3A6IDMycHg7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgd2lkdGg6IDI1NnB4O1xcbiAgfVxcblxcbiAgI25hdmJhciAjbmF2YmFyLWNoZXZyb24ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICB9XFxuXFxuICAjbmF2YmFyICNwbGF5Z3JvdW5kLWFjdGlvbnMge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgbWFyZ2luOiAzMnB4IDBweDtcXG4gIH1cXG59XFxuXFxuaDEsXFxuaDIge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiAjMGQxMDJiO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbmgyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuXFxuLmNvbnRlbnQge1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA2NHB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweDtcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNik7XFxuICB0cmFuc2l0aW9uOiAwLjE1cztcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmFjdGl2ZSxcXG4uZ2l0aHViLWNhcmQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG5cXG4jcGxheWdyb3VuZC1hY3Rpb25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sdW1uLWdhcDogMTZweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uYnV0dG9uIHtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBwYWRkaW5nOiAxMnB4IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgbWFyZ2luOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzIGJhY2tncm91bmQtY29sb3I7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtZGFyay1jb2xvcik7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0MCwgNjgsIDUsIDAuMTIpO1xcbn1cXG5cXG4uY29udGVudC1jYXJkIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jb250ZW50LWNhcmQtaGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBwYWRkaW5nOiB2YXIoLS1jb250ZW50LWNhcmQtcGFkZGluZyk7XFxufVxcblxcbiNyZXN1bHQge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIG1hcmdpbjogOTZweCBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogIzRjYWY1MDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZXN1bHQtZXJyb3Ige1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpICFpbXBvcnRhbnQ7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9wbGF5Z3JvdW5kL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLCtCQUErQjtFQUMvQixvQ0FBb0M7RUFDcEMsc0JBQXNCO0VBQ3RCLHFDQUFxQztFQUNyQyw4RUFBOEU7QUFDaEY7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWU7RUFDZixXQUFXO0VBQ1gsWUFBWTtFQUNaLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLCtCQUErQjtFQUMvQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDRCQUE0QjtFQUM1QiwyQkFBMkI7RUFDM0IseURBQXFEO0VBQ3JELFlBQVk7RUFDWixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osZUFBZTtBQUNqQjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkOztFQUVBO0lBQ0Usc0JBQXNC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RSxlQUFlO0VBQ2YsZUFBZTtFQUNmLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2Isb0NBQW9DO0VBQ3BDLG1CQUFtQjtFQUNuQix3Q0FBd0M7RUFDeEMsZUFBZTtFQUNmLGNBQWM7RUFDZCxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgLS1hY2NlbnQtY29sb3I6IHJnYigyNDAsIDY4LCA1KTtcXG4gIC0tYWNjZW50LWRhcmstY29sb3I6IHJnYigxNDAsIDM5LCAzKTtcXG4gIC0tZXJyb3ItY29sb3I6ICNiMzI2MWU7XFxuICAtLWZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgbW9ub3NwYWNlO1xcbiAgLS1mb250LWZhbWlseS1jb25zb2xhczogQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcbn1cXG5cXG5ib2R5IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgbWFyZ2luOiAwcHg7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY3O1xcbiAgY29sb3I6ICMwMDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG5cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDEyOHB4KTtcXG4gIG1heC13aWR0aDogMTUzNnB4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5tZWRpdW0tY29udGFpbmVyIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuI25hdmJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogOTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbiNuYXZiYXIgYSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuI25hdmJhciAuY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jbmF2YmFyLWNoZXZyb24ge1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Zyk7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvLXJlZiB7XFxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XFxufVxcblxcbiNuYXZiYXIgLmxvZ28ge1xcbiAgd2lkdGg6IDE5NnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDcwMHB4KSB7XFxuICAjbmF2YmFyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgI25hdmJhciAuY29udGFpbmVyIHtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28tcmVmIHtcXG4gICAgbWFyZ2luLXRvcDogMzJweDtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICB3aWR0aDogMjU2cHg7XFxuICB9XFxuXFxuICAjbmF2YmFyICNuYXZiYXItY2hldnJvbiB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIH1cXG5cXG4gICNuYXZiYXIgI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICBtYXJnaW46IDMycHggMHB4O1xcbiAgfVxcbn1cXG5cXG5oMSxcXG5oMiB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6ICMwZDEwMmI7XFxufVxcbmgxIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbn1cXG5cXG4uY29udGVudCB7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDY0cHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5naXRodWItY2FyZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6YWN0aXZlLFxcbi5naXRodWItY2FyZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbiAgdHJhbnNpdGlvbjogMC4xNXM7XFxufVxcblxcbi5naXRodWItY2FyZDo6YmVmb3JlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogJyc7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9yZXNvdXJjZXMvZ2l0aHViX2ljb24uc3ZnKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuXFxuI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbHVtbi1nYXA6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMTJweCAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG1hcmdpbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSk7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBiYWNrZ3JvdW5kLWNvbG9yO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWFjY2VudC1jb2xvcik7XFxuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbjpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbjphY3RpdmUsXFxuLm9yYW5nZS1idXR0b246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWRhcmstY29sb3IpO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDphY3RpdmUsXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDY4LCA1LCAwLjEyKTtcXG59XFxuXFxuLmNvbnRlbnQtY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jYXJkLWhlYWRlciB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgcGFkZGluZzogdmFyKC0tY29udGVudC1jYXJkLXBhZGRpbmcpO1xcbn1cXG5cXG4jcmVzdWx0IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBtYXJnaW46IDk2cHggYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC0tYm90LWljb24tY29sb3I6ICM0Y2FmNTA7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKC4uL3Jlc291cmNlcy9yb2JvdC1vZmYtb3V0bGluZS5zdmcpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWVycm9yIHtcXG4gIC0tYm90LWljb24tY29sb3I6IHZhcigtLWVycm9yLWNvbG9yKSAhaW1wb3J0YW50O1xcbiAgLS1ib3QtaWNvbi11cmw6IHVybCguLi9yZXNvdXJjZXMvYWxlcnQtY2lyY2xlLW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpOyAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKiBVQVBhcnNlci5qcyB2MS4wLjM1XG4gICBDb3B5cmlnaHQgwqkgMjAxMi0yMDIxIEZhaXNhbCBTYWxtYW4gPGZAZmFpc2FsbWFuLmNvbT5cbiAgIE1JVCBMaWNlbnNlICovLypcbiAgIERldGVjdCBCcm93c2VyLCBFbmdpbmUsIE9TLCBDUFUsIGFuZCBEZXZpY2UgdHlwZS9tb2RlbCBmcm9tIFVzZXItQWdlbnQgZGF0YS5cbiAgIFN1cHBvcnRzIGJyb3dzZXIgJiBub2RlLmpzIGVudmlyb25tZW50LiBcbiAgIERlbW8gICA6IGh0dHBzOi8vZmFpc2FsbWFuLmdpdGh1Yi5pby91YS1wYXJzZXItanNcbiAgIFNvdXJjZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzICovXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuKGZ1bmN0aW9uICh3aW5kb3csIHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdGFudHNcbiAgICAvLy8vLy8vLy8vLy8vXG5cblxuICAgIHZhciBMSUJWRVJTSU9OICA9ICcxLjAuMzUnLFxuICAgICAgICBFTVBUWSAgICAgICA9ICcnLFxuICAgICAgICBVTktOT1dOICAgICA9ICc/JyxcbiAgICAgICAgRlVOQ19UWVBFICAgPSAnZnVuY3Rpb24nLFxuICAgICAgICBVTkRFRl9UWVBFICA9ICd1bmRlZmluZWQnLFxuICAgICAgICBPQkpfVFlQRSAgICA9ICdvYmplY3QnLFxuICAgICAgICBTVFJfVFlQRSAgICA9ICdzdHJpbmcnLFxuICAgICAgICBNQUpPUiAgICAgICA9ICdtYWpvcicsXG4gICAgICAgIE1PREVMICAgICAgID0gJ21vZGVsJyxcbiAgICAgICAgTkFNRSAgICAgICAgPSAnbmFtZScsXG4gICAgICAgIFRZUEUgICAgICAgID0gJ3R5cGUnLFxuICAgICAgICBWRU5ET1IgICAgICA9ICd2ZW5kb3InLFxuICAgICAgICBWRVJTSU9OICAgICA9ICd2ZXJzaW9uJyxcbiAgICAgICAgQVJDSElURUNUVVJFPSAnYXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgQ09OU09MRSAgICAgPSAnY29uc29sZScsXG4gICAgICAgIE1PQklMRSAgICAgID0gJ21vYmlsZScsXG4gICAgICAgIFRBQkxFVCAgICAgID0gJ3RhYmxldCcsXG4gICAgICAgIFNNQVJUVFYgICAgID0gJ3NtYXJ0dHYnLFxuICAgICAgICBXRUFSQUJMRSAgICA9ICd3ZWFyYWJsZScsXG4gICAgICAgIEVNQkVEREVEICAgID0gJ2VtYmVkZGVkJyxcbiAgICAgICAgVUFfTUFYX0xFTkdUSCA9IDM1MDtcblxuICAgIHZhciBBTUFaT04gID0gJ0FtYXpvbicsXG4gICAgICAgIEFQUExFICAgPSAnQXBwbGUnLFxuICAgICAgICBBU1VTICAgID0gJ0FTVVMnLFxuICAgICAgICBCTEFDS0JFUlJZID0gJ0JsYWNrQmVycnknLFxuICAgICAgICBCUk9XU0VSID0gJ0Jyb3dzZXInLFxuICAgICAgICBDSFJPTUUgID0gJ0Nocm9tZScsXG4gICAgICAgIEVER0UgICAgPSAnRWRnZScsXG4gICAgICAgIEZJUkVGT1ggPSAnRmlyZWZveCcsXG4gICAgICAgIEdPT0dMRSAgPSAnR29vZ2xlJyxcbiAgICAgICAgSFVBV0VJICA9ICdIdWF3ZWknLFxuICAgICAgICBMRyAgICAgID0gJ0xHJyxcbiAgICAgICAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdCcsXG4gICAgICAgIE1PVE9ST0xBICA9ICdNb3Rvcm9sYScsXG4gICAgICAgIE9QRVJBICAgPSAnT3BlcmEnLFxuICAgICAgICBTQU1TVU5HID0gJ1NhbXN1bmcnLFxuICAgICAgICBTSEFSUCAgID0gJ1NoYXJwJyxcbiAgICAgICAgU09OWSAgICA9ICdTb255JyxcbiAgICAgICAgVklFUkEgICA9ICdWaWVyYScsXG4gICAgICAgIFhJQU9NSSAgPSAnWGlhb21pJyxcbiAgICAgICAgWkVCUkEgICA9ICdaZWJyYScsXG4gICAgICAgIEZBQ0VCT09LICAgID0gJ0ZhY2Vib29rJyxcbiAgICAgICAgQ0hST01JVU1fT1MgPSAnQ2hyb21pdW0gT1MnLFxuICAgICAgICBNQUNfT1MgID0gJ01hYyBPUyc7XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlclxuICAgIC8vLy8vLy8vLy9cblxuICAgIHZhciBleHRlbmQgPSBmdW5jdGlvbiAocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVnZXhlcykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gZXh0ZW5zaW9uc1tpXS5jb25jYXQocmVnZXhlc1tpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVnZXhlc1tpXSA9IHJlZ2V4ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZFJlZ2V4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcml6ZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHZhciBlbnVtcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVudW1zW2FycltpXS50b1VwcGVyQ2FzZSgpXSA9IGFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnVtcztcbiAgICAgICAgfSxcbiAgICAgICAgaGFzID0gZnVuY3Rpb24gKHN0cjEsIHN0cjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJpemUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ham9yaXplID0gZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YodmVyc2lvbikgPT09IFNUUl9UWVBFID8gdmVyc2lvbi5yZXBsYWNlKC9bXlxcZFxcLl0vZywgRU1QVFkpLnNwbGl0KCcuJylbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0gPSBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RyKSA9PT0gU1RSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCBFTVBUWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihsZW4pID09PSBVTkRFRl9UWVBFID8gc3RyIDogc3RyLnN1YnN0cmluZygwLCBVQV9NQVhfTEVOR1RIKTtcbiAgICAgICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTWFwIGhlbHBlclxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmd4TWFwcGVyID0gZnVuY3Rpb24gKHVhLCBhcnJheXMpIHtcblxuICAgICAgICAgICAgdmFyIGkgPSAwLCBqLCBrLCBwLCBxLCBtYXRjaGVzLCBtYXRjaDtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXlzLmxlbmd0aCAmJiAhbWF0Y2hlcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLCAgICAgICAvLyBldmVuIHNlcXVlbmNlICgwLDIsNCwuLilcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdOyAgIC8vIG9kZCBzZXF1ZW5jZSAoMSwzLDUsLi4pXG4gICAgICAgICAgICAgICAgaiA9IGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgcmVnZXgubGVuZ3RoICYmICFtYXRjaGVzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdleFtqXSkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcHJvcHNbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHEgPT09IE9CSl9UWVBFICYmIHEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gbW9kaWZpZWQgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXS5jYWxsKHRoaXMsIG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIGdpdmVuIHZhbHVlLCBpZ25vcmUgcmVnZXggbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiBvciByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBxWzFdID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5pdGl6ZSBtYXRjaCB1c2luZyBnaXZlbiByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FdID0gbWF0Y2ggPyBtYXRjaCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHN0ck1hcHBlciA9IGZ1bmN0aW9uIChzdHIsIG1hcCkge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMobWFwW2ldW2pdLCBzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU3RyaW5nIG1hcFxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICB2YXIgb2xkU2FmYXJpTWFwID0ge1xuICAgICAgICAgICAgJzEuMCcgICA6ICcvOCcsXG4gICAgICAgICAgICAnMS4yJyAgIDogJy8xJyxcbiAgICAgICAgICAgICcxLjMnICAgOiAnLzMnLFxuICAgICAgICAgICAgJzIuMCcgICA6ICcvNDEyJyxcbiAgICAgICAgICAgICcyLjAuMicgOiAnLzQxNicsXG4gICAgICAgICAgICAnMi4wLjMnIDogJy80MTcnLFxuICAgICAgICAgICAgJzIuMC40JyA6ICcvNDE5JyxcbiAgICAgICAgICAgICc/JyAgICAgOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93c1ZlcnNpb25NYXAgPSB7XG4gICAgICAgICAgICAnTUUnICAgICAgICA6ICc0LjkwJyxcbiAgICAgICAgICAgICdOVCAzLjExJyAgIDogJ05UMy41MScsXG4gICAgICAgICAgICAnTlQgNC4wJyAgICA6ICdOVDQuMCcsXG4gICAgICAgICAgICAnMjAwMCcgICAgICA6ICdOVCA1LjAnLFxuICAgICAgICAgICAgJ1hQJyAgICAgICAgOiBbJ05UIDUuMScsICdOVCA1LjInXSxcbiAgICAgICAgICAgICdWaXN0YScgICAgIDogJ05UIDYuMCcsXG4gICAgICAgICAgICAnNycgICAgICAgICA6ICdOVCA2LjEnLFxuICAgICAgICAgICAgJzgnICAgICAgICAgOiAnTlQgNi4yJyxcbiAgICAgICAgICAgICc4LjEnICAgICAgIDogJ05UIDYuMycsXG4gICAgICAgICAgICAnMTAnICAgICAgICA6IFsnTlQgNi40JywgJ05UIDEwLjAnXSxcbiAgICAgICAgICAgICdSVCcgICAgICAgIDogJ0FSTSdcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZWdleCBtYXBcbiAgICAvLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmVnZXhlcyA9IHtcblxuICAgICAgICBicm93c2VyIDogW1tcblxuICAgICAgICAgICAgL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIGZvciBBbmRyb2lkL2lPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ2hyb21lJ11dLCBbXG4gICAgICAgICAgICAvZWRnKD86ZXxpb3N8YSk/XFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdFZGdlJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIFByZXN0byBiYXNlZFxuICAgICAgICAgICAgLyhvcGVyYSBtaW5pKVxcLyhbLVxcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNaW5pXG4gICAgICAgICAgICAvKG9wZXJhIFttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFstXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNb2JpL1RhYmxldFxuICAgICAgICAgICAgLyhvcGVyYSkoPzouK3ZlcnNpb25cXC98W1xcLyBdKykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL29waW9zW1xcLyBdKyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBtaW5pIG9uIGlwaG9uZSA+PSA4LjBcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkErJyBNaW5pJ11dLCBbXG4gICAgICAgICAgICAvXFxib3ByXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBXZWJraXRcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkFdXSwgW1xuXG4gICAgICAgICAgICAvLyBNaXhlZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgLy8gTHVuYXNjYXBlL01heHRob24vTmV0ZnJvbnQvSmFzbWluZS9CbGF6ZXJcbiAgICAgICAgICAgIC8vIFRyaWRlbnQgYmFzZWRcbiAgICAgICAgICAgIC8oYXZhbnQgfGllbW9iaWxlfHNsaW0pKD86YnJvd3Nlcik/W1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgLy8gQXZhbnQvSUVNb2JpbGUvU2xpbUJyb3dzZXJcbiAgICAgICAgICAgIC8oYmE/aWR1YnJvd3NlcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFpZHUgQnJvd3NlclxuICAgICAgICAgICAgLyg/Om1zfFxcKCkoaWUpIChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuXG4gICAgICAgICAgICAvLyBXZWJraXQvS0hUTUwgYmFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsb2NrL1JvY2tNZWx0L01pZG9yaS9FcGlwaGFueS9TaWxrL1NreWZpcmUvQm9sdC9Jcm9uL0lyaWRpdW0vUGhhbnRvbUpTL0Jvd3Nlci9RdXBaaWxsYS9GYWxrb25cbiAgICAgICAgICAgIC8oZmxvY2t8cm9ja21lbHR8bWlkb3JpfGVwaXBoYW55fHNpbGt8c2t5ZmlyZXxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29ufHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGUoPyEuK25hdmVyKXxxcWJyb3dzZXJsaXRlfHFxfGR1Y2tkdWNrZ28pXFwvKFstXFx3XFwuXSspL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJla29ucS9QdWZmaW4vQnJhdmUvV2hhbGUvUVFCcm93c2VyTGl0ZS9RUSwgYWthIFNob3VRXG4gICAgICAgICAgICAvKGhleXRhcHxvdmkpYnJvd3NlclxcLyhbXFxkXFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhleXRhcC9PdmlcbiAgICAgICAgICAgIC8od2VpYm8pX18oW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlib1xuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKD86XFxidWM/ID9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC8gXT8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAvLyBVQ0Jyb3dzZXJcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1VDJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9taWNyb20uK1xcYnFiY29yZVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdCBEZXNrdG9wIGZvciBXaW5kb3dzIEJ1aWx0LWluIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXGJxYmNvcmVcXC8oW1xcd1xcLl0rKS4rbWljcm9tL2lcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1dlQ2hhdChXaW4pIERlc2t0b3AnXV0sIFtcbiAgICAgICAgICAgIC9taWNyb21lc3NlbmdlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VDaGF0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdXZUNoYXQnXV0sIFtcbiAgICAgICAgICAgIC9rb25xdWVyb3JcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS29ucXVlcm9yXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdLb25xdWVyb3InXV0sIFtcbiAgICAgICAgICAgIC90cmlkZW50Litydls6IF0oW1xcd1xcLl17MSw5fSlcXGIuK2xpa2UgZ2Vja28vaSAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUxMVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnSUUnXV0sIFtcbiAgICAgICAgICAgIC95YSg/OnNlYXJjaCk/YnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWFuZGV4XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdZYW5kZXgnXV0sIFtcbiAgICAgICAgICAgIC8oYXZhc3R8YXZnKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZhc3QvQVZHIFNlY3VyZSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxIFNlY3VyZSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmZvY3VzXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBGb2N1c1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgRm9jdXMnXV0sIFtcbiAgICAgICAgICAgIC9cXGJvcHRcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIFRvdWNoXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgVG91Y2gnXV0sIFtcbiAgICAgICAgICAgIC9jb2NfY29jXFx3K1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYyBDb2MgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ29jIENvYyddXSwgW1xuICAgICAgICAgICAgL2RvbGZpblxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2xwaGluXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEb2xwaGluJ11dLCBbXG4gICAgICAgICAgICAvY29hc3RcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIENvYXN0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgQ29hc3QnXV0sIFtcbiAgICAgICAgICAgIC9taXVpYnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlVSSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNSVVJICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvZnhpb3NcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZm9yIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YXV0sIFtcbiAgICAgICAgICAgIC9cXGJxaWh1fChxaT9obz9vP3wzNjApYnJvd3Nlci9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM2MFxuICAgICAgICAgICAgXSwgW1tOQU1FLCAnMzYwICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvKG9jdWx1c3xzYW1zdW5nfHNhaWxmaXNofGh1YXdlaSlicm93c2VyXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAvKC4rKS8sICckMSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgWyAgICAgICAgICAgICAgICAgICAgICAvLyBPY3VsdXMvU2Ftc3VuZy9TYWlsZmlzaC9IdWF3ZWkgQnJvd3NlclxuICAgICAgICAgICAgLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21vZG8gRHJhZ29uXG4gICAgICAgICAgICBdLCBbW05BTUUsIC9fL2csICcgJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspIHNhZmFyaS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsZWN0cm9uLWJhc2VkIEFwcFxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcLygyMFxcZFxcZFxcLlstXFx3XFwuXSspKS9pLCAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcLyBdPyhbXFx3XFwuXSspL2kgICAgICAgICAgICAvLyBRUUJyb3dzZXIvQmFpZHUgQXBwLzIzNDUgQnJvd3NlclxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKG1ldGFzcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvdUdvdUJyb3dzZXJcbiAgICAgICAgICAgIC8obGJicm93c2VyKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGllQmFvIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXFsobGlua2VkaW4pYXBwXFxdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rZWRJbiBBcHAgZm9yIGlPUyAmIEFuZHJvaWRcbiAgICAgICAgICAgIF0sIFtOQU1FXSwgW1xuXG4gICAgICAgICAgICAvLyBXZWJWaWV3XG4gICAgICAgICAgICAvKCg/OmZiYW5cXC9mYmlvc3xmYl9pYWJcXC9mYjRhKSg/IS4rZmJhdil8O2ZiYXZcXC8oW1xcd1xcLl0rKTspL2kgICAgICAgLy8gRmFjZWJvb2sgQXBwIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICBdLCBbW05BTUUsIEZBQ0VCT09LXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oa2FrYW8oPzp0YWxrfHN0b3J5KSlbXFwvIF0oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FrYW8gQXBwXG4gICAgICAgICAgICAvKG5hdmVyKVxcKC4qPyhcXGQrXFwuW1xcd1xcLl0rKS4qXFwpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmVyIEluQXBwXG4gICAgICAgICAgICAvc2FmYXJpIChsaW5lKVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgQXBwIGZvciBpT1NcbiAgICAgICAgICAgIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIEFwcCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgLyhjaHJvbWl1bXxpbnN0YWdyYW0pW1xcLyBdKFstXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWl1bS9JbnN0YWdyYW1cbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmdzYVxcLyhbXFx3XFwuXSspIC4qc2FmYXJpXFwvL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBTZWFyY2ggQXBwbGlhbmNlIG9uIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnR1NBJ11dLCBbXG4gICAgICAgICAgICAvbXVzaWNhbF9seSg/Oi4rYXBwXz92ZXJzaW9uXFwvfF8pKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpa1Rva1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnVGlrVG9rJ11dLCBbXG5cbiAgICAgICAgICAgIC9oZWFkbGVzc2Nocm9tZSg/OlxcLyhbXFx3XFwuXSspfCApL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIEhlYWRsZXNzXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIENIUk9NRSsnIEhlYWRsZXNzJ11dLCBbXG5cbiAgICAgICAgICAgIC8gd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBXZWJWaWV3XG4gICAgICAgICAgICBdLCBbW05BTUUsIENIUk9NRSsnIFdlYlZpZXcnXSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL2Ryb2lkLisgdmVyc2lvblxcLyhbXFx3XFwuXSspXFxiLisoPzptb2JpbGUgc2FmYXJpfHNhZmFyaSkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdBbmRyb2lkICcrQlJPV1NFUl1dLCBbXG5cbiAgICAgICAgICAgIC8oY2hyb21lfG9tbml3ZWJ8YXJvcmF8W3RpemVub2thXXs1fSA/YnJvd3NlcilcXC92PyhbXFx3XFwuXSspL2kgICAgICAgLy8gQ2hyb21lL09tbmlXZWIvQXJvcmEvVGl6ZW4vTm9raWFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuXG4gICAgICAgICAgICAvdmVyc2lvblxcLyhbXFx3XFwuXFwsXSspIC4qbW9iaWxlXFwvXFx3KyAoc2FmYXJpKS9pICAgICAgICAgICAgICAgICAgICAgIC8vIE1vYmlsZSBTYWZhcmlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ01vYmlsZSBTYWZhcmknXV0sIFtcbiAgICAgICAgICAgIC92ZXJzaW9uXFwvKFtcXHcoXFwufFxcLCldKykgLioobW9iaWxlID9zYWZhcml8c2FmYXJpKS9pICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAmIFNhZmFyaSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXSwgW1xuICAgICAgICAgICAgL3dlYmtpdC4rPyhtb2JpbGUgP3NhZmFyaXxzYWZhcmkpKFxcL1tcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgc3RyTWFwcGVyLCBvbGRTYWZhcmlNYXBdXSwgW1xuXG4gICAgICAgICAgICAvKHdlYmtpdHxraHRtbClcXC8oW1xcd1xcLl0rKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgLy8gR2Vja28gYmFzZWRcbiAgICAgICAgICAgIC8obmF2aWdhdG9yfG5ldHNjYXBlXFxkPylcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldHNjYXBlXG4gICAgICAgICAgICBdLCBbW05BTUUsICdOZXRzY2FwZSddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL21vYmlsZSB2cjsgcnY6KFtcXHdcXC5dKylcXCkuK2ZpcmVmb3gvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IFJlYWxpdHlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgRklSRUZPWCsnIFJlYWxpdHknXV0sIFtcbiAgICAgICAgICAgIC9la2lvaGYuKyhmbG93KVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvd1xuICAgICAgICAgICAgLyhzd2lmdGZveCkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2lmdGZveFxuICAgICAgICAgICAgLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtbyBicm93c2VyfG1pbmltb3xjb25rZXJvcnxrbGFyKVtcXC8gXT8oW1xcd1xcLlxcK10rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2VEcmFnb24vSWNld2Vhc2VsL0NhbWluby9DaGltZXJhL0Zlbm5lYy9NYWVtby9NaW5pbW8vQ29ua2Vyb3IvS2xhclxuICAgICAgICAgICAgLyhzZWFtb25rZXl8ay1tZWxlb258aWNlY2F0fGljZWFwZXxmaXJlYmlyZHxwaG9lbml4fHBhbGVtb29ufGJhc2lsaXNrfHdhdGVyZm94KVxcLyhbLVxcd1xcLl0rKSQvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveC9TZWFNb25rZXkvSy1NZWxlb24vSWNlQ2F0L0ljZUFwZS9GaXJlYmlyZC9QaG9lbml4XG4gICAgICAgICAgICAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIEZpcmVmb3gtYmFzZWRcbiAgICAgICAgICAgIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKSAuK3J2XFw6LitnZWNrb1xcL1xcZCsvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW96aWxsYVxuXG4gICAgICAgICAgICAvLyBPdGhlclxuICAgICAgICAgICAgLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZnxzbGVpcG5pcnxvYmlnb3xtb3NhaWN8KD86Z298aWNlfHVwKVtcXC4gXT9icm93c2VyKVstXFwvIF0/dj8oW1xcd1xcLl0rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb2xhcmlzL0x5bngvRGlsbG8vaUNhYi9Eb3Jpcy9BbWF5YS93M20vTmV0U3VyZi9TbGVpcG5pci9PYmlnby9Nb3NhaWMvR28vSUNFL1VQLkJyb3dzZXJcbiAgICAgICAgICAgIC8obGlua3MpIFxcKChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua3NcbiAgICAgICAgICAgIC9wYW5hc29uaWM7KHZpZXJhKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFuYXNvbmljIFZpZXJhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyhjb2JhbHQpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2JhbHRcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgL21hc3Rlci58bHRzLi8sIFwiXCJdXVxuICAgICAgICBdLFxuXG4gICAgICAgIGNwdSA6IFtbXG5cbiAgICAgICAgICAgIC8oPzooYW1kfHgoPzooPzo4Nnw2NClbLV9dKT98d293fHdpbik2NClbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgIC8vIEFNRDY0ICh4NjQpXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FtZDY0J11dLCBbXG5cbiAgICAgICAgICAgIC8oaWEzMig/PTspKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAocXVpY2t0aW1lKVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAoeDg2KVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdpYTMyJ11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYWFyY2g2NHxhcm0odj84ZT9sP3xfPzY0KSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFSTTY0XG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FybTY0J11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYXJtKD86dls2N10pP2h0P24/W2ZsXXA/KVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBUk1IRlxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm1oZiddXSwgW1xuXG4gICAgICAgICAgICAvLyBQb2NrZXRQQyBtaXN0YWtlbmx5IGlkZW50aWZpZWQgYXMgUG93ZXJQQ1xuICAgICAgICAgICAgL3dpbmRvd3MgKGNlfG1vYmlsZSk7IHBwYzsvaVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm0nXV0sIFtcblxuICAgICAgICAgICAgLygoPzpwcGN8cG93ZXJwYykoPzo2NCk/KSg/OiBtYWN8O3xcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXJQQ1xuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIC9vd2VyLywgRU1QVFksIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLyhzdW40XFx3KVs7XFwpXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNQQVJDXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ3NwYXJjJ11dLCBbXG5cbiAgICAgICAgICAgIC8oKD86YXZyMzJ8aWE2NCg/PTspKXw2OGsoPz1cXCkpfFxcYmFybSg/PXYoPzpbMS03XXxbNS03XTEpbD98O3xlYWJpKXwoPz1hdG1lbCApYXZyfCg/OmlyaXh8bWlwc3xzcGFyYykoPzo2NCk/XFxifHBhLXJpc2MpL2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUE2NCwgNjhLLCBBUk0vNjQsIEFWUi8zMiwgSVJJWC82NCwgTUlQUy82NCwgU1BBUkMvNjQsIFBBLVJJU0NcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCBsb3dlcml6ZV1dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZGV2aWNlIDogW1tcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIE1PQklMRVMgJiBUQUJMRVRTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIC9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0eF1cXHd7Miw0fXxndC1bcG5dXFxkezIsNH18c2doLXQ4WzU2XTl8bmV4dXMgMTApL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoPzpzW2NncF1ofGd0fHNtKS1cXHcrfHNjW2ctXT9bXFxkXSthP3xnYWxheHkgbmV4dXMpL2ksXG4gICAgICAgICAgICAvc2Ftc3VuZ1stIF0oWy1cXHddKykvaSxcbiAgICAgICAgICAgIC9zZWMtKHNnaFxcdyspL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBcHBsZVxuICAgICAgICAgICAgLyg/OlxcL3xcXCgpKGlwKD86aG9uZXxvZClbXFx3LCBdKikoPzpcXC98OykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBvZC9pUGhvbmVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXCgoaXBhZCk7Wy1cXHdcXCksOyBdK2FwcGxlL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBhZFxuICAgICAgICAgICAgL2FwcGxlY29yZW1lZGlhXFwvW1xcd1xcLl0rIFxcKChpcGFkKS9pLFxuICAgICAgICAgICAgL1xcYihpcGFkKVxcZFxcZD8sXFxkXFxkP1s7XFxdXS4raW9zL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obWFjaW50b3NoKTsvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFNoYXJwXG4gICAgICAgICAgICAvXFxiKHNoLT9bYWx0dnpdP1xcZFxcZFthLWVrbV0/KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNIQVJQXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEh1YXdlaVxuICAgICAgICAgICAgL1xcYigoPzphZ1tyc11bMjNdP3xiYWgyP3xzaHQ/fGJ0diktYT9bbHddXFxkezJ9KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKD86aHVhd2VpfGhvbm9yKShbLVxcdyBdKylbO1xcKV0vaSxcbiAgICAgICAgICAgIC9cXGIobmV4dXMgNnB8XFx3ezIsNH1lPy1bYXR1XT9bbG5dW1xcZHhdWzAxMjM1OWNdW2Fkbl0/KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFhpYW9taVxuICAgICAgICAgICAgL1xcYihwb2NvW1xcdyBdKykoPzogYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWkgUE9DT1xuICAgICAgICAgICAgL1xcYjsgKFxcdyspIGJ1aWxkXFwvaG1cXDEvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWGlhb21pIEhvbmdtaSAnbnVtZXJpYycgbW9kZWxzXG4gICAgICAgICAgICAvXFxiKGhtWy1fIF0/bm90ZT9bXyBdPyg/OlxcZFxcdyk/KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBIb25nbWlcbiAgICAgICAgICAgIC9cXGIocmVkbWlbXFwtXyBdPyg/Om5vdGV8ayk/W1xcd18gXSspKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBSZWRtaVxuICAgICAgICAgICAgL1xcYihtaVstXyBdPyg/OmFcXGR8b25lfG9uZVtfIF1wbHVzfG5vdGUgbHRlfG1heHxjYyk/W18gXT8oPzpcXGQ/XFx3PylbXyBdPyg/OnBsdXN8c2V8bGl0ZSk/KSg/OiBidWl8XFwpKS9pIC8vIFhpYW9taSBNaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKG1pWy1fIF0/KD86cGFkKSg/OltcXHdfIF0rKSkoPzogYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pIFBhZCB0YWJsZXRzXG4gICAgICAgICAgICBdLFtbTU9ERUwsIC9fL2csICcgJ10sIFtWRU5ET1IsIFhJQU9NSV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBPUFBPXG4gICAgICAgICAgICAvOyAoXFx3KykgYnVpLisgb3Bwby9pLFxuICAgICAgICAgICAgL1xcYihjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3fGExMDFvcClcXGIvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnT1BQTyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gVml2b1xuICAgICAgICAgICAgL3Zpdm8gKFxcdyspKD86IGJ1aXxcXCkpL2ksXG4gICAgICAgICAgICAvXFxiKHZbMTJdXFxkezN9XFx3P1thdF0pKD86IGJ1aXw7KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdWaXZvJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBSZWFsbWVcbiAgICAgICAgICAgIC9cXGIocm14WzEyXVxcZHszfSkoPzogYnVpfDt8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSZWFsbWUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1vdG9yb2xhXG4gICAgICAgICAgICAvXFxiKG1pbGVzdG9uZXxkcm9pZCg/OlsyLTR4XXwgKD86YmlvbmljfHgyfHByb3xyYXpyKSk/Oj8oIDRnKT8pXFxiW1xcdyBdK2J1aWxkXFwvL2ksXG4gICAgICAgICAgICAvXFxibW90KD86b3JvbGEpP1stIF0oXFx3KikvaSxcbiAgICAgICAgICAgIC8oKD86bW90b1tcXHdcXChcXCkgXSt8eHRcXGR7Myw0fXxuZXh1cyA2KSg/PSBidWl8XFwpKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBNT1RPUk9MQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihtejYwXFxkfHhvb21bMiBdezAsMn0pIGJ1aWxkXFwvL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTU9UT1JPTEFdLCBbVFlQRSwgVEFCTEVUXV0sIFtcblxuICAgICAgICAgICAgLy8gTEdcbiAgICAgICAgICAgIC8oKD89bGcpP1t2bF1rXFwtP1xcZHszfSkgYnVpfCAzXFwuWy1cXHc7IF17MTB9bGc/LShbMDZjdjldezMsNH0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obG0oPzotP2YxMDBbbnZdP3wtW1xcd1xcLl0rKSg/PSBidWl8XFwpKXxuZXh1cyBbNDVdKS9pLFxuICAgICAgICAgICAgL1xcYmxnWy1lO1xcLyBdKygoPyFicm93c2VyfG5ldGNhc3R8YW5kcm9pZCB0dilcXHcrKS9pLFxuICAgICAgICAgICAgL1xcYmxnLT8oW1xcZFxcd10rKSBidWkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBMR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBMZW5vdm9cbiAgICAgICAgICAgIC8oaWRlYXRhYlstXFx3IF0rKS9pLFxuICAgICAgICAgICAgL2xlbm92byA/KHNbNTZdMDAwWy1cXHddK3x0YWIoPzpbXFx3IF0rKXx5dFstXFxkXFx3XXs2fXx0YlstXFxkXFx3XXs2fSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTGVub3ZvJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBOb2tpYVxuICAgICAgICAgICAgLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWEgXFxkKykvaSxcbiAgICAgICAgICAgIC9ub2tpYVstXyBdPyhbLVxcd1xcLl0qKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvXy9nLCAnICddLCBbVkVORE9SLCAnTm9raWEnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEdvb2dsZVxuICAgICAgICAgICAgLyhwaXhlbCBjKVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsIENcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgR09PR0xFXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHBpeGVsW1xcZGF4bCBdezAsNn0pKD86IGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICAvZHJvaWQuKyAoYT9cXGRbMC0yXXsyfXNvfFtjLWddXFxkezR9fHNvWy1nbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89IGJ1aXxcXCkuK2Nocm9tZVxcLyg/IVsxLTZdezAsMX1cXGRcXC4pKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9zb255IHRhYmxldCBbcHNdL2ksXG4gICAgICAgICAgICAvXFxiKD86c29ueSk/c2dwXFx3Kyg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAnWHBlcmlhIFRhYmxldCddLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9uZVBsdXNcbiAgICAgICAgICAgIC8gKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLFxuICAgICAgICAgICAgLyg/Om9uZSk/KD86cGx1cyk/IChhXFxkMFxcZFxcZCkoPzogYnxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ09uZVBsdXMnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEFtYXpvblxuICAgICAgICAgICAgLyhhbGV4YSl3ZWJtL2ksXG4gICAgICAgICAgICAvKGtmW2Etel17Mn13aXxhZW9bYy1yXXsyfSkoIGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSB3aXRob3V0IFNpbGsgLyBFY2hvIFNob3dcbiAgICAgICAgICAgIC8oa2ZbYS16XSspKCBidWl8XFwpKS4rc2lsa1xcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSBIRFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oKD86c2R8a2YpWzAzNDloaWpvcnN0dXddKykoIGJ1aXxcXCkpLitzaWxrXFwvL2kgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFBob25lXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvKC4rKS9nLCAnRmlyZSBQaG9uZSAkMSddLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQmxhY2tCZXJyeVxuICAgICAgICAgICAgLyhwbGF5Ym9vayk7Wy1cXHdcXCksOyBdKyhyaW0pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkgUGxheUJvb2tcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgVkVORE9SLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSxcbiAgICAgICAgICAgIC9cXChiYjEwOyAoXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEJMQUNLQkVSUlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXN1c1xuICAgICAgICAgICAgLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZSBdezQsMTB9IFxcdyt8ZWVlcGN8c2xpZGVyIFxcdyt8bmV4dXMgN3xwYWRmb25lfHAwMFtjal0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyAoeltiZXNdNlswMjddWzAxMl1ba21dW2xzXXx6ZW5mb25lIFxcZFxcdz8pXFxiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIVENcbiAgICAgICAgICAgIC8obmV4dXMgOSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDIE5leHVzIDlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0hUQyddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oaHRjKVstO18gXXsxLDJ9KFtcXHcgXSsoPz1cXCl8IGJ1aSl8XFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDXG5cbiAgICAgICAgICAgIC8vIFpURVxuICAgICAgICAgICAgLyh6dGUpWy0gXShbXFx3IF0rPykoPzogYnVpfFxcL3xcXCkpL2ksXG4gICAgICAgICAgICAvKGFsY2F0ZWx8Z2Vla3NwaG9uZXxuZXhpYW58cGFuYXNvbmljKD8hKD86O3xcXC4pKXxzb255KD8hLWJyYSkpWy1fIF0/KFstXFx3XSopL2kgICAgICAgICAvLyBBbGNhdGVsL0dlZWtzUGhvbmUvTmV4aWFuL1BhbmFzb25pYy9Tb255XG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIC9fL2csICcgJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBY2VyXG4gICAgICAgICAgICAvZHJvaWQuKzsgKFthYl1bMS03XS0/WzAxNzhhXVxcZFxcZD8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FjZXInXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1laXp1XG4gICAgICAgICAgICAvZHJvaWQuKzsgKG1bMS01XSBub3RlKSBidWkvaSxcbiAgICAgICAgICAgIC9cXGJtei0oWy1cXHddezIsfSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTWVpenUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1JWEVEXG4gICAgICAgICAgICAvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pWy1fIF0/KFstXFx3XSopL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkvQmVuUS9QYWxtL1NvbnktRXJpY3Nzb24vQWNlci9Bc3VzL0RlbGwvTWVpenUvTW90b3JvbGEvUG9seXRyb25cbiAgICAgICAgICAgIC8oaHApIChbXFx3IF0rXFx3KS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBpUEFRXG4gICAgICAgICAgICAvKGFzdXMpLT8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3VzXG4gICAgICAgICAgICAvKG1pY3Jvc29mdCk7IChsdW1pYVtcXHcgXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgTHVtaWFcbiAgICAgICAgICAgIC8obGVub3ZvKVstXyBdPyhbLVxcd10rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlbm92b1xuICAgICAgICAgICAgLyhqb2xsYSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xsYVxuICAgICAgICAgICAgLyhvcHBvKSA/KFtcXHcgXSspIGJ1aS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1BQT1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvKGtvYm8pXFxzKGVyZWFkZXJ8dG91Y2gpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLb2JvXG4gICAgICAgICAgICAvKGFyY2hvcykgKGdhbWVwYWQyPykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyY2hvc1xuICAgICAgICAgICAgLyhocCkuKyh0b3VjaHBhZCg/IS4rdGFibGV0KXx0YWJsZXQpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBUb3VjaFBhZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obm9vaylbXFx3IF0rYnVpbGRcXC8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9va1xuICAgICAgICAgICAgLyhkZWxsKSAoc3RyZWFba3ByXFxkIF0qW1xcZGtvXSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgU3RyZWFrXG4gICAgICAgICAgICAvKGxlWy0gXStwYW4pWy0gXSsoXFx3ezEsOX0pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZSBQYW4gVGFibGV0c1xuICAgICAgICAgICAgLyh0cmluaXR5KVstIF0qKHRcXGR7M30pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbml0eSBUYWJsZXRzXG4gICAgICAgICAgICAvKGdpZ2FzZXQpWy0gXSsocVxcd3sxLDl9KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaWdhc2V0IFRhYmxldHNcbiAgICAgICAgICAgIC8odm9kYWZvbmUpIChbXFx3IF0rKSg/OlxcKXwgYnVpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWb2RhZm9uZVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvKHN1cmZhY2UgZHVvKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgRHVvXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkIFtcXGRcXC5dKzsgKGZwXFxkdT8pKD86IGJ8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpcnBob25lXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdGYWlycGhvbmUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvKHUzMDRhYSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUJlRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FUJlQnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxic2llLShcXHcqKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2llbWVuc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU2llbWVucyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIocmN0XFx3KykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSQ0EgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnUkNBJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih2ZW51ZVtcXGQgXXsyLDd9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgVmVudWUgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRGVsbCddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIocSg/Om12fHRhKVxcdyspIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpem9uIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVmVyaXpvbiddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoPzpiYXJuZXNbJiBdK25vYmxlIHxibltydF0pKFtcXHdcXCsgXSopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFybmVzICYgTm9ibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdCYXJuZXMgJiBOb2JsZSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIodG1cXGR7M31cXHcrKSBiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ051VmlzaW9uJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihrODgpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWlRFIEsgU2VyaWVzIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihueFxcZHszfWopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpURSBOdWJpYVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihnZW5cXGR7M30pIGIuKzQ5aC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIEdFTiBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih6dXJcXGR7M30pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIFpVUiBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoemVraSk/dGIuKlxcYikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpla2kgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWmVraSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoW3lyXVxcZHsyfSkgYi9pLFxuICAgICAgICAgICAgL1xcYihkcmFnb25bLSBdK3RvdWNoIHxkdCkoXFx3ezV9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYWdvbiBUb3VjaCBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnRHJhZ29uIFRvdWNoJ10sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIobnMtP1xcd3swLDl9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNpZ25pYSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdJbnNpZ25pYSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKG54YXxuZXh0KS0/XFx3ezAsOX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0Qm9vayBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOZXh0Qm9vayddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKSBiL2kgICAgICAgICAgICAgICAgICAvLyBWb2ljZSBYdHJlbWUgUGhvbmVzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgJ1ZvaWNlJ10sIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIobHZ0ZWxcXC0pPyh2MVsxMl0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMdlRlbCBQaG9uZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnTHZUZWwnXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihwaC0xKSAvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNzZW50aWFsIFBILTFcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vzc2VudGlhbCddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIodigxMDBtZHw3MDBuYXw3MDExfDkxN2cpLipcXGIpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnZpemVuIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vudml6ZW4nXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKHRyaW9bLVxcd1xcLiBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hY2hTcGVlZCBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdNYWNoU3BlZWQnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxidHVfKDE0OTEpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3RvciBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSb3RvciddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oc2hpZWxkW1xcdyBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE52aWRpYSBTaGllbGQgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTnZpZGlhJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhzcHJpbnQpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ByaW50IFBob25lc1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgLyhraW5cXC5bb25ldHddezN9KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEtpblxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL1xcLi9nLCAnICddLCBbVkVORE9SLCBNSUNST1NPRlRdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoY2M2NjY2P3xldDVbMTZdfG1jWzIzOV1bMjNdeD98dmM4WzAzXXg/KVxcKS9pICAgICAgICAgICAgIC8vIFplYnJhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGVjMzB8cHMyMHx0Y1syLThdXFxkW2t4XSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBTTUFSVFRWU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvc21hcnQtdHYuKyhzYW1zdW5nKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9oYmJ0di4rbWFwbGU7KFxcZCspL2lcbiAgICAgICAgICAgIF0sIFtbTU9ERUwsIC9eLywgJ1NtYXJ0VFYnXSwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obnV4OyBuZXRjYXN0LitzbWFydHR2fGxnIChuZXRjYXN0XFwudHYtMjAxXFxkfGFuZHJvaWQgdHYpKS9pICAgICAgICAvLyBMRyBTbWFydFRWXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgTEddLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKGFwcGxlKSA/dHYvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxlIFRWXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIEFQUExFKycgVFYnXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL2Nya2V5L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgQ0hST01FKydjYXN0J10sIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rYWZ0KFxcdykoIGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFRWXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXChkdHZbXFwpO10uKyhhcXVvcykvaSxcbiAgICAgICAgICAgIC8oYXF1b3MtdHZbXFx3IF0rKVxcKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGFycFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTSEFSUF0sIFtUWVBFLCBTTUFSVFRWXV0sW1xuICAgICAgICAgICAgLyhicmF2aWFbXFx3IF0rKSggYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKG1pdHYtXFx3ezV9KSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL0hiYnR2LioodGVjaG5pc2F0KSAoLiopOy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmlTQVRcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvXFxiKHJva3UpW1xcZHhdKltcXClcXC9dKCg/OmR2cC0pP1tcXGRcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJva3VcbiAgICAgICAgICAgIC9oYmJ0dlxcL1xcZCtcXC5cXGQrXFwuXFxkKyArXFwoW1xcd1xcKyBdKjsgKihbXFx3XFxkXVteO10qKTsoW147XSopL2kgICAgICAgICAvLyBIYmJUViBkZXZpY2VzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgdHJpbV0sIFtNT0RFTCwgdHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIoYW5kcm9pZCB0dnxzbWFydFstIF0/dHZ8b3BlcmEgdHZ8dHY7IHJ2OilcXGIvaSAgICAgICAgICAgICAgICAgICAvLyBTbWFydFRWIGZyb20gVW5pZGVudGlmaWVkIFZlbmRvcnNcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgU01BUlRUVl1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIENPTlNPTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8ob3V5YSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V5YVxuICAgICAgICAgICAgLyhuaW50ZW5kbykgKFt3aWRzM3V0Y2hdKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOaW50ZW5kb1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBDT05TT0xFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoc2hpZWxkKSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnZpZGlhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOdmlkaWEnXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgLyhwbGF5c3RhdGlvbiBbMzQ1cG9ydGFibGV2aV0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF5c3RhdGlvblxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih4Ym94KD86IG9uZSk/KD8hOyB4Ym94KSlbXFwpOyBdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBYYm94XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBDT05TT0xFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gV0VBUkFCTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8oKHBlYmJsZSkpYXBwL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGViYmxlXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8od2F0Y2gpKD86ID9vc1ssXFwvXXxcXGQsXFxkXFwvKVtcXGRcXC5dKy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGUgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7IChnbGFzcykgXFxkL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIEdsYXNzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHd0NjM/MHsyLDN9KVxcKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8ocXVlc3QoIDJ8IHBybyk/KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2N1bHVzIFF1ZXN0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEZBQ0VCT09LXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gRU1CRURERURcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcL1stXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFtcbiAgICAgICAgICAgIC8oYWVvYmMpXFxiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVjaG8gRG90XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBFTUJFRERFRF1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBNSVhFRCAoR0VORVJJQylcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgL2Ryb2lkIC4rPzsgKFteO10rPykoPzogYnVpfFxcKSBhcHBsZXcpLis/IG1vYmlsZSBzYWZhcmkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBQaG9uZXMgZnJvbSBVbmlkZW50aWZpZWQgVmVuZG9yc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXjtdKz8pKD86IGJ1aXxcXCkgYXBwbGV3KS4rPyg/ISBtb2JpbGUpIHNhZmFyaS9pICAgICAgIC8vIEFuZHJvaWQgVGFibGV0cyBmcm9tIFVuaWRlbnRpZmllZCBWZW5kb3JzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigodGFibGV0fHRhYilbO1xcL118Zm9jdXNcXC9cXGQoPyEuK21vYmlsZSkpL2kgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZGVudGlmaWFibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKHBob25lfG1vYmlsZSg/Ols7XFwvXXwgWyBcXHdcXC9cXC5dKnNhZmFyaSl8cGRhKD89Lit3aW5kb3dzIGNlKSkvaSAgICAvLyBVbmlkZW50aWZpYWJsZSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC8oYW5kcm9pZFstXFx3XFwuIF17MCw5fSk7LitidWlsL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmljIEFuZHJvaWQgRGV2aWNlXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdHZW5lcmljJ11dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZW5naW5lIDogW1tcblxuICAgICAgICAgICAgL3dpbmRvd3MuKyBlZGdlXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVkZ2VIVE1MXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEVER0UrJ0hUTUwnXV0sIFtcblxuICAgICAgICAgICAgL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsaW5rXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCbGluayddXSwgW1xuXG4gICAgICAgICAgICAvKHByZXN0bylcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXN0b1xuICAgICAgICAgICAgLyh3ZWJraXR8dHJpZGVudHxuZXRmcm9udHxuZXRzdXJmfGFtYXlhfGx5bnh8dzNtfGdvYW5uYSlcXC8oW1xcd1xcLl0rKS9pLCAvLyBXZWJLaXQvVHJpZGVudC9OZXRGcm9udC9OZXRTdXJmL0FtYXlhL0x5bngvdzNtL0dvYW5uYVxuICAgICAgICAgICAgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKGtodG1sfHRhc21hbnxsaW5rcylbXFwvIF1cXCg/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLSFRNTC9UYXNtYW4vTGlua3NcbiAgICAgICAgICAgIC8oaWNhYilbXFwvIF0oWzIzXVxcLltcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlDYWJcbiAgICAgICAgICAgIC9cXGIobGlid2ViKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3J2XFw6KFtcXHdcXC5dezEsOX0pXFxiLisoZ2Vja28pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja29cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXVxuICAgICAgICBdLFxuXG4gICAgICAgIG9zIDogW1tcblxuICAgICAgICAgICAgLy8gV2luZG93c1xuICAgICAgICAgICAgL21pY3Jvc29mdCAod2luZG93cykgKHZpc3RhfHhwKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIChpVHVuZXMpXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od2luZG93cykgbnQgNlxcLjI7IChhcm0pL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbmRvd3MgUlRcbiAgICAgICAgICAgIC8od2luZG93cyAoPzpwaG9uZSg/OiBvcyk/fG1vYmlsZSkpW1xcLyBdPyhbXFxkXFwuXFx3IF0qKS9pLCAgICAgICAgICAgIC8vIFdpbmRvd3MgUGhvbmVcbiAgICAgICAgICAgIC8od2luZG93cylbXFwvIF0/KFtudGNlXFxkXFwuIF0rXFx3KSg/IS4reGJveCkvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcbiAgICAgICAgICAgIC8od2luKD89M3w5fG4pfHdpbiA5eCApKFtudFxcZFxcLl0rKS9pXG4gICAgICAgICAgICBdLCBbW05BTUUsICdXaW5kb3dzJ10sIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcblxuICAgICAgICAgICAgLy8gaU9TL21hY09TXG4gICAgICAgICAgICAvaXBbaG9uZWFkXXsyLDR9XFxiKD86LipvcyAoW1xcd10rKSBsaWtlIG1hY3w7IG9wZXJhKS9pLCAgICAgICAgICAgICAgLy8gaU9TXG4gICAgICAgICAgICAvaW9zO2Zic3ZcXC8oW1xcZFxcLl0rKS9pLFxuICAgICAgICAgICAgL2NmbmV0d29ya1xcLy4rZGFyd2luL2lcbiAgICAgICAgICAgIF0sIFtbVkVSU0lPTiwgL18vZywgJy4nXSwgW05BTUUsICdpT1MnXV0sIFtcbiAgICAgICAgICAgIC8obWFjIG9zIHgpID8oW1xcd1xcLiBdKikvaSxcbiAgICAgICAgICAgIC8obWFjaW50b3NofG1hY19wb3dlcnBjXFxiKSg/IS4raGFpa3UpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hYyBPU1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBNQUNfT1NdLCBbVkVSU0lPTiwgL18vZywgJy4nXV0sIFtcblxuICAgICAgICAgICAgLy8gTW9iaWxlIE9TZXNcbiAgICAgICAgICAgIC9kcm9pZCAoW1xcd1xcLl0rKVxcYi4rKGFuZHJvaWRbLSBdeDg2fGhhcm1vbnlvcykvaSAgICAgICAgICAgICAgICAgICAgLy8gQW5kcm9pZC14ODYvSGFybW9ueU9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQvV2ViT1MvUU5YL0JhZGEvUklNL01hZW1vL01lZUdvL1NhaWxmaXNoIE9TXG4gICAgICAgICAgICAvKGFuZHJvaWR8d2Vib3N8cW54fGJhZGF8cmltIHRhYmxldCBvc3xtYWVtb3xtZWVnb3xzYWlsZmlzaClbLVxcLyBdPyhbXFx3XFwuXSopL2ksXG4gICAgICAgICAgICAvKGJsYWNrYmVycnkpXFx3KlxcLyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja2JlcnJ5XG4gICAgICAgICAgICAvKHRpemVufGthaW9zKVtcXC8gXShbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpemVuL0thaU9TXG4gICAgICAgICAgICAvXFwoKHNlcmllczQwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJpZXMgNDBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcKGJiKDEwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxhY2tCZXJyeSAxMFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBCTEFDS0JFUlJZXV0sIFtcbiAgICAgICAgICAgIC8oPzpzeW1iaWFuID9vc3xzeW1ib3N8czYwKD89Oyl8c2VyaWVzNjApWy1cXC8gXT8oW1xcd1xcLl0qKS9pICAgICAgICAgLy8gU3ltYmlhblxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnU3ltYmlhbiddXSwgW1xuICAgICAgICAgICAgL21vemlsbGFcXC9bXFxkXFwuXSsgXFwoKD86bW9iaWxlfHRhYmxldHx0dnxtb2JpbGU7IFtcXHcgXSspOyBydjouKyBnZWNrb1xcLyhbXFx3XFwuXSspL2kgLy8gRmlyZWZveCBPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgT1MnXV0sIFtcbiAgICAgICAgICAgIC93ZWIwczsuK3J0KHR2KS9pLFxuICAgICAgICAgICAgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dlYk9TJ11dLCBbXG4gICAgICAgICAgICAvd2F0Y2goPzogP29zWyxcXC9dfFxcZCxcXGRcXC8pKFtcXGRcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNoT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dhdGNoT1MnXV0sIFtcblxuICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIC9jcmtleVxcLyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgQ0hST01FKydjYXN0J11dLCBbXG4gICAgICAgICAgICAvKGNyb3MpIFtcXHddKyg/OlxcKXwgKFtcXHdcXC5dKylcXGIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21pdW0gT1NcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgQ0hST01JVU1fT1NdLCBWRVJTSU9OXSxbXG5cbiAgICAgICAgICAgIC8vIFNtYXJ0IFRWc1xuICAgICAgICAgICAgL3BhbmFzb25pYzsodmllcmEpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYW5hc29uaWMgVmllcmFcbiAgICAgICAgICAgIC8obmV0cmFuZ2UpbW1oL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV0cmFuZ2VcbiAgICAgICAgICAgIC8obmV0dHYpXFwvKFxcZCtcXC5bXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRUVlxuXG4gICAgICAgICAgICAvLyBDb25zb2xlXG4gICAgICAgICAgICAvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKSAoW3dpZHMzNDVwb3J0YWJsZXZ1Y2hdKykvaSwgICAgICAgICAgICAgICAgIC8vIE5pbnRlbmRvL1BsYXlzdGF0aW9uXG4gICAgICAgICAgICAvKHhib3gpOyAreGJveCAoW15cXCk7XSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgWGJveCAoMzYwLCBPbmUsIFgsIFMsIFNlcmllcyBYLCBTZXJpZXMgUylcblxuICAgICAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgICAgIC9cXGIoam9saXxwYWxtKVxcYiA/KD86b3MpP1xcLz8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xpL1BhbG1cbiAgICAgICAgICAgIC8obWludClbXFwvXFwoXFwpIF0/KFxcdyopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbnRcbiAgICAgICAgICAgIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7IF0vaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFnZWlhL1ZlY3RvckxpbnV4XG4gICAgICAgICAgICAvKFtreGxuXT91YnVudHV8ZGViaWFufHN1c2V8b3BlbnN1c2V8Z2VudG9vfGFyY2goPz0gbGludXgpfHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWQgP2hhdHx6ZW53YWxrfGxpbnB1c3xyYXNwYmlhbnxwbGFuIDl8bWluaXh8cmlzYyBvc3xjb250aWtpfGRlZXBpbnxtYW5qYXJvfGVsZW1lbnRhcnkgb3N8c2FiYXlvbnxsaW5zcGlyZSkoPzogZ251XFwvbGludXgpPyg/OiBlbnRlcnByaXNlKT8oPzpbLSBdbGludXgpPyg/Oi1nbnUpP1stXFwvIF0/KD8hY2hyb218cGFja2FnZSkoWy1cXHdcXC5dKikvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVWJ1bnR1L0RlYmlhbi9TVVNFL0dlbnRvby9BcmNoL1NsYWNrd2FyZS9GZWRvcmEvTWFuZHJpdmEvQ2VudE9TL1BDTGludXhPUy9SZWRIYXQvWmVud2Fsay9MaW5wdXMvUmFzcGJpYW4vUGxhbjkvTWluaXgvUklTQ09TL0NvbnRpa2kvRGVlcGluL01hbmphcm8vZWxlbWVudGFyeS9TYWJheW9uL0xpbnNwaXJlXG4gICAgICAgICAgICAvKGh1cmR8bGludXgpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSHVyZC9MaW51eFxuICAgICAgICAgICAgLyhnbnUpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdOVVxuICAgICAgICAgICAgL1xcYihbLWZyZW50b3BjZ2hzXXswLDV9YnNkfGRyYWdvbmZseSlbXFwvIF0/KD8hYW1kfFtpeDM0Nl17MSwyfTg2KShbXFx3XFwuXSopL2ksIC8vIEZyZWVCU0QvTmV0QlNEL09wZW5CU0QvUEMtQlNEL0dob3N0QlNEL0RyYWdvbkZseVxuICAgICAgICAgICAgLyhoYWlrdSkgKFxcdyspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFpa3VcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLyhzdW5vcykgPyhbXFx3XFwuXFxkXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2xhcmlzXG4gICAgICAgICAgICBdLCBbW05BTUUsICdTb2xhcmlzJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKCg/Om9wZW4pP3NvbGFyaXMpWy1cXC8gXT8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbGFyaXNcbiAgICAgICAgICAgIC8oYWl4KSAoKFxcZCkoPz1cXC58XFwpfCApW1xcd1xcLl0pKi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBSVhcbiAgICAgICAgICAgIC9cXGIoYmVvc3xvc1xcLzJ8YW1pZ2Fvc3xtb3JwaG9zfG9wZW52bXN8ZnVjaHNpYXxocC11eHxzZXJlbml0eW9zKS9pLCAvLyBCZU9TL09TMi9BbWlnYU9TL01vcnBoT1MvT3BlblZNUy9GdWNoc2lhL0hQLVVYL1NlcmVuaXR5T1NcbiAgICAgICAgICAgIC8odW5peCkgPyhbXFx3XFwuXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVTklYXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl1cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gKHVhLCBleHRlbnNpb25zKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1YSA9PT0gT0JKX1RZUEUpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbnMgPSB1YTtcbiAgICAgICAgICAgIHVhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVBUGFyc2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVQVBhcnNlcih1YSwgZXh0ZW5zaW9ucykuZ2V0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX25hdmlnYXRvciA9ICh0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFICYmIHdpbmRvdy5uYXZpZ2F0b3IpID8gd2luZG93Lm5hdmlnYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF91YSA9IHVhIHx8ICgoX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBfbmF2aWdhdG9yLnVzZXJBZ2VudCA6IEVNUFRZKTtcbiAgICAgICAgdmFyIF91YWNoID0gKF9uYXZpZ2F0b3IgJiYgX25hdmlnYXRvci51c2VyQWdlbnREYXRhKSA/IF9uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gZXh0ZW5kKHJlZ2V4ZXMsIGV4dGVuc2lvbnMpIDogcmVnZXhlcztcbiAgICAgICAgdmFyIF9pc1NlbGZOYXYgPSBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IudXNlckFnZW50ID09IF91YTtcblxuICAgICAgICB0aGlzLmdldEJyb3dzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2Jyb3dzZXIgPSB7fTtcbiAgICAgICAgICAgIF9icm93c2VyW05BTUVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2Jyb3dzZXJbVkVSU0lPTl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgICAgICAgX2Jyb3dzZXJbTUFKT1JdID0gbWFqb3JpemUoX2Jyb3dzZXJbVkVSU0lPTl0pO1xuICAgICAgICAgICAgLy8gQnJhdmUtc3BlY2lmaWMgZGV0ZWN0aW9uXG4gICAgICAgICAgICBpZiAoX2lzU2VsZk5hdiAmJiBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IuYnJhdmUgJiYgdHlwZW9mIF9uYXZpZ2F0b3IuYnJhdmUuaXNCcmF2ZSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBfYnJvd3NlcltOQU1FXSA9ICdCcmF2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jyb3dzZXI7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0Q1BVID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9jcHUgPSB7fTtcbiAgICAgICAgICAgIF9jcHVbQVJDSElURUNUVVJFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9jcHUsIF91YSwgX3JneG1hcC5jcHUpO1xuICAgICAgICAgICAgcmV0dXJuIF9jcHU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9kZXZpY2UgPSB7fTtcbiAgICAgICAgICAgIF9kZXZpY2VbVkVORE9SXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9kZXZpY2VbTU9ERUxdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgIV9kZXZpY2VbVFlQRV0gJiYgX3VhY2ggJiYgX3VhY2gubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IE1PQklMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlQYWRPUy1zcGVjaWZpYyBkZXRlY3Rpb246IGlkZW50aWZpZWQgYXMgTWFjLCBidXQgaGFzIHNvbWUgaU9TLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgX2RldmljZVtNT0RFTF0gPT0gJ01hY2ludG9zaCcgJiYgX25hdmlnYXRvciAmJiB0eXBlb2YgX25hdmlnYXRvci5zdGFuZGFsb25lICE9PSBVTkRFRl9UWVBFICYmIF9uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgX25hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIpIHtcbiAgICAgICAgICAgICAgICBfZGV2aWNlW01PREVMXSA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICBfZGV2aWNlW1RZUEVdID0gVEFCTEVUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIF9lbmdpbmVbTkFNRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfZW5naW5lW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmd4TWFwcGVyLmNhbGwoX2VuZ2luZSwgX3VhLCBfcmd4bWFwLmVuZ2luZSk7XG4gICAgICAgICAgICByZXR1cm4gX2VuZ2luZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRPUyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfb3MgPSB7fTtcbiAgICAgICAgICAgIF9vc1tOQU1FXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9vc1tWRVJTSU9OXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9vcywgX3VhLCBfcmd4bWFwLm9zKTtcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmICFfb3NbTkFNRV0gJiYgX3VhY2ggJiYgX3VhY2gucGxhdGZvcm0gIT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgICAgICAgX29zW05BTUVdID0gX3VhY2gucGxhdGZvcm0gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Nocm9tZSBvcy9pLCBDSFJPTUlVTV9PUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9tYWNvcy9pLCBNQUNfT1MpOyAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVhICAgICAgOiB0aGlzLmdldFVBKCksXG4gICAgICAgICAgICAgICAgYnJvd3NlciA6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICAgICAgICAgIGVuZ2luZSAgOiB0aGlzLmdldEVuZ2luZSgpLFxuICAgICAgICAgICAgICAgIG9zICAgICAgOiB0aGlzLmdldE9TKCksXG4gICAgICAgICAgICAgICAgZGV2aWNlICA6IHRoaXMuZ2V0RGV2aWNlKCksXG4gICAgICAgICAgICAgICAgY3B1ICAgICA6IHRoaXMuZ2V0Q1BVKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0VUEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3VhO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFVBID0gZnVuY3Rpb24gKHVhKSB7XG4gICAgICAgICAgICBfdWEgPSAodHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIKSA/IHRyaW0odWEsIFVBX01BWF9MRU5HVEgpIDogdWE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRVQShfdWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgVUFQYXJzZXIuVkVSU0lPTiA9IExJQlZFUlNJT047XG4gICAgVUFQYXJzZXIuQlJPV1NFUiA9ICBlbnVtZXJpemUoW05BTUUsIFZFUlNJT04sIE1BSk9SXSk7XG4gICAgVUFQYXJzZXIuQ1BVID0gZW51bWVyaXplKFtBUkNISVRFQ1RVUkVdKTtcbiAgICBVQVBhcnNlci5ERVZJQ0UgPSBlbnVtZXJpemUoW01PREVMLCBWRU5ET1IsIFRZUEUsIENPTlNPTEUsIE1PQklMRSwgU01BUlRUViwgVEFCTEVULCBXRUFSQUJMRSwgRU1CRURERURdKTtcbiAgICBVQVBhcnNlci5FTkdJTkUgPSBVQVBhcnNlci5PUyA9IGVudW1lcml6ZShbTkFNRSwgVkVSU0lPTl0pO1xuXG4gICAgLy8vLy8vLy8vLy9cbiAgICAvLyBFeHBvcnRcbiAgICAvLy8vLy8vLy8vXG5cbiAgICAvLyBjaGVjayBqcyBlbnZpcm9ubWVudFxuICAgIGlmICh0eXBlb2YoZXhwb3J0cykgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgLy8gbm9kZWpzIGVudlxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlcXVpcmVqcyBlbnYgKG9wdGlvbmFsKVxuICAgICAgICBpZiAodHlwZW9mKGRlZmluZSkgPT09IEZVTkNfVFlQRSAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBVQVBhcnNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGpRdWVyeS9aZXB0byBzcGVjaWZpYyAob3B0aW9uYWwpXG4gICAgLy8gTm90ZTpcbiAgICAvLyAgIEluIEFNRCBlbnYgdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUga2VwdCBjbGVhbiwgYnV0IGpRdWVyeSBpcyBhbiBleGNlcHRpb24uXG4gICAgLy8gICBqUXVlcnkgYWx3YXlzIGV4cG9ydHMgdG8gZ2xvYmFsIHNjb3BlLCB1bmxlc3MgalF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSkgaXMgdXNlZCxcbiAgICAvLyAgIGFuZCB3ZSBzaG91bGQgY2F0Y2ggdGhhdC5cbiAgICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcbiAgICBpZiAoJCAmJiAhJC51YSkge1xuICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gICAgICAgICQudWEgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICQudWEuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5nZXRVQSgpO1xuICAgICAgICB9O1xuICAgICAgICAkLnVhLnNldCA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgICAgICAgcGFyc2VyLnNldFVBKHVhKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICQudWFbcHJvcF0gPSByZXN1bHRbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG59KSh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHRoaXMpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MTc5OiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuLyoqXG4gKiBFbnVtIGZvciB0eXBlcyBvZiBib3RzLlxuICogU3BlY2lmaWMgdHlwZXMgb2YgYm90cyBjb21lIGZpcnN0LCBmb2xsb3dlZCBieSBhdXRvbWF0aW9uIHRlY2hub2xvZ2llcy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgQm90S2luZCA9IHtcbiAgICAvLyBPYmplY3QgaXMgdXNlZCBpbnN0ZWFkIG9mIFR5cGVzY3JpcHQgZW51bSB0byBhdm9pZCBlbWl0dGluZyBJSUZFIHdoaWNoIG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IGZ1cnRoZXIgdHJlZS1zaGFraW5nLlxuICAgIC8vIFNlZSBleGFtcGxlIG9mIGNvbXBpbGVkIGVudW1zIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS80NzM2Mzk5NilcbiAgICBBd2Vzb21pdW06ICdhd2Vzb21pdW0nLFxuICAgIENlZjogJ2NlZicsXG4gICAgQ2VmU2hhcnA6ICdjZWZzaGFycCcsXG4gICAgQ29hY2hKUzogJ2NvYWNoanMnLFxuICAgIEVsZWN0cm9uOiAnZWxlY3Ryb24nLFxuICAgIEZNaW5lcjogJ2ZtaW5lcicsXG4gICAgR2ViOiAnZ2ViJyxcbiAgICBOaWdodG1hcmVKUzogJ25pZ2h0bWFyZWpzJyxcbiAgICBQaGFudG9tYXM6ICdwaGFudG9tYXMnLFxuICAgIFBoYW50b21KUzogJ3BoYW50b21qcycsXG4gICAgUmhpbm86ICdyaGlubycsXG4gICAgU2VsZW5pdW06ICdzZWxlbml1bScsXG4gICAgU2VxdWVudHVtOiAnc2VxdWVudHVtJyxcbiAgICBTbGltZXJKUzogJ3NsaW1lcmpzJyxcbiAgICBXZWJEcml2ZXJJTzogJ3dlYmRyaXZlcmlvJyxcbiAgICBXZWJEcml2ZXI6ICd3ZWJkcml2ZXInLFxuICAgIEhlYWRsZXNzQ2hyb21lOiAnaGVhZGxlc3NfY2hyb21lJyxcbiAgICBVbmtub3duOiAndW5rbm93bicsXG59O1xuLyoqXG4gKiBCb3QgZGV0ZWN0aW9uIGVycm9yLlxuICovXG52YXIgQm90ZEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCb3RkRXJyb3IsIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCb3RkRXJyb3IuXG4gICAgICpcbiAgICAgKiBAY2xhc3NcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCb3RkRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgX3RoaXMubmFtZSA9ICdCb3RkRXJyb3InO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEJvdGRFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBCb3RkRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnQgeyBCb3RkRXJyb3IgfTtcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdGRFcnJvciwgQm90S2luZCwgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3QoY29tcG9uZW50cywgZGV0ZWN0b3JzKSB7XG4gICAgdmFyIGRldGVjdGlvbnMgPSB7fTtcbiAgICB2YXIgZmluYWxEZXRlY3Rpb24gPSB7XG4gICAgICAgIGJvdDogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKHZhciBkZXRlY3Rvck5hbWUgaW4gZGV0ZWN0b3JzKSB7XG4gICAgICAgIHZhciBkZXRlY3RvciA9IGRldGVjdG9yc1tkZXRlY3Rvck5hbWVdO1xuICAgICAgICB2YXIgZGV0ZWN0b3JSZXMgPSBkZXRlY3Rvcihjb21wb25lbnRzKTtcbiAgICAgICAgdmFyIGRldGVjdGlvbiA9IHsgYm90OiBmYWxzZSB9O1xuICAgICAgICBpZiAodHlwZW9mIGRldGVjdG9yUmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGV0ZWN0aW9uID0geyBib3Q6IHRydWUsIGJvdEtpbmQ6IGRldGVjdG9yUmVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGV0ZWN0b3JSZXMpIHtcbiAgICAgICAgICAgIGRldGVjdGlvbiA9IHsgYm90OiB0cnVlLCBib3RLaW5kOiBCb3RLaW5kLlVua25vd24gfTtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3Rpb25zW2RldGVjdG9yTmFtZV0gPSBkZXRlY3Rpb247XG4gICAgICAgIGlmIChkZXRlY3Rpb24uYm90KSB7XG4gICAgICAgICAgICBmaW5hbERldGVjdGlvbiA9IGRldGVjdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW2RldGVjdGlvbnMsIGZpbmFsRGV0ZWN0aW9uXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wb25lbnRzLCBzb3VyY2VzS2V5cztcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VzS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbChzb3VyY2VzS2V5cy5tYXAoZnVuY3Rpb24gKHNvdXJjZUtleSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMsIF9hLCBfYiwgZXJyb3JfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9kLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gc291cmNlc1tzb3VyY2VLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gY29tcG9uZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYiA9IHNvdXJjZUtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJlcygpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYVtfYl0gPSAoX2MudmFsdWUgPSBfZC5zZW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnN0YXRlID0gMCAvKiBTdGF0ZS5TdWNjZXNzICovLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9kLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfMSBpbnN0YW5jZW9mIEJvdGRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW3NvdXJjZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZXJyb3JfMS5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlwiLmNvbmNhdChlcnJvcl8xLm5hbWUsIFwiOiBcIikuY29uY2F0KGVycm9yXzEubWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW3NvdXJjZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xIGluc3RhbmNlb2YgRXJyb3IgPyBcIlwiLmNvbmNhdChlcnJvcl8xLm5hbWUsIFwiOiBcIikuY29uY2F0KGVycm9yXzEubWVzc2FnZSkgOiBTdHJpbmcoZXJyb3JfMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgY29tcG9uZW50c107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyLCB2YWx1ZSkge1xuICAgIHJldHVybiBhcnIuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0ckluY2x1ZGVzKHN0ciwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUZpbmQoYXJyYXksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCdmaW5kJyBpbiBhcnJheSlcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbmQoY2FsbGJhY2spO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKGFycmF5W2ldLCBpLCBhcnJheSkpXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCJpbXBvcnQgeyBhcnJheUZpbmQsIGFycmF5SW5jbHVkZXMgfSBmcm9tICcuL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0UHJvcHMob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyKSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBrZXlzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoYXJyYXlJbmNsdWRlcyhhcnIsIGtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGFycmF5RmluZChhcnIsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4ga2V5LnRlc3QodmFsdWUpOyB9KTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAodmFyIF9hID0gMCwga2V5c18xID0ga2V5czsgX2EgPCBrZXlzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzXzFbX2FdO1xuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZV8xID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzEudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb3VudFRydXRoeSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWx1ZSkgeyByZXR1cm4gc3VtICsgKHZhbHVlID8gMSA6IDApOyB9LCAwKTtcbn1cbiIsImltcG9ydCB7IGRldGVjdEFwcFZlcnNpb24gfSBmcm9tICcuL2FwcF92ZXJzaW9uJztcbmltcG9ydCB7IGRldGVjdERvY3VtZW50QXR0cmlidXRlcyB9IGZyb20gJy4vZG9jdW1lbnRfZWxlbWVudF9rZXlzJztcbmltcG9ydCB7IGRldGVjdEVycm9yVHJhY2UgfSBmcm9tICcuL2Vycm9yX3RyYWNlJztcbmltcG9ydCB7IGRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5IH0gZnJvbSAnLi9ldmFsX2xlbmd0aCc7XG5pbXBvcnQgeyBkZXRlY3RGdW5jdGlvbkJpbmQgfSBmcm9tICcuL2Z1bmN0aW9uX2JpbmQnO1xuaW1wb3J0IHsgZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vbGFuZ3VhZ2VzX2luY29uc2lzdGVuY3knO1xuaW1wb3J0IHsgZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudCB9IGZyb20gJy4vbWltZV90eXBlc19jb25zaXN0ZW5jZSc7XG5pbXBvcnQgeyBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyB9IGZyb20gJy4vbm90aWZpY2F0aW9uX3Blcm1pc3Npb25zJztcbmltcG9ydCB7IGRldGVjdFBsdWdpbnNBcnJheSB9IGZyb20gJy4vcGx1Z2luc19hcnJheSc7XG5pbXBvcnQgeyBkZXRlY3RQbHVnaW5zTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vcGx1Z2luc19pbmNvbnNpc3RlbmN5JztcbmltcG9ydCB7IGRldGVjdFByb2Nlc3MgfSBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvZHVjdFN1YiB9IGZyb20gJy4vcHJvZHVjdF9zdWInO1xuaW1wb3J0IHsgZGV0ZWN0VXNlckFnZW50IH0gZnJvbSAnLi91c2VyX2FnZW50JztcbmltcG9ydCB7IGRldGVjdFdlYkRyaXZlciB9IGZyb20gJy4vd2ViZHJpdmVyJztcbmltcG9ydCB7IGRldGVjdFdlYkdMIH0gZnJvbSAnLi93ZWJnbCc7XG5pbXBvcnQgeyBkZXRlY3RXaW5kb3dFeHRlcm5hbCB9IGZyb20gJy4vd2luZG93X2V4dGVybmFsJztcbmltcG9ydCB7IGRldGVjdFdpbmRvd1NpemUgfSBmcm9tICcuL3dpbmRvd19zaXplJztcbmltcG9ydCB7IGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyB9IGZyb20gJy4vZGlzdGluY3RpdmVfcHJvcGVydGllcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IHZhciBkZXRlY3RvcnMgPSB7XG4gICAgZGV0ZWN0QXBwVmVyc2lvbjogZGV0ZWN0QXBwVmVyc2lvbixcbiAgICBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXM6IGRldGVjdERvY3VtZW50QXR0cmlidXRlcyxcbiAgICBkZXRlY3RFcnJvclRyYWNlOiBkZXRlY3RFcnJvclRyYWNlLFxuICAgIGRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5OiBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeSxcbiAgICBkZXRlY3RGdW5jdGlvbkJpbmQ6IGRldGVjdEZ1bmN0aW9uQmluZCxcbiAgICBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5OiBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5LFxuICAgIGRldGVjdE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOiBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyxcbiAgICBkZXRlY3RQbHVnaW5zQXJyYXk6IGRldGVjdFBsdWdpbnNBcnJheSxcbiAgICBkZXRlY3RQbHVnaW5zTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3ksXG4gICAgZGV0ZWN0UHJvY2VzczogZGV0ZWN0UHJvY2VzcyxcbiAgICBkZXRlY3RVc2VyQWdlbnQ6IGRldGVjdFVzZXJBZ2VudCxcbiAgICBkZXRlY3RXZWJEcml2ZXI6IGRldGVjdFdlYkRyaXZlcixcbiAgICBkZXRlY3RXZWJHTDogZGV0ZWN0V2ViR0wsXG4gICAgZGV0ZWN0V2luZG93RXh0ZXJuYWw6IGRldGVjdFdpbmRvd0V4dGVybmFsLFxuICAgIGRldGVjdFdpbmRvd1NpemU6IGRldGVjdFdpbmRvd1NpemUsXG4gICAgZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudDogZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudCxcbiAgICBkZXRlY3RQcm9kdWN0U3ViOiBkZXRlY3RQcm9kdWN0U3ViLFxuICAgIGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllczogZGV0ZWN0RGlzdGluY3RpdmVQcm9wZXJ0aWVzLFxufTtcbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0QXBwVmVyc2lvbihfYSkge1xuICAgIHZhciBhcHBWZXJzaW9uID0gX2EuYXBwVmVyc2lvbjtcbiAgICBpZiAoYXBwVmVyc2lvbi5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9oZWFkbGVzcy9pLnRlc3QoYXBwVmVyc2lvbi52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIGlmICgvZWxlY3Ryb24vaS50ZXN0KGFwcFZlcnNpb24udmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbiAgICBpZiAoL3NsaW1lcmpzL2kudGVzdChhcHBWZXJzaW9uLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuU2xpbWVySlM7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5jbHVkZXMgfSBmcm9tICcuLi91dGlscy9taXNjJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMoX2EpIHtcbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50S2V5cyA9IF9hLmRvY3VtZW50RWxlbWVudEtleXM7XG4gICAgaWYgKGRvY3VtZW50RWxlbWVudEtleXMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlcyhkb2N1bWVudEVsZW1lbnRLZXlzLnZhbHVlLCAnc2VsZW5pdW0nLCAnd2ViZHJpdmVyJywgJ2RyaXZlcicpKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNlbGVuaXVtO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RXJyb3JUcmFjZShfYSkge1xuICAgIHZhciBlcnJvclRyYWNlID0gX2EuZXJyb3JUcmFjZTtcbiAgICBpZiAoZXJyb3JUcmFjZS5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9QaGFudG9tSlMvaS50ZXN0KGVycm9yVHJhY2UudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5QaGFudG9tSlM7XG59XG4iLCJpbXBvcnQgeyBhcnJheUluY2x1ZGVzIH0gZnJvbSAnLi4vdXRpbHMvcG9ueWZpbGxzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeShfYSkge1xuICAgIHZhciBldmFsTGVuZ3RoID0gX2EuZXZhbExlbmd0aCwgYnJvd3NlcktpbmQgPSBfYS5icm93c2VyS2luZCwgYnJvd3NlckVuZ2luZUtpbmQgPSBfYS5icm93c2VyRW5naW5lS2luZDtcbiAgICBpZiAoZXZhbExlbmd0aC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBsZW5ndGggPSBldmFsTGVuZ3RoLnZhbHVlO1xuICAgIGlmIChicm93c2VyRW5naW5lS2luZC52YWx1ZSA9PT0gXCJ1bmtub3duXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuVW5rbm93biAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoKGxlbmd0aCA9PT0gMzcgJiYgIWFycmF5SW5jbHVkZXMoW1wid2Via2l0XCIgLyogQnJvd3NlckVuZ2luZUtpbmQuV2Via2l0ICovLCBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi9dLCBicm93c2VyRW5naW5lS2luZC52YWx1ZSkpIHx8XG4gICAgICAgIChsZW5ndGggPT09IDM5ICYmICFhcnJheUluY2x1ZGVzKFtcImludGVybmV0X2V4cGxvcmVyXCIgLyogQnJvd3NlcktpbmQuSUUgKi9dLCBicm93c2VyS2luZC52YWx1ZSkpIHx8XG4gICAgICAgIChsZW5ndGggPT09IDMzICYmICFhcnJheUluY2x1ZGVzKFtcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi9dLCBicm93c2VyRW5naW5lS2luZC52YWx1ZSkpKTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RnVuY3Rpb25CaW5kKF9hKSB7XG4gICAgdmFyIGZ1bmN0aW9uQmluZCA9IF9hLmZ1bmN0aW9uQmluZDtcbiAgICBpZiAoZnVuY3Rpb25CaW5kLnN0YXRlID09PSAtMiAvKiBTdGF0ZS5Ob3RGdW5jdGlvbiAqLylcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5KF9hKSB7XG4gICAgdmFyIGxhbmd1YWdlcyA9IF9hLmxhbmd1YWdlcztcbiAgICBpZiAobGFuZ3VhZ2VzLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgbGFuZ3VhZ2VzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKF9hKSB7XG4gICAgdmFyIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zID0gX2Eubm90aWZpY2F0aW9uUGVybWlzc2lvbnMsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQ7XG4gICAgaWYgKGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHwgYnJvd3NlcktpbmQudmFsdWUgIT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG5vdGlmaWNhdGlvblBlcm1pc3Npb25zLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgbm90aWZpY2F0aW9uUGVybWlzc2lvbnMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQbHVnaW5zQXJyYXkoX2EpIHtcbiAgICB2YXIgcGx1Z2luc0FycmF5ID0gX2EucGx1Z2luc0FycmF5O1xuICAgIGlmIChwbHVnaW5zQXJyYXkuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyAmJiAhcGx1Z2luc0FycmF5LnZhbHVlKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3koX2EpIHtcbiAgICB2YXIgcGx1Z2luc0xlbmd0aCA9IF9hLnBsdWdpbnNMZW5ndGgsIGFuZHJvaWQgPSBfYS5hbmRyb2lkLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kLCBicm93c2VyRW5naW5lS2luZCA9IF9hLmJyb3dzZXJFbmdpbmVLaW5kO1xuICAgIGlmIChwbHVnaW5zTGVuZ3RoLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYW5kcm9pZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChicm93c2VyS2luZC52YWx1ZSAhPT0gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi8gfHxcbiAgICAgICAgYW5kcm9pZC52YWx1ZSB8fFxuICAgICAgICBicm93c2VyRW5naW5lS2luZC52YWx1ZSAhPT0gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHBsdWdpbnNMZW5ndGgudmFsdWUgPT09IDApXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQcm9jZXNzKF9hKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBwcm9jZXNzID0gX2EucHJvY2VzcztcbiAgICBpZiAocHJvY2Vzcy5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByb2Nlc3MudmFsdWUudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCAoKF9iID0gcHJvY2Vzcy52YWx1ZS52ZXJzaW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmVsZWN0cm9uKSAhPSBudWxsKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0VXNlckFnZW50KF9hKSB7XG4gICAgdmFyIHVzZXJBZ2VudCA9IF9hLnVzZXJBZ2VudDtcbiAgICBpZiAodXNlckFnZW50LnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoL1BoYW50b21KUy9pLnRlc3QodXNlckFnZW50LnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xuICAgIGlmICgvSGVhZGxlc3MvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIGlmICgvRWxlY3Ryb24vaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkVsZWN0cm9uO1xuICAgIGlmICgvc2xpbWVyanMvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNsaW1lckpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXZWJEcml2ZXIoX2EpIHtcbiAgICB2YXIgd2ViRHJpdmVyID0gX2Eud2ViRHJpdmVyO1xuICAgIGlmICh3ZWJEcml2ZXIuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyAmJiB3ZWJEcml2ZXIudmFsdWUpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXZWJHTChfYSkge1xuICAgIHZhciB3ZWJHTCA9IF9hLndlYkdMO1xuICAgIGlmICh3ZWJHTC5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKSB7XG4gICAgICAgIHZhciBfYiA9IHdlYkdMLnZhbHVlLCB2ZW5kb3IgPSBfYi52ZW5kb3IsIHJlbmRlcmVyID0gX2IucmVuZGVyZXI7XG4gICAgICAgIGlmICh2ZW5kb3IgPT0gJ0JyaWFuIFBhdWwnICYmIHJlbmRlcmVyID09ICdNZXNhIE9mZlNjcmVlbicpIHtcbiAgICAgICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXaW5kb3dFeHRlcm5hbChfYSkge1xuICAgIHZhciB3aW5kb3dFeHRlcm5hbCA9IF9hLndpbmRvd0V4dGVybmFsO1xuICAgIGlmICh3aW5kb3dFeHRlcm5hbC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9TZXF1ZW50dW0vaS50ZXN0KHdpbmRvd0V4dGVybmFsLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuU2VxdWVudHVtO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXaW5kb3dTaXplKF9hKSB7XG4gICAgdmFyIHdpbmRvd1NpemUgPSBfYS53aW5kb3dTaXplLCBkb2N1bWVudEZvY3VzID0gX2EuZG9jdW1lbnRGb2N1cztcbiAgICBpZiAod2luZG93U2l6ZS5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8IGRvY3VtZW50Rm9jdXMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBfYiA9IHdpbmRvd1NpemUudmFsdWUsIG91dGVyV2lkdGggPSBfYi5vdXRlcldpZHRoLCBvdXRlckhlaWdodCA9IF9iLm91dGVySGVpZ2h0O1xuICAgIC8vIFdoZW4gYSBwYWdlIGlzIG9wZW5lZCBpbiBhIG5ldyB0YWIgd2l0aG91dCBmb2N1c2luZyBpdCByaWdodCBhd2F5LCB0aGUgd2luZG93IG91dGVyIHNpemUgaXMgMHgwXG4gICAgaWYgKCFkb2N1bWVudEZvY3VzLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKG91dGVyV2lkdGggPT09IDAgJiYgb3V0ZXJIZWlnaHQgPT09IDApXG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RNaW1lVHlwZXNDb25zaXN0ZW50KF9hKSB7XG4gICAgdmFyIG1pbWVUeXBlc0NvbnNpc3RlbnQgPSBfYS5taW1lVHlwZXNDb25zaXN0ZW50O1xuICAgIGlmIChtaW1lVHlwZXNDb25zaXN0ZW50LnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgIW1pbWVUeXBlc0NvbnNpc3RlbnQudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuVW5rbm93bjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFByb2R1Y3RTdWIoX2EpIHtcbiAgICB2YXIgcHJvZHVjdFN1YiA9IF9hLnByb2R1Y3RTdWIsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQ7XG4gICAgaWYgKHByb2R1Y3RTdWIuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fCBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKChicm93c2VyS2luZC52YWx1ZSA9PT0gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi8gfHxcbiAgICAgICAgYnJvd3NlcktpbmQudmFsdWUgPT09IFwic2FmYXJpXCIgLyogQnJvd3NlcktpbmQuU2FmYXJpICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcIm9wZXJhXCIgLyogQnJvd3NlcktpbmQuT3BlcmEgKi8gfHxcbiAgICAgICAgYnJvd3NlcktpbmQudmFsdWUgPT09IFwid2VjaGF0XCIgLyogQnJvd3NlcktpbmQuV2VDaGF0ICovKSAmJlxuICAgICAgICBwcm9kdWN0U3ViLnZhbHVlICE9PSAnMjAwMzAxMDcnKVxuICAgICAgICByZXR1cm4gQm90S2luZC5Vbmtub3duO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyhfYSkge1xuICAgIHZhciBkaXN0aW5jdGl2ZVByb3BzID0gX2EuZGlzdGluY3RpdmVQcm9wcztcbiAgICBpZiAoZGlzdGluY3RpdmVQcm9wcy5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlID0gZGlzdGluY3RpdmVQcm9wcy52YWx1ZTtcbiAgICB2YXIgYm90O1xuICAgIGZvciAoYm90IGluIHZhbHVlKVxuICAgICAgICBpZiAodmFsdWVbYm90XSlcbiAgICAgICAgICAgIHJldHVybiBib3Q7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjb3VudFRydXRoeSB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBzdHJJbmNsdWRlcyB9IGZyb20gJy4vcG9ueWZpbGxzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyRW5naW5lS2luZCgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIC8vIEJhc2VkIG9uIHJlc2VhcmNoIGluIE9jdG9iZXIgMjAyMC4gVGVzdGVkIHRvIGRldGVjdCBDaHJvbWl1bSA0Mi04Ni5cbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICB2YXIgbiA9IG5hdmlnYXRvcjtcbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnd2Via2l0UGVyc2lzdGVudFN0b3JhZ2UnIGluIG4sXG4gICAgICAgICd3ZWJraXRUZW1wb3JhcnlTdG9yYWdlJyBpbiBuLFxuICAgICAgICBuLnZlbmRvci5pbmRleE9mKCdHb29nbGUnKSA9PT0gMCxcbiAgICAgICAgJ3dlYmtpdFJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwnIGluIHcsXG4gICAgICAgICdCYXR0ZXJ5TWFuYWdlcicgaW4gdyxcbiAgICAgICAgJ3dlYmtpdE1lZGlhU3RyZWFtJyBpbiB3LFxuICAgICAgICAnd2Via2l0U3BlZWNoR3JhbW1hcicgaW4gdyxcbiAgICBdKSA+PSA1KSB7XG4gICAgICAgIHJldHVybiBcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi87XG4gICAgfVxuICAgIGlmIChjb3VudFRydXRoeShbXG4gICAgICAgICdBcHBsZVBheUVycm9yJyBpbiB3LFxuICAgICAgICAnQ1NTUHJpbWl0aXZlVmFsdWUnIGluIHcsXG4gICAgICAgICdDb3VudGVyJyBpbiB3LFxuICAgICAgICBuLnZlbmRvci5pbmRleE9mKCdBcHBsZScpID09PSAwLFxuICAgICAgICAnZ2V0U3RvcmFnZVVwZGF0ZXMnIGluIG4sXG4gICAgICAgICdXZWJLaXRNZWRpYUtleXMnIGluIHcsXG4gICAgXSkgPj0gNCkge1xuICAgICAgICByZXR1cm4gXCJ3ZWJraXRcIiAvKiBCcm93c2VyRW5naW5lS2luZC5XZWJraXQgKi87XG4gICAgfVxuICAgIGlmIChjb3VudFRydXRoeShbXG4gICAgICAgICdidWlsZElEJyBpbiBuYXZpZ2F0b3IsXG4gICAgICAgICdNb3pBcHBlYXJhbmNlJyBpbiAoKF9iID0gKF9hID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3R5bGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9KSxcbiAgICAgICAgJ29ubW96ZnVsbHNjcmVlbmNoYW5nZScgaW4gdyxcbiAgICAgICAgJ21veklubmVyU2NyZWVuWCcgaW4gdyxcbiAgICAgICAgJ0NTU01vekRvY3VtZW50UnVsZScgaW4gdyxcbiAgICAgICAgJ0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbScgaW4gdyxcbiAgICBdKSA+PSA0KSB7XG4gICAgICAgIHJldHVybiBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi87XG4gICAgfVxuICAgIHJldHVybiBcInVua25vd25cIiAvKiBCcm93c2VyRW5naW5lS2luZC5Vbmtub3duICovO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJLaW5kKCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgdXNlckFnZW50ID0gKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ2VkZy8nKSkge1xuICAgICAgICByZXR1cm4gXCJlZGdlXCIgLyogQnJvd3NlcktpbmQuRWRnZSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAndHJpZGVudCcpIHx8IHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ21zaWUnKSkge1xuICAgICAgICByZXR1cm4gXCJpbnRlcm5ldF9leHBsb3JlclwiIC8qIEJyb3dzZXJLaW5kLklFICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICd3ZWNoYXQnKSkge1xuICAgICAgICByZXR1cm4gXCJ3ZWNoYXRcIiAvKiBCcm93c2VyS2luZC5XZUNoYXQgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ2ZpcmVmb3gnKSkge1xuICAgICAgICByZXR1cm4gXCJmaXJlZm94XCIgLyogQnJvd3NlcktpbmQuRmlyZWZveCAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnb3BlcmEnKSB8fCBzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdvcHInKSkge1xuICAgICAgICByZXR1cm4gXCJvcGVyYVwiIC8qIEJyb3dzZXJLaW5kLk9wZXJhICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdjaHJvbWUnKSkge1xuICAgICAgICByZXR1cm4gXCJjaHJvbWVcIiAvKiBCcm93c2VyS2luZC5DaHJvbWUgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ3NhZmFyaScpKSB7XG4gICAgICAgIHJldHVybiBcInNhZmFyaVwiIC8qIEJyb3dzZXJLaW5kLlNhZmFyaSAqLztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcInVua25vd25cIiAvKiBCcm93c2VyS2luZC5Vbmtub3duICovO1xuICAgIH1cbn1cbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZpbmdlcnByaW50anMvZmluZ2VycHJpbnRqcy9ibG9iL21hc3Rlci9zcmMvdXRpbHMvYnJvd3Nlci50cyNMMjIzXG5leHBvcnQgZnVuY3Rpb24gaXNBbmRyb2lkKCkge1xuICAgIHZhciBicm93c2VyRW5naW5lS2luZCA9IGdldEJyb3dzZXJFbmdpbmVLaW5kKCk7XG4gICAgdmFyIGlzSXRDaHJvbWl1bSA9IGJyb3dzZXJFbmdpbmVLaW5kID09PSBcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi87XG4gICAgdmFyIGlzSXRHZWNrbyA9IGJyb3dzZXJFbmdpbmVLaW5kID09PSBcImdlY2tvXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuR2Vja28gKi87XG4gICAgLy8gT25seSAyIGJyb3dzZXIgZW5naW5lcyBhcmUgcHJlc2VudGVkIG9uIEFuZHJvaWQuXG4gICAgLy8gQWN0dWFsbHksIHRoZXJlIGlzIGFsc28gQW5kcm9pZCA0LjEgYnJvd3NlciwgYnV0IGl0J3Mgbm90IHdvcnRoIGRldGVjdGluZyBpdCBhdCB0aGUgbW9tZW50LlxuICAgIGlmICghaXNJdENocm9taXVtICYmICFpc0l0R2Vja28pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICAvLyBDaHJvbWUgcmVtb3ZlcyBhbGwgd29yZHMgXCJBbmRyb2lkXCIgZnJvbSBgbmF2aWdhdG9yYCB3aGVuIGRlc2t0b3AgdmVyc2lvbiBpcyByZXF1ZXN0ZWRcbiAgICAvLyBGaXJlZm94IGtlZXBzIFwiQW5kcm9pZFwiIGluIGBuYXZpZ2F0b3IuYXBwVmVyc2lvbmAgd2hlbiBkZXNrdG9wIHZlcnNpb24gaXMgcmVxdWVzdGVkXG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICdvbm9yaWVudGF0aW9uY2hhbmdlJyBpbiB3LFxuICAgICAgICAnb3JpZW50YXRpb24nIGluIHcsXG4gICAgICAgIGlzSXRDaHJvbWl1bSAmJiAhKCdTaGFyZWRXb3JrZXInIGluIHcpLFxuICAgICAgICBpc0l0R2Vja28gJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSxcbiAgICBdKSA+PSAyKTtcbn1cbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZpbmdlcnByaW50anMvZmluZ2VycHJpbnRqcy9ibG9iLzEwOWY4ZWY4MDIxNjlkZjNmYTFjNWQxYmFhNGI3YmMwYWJiYzFkOTEvc3JjL3V0aWxzL2Jyb3dzZXIudHMjTDEwMkMxLUwxMThDMlxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVza3RvcFdlYktpdCgpIHtcbiAgICAvLyBDaGVja2VkIGluIFNhZmFyaSBhbmQgRHVja0R1Y2tHb1xuICAgIHZhciB3ID0gd2luZG93O1xuICAgIHZhciBIVE1MRWxlbWVudCA9IHcuSFRNTEVsZW1lbnQsIERvY3VtZW50ID0gdy5Eb2N1bWVudDtcbiAgICByZXR1cm4gKGNvdW50VHJ1dGh5KFtcbiAgICAgICAgJ3NhZmFyaScgaW4gdyxcbiAgICAgICAgISgnb25nZXN0dXJlZW5kJyBpbiB3KSxcbiAgICAgICAgISgnVG91Y2hFdmVudCcgaW4gdyksXG4gICAgICAgICEoJ29yaWVudGF0aW9uJyBpbiB3KSxcbiAgICAgICAgSFRNTEVsZW1lbnQgJiYgISgnYXV0b2NhcGl0YWxpemUnIGluIEhUTUxFbGVtZW50LnByb3RvdHlwZSksXG4gICAgICAgIERvY3VtZW50ICYmICdwb2ludGVyTG9ja0VsZW1lbnQnIGluIERvY3VtZW50LnByb3RvdHlwZSxcbiAgICBdKSA+PSA0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCgpIHtcbiAgICBpZiAod2luZG93LkNTUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnd2luZG93LkNTUyBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIENTUy5zdXBwb3J0cygnLW1vei1hcHBlYXJhbmNlJywgJ2F1dG8nKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2N1bWVudEZvY3VzKCkge1xuICAgIGlmIChkb2N1bWVudC5oYXNGb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDaHJvbWl1bTg2T3JOZXdlcigpIHtcbiAgICAvLyBDaGVja2VkIGluIENocm9tZSA4NSB2cyBDaHJvbWUgODYgYm90aCBvbiBkZXNrdG9wIGFuZCBBbmRyb2lkXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICEoJ01lZGlhU2V0dGluZ3NSYW5nZScgaW4gdyksXG4gICAgICAgICdSVENFbmNvZGVkQXVkaW9GcmFtZScgaW4gdyxcbiAgICAgICAgJycgKyB3LkludGwgPT09ICdbb2JqZWN0IEludGxdJyxcbiAgICAgICAgJycgKyB3LlJlZmxlY3QgPT09ICdbb2JqZWN0IFJlZmxlY3RdJyxcbiAgICBdKSA+PSAzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0lQYWQoKSB7XG4gICAgLy8gQ2hlY2tlZCBvbjpcbiAgICAvLyBTYWZhcmkgb24gaVBhZE9TIChib3RoIG1vYmlsZSBhbmQgZGVza3RvcCBtb2Rlcyk6IDgsIDExLCAxMiwgMTMsIDE0XG4gICAgLy8gQ2hyb21lIG9uIGlQYWRPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiAxMSwgMTIsIDEzLCAxNFxuICAgIC8vIFNhZmFyaSBvbiBpT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogOSwgMTAsIDExLCAxMiwgMTMsIDE0XG4gICAgLy8gQ2hyb21lIG9uIGlPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiA5LCAxMCwgMTEsIDEyLCAxMywgMTRcbiAgICAvLyBCZWZvcmUgaU9TIDEzLiBTYWZhcmkgdGFtcGVycyB0aGUgdmFsdWUgaW4gXCJyZXF1ZXN0IGRlc2t0b3Agc2l0ZVwiIG1vZGUgc2luY2UgaU9TIDEzLlxuICAgIGlmIChuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdpUGFkJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHMgPSBzY3JlZW47XG4gICAgdmFyIHNjcmVlblJhdGlvID0gcy53aWR0aCAvIHMuaGVpZ2h0O1xuICAgIHJldHVybiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnTWVkaWFTb3VyY2UnIGluIHdpbmRvdyxcbiAgICAgICAgISFFbGVtZW50LnByb3RvdHlwZS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbixcbiAgICAgICAgLy8gaVBob25lIDRTIHRoYXQgcnVucyBpT1MgOSBtYXRjaGVzIHRoaXMuIEJ1dCBpdCB3b24ndCBtYXRjaCB0aGUgY3JpdGVyaWEgYWJvdmUsIHNvIGl0IHdvbid0IGJlIGRldGVjdGVkIGFzIGlQYWQuXG4gICAgICAgIHNjcmVlblJhdGlvID4gMC42NSAmJiBzY3JlZW5SYXRpbyA8IDEuNTMsXG4gICAgXSkgPj0gMik7XG59XG4iLCJpbXBvcnQgZ2V0QXBwVmVyc2lvbiBmcm9tICcuL2FwcF92ZXJzaW9uJztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnRLZXlzIGZyb20gJy4vZG9jdW1lbnRfZWxlbWVudF9rZXlzJztcbmltcG9ydCBnZXRFcnJvclRyYWNlIGZyb20gJy4vZXJyb3JfdHJhY2UnO1xuaW1wb3J0IGdldEV2YWxMZW5ndGggZnJvbSAnLi9ldmFsX2xlbmd0aCc7XG5pbXBvcnQgZ2V0RnVuY3Rpb25CaW5kIGZyb20gJy4vZnVuY3Rpb25fYmluZCc7XG5pbXBvcnQgZ2V0TGFuZ3VhZ2VzIGZyb20gJy4vbGFuZ3VhZ2VzJztcbmltcG9ydCBhcmVNaW1lVHlwZXNDb25zaXN0ZW50IGZyb20gJy4vbWltZV90eXBlc19jb25zaXN0ZW5jZSc7XG5pbXBvcnQgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMnO1xuaW1wb3J0IGdldFBsdWdpbnNBcnJheSBmcm9tICcuL3BsdWdpbnNfYXJyYXknO1xuaW1wb3J0IGdldFBsdWdpbnNMZW5ndGggZnJvbSAnLi9wbHVnaW5zX2xlbmd0aCc7XG5pbXBvcnQgZ2V0UHJvY2VzcyBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0IGdldFByb2R1Y3RTdWIgZnJvbSAnLi9wcm9kdWN0X3N1Yic7XG5pbXBvcnQgZ2V0UlRUIGZyb20gJy4vcnR0JztcbmltcG9ydCBnZXRVc2VyQWdlbnQgZnJvbSAnLi91c2VyX2FnZW50JztcbmltcG9ydCBnZXRXZWJEcml2ZXIgZnJvbSAnLi93ZWJkcml2ZXInO1xuaW1wb3J0IGdldFdlYkdMIGZyb20gJy4vd2ViZ2wnO1xuaW1wb3J0IGdldFdpbmRvd0V4dGVybmFsIGZyb20gJy4vd2luZG93X2V4dGVybmFsJztcbmltcG9ydCBnZXRXaW5kb3dTaXplIGZyb20gJy4vd2luZG93X3NpemUnO1xuaW1wb3J0IGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzIGZyb20gJy4vZGlzdGluY3RpdmVfcHJvcGVydGllcyc7XG5pbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgZ2V0QnJvd3NlcktpbmQsIGdldERvY3VtZW50Rm9jdXMsIGlzQW5kcm9pZCB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IHZhciBzb3VyY2VzID0ge1xuICAgIGFuZHJvaWQ6IGlzQW5kcm9pZCxcbiAgICBicm93c2VyS2luZDogZ2V0QnJvd3NlcktpbmQsXG4gICAgYnJvd3NlckVuZ2luZUtpbmQ6IGdldEJyb3dzZXJFbmdpbmVLaW5kLFxuICAgIGRvY3VtZW50Rm9jdXM6IGdldERvY3VtZW50Rm9jdXMsXG4gICAgdXNlckFnZW50OiBnZXRVc2VyQWdlbnQsXG4gICAgYXBwVmVyc2lvbjogZ2V0QXBwVmVyc2lvbixcbiAgICBydHQ6IGdldFJUVCxcbiAgICB3aW5kb3dTaXplOiBnZXRXaW5kb3dTaXplLFxuICAgIHBsdWdpbnNMZW5ndGg6IGdldFBsdWdpbnNMZW5ndGgsXG4gICAgcGx1Z2luc0FycmF5OiBnZXRQbHVnaW5zQXJyYXksXG4gICAgZXJyb3JUcmFjZTogZ2V0RXJyb3JUcmFjZSxcbiAgICBwcm9kdWN0U3ViOiBnZXRQcm9kdWN0U3ViLFxuICAgIHdpbmRvd0V4dGVybmFsOiBnZXRXaW5kb3dFeHRlcm5hbCxcbiAgICBtaW1lVHlwZXNDb25zaXN0ZW50OiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50LFxuICAgIGV2YWxMZW5ndGg6IGdldEV2YWxMZW5ndGgsXG4gICAgd2ViR0w6IGdldFdlYkdMLFxuICAgIHdlYkRyaXZlcjogZ2V0V2ViRHJpdmVyLFxuICAgIGxhbmd1YWdlczogZ2V0TGFuZ3VhZ2VzLFxuICAgIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zOiBnZXROb3RpZmljYXRpb25QZXJtaXNzaW9ucyxcbiAgICBkb2N1bWVudEVsZW1lbnRLZXlzOiBnZXREb2N1bWVudEVsZW1lbnRLZXlzLFxuICAgIGZ1bmN0aW9uQmluZDogZ2V0RnVuY3Rpb25CaW5kLFxuICAgIHByb2Nlc3M6IGdldFByb2Nlc3MsXG4gICAgZGlzdGluY3RpdmVQcm9wczogY2hlY2tEaXN0aW5jdGl2ZVByb3BlcnRpZXMsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXBwVmVyc2lvbigpIHtcbiAgICB2YXIgYXBwVmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xuICAgIGlmIChhcHBWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5hcHBWZXJzaW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwVmVyc2lvbjtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFJUVCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5jb25uZWN0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24ucnR0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBvdXRlckhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBpbm5lcldpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgaW5uZXJIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0xlbmd0aCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5wbHVnaW5zIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMyAvKiBTdGF0ZS5VbmV4cGVjdGVkQmVoYXZpb3VyICovLCAnbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0FycmF5KCkge1xuICAgIGlmIChuYXZpZ2F0b3IucGx1Z2lucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLnBsdWdpbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICh3aW5kb3cuUGx1Z2luQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ3dpbmRvdy5QbHVnaW5BcnJheSBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zIGluc3RhbmNlb2YgUGx1Z2luQXJyYXk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvclRyYWNlKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBudWxsWzBdKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvclsnc3RhY2snXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3Iuc3RhY2sudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sICdlcnJvclRyYWNlIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UHJvZHVjdFN1YigpIHtcbiAgICB2YXIgcHJvZHVjdFN1YiA9IG5hdmlnYXRvci5wcm9kdWN0U3ViO1xuICAgIGlmIChwcm9kdWN0U3ViID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucHJvZHVjdFN1YiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2R1Y3RTdWI7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dFeHRlcm5hbCgpIHtcbiAgICBpZiAod2luZG93LmV4dGVybmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuZXh0ZXJuYWwgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBleHRlcm5hbCA9IHdpbmRvdy5leHRlcm5hbDtcbiAgICBpZiAodHlwZW9mIGV4dGVybmFsLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICd3aW5kb3cuZXh0ZXJuYWwudG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVybmFsLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50KCkge1xuICAgIGlmIChuYXZpZ2F0b3IubWltZVR5cGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IubWltZVR5cGVzIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgbWltZVR5cGVzID0gbmF2aWdhdG9yLm1pbWVUeXBlcztcbiAgICB2YXIgaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlcykgPT09IE1pbWVUeXBlQXJyYXkucHJvdG90eXBlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlzQ29uc2lzdGVudCAmJiAoaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlc1tpXSkgPT09IE1pbWVUeXBlLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbnNpc3RlbnQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFdmFsTGVuZ3RoKCkge1xuICAgIHJldHVybiBldmFsLnRvU3RyaW5nKCkubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2ViR0woKSB7XG4gICAgdmFyIGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBpZiAodHlwZW9mIGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgd2ViR0xDb250ZXh0ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCd3ZWJnbCcpO1xuICAgIGlmICh3ZWJHTENvbnRleHQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtNCAvKiBTdGF0ZS5OdWxsICovLCAnV2ViR0xSZW5kZXJpbmdDb250ZXh0IGlzIG51bGwnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdXZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0UGFyYW1ldGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciB2ZW5kb3IgPSB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyKHdlYkdMQ29udGV4dC5WRU5ET1IpO1xuICAgIHZhciByZW5kZXJlciA9IHdlYkdMQ29udGV4dC5nZXRQYXJhbWV0ZXIod2ViR0xDb250ZXh0LlJFTkRFUkVSKTtcbiAgICByZXR1cm4geyB2ZW5kb3I6IHZlbmRvciwgcmVuZGVyZXI6IHJlbmRlcmVyIH07XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXZWJEcml2ZXIoKSB7XG4gICAgaWYgKG5hdmlnYXRvci53ZWJkcml2ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLndlYmRyaXZlciBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci53ZWJkcml2ZXI7XG59XG4iLCJpbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgaXNDaHJvbWl1bTg2T3JOZXdlciB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VzKCkge1xuICAgIHZhciBuID0gbmF2aWdhdG9yO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBuLmxhbmd1YWdlIHx8IG4udXNlckxhbmd1YWdlIHx8IG4uYnJvd3Nlckxhbmd1YWdlIHx8IG4uc3lzdGVtTGFuZ3VhZ2U7XG4gICAgaWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW2xhbmd1YWdlXSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG4ubGFuZ3VhZ2VzKSkge1xuICAgICAgICB2YXIgYnJvd3NlckVuZ2luZSA9IGdldEJyb3dzZXJFbmdpbmVLaW5kKCk7XG4gICAgICAgIC8vIFN0YXJ0aW5nIGZyb20gQ2hyb21pdW0gODYsIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdmFsdWUgaW4gYG5hdmlnYXRvci5sYW5ndWFnZWAgaW4gSW5jb2duaXRvIG1vZGU6XG4gICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBgbmF2aWdhdG9yLmxhbmd1YWdlYC4gVGhlcmVmb3JlLCB0aGUgdmFsdWUgaXMgaWdub3JlZCBpbiB0aGlzIGJyb3dzZXIuXG4gICAgICAgIGlmICghKGJyb3dzZXJFbmdpbmUgPT09IFwiY2hyb21pdW1cIiAvKiBCcm93c2VyRW5naW5lS2luZC5DaHJvbWl1bSAqLyAmJiBpc0Nocm9taXVtODZPck5ld2VyKCkpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLmxhbmd1YWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG4ubGFuZ3VhZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2VzID0gbi5sYW5ndWFnZXM7XG4gICAgICAgIGlmIChsYW5ndWFnZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxhbmd1YWdlcy5zcGxpdCgnLCcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGVybWlzc2lvbnMsIHBlcm1pc3Npb25TdGF0dXMsIGVfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5Ob3RpZmljYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuTm90aWZpY2F0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IucGVybWlzc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSBuYXZpZ2F0b3IucGVybWlzc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbnMucXVlcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6ICdub3RpZmljYXRpb25zJyB9KV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uU3RhdHVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgd2luZG93Lk5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZGVuaWVkJyAmJiBwZXJtaXNzaW9uU3RhdHVzLnN0YXRlID09PSAncHJvbXB0J107XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgJ25vdGlmaWNhdGlvblBlcm1pc3Npb25zIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudEtleXMoKSB7XG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25CaW5kKCkge1xuICAgIGlmIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQcm9jZXNzKCkge1xuICAgIHZhciBwcm9jZXNzID0gd2luZG93LnByb2Nlc3M7XG4gICAgdmFyIGVycm9yUHJlZml4ID0gJ3dpbmRvdy5wcm9jZXNzIGlzJztcbiAgICBpZiAocHJvY2VzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCBcIlwiLmNvbmNhdChlcnJvclByZWZpeCwgXCIgdW5kZWZpbmVkXCIpKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgXCJcIi5jb25jYXQoZXJyb3JQcmVmaXgsIFwiIG5vdCBhbiBvYmplY3RcIikpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcztcbn1cbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRPYmplY3RQcm9wcywgaW5jbHVkZXMgfSBmcm9tICcuLi91dGlscy9taXNjJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzKCkge1xuICAgIHZhciBfYTtcbiAgICAvLyBUaGUgb3JkZXIgaW4gdGhlIGZvbGxvd2luZyBsaXN0IG1hdHRlcnMsIGJlY2F1c2Ugc3BlY2lmaWMgdHlwZXMgb2YgYm90cyBjb21lIGZpcnN0LCBmb2xsb3dlZCBieSBhdXRvbWF0aW9uIHRlY2hub2xvZ2llcy5cbiAgICB2YXIgZGlzdGluY3RpdmVQcm9wc0xpc3QgPSAoX2EgPSB7fSxcbiAgICAgICAgX2FbQm90S2luZC5Bd2Vzb21pdW1dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ2F3ZXNvbWl1bSddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLkNlZl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnUnVuUGVyZlRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5DZWZTaGFycF0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnQ2VmU2hhcnAnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5Db2FjaEpTXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydlbWl0J10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuRk1pbmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydmbWdldF90YXJnZXRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuR2ViXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydnZWInXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5OaWdodG1hcmVKU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX19uaWdodG1hcmUnLCAnbmlnaHRtYXJlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuUGhhbnRvbWFzXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydfX3BoYW50b21hcyddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLlBoYW50b21KU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnY2FsbFBoYW50b20nLCAnX3BoYW50b20nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5SaGlub10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnc3Bhd24nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5TZWxlbml1bV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX1NlbGVuaXVtX0lERV9SZWNvcmRlcicsICdfc2VsZW5pdW0nLCAnY2FsbGVkU2VsZW5pdW0nLCAvXihbYS16XSl7M31fLipfKEFycmF5fFByb21pc2V8U3ltYm9sKSQvXSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBbJ19fc2VsZW5pdW1fZXZhbHVhdGUnLCAnc2VsZW5pdW0tZXZhbHVhdGUnLCAnX19zZWxlbml1bV91bndyYXBwZWQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5XZWJEcml2ZXJJT10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnd2Rpb0VsZWN0cm9uJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuV2ViRHJpdmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogW1xuICAgICAgICAgICAgICAgICd3ZWJkcml2ZXInLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlckZ1bmMnLFxuICAgICAgICAgICAgICAgICdfX2xhc3RXYXRpckFsZXJ0JyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJQcm9tcHQnLFxuICAgICAgICAgICAgICAgICdfV0VCRFJJVkVSX0VMRU1fQ0FDSEUnLFxuICAgICAgICAgICAgICAgICdDaHJvbWVEcml2ZXJ3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkb2N1bWVudDogW1xuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZm4nLFxuICAgICAgICAgICAgICAgICdfX2RyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX2V2YWx1YXRlJyxcbiAgICAgICAgICAgICAgICAnX19meGRyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fZnhkcml2ZXJfdW53cmFwcGVkJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2ZuJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2Z1bmMnLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgICckY2RjX2FzZGpmbGFzdXRvcGZodmNaTG1jZicsXG4gICAgICAgICAgICAgICAgJyRjZGNfYXNkamZsYXN1dG9wZmh2Y1pMbWNmbF8nLFxuICAgICAgICAgICAgICAgICckY2hyb21lX2FzeW5jU2NyaXB0SW5mbycsXG4gICAgICAgICAgICAgICAgJ19fJHdlYmRyaXZlckFzeW5jRXhlY3V0b3InLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5IZWFkbGVzc0Nocm9tZV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZG9tQXV0b21hdGlvbicsICdkb21BdXRvbWF0aW9uQ29udHJvbGxlciddLFxuICAgICAgICB9LFxuICAgICAgICBfYSk7XG4gICAgdmFyIGJvdE5hbWU7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciB3aW5kb3dQcm9wcyA9IGdldE9iamVjdFByb3BzKHdpbmRvdyk7XG4gICAgdmFyIGRvY3VtZW50UHJvcHMgPSBbXTtcbiAgICBpZiAod2luZG93LmRvY3VtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGRvY3VtZW50UHJvcHMgPSBnZXRPYmplY3RQcm9wcyh3aW5kb3cuZG9jdW1lbnQpO1xuICAgIGZvciAoYm90TmFtZSBpbiBkaXN0aW5jdGl2ZVByb3BzTGlzdCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBkaXN0aW5jdGl2ZVByb3BzTGlzdFtib3ROYW1lXTtcbiAgICAgICAgaWYgKHByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dDb250YWlucyA9IHByb3BzLndpbmRvdyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpbmNsdWRlcy5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3dpbmRvd1Byb3BzXSwgcHJvcHMud2luZG93LCBmYWxzZSkpO1xuICAgICAgICAgICAgdmFyIGRvY3VtZW50Q29udGFpbnMgPSBwcm9wcy5kb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8ICFkb2N1bWVudFByb3BzLmxlbmd0aCA/IGZhbHNlIDogaW5jbHVkZXMuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtkb2N1bWVudFByb3BzXSwgcHJvcHMuZG9jdW1lbnQsIGZhbHNlKSk7XG4gICAgICAgICAgICByZXN1bHRbYm90TmFtZV0gPSB3aW5kb3dDb250YWlucyB8fCBkb2N1bWVudENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjb2xsZWN0LCBkZXRlY3QgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBzb3VyY2VzIH0gZnJvbSAnLi9zb3VyY2VzJztcbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgYm90IGRldGVjdG9yLlxuICpcbiAqIEBjbGFzc1xuICogQGltcGxlbWVudHMge0JvdERldGVjdG9ySW50ZXJmYWNlfVxuICovXG52YXIgQm90RGV0ZWN0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQm90RGV0ZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kZXRlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZ2V0Q29tcG9uZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cztcbiAgICB9O1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5nZXREZXRlY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRlY3Rpb25zO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJvdERldGVjdG9yLmRldGVjdCBjYW4ndCBiZSBjYWxsZWQgYmVmb3JlIEJvdERldGVjdG9yLmNvbGxlY3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gZGV0ZWN0KHRoaXMuY29tcG9uZW50cywgZGV0ZWN0b3JzKSwgZGV0ZWN0aW9ucyA9IF9hWzBdLCBmaW5hbERldGVjdGlvbiA9IF9hWzFdO1xuICAgICAgICB0aGlzLmRldGVjdGlvbnMgPSBkZXRlY3Rpb25zO1xuICAgICAgICByZXR1cm4gZmluYWxEZXRlY3Rpb247XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb2xsZWN0KHNvdXJjZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EuY29tcG9uZW50cyA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNvbXBvbmVudHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBCb3REZXRlY3Rvcjtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBCb3REZXRlY3RvcjtcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IEJvdERldGVjdG9yIGZyb20gJy4vZGV0ZWN0b3InO1xuaW1wb3J0IHsgc291cmNlcyB9IGZyb20gJy4vc291cmNlcyc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBCb3RkRXJyb3IsIEJvdEtpbmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNvbGxlY3QsIGRldGVjdCB9IGZyb20gJy4vYXBpJztcbi8qKlxuICogU2VuZHMgYW4gdW5wZXJzb25hbGl6ZWQgQUpBWCByZXF1ZXN0IHRvIGNvbGxlY3QgaW5zdGFsbGF0aW9uIHN0YXRpc3RpY3NcbiAqL1xuZnVuY3Rpb24gbW9uaXRvcigpIHtcbiAgICAvLyBUaGUgRmluZ2VycHJpbnRKUyBDRE4gKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2NkbikgcmVwbGFjZXMgYHdpbmRvdy5fX2ZwanNfZF9tYCB3aXRoIGB0cnVlYFxuICAgIGlmICh3aW5kb3cuX19mcGpzX2RfbSB8fCBNYXRoLnJhbmRvbSgpID49IDAuMDAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKCdnZXQnLCBcImh0dHBzOi8vbTEub3BlbmZwY2RuLmlvL2JvdGQvdlwiLmNvbmNhdCh2ZXJzaW9uLCBcIi9ucG0tbW9uaXRvcmluZ1wiKSwgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvciBpcyBvayBoZXJlIGJlY2F1c2UgaXQncyBhbiB1bmV4cGVjdGVkIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoX2EpIHtcbiAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2MgPSBfYi5tb25pdG9yaW5nLCBtb25pdG9yaW5nID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYztcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXRlY3RvcjtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbml0b3JpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXRlY3RvciA9IG5ldyBCb3REZXRlY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBkZXRlY3Rvci5jb2xsZWN0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2Quc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGV0ZWN0b3JdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHsgbG9hZDogbG9hZCB9O1xuLy8gVGhlIGV4cG9ydHMgYmVsb3cgYXJlIGZvciBwcml2YXRlIHVzYWdlLiBUaGV5IG1heSBjaGFuZ2UgdW5leHBlY3RlZGx5LiBVc2UgdGhlbSBhdCB5b3VyIG93biByaXNrLlxuLyoqIE5vdCBkb2N1bWVudGVkLCBvdXQgb2YgU2VtYW50aWMgVmVyc2lvbmluZywgdXNhZ2UgaXMgYXQgeW91ciBvd24gcmlzayAqL1xuZXhwb3J0IHsgc291cmNlcywgZGV0ZWN0b3JzLCBjb2xsZWN0LCBkZXRlY3QsIEJvdGRFcnJvciwgQm90S2luZCwgfTtcbiIsImltcG9ydCB7IFVBUGFyc2VyIH0gZnJvbSAndWEtcGFyc2VyLWpzJztcbi8qXG4gKiBTb21ldGltZXMgdGVzdHMgbmVlZCB0byBrbm93IHdoYXQgYnJvd3NlciB0aGV5IHJ1biBpbiB0byBtYWtlIHByb3BlciBhc3NlcnRpb25zLlxuICogS2FybWEgZG9lc24ndCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uXG4gKiBUaGUgYnJvd3NlciBkZXRlY3QgZnVuY3Rpb25zIGluIHRoZSBgc3JjYCBkaXJlY3RvcnkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIG9iamVjdHMgb2YgdGVzdGluZy5cbiAqIFRoZXJlZm9yZSBhIHBvcHVsYXIgdGhpcmQgcGFydHkgbGlicmFyeSBpcyB1c2VkIHRvIGRldGVjdCBicm93c2VyLlxuICogVGhlIGxpYnJhcnkgaXNuJ3QgdXNlZCBpbiB0aGUgbWFpbiBjb2RlIGJlY2F1c2Ugc29tZSB2aXNpdG9ycyB0YW1wZXIgdXNlciBhZ2VudCB3aGlsZSB0aGUgdGVzdCBlbnZpcm9ubWVudHMgZG9uJ3QuXG4gKlxuICogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gcGFzcyBicm93c2VyIHNldHRpbmdzIGZyb20gdGhlIEthcm1hIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHRlc3RzLFxuICogb3RoZXJ3aXNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIGluY29nbml0byBicm93c2VycyBmcm9tIHJlZ3VsYXIgYnJvd3NlcnMsIEJyYXZlIGZyb20gQ2hyb21lLCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nocm9taXVtKCkge1xuICAgIHJldHVybiBuZXcgVUFQYXJzZXIoKS5nZXRFbmdpbmUoKS5uYW1lID09PSAnQmxpbmsnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGxlc3NDaHJvbWUoKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ0hlYWRsZXNzQ2hyb21lJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNHZWNrbygpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ0dlY2tvJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ1dlYktpdCc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldERldmljZSgpLnR5cGUgPT09ICdtb2JpbGUnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFjT1MoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldE9TKCkubmFtZSA9PT0gJ01hYyBPUyc7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3NNYWpvclZlcnNpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSBuZXcgVUFQYXJzZXIoKS5nZXRPUygpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xuICAgIHZhciB2ZXJzaW9uID0gbmV3IFVBUGFyc2VyKCkuZ2V0QnJvd3NlcigpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyVmVyc2lvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IG5ldyBVQVBhcnNlcigpLmdldEJyb3dzZXIoKS52ZXJzaW9uO1xuICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWFqb3I6IHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSksXG4gICAgICAgIG1pbm9yOiBwYXJzZUludCh2ZXJzaW9uLnNwbGl0KCcuJylbMV0pLFxuICAgIH07XG59XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBsb2FkIH0gZnJvbSAnLi4vc3JjJztcbmltcG9ydCB7IGdldEJyb3dzZXJFbmdpbmVLaW5kLCBnZXRCcm93c2VyS2luZCwgZ2V0RG9jdW1lbnRGb2N1cywgZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQsIGlzQW5kcm9pZCwgaXNEZXNrdG9wV2ViS2l0LCBpc0lQYWQsIH0gZnJvbSAnLi4vc3JjL3V0aWxzL2Jyb3dzZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlclZlcnNpb24gfSBmcm9tICcuLi90ZXN0cy91dGlscyc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbnZhciBfcmVzdWx0ID0gdW5kZWZpbmVkO1xudmFyIHJ1bkRldGVjdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQwLCBpbnN0YW5jZSwgY29sbGVjdGlvblRpbWUsIGRldGVjdGlvblJlc3VsdCwgZGV0ZWN0aW9uVGltZSwgY29tcG9uZW50cywgZGV0ZWN0aW9ucywgZGVidWdEYXRhLCBlXzE7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbG9hZCgpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uUmVzdWx0ID0gaW5zdGFuY2UuZGV0ZWN0KCk7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IChfYSA9IGluc3RhbmNlLmdldENvbXBvbmVudHMoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9ucyA9IChfYiA9IGluc3RhbmNlLmdldERldGVjdGlvbnMoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgICAgICAgICAgZGVidWdEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBicm93c2VyRW5naW5lS2luZDogZ2V0QnJvd3NlckVuZ2luZUtpbmQoKSxcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlcktpbmQ6IGdldEJyb3dzZXJLaW5kKCksXG4gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJWZXJzaW9uOiBnZXRCcm93c2VyVmVyc2lvbigpLFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZvY3VzOiBnZXREb2N1bWVudEZvY3VzKCksXG4gICAgICAgICAgICAgICAgICAgIG1vekFwcGVhcmFuY2VTdXBwb3J0OiBnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0FuZHJvaWQ6IGlzQW5kcm9pZCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc2t0b3BXZWJLaXQ6IGlzRGVza3RvcFdlYktpdCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0lQYWQ6IGlzSVBhZCgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU6IGNvbGxlY3Rpb25UaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZTogZGV0ZWN0aW9uVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGlvblJlc3VsdDogZGV0ZWN0aW9uUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRCb3Q6IChkZXRlY3Rpb25SZXN1bHQgPT09IG51bGwgfHwgZGV0ZWN0aW9uUmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXRlY3Rpb25SZXN1bHQuYm90KSA/IGRldGVjdGlvblJlc3VsdC5ib3RLaW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkRGF0YTogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdG9yc1Jlc3VsdHM6IGRldGVjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RhdGE6IGRlYnVnRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgZV8xID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IGlzRXJyb3I6IHRydWUsIGVycm9yOiBlXzEgfV07XG4gICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG52YXIgcmVuZGVyRGV0ZWN0aW9uUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHZhciByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKTtcbiAgICB2YXIgcmVzdWx0VGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC10ZXh0Jyk7XG4gICAgdmFyIGNvbGxlY3Rpb25UaW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sbGVjdGlvbi10aW1lJyk7XG4gICAgdmFyIGRldGVjdGlvblRpbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tdGltZScpO1xuICAgIHZhciBkZXRlY3Rpb25SZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tcmVzdWx0Jyk7XG4gICAgdmFyIGRldGVjdG9yc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGVjdG9ycycpO1xuICAgIHZhciBkZWJ1Z0RhdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVidWctZGF0YScpO1xuICAgIHZhciBjb2xsZWN0ZWREYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbGxlY3RlZC1kYXRhJyk7XG4gICAgdmFyIGVycm9yQ29udGFpbmVyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItY29udGFpbmVyJyk7XG4gICAgdmFyIGVycm9yTWVzc2FnZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKTtcbiAgICByZXN1bHRFbC5jbGFzc0xpc3QucmVtb3ZlKCdyZXN1bHQtZGV0ZWN0ZWQnLCAncmVzdWx0LWVycm9yJyk7XG4gICAgaWYgKHJlc3VsdC5pc0Vycm9yKSB7XG4gICAgICAgIHJlc3VsdFRleHRFbC5pbm5lckhUTUwgPSAnQW4gZXJyb3Igb2NjdXJlZCc7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1lcnJvcicpO1xuICAgICAgICBlcnJvckNvbnRhaW5lckVsLmNsYXNzTGlzdC5hZGQoJ2Vycm9yLWNvbnRhaW5lci12aXNpYmxlJyk7XG4gICAgICAgIGVycm9yTWVzc2FnZUVsLnRleHRDb250ZW50ID0gcmVzdWx0LmVycm9yLm1lc3NhZ2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXJyb3JDb250YWluZXJFbC5jbGFzc0xpc3QucmVtb3ZlKCdlcnJvci1jb250YWluZXItdmlzaWJsZScpO1xuICAgIGlmIChyZXN1bHQuZGV0ZWN0ZWRCb3QgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHRUZXh0RWwuaW5uZXJIVE1MID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGVkQm90LCBcIiBkZXRlY3RlZC5cIik7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1kZXRlY3RlZCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0VGV4dEVsLmlubmVySFRNTCA9ICdZb3UgYXJlIG5vdCBhIGJvdC4nO1xuICAgIH1cbiAgICBjb2xsZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmNvbGxlY3Rpb25UaW1lLnRvRml4ZWQoMiksIFwibXNcIik7XG4gICAgZGV0ZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGlvblRpbWUudG9GaXhlZCgyKSwgXCJtc1wiKTtcbiAgICBkZXRlY3Rpb25SZXN1bHRFbC50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZXRlY3Rpb25SZXN1bHQsIG51bGwsIDQpO1xuICAgIGRldGVjdG9yc0VsLnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LmRldGVjdG9yc1Jlc3VsdHMsIG51bGwsIDQpO1xuICAgIGRlYnVnRGF0YS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZWJ1Z0RhdGEsIG51bGwsIDQpO1xuICAgIGNvbGxlY3RlZERhdGEudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuY29sbGVjdGVkRGF0YSwgbnVsbCwgNCk7XG59O1xudmFyIHJ1bkFuZFJlbmRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgcnVuRGV0ZWN0aW9uKCldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBfcmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbmRlckRldGVjdGlvblJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG53aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZXRlY3RCdXR0b25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3QtYnV0dG9uJyk7XG4gICAgdmFyIGNvcHlMb2dzQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHktbG9ncy1idXR0b24nKTtcbiAgICBkZXRlY3RCdXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVuQW5kUmVuZGVyKCk7XG4gICAgfSk7XG4gICAgY29weUxvZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KF9yZXN1bHQpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFsZXJ0KCdCb3REIGxvZ3MgY29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBydW5BbmRSZW5kZXIoKTtcbn07XG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18iLCJVUkwiLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18iLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyIsIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJ1cmwiLCJvcHRpb25zIiwiU3RyaW5nIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0ZXN0Iiwic2xpY2UiLCJoYXNoIiwibmVlZFF1b3RlcyIsInJlcGxhY2UiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIkZVTkNfVFlQRSIsIlVOREVGX1RZUEUiLCJPQkpfVFlQRSIsIlNUUl9UWVBFIiwiTUFKT1IiLCJNT0RFTCIsIk5BTUUiLCJUWVBFIiwiVkVORE9SIiwiVkVSU0lPTiIsIkFSQ0hJVEVDVFVSRSIsIkNPTlNPTEUiLCJNT0JJTEUiLCJUQUJMRVQiLCJTTUFSVFRWIiwiV0VBUkFCTEUiLCJFTUJFRERFRCIsIkFNQVpPTiIsIkFQUExFIiwiQVNVUyIsIkJMQUNLQkVSUlkiLCJCUk9XU0VSIiwiQ0hST01FIiwiRklSRUZPWCIsIkdPT0dMRSIsIkhVQVdFSSIsIkxHIiwiTUlDUk9TT0ZUIiwiTU9UT1JPTEEiLCJPUEVSQSIsIlNBTVNVTkciLCJTSEFSUCIsIlNPTlkiLCJYSUFPTUkiLCJaRUJSQSIsIkZBQ0VCT09LIiwiQ0hST01JVU1fT1MiLCJNQUNfT1MiLCJlbnVtZXJpemUiLCJhcnIiLCJlbnVtcyIsInRvVXBwZXJDYXNlIiwiaGFzIiwic3RyMSIsInN0cjIiLCJsb3dlcml6ZSIsImluZGV4T2YiLCJzdHIiLCJ0b0xvd2VyQ2FzZSIsInRyaW0iLCJsZW4iLCJzdWJzdHJpbmciLCJyZ3hNYXBwZXIiLCJ1YSIsImFycmF5cyIsImoiLCJwIiwicSIsIm1hdGNoZXMiLCJtYXRjaCIsInJlZ2V4IiwicHJvcHMiLCJleGVjIiwiY2FsbCIsInN0ck1hcHBlciIsIndpbmRvd3NWZXJzaW9uTWFwIiwicmVnZXhlcyIsImJyb3dzZXIiLCJjcHUiLCJkZXZpY2UiLCJlbmdpbmUiLCJFREdFIiwib3MiLCJVQVBhcnNlciIsImV4dGVuc2lvbnMiLCJnZXRSZXN1bHQiLCJfbmF2aWdhdG9yIiwibmF2aWdhdG9yIiwiX3VhIiwidXNlckFnZW50IiwiX3VhY2giLCJ1c2VyQWdlbnREYXRhIiwiX3JneG1hcCIsIm1lcmdlZFJlZ2V4ZXMiLCJleHRlbmQiLCJfaXNTZWxmTmF2IiwiZ2V0QnJvd3NlciIsInZlcnNpb24iLCJfYnJvd3NlciIsInNwbGl0IiwiYnJhdmUiLCJpc0JyYXZlIiwiZ2V0Q1BVIiwiX2NwdSIsImdldERldmljZSIsIl9kZXZpY2UiLCJtb2JpbGUiLCJzdGFuZGFsb25lIiwibWF4VG91Y2hQb2ludHMiLCJnZXRFbmdpbmUiLCJfZW5naW5lIiwiZ2V0T1MiLCJfb3MiLCJwbGF0Zm9ybSIsImdldFVBIiwic2V0VUEiLCJDUFUiLCJERVZJQ0UiLCJFTkdJTkUiLCJPUyIsIiQiLCJqUXVlcnkiLCJaZXB0byIsInBhcnNlciIsImdldCIsInNldCIsInByb3AiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJuIiwiZ2V0dGVyIiwiZCIsImEiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJiIiwiYmFzZVVSSSIsInNlbGYiLCJocmVmIiwibmMiLCJleHRlbmRTdGF0aWNzIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwiZG9uZSIsInRoZW4iLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsInQiLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJTeW1ib2wiLCJpdGVyYXRvciIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsIl9fc3ByZWFkQXJyYXkiLCJ0byIsImZyb20iLCJwYWNrIiwiYXJndW1lbnRzIiwiYXIiLCJsIiwiY3JlYXRlIiwiQm90S2luZCIsIkJvdGRFcnJvciIsIl9zdXBlciIsInN0YXRlIiwibWVzc2FnZSIsIl90aGlzIiwibmFtZSIsIl9fIiwiY29uc3RydWN0b3IiLCJfX2V4dGVuZHMiLCJjb2xsZWN0IiwiY29tcG9uZW50cyIsInNvdXJjZXNLZXlzIiwiX2EiLCJrZXlzIiwiYWxsIiwic291cmNlS2V5IiwicmVzIiwiX2IiLCJlcnJvcl8xIiwiX2MiLCJfZCIsImVycm9yIiwiYXJyYXlJbmNsdWRlcyIsInN0ckluY2x1ZGVzIiwiZ2V0T2JqZWN0UHJvcHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaW5jbHVkZXMiLCJfbG9vcF8xIiwiYXJyYXkiLCJjYWxsYmFjayIsImZpbmQiLCJhcnJheUZpbmQiLCJrZXlzXzEiLCJzdGF0ZV8xIiwiY291bnRUcnV0aHkiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJzdW0iLCJkZXRlY3RvcnMiLCJkZXRlY3RBcHBWZXJzaW9uIiwiYXBwVmVyc2lvbiIsImRldGVjdERvY3VtZW50QXR0cmlidXRlcyIsImRvY3VtZW50RWxlbWVudEtleXMiLCJkZXRlY3RFcnJvclRyYWNlIiwiZXJyb3JUcmFjZSIsImRldGVjdEV2YWxMZW5ndGhJbmNvbnNpc3RlbmN5IiwiZXZhbExlbmd0aCIsImJyb3dzZXJLaW5kIiwiYnJvd3NlckVuZ2luZUtpbmQiLCJkZXRlY3RGdW5jdGlvbkJpbmQiLCJmdW5jdGlvbkJpbmQiLCJkZXRlY3RMYW5ndWFnZXNMZW5ndGhJbmNvbnNpc3RlbmN5IiwibGFuZ3VhZ2VzIiwiZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMiLCJub3RpZmljYXRpb25QZXJtaXNzaW9ucyIsImRldGVjdFBsdWdpbnNBcnJheSIsInBsdWdpbnNBcnJheSIsImRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5IiwicGx1Z2luc0xlbmd0aCIsImFuZHJvaWQiLCJkZXRlY3RQcm9jZXNzIiwicHJvY2VzcyIsInR5cGUiLCJ2ZXJzaW9ucyIsImVsZWN0cm9uIiwiZGV0ZWN0VXNlckFnZW50IiwiZGV0ZWN0V2ViRHJpdmVyIiwid2ViRHJpdmVyIiwiZGV0ZWN0V2ViR0wiLCJ3ZWJHTCIsInZlbmRvciIsInJlbmRlcmVyIiwiZGV0ZWN0V2luZG93RXh0ZXJuYWwiLCJ3aW5kb3dFeHRlcm5hbCIsImRldGVjdFdpbmRvd1NpemUiLCJ3aW5kb3dTaXplIiwiZG9jdW1lbnRGb2N1cyIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsImRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQiLCJtaW1lVHlwZXNDb25zaXN0ZW50IiwiZGV0ZWN0UHJvZHVjdFN1YiIsInByb2R1Y3RTdWIiLCJkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMiLCJkaXN0aW5jdGl2ZVByb3BzIiwiYm90IiwiZ2V0QnJvd3NlckVuZ2luZUtpbmQiLCJ3IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0QnJvd3NlcktpbmQiLCJpc0FuZHJvaWQiLCJpc0l0Q2hyb21pdW0iLCJpc0l0R2Vja28iLCJnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCIsIkNTUyIsImdldERvY3VtZW50Rm9jdXMiLCJoYXNGb2N1cyIsImlzSVBhZCIsInMiLCJzY3JlZW4iLCJzY3JlZW5SYXRpbyIsIndpZHRoIiwiaGVpZ2h0IiwiRWxlbWVudCIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwicnR0IiwiY29ubmVjdGlvbiIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInBsdWdpbnMiLCJQbHVnaW5BcnJheSIsInN0YWNrIiwiZXh0ZXJuYWwiLCJtaW1lVHlwZXMiLCJpc0NvbnNpc3RlbnQiLCJnZXRQcm90b3R5cGVPZiIsIk1pbWVUeXBlQXJyYXkiLCJNaW1lVHlwZSIsImV2YWwiLCJjYW52YXNFbGVtZW50IiwiZ2V0Q29udGV4dCIsIndlYkdMQ29udGV4dCIsImdldFBhcmFtZXRlciIsIlJFTkRFUkVSIiwid2ViZHJpdmVyIiwibGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2UiLCJicm93c2VyTGFuZ3VhZ2UiLCJzeXN0ZW1MYW5ndWFnZSIsImlzQXJyYXkiLCJJbnRsIiwiUmVmbGVjdCIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvblN0YXR1cyIsIk5vdGlmaWNhdGlvbiIsInF1ZXJ5IiwicGVybWlzc2lvbiIsImdldEF0dHJpYnV0ZU5hbWVzIiwiYmluZCIsImVycm9yUHJlZml4IiwiYm90TmFtZSIsImRpc3RpbmN0aXZlUHJvcHNMaXN0Iiwid2luZG93UHJvcHMiLCJkb2N1bWVudFByb3BzIiwid2luZG93Q29udGFpbnMiLCJkb2N1bWVudENvbnRhaW5zIiwiQm90RGV0ZWN0b3IiLCJkZXRlY3Rpb25zIiwiZ2V0Q29tcG9uZW50cyIsImdldERldGVjdGlvbnMiLCJkZXRlY3QiLCJmaW5hbERldGVjdGlvbiIsImRldGVjdG9yTmFtZSIsImRldGVjdG9yUmVzIiwiZGV0ZWN0b3IiLCJkZXRlY3Rpb24iLCJib3RLaW5kIiwibG9hZCIsIm1vbml0b3JpbmciLCJfX2ZwanNfZF9tIiwiTWF0aCIsInJhbmRvbSIsInJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzZW5kIiwiY29uc29sZSIsIm1vbml0b3IiLCJnZXRCcm93c2VyVmVyc2lvbiIsIm1ham9yIiwicGFyc2VJbnQiLCJtaW5vciIsIl9yZXN1bHQiLCJydW5BbmRSZW5kZXIiLCJ0MCIsImluc3RhbmNlIiwiY29sbGVjdGlvblRpbWUiLCJkZXRlY3Rpb25SZXN1bHQiLCJkZXRlY3Rpb25UaW1lIiwiZGVidWdEYXRhIiwicGVyZm9ybWFuY2UiLCJub3ciLCJicm93c2VyVmVyc2lvbiIsIm1vekFwcGVhcmFuY2VTdXBwb3J0IiwiaXNEZXNrdG9wV2ViS2l0IiwiSFRNTEVsZW1lbnQiLCJEb2N1bWVudCIsImlzRXJyb3IiLCJkZXRlY3RlZEJvdCIsImNvbGxlY3RlZERhdGEiLCJkZXRlY3RvcnNSZXN1bHRzIiwicmVzdWx0RWwiLCJnZXRFbGVtZW50QnlJZCIsInJlc3VsdFRleHRFbCIsImNvbGxlY3Rpb25UaW1lRWwiLCJkZXRlY3Rpb25UaW1lRWwiLCJkZXRlY3Rpb25SZXN1bHRFbCIsImRldGVjdG9yc0VsIiwiZXJyb3JDb250YWluZXJFbCIsImVycm9yTWVzc2FnZUVsIiwiY2xhc3NMaXN0IiwiaW5uZXJIVE1MIiwiYWRkIiwidGV4dENvbnRlbnQiLCJ0b0ZpeGVkIiwicmVuZGVyRGV0ZWN0aW9uUmVzdWx0Iiwib25sb2FkIiwiZGV0ZWN0QnV0dG9uRWwiLCJjb3B5TG9nc0J1dHRvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJhbGVydCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file