From 2623299e889ff160460cae6ef0a132ffc97133fc Mon Sep 17 00:00:00 2001 From: NontasBak Date: Wed, 7 Aug 2024 11:51:52 +0300 Subject: [PATCH] Allow player to drag and drop ship placement --- main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 081b2cc..574950e 100644 --- a/main.js +++ b/main.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var n={430:(n,e,t)=>{t.d(e,{A:()=>A});var r=t(354),o=t.n(r),a=t(314),i=t.n(a)()(o());i.push([n.id,"html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video, button {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}","",{version:3,sources:["webpack://./src/reset.css"],names:[],mappings:"AAAA;;;;;;;;;;;;;CAaC,SAAS;CACT,UAAU;CACV,SAAS;CACT,eAAe;CACf,aAAa;CACb,wBAAwB;AACzB;AACA,gDAAgD;AAChD;;CAEC,cAAc;AACf;AACA;CACC,cAAc;AACf;AACA;CACC,gBAAgB;AACjB;AACA;CACC,YAAY;AACb;AACA;;CAEC,WAAW;CACX,aAAa;AACd;AACA;CACC,yBAAyB;CACzB,iBAAiB;AAClB",sourcesContent:["html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video, button {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}"],sourceRoot:""}]);const A=i},208:(n,e,t)=>{t.d(e,{A:()=>m});var r=t(354),o=t.n(r),a=t(314),i=t.n(a),A=t(417),s=t.n(A),c=new URL(t(126),t.b),l=new URL(t(356),t.b),d=new URL(t(837),t.b),p=i()(o()),u=s()(c),h=s()(l),g=s()(d);p.push([n.id,`* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: "Roboto Mono", monospace;\n font-optical-sizing: auto;\n font-weight: 500;\n font-style: normal;\n\n display: flex;\n flex-direction: column;\n /* align-items: center; */\n justify-content: center;\n /* margin: -3vw; */\n /* height: 100vh; */\n\n position: relative;\n}\n\n.header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n font-size: calc(2.5rem + 1vw);\n}\n\n.game-container {\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-wrap: wrap;\n /* margin-top: 20vh; */\n /* width: 70vw; */\n}\n\n.player-container,\n.computer-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n position: relative;\n /* margin: 2rem; */\n}\n\n.player-container > h4,\n.computer-container > h4 {\n padding: 1rem;\n font-size: 1.5rem;\n}\n\n.board {\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-template-rows: repeat(10, 1fr);\n width: clamp(400px, 30vw, 800px);\n height: clamp(400px, 30vw, 800px);\n border: 2px solid black;\n}\n\n.cell {\n border: 1px solid black;\n}\n\n.computer .cell:hover {\n background-image: url(${u});\n background-size: cover;\n background-size: 80%;\n background-repeat: no-repeat;\n background-position: center;\n cursor: pointer;\n}\n\n.computer .cell.hit:hover {\n cursor: not-allowed;\n}\n\n.player .cell.ship {\n background-color: rgb(127, 186, 39);\n /* border: 2px solid rgb(0, 79, 0); */\n}\n\n.cell.water.hit {\n background-image: url(${h});\n background-size: 120%;\n background-position: 0 10px;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit {\n border: 2px solid rgb(0, 67, 0);\n background: url(${g}), greenyellow;\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit.sunk {\n border: 2px solid rgb(156, 8, 8);\n background: url(${g}), rgb(255, 204, 204);\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.restart-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 100vw;\n height: 100vh;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 2rem;\n\n animation: fadeIn 0.5s;\n}\n\n.restart-game-container h2 {\n font-size: 3rem;\n font-weight: 700;\n}\n\n.restart-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n background-color: rgb(0, 0, 0, 0.8);\n color: white;\n border-radius: 5px;\n cursor: pointer;\n\n transition: background-color 0.3s;\n}\n\n.restart-game-container button:hover {\n background-color: rgb(0, 0, 0, 0.9);\n}\n\n.start-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 101%;\n height: 101%;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20%;\n}\n\n.start-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n border-radius: 0.5rem;\n background-color: rgb(40, 40, 40);\n color: white;\n\n transition: background-color 0.3s;\n}\n\n.start-game-container button:hover {\n background-color: rgb(0, 0, 0);\n}\n`,"",{version:3,sources:["webpack://./src/style.css"],names:[],mappings:"AAAA;IACI,sBAAsB;AAC1B;;AAEA;IACI,qCAAqC;IACrC,yBAAyB;IACzB,gBAAgB;IAChB,kBAAkB;;IAElB,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;;IAEnB,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,aAAa;IACb,6BAA6B;AACjC;;AAEA;IACI,aAAa;IACb,6BAA6B;IAC7B,mBAAmB;IACnB,eAAe;IACf,sBAAsB;IACtB,iBAAiB;AACrB;;AAEA;;IAEI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;;IAEnB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;;IAEI,aAAa;IACb,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,sCAAsC;IACtC,mCAAmC;IACnC,gCAAgC;IAChC,iCAAiC;IACjC,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,yDAA2C;IAC3C,sBAAsB;IACtB,oBAAoB;IACpB,4BAA4B;IAC5B,2BAA2B;IAC3B,eAAe;AACnB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,mCAAmC;IACnC,qCAAqC;AACzC;;AAEA;IACI,yDAAwC;IACxC,qBAAqB;IACrB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,+BAA+B;IAC/B,gEAAgD;IAChD,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,gCAAgC;IAChC,uEAAuD;IACvD,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI;QACI,UAAU;IACd;IACA;QACI,UAAU;IACd;AACJ;;AAEA;IACI,kBAAkB;IAClB,gCAAgC;IAChC,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,YAAY;IACZ,aAAa;;IAEb,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,SAAS;;IAET,sBAAsB;AAC1B;;AAEA;IACI,eAAe;IACf,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,mCAAmC;IACnC,YAAY;IACZ,kBAAkB;IAClB,eAAe;;IAEf,iCAAiC;AACrC;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,kBAAkB;IAClB,gCAAgC;IAChC,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,WAAW;IACX,YAAY;;IAEZ,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,iCAAiC;IACjC,YAAY;;IAEZ,iCAAiC;AACrC;;AAEA;IACI,8BAA8B;AAClC",sourcesContent:['* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: "Roboto Mono", monospace;\n font-optical-sizing: auto;\n font-weight: 500;\n font-style: normal;\n\n display: flex;\n flex-direction: column;\n /* align-items: center; */\n justify-content: center;\n /* margin: -3vw; */\n /* height: 100vh; */\n\n position: relative;\n}\n\n.header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n font-size: calc(2.5rem + 1vw);\n}\n\n.game-container {\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-wrap: wrap;\n /* margin-top: 20vh; */\n /* width: 70vw; */\n}\n\n.player-container,\n.computer-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n position: relative;\n /* margin: 2rem; */\n}\n\n.player-container > h4,\n.computer-container > h4 {\n padding: 1rem;\n font-size: 1.5rem;\n}\n\n.board {\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-template-rows: repeat(10, 1fr);\n width: clamp(400px, 30vw, 800px);\n height: clamp(400px, 30vw, 800px);\n border: 2px solid black;\n}\n\n.cell {\n border: 1px solid black;\n}\n\n.computer .cell:hover {\n background-image: url("./icons/target.png");\n background-size: cover;\n background-size: 80%;\n background-repeat: no-repeat;\n background-position: center;\n cursor: pointer;\n}\n\n.computer .cell.hit:hover {\n cursor: not-allowed;\n}\n\n.player .cell.ship {\n background-color: rgb(127, 186, 39);\n /* border: 2px solid rgb(0, 79, 0); */\n}\n\n.cell.water.hit {\n background-image: url("./icons/sea.png");\n background-size: 120%;\n background-position: 0 10px;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit {\n border: 2px solid rgb(0, 67, 0);\n background: url("./icons/fire.png"), greenyellow;\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit.sunk {\n border: 2px solid rgb(156, 8, 8);\n background: url("./icons/fire.png"), rgb(255, 204, 204);\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.restart-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 100vw;\n height: 100vh;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 2rem;\n\n animation: fadeIn 0.5s;\n}\n\n.restart-game-container h2 {\n font-size: 3rem;\n font-weight: 700;\n}\n\n.restart-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n background-color: rgb(0, 0, 0, 0.8);\n color: white;\n border-radius: 5px;\n cursor: pointer;\n\n transition: background-color 0.3s;\n}\n\n.restart-game-container button:hover {\n background-color: rgb(0, 0, 0, 0.9);\n}\n\n.start-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 101%;\n height: 101%;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20%;\n}\n\n.start-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n border-radius: 0.5rem;\n background-color: rgb(40, 40, 40);\n color: white;\n\n transition: background-color 0.3s;\n}\n\n.start-game-container button:hover {\n background-color: rgb(0, 0, 0);\n}\n'],sourceRoot:""}]);const m=p},314:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",r=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),r&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),r&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,r,o,a){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var A=0;A0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=a),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),o&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=o):l[4]="".concat(o)),e.push(l))}},e}},417:n=>{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}},354:n=>{n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),a="/*# ".concat(o," */");return[e].concat([a]).join("\n")}return[e].join("\n")}},72:n=>{var e=[];function t(n){for(var t=-1,r=0;r{var e={};n.exports=function(n,t){var r=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(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56:(n,e,t)=>{n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825:n=>{n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var o=void 0!==t.layer;o&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,o&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var a=t.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleTagTransform(r,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113:n=>{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))}}},837:n=>{n.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAepSURBVHic1ZtbcFVXHcZ/a1/OSU5CIIRrQUsZLm1IO6A0CWlFqR3rODVAghmlfVAmTYo+VHmoOvpQZjqdcXQqPKhF7XTGOqMDU9JKddqxdpQRGYRWQQhtMxRLWyi0oSQkJzmXvf8+BGgue++zr8fyvZzZa33/y/n22mutvdbaSkT4v6J1+Sx0tlGw29Eo8oe+FeUMb5Qz2AR0r/kUYn+f7Ogmrt6E6oq/lTuN8gvQeXsDur4dkY2AYnwL1PWD5U6nfAJsa6lkuLgDTetERHPORv9j2fK5AlWWPuDB5nps2Q1Mfb5PnRv71ZTw57echUkQyQfsbtqMLYdx+vPjYRiDiefiFDZR791NmxGexo/Qhv7fRHNxC5uY567mduA3+G1lhvZKYrl4IJlHoLv5TpDfAbp/I3UmkVxKIH4BuldPR+S3gBnITkll7Ln4QPwCiP4z4MbgdlTEnosPxCtA15pW4L5Qtup6F2C70sB+LLS9Jde5AO823Uepsd4L13ULUEqh5JFIPkTqYsklIOIRoLPxToTFkXwUrE/HkktAxNUCvhrZR75QS3v9/BiyCYToAnR06CCbIvsRQOyHQtluvnVu2LDRBZh+5i5gTmQ/AAV7Q2CbjTc/zED232FDRhdAs78W2cdVjOaWsWnFKt/8+5fWkM09ymhhHm31j4YJGU2AjoYUojZG8jEetihGRl9mu/L3knZZ7aNojU25h7PfpXX5rKAhowkwM9MMzIjkYzJGCzN4delLJXlt9d9hOLf22nXRNkD2BQ0XTQBLuzWSvRuGRj/L+mUvON7R+5fW0LrsnwwMPc7k1axsrpmO5QuChIq2HqCkIZK9F4ZG70HXzrN++T50/SC2vQiRheSsuykUnWeNIlBgO9DpN0zUBZHkBACwbI2hkfXAet82OWsDAQSIOgokK0AY5PJ1dDTU+6WHF2BrywLi7gDjQqGw1S81vABW8ZbQtknDEt+5RXkEZkawTRYin/RLjSLA9Ai2ycKyZ/ulRhBA+/gKIP5HN3cBHmi+jS2Nn/Cw/fgKoFTOL9VdAMVqDPU831pX7Vgv1ATPrExQjPilugsgshi4jXx2D99YN3XmpUSFSq4c0NV7fqlefcBNACi+iDnyEt/8TO2ket8qu6Iqj9zTj3z+YmRXE2AaPX6pXo/AuDU+uYNi/u880HTTR0Vkw2UHMmsIa20fxdajqEVZOBPjppBSYFf83C+9dAv4CPUojtLVvOWKZfAWkC5iN5/G+kIvsvBDUILkdFRfjAKkzH56/nVpQll7/Vo6GhznLc4CdK/OAE7rbNNAnqSr8TlETQuSl9QNUbz3GPbi9ydWxHn3AUztwITrTcu/xFD2ZeyC47Kd83iZn2ZjerVw1QrS6jcnmTeItbYPDGtq5btpv25KQykwzUeuXbfd8jhDuYewbA0r49gxuh+R6Wq6CEzu+AJD5g5irXsdNOc4xs75MBjTMYXK1DukzJ3YUk++0EauMDZX8Th+4xX5LFEFMC2s5jdd/zyAzC6g4hJgJL+QkfyPp5Tret7NxKMTlLNR87FXvg1VrrHHMKdEfRzQtCHXKncrdS5KTJlzGXvphdLEJaFHU//Q1CXXKlcjJceixLSXnvfFU1VFqC1GCVUahup1q3IXwDKeCx/QRha4ij4RAtJ+HlL2xPIZRWTLWagrhE7jGpS507XK86BkV9NxQuz5y6J+rJZTvrjGladEbA2OTkP1ZZBlWdTKQUCQooZ6MtBK90SYRo4X3nQ9e+C9HiA8GyamfWN/YBul2ahVA9BxDrVygLHdUlCGjXz5gzBpjCFlHvGq9hZADyeAzHLtdENB3TCC3DwcztjUd3lVewvwxKEjwOFAATWBdAKdWlOIk7QpY5hnep/2opReEhPt4SAxpTKZcV1VFiFtlyaOR0XFD0tRSgvwq4N/Bf7kO2hlDL22EwRkWYA5Q0XqfXp6d5Si+VsUVfr3AH/yZxKc2c0I8GilzQf90PwJsOsf/0Hw7EyuQlIJTmoyDm+Tjrz0Cfae3OuH6n9ZfGD426AOlKKpwQSP/J738eqcNgepTDf7delfgN3H8+h6G/CWF01dzFwdwmOH6st4EwytSHXlGnYf9z0OB9sY+cWBC2isB9wH5aKOupxEK1Aw7PXupqCmajO7j7vO+50QfGfoiUNHgXbgsiunvyqw21KQEY9PDzQlTM/8gD0n9gT1G25r7JeHXsS2W4DTjk7fmAtxbxsccdmHMbQi1RVtPHMy1EHt8HuDvz58HGU1IuyfXKX6q9BOzgvtejLkwzSq16FVpcwBaitX0PN6qCk7RD0hsuvIB2jW3cBPgQkzIO3YQtRAHH2BQj07a3IRVKVfxay9gd+ffCOS99i+G+xsWYJmPQZ85WqR1A1j3fUamO7jt+G1aKRA9s+cePcrUu+QSn+dnhN/iSHrBD6c7Ly9EU39CNTnAMjksZpOI/MHHOluAoiloZ6fDe+lxgoqzEukzW3sfe2pONNN7svRzpYlaPYGYAPIGnvJBc1e9faU1jBFAAVyOoN6sW5sUmMa+9GMHXHd8ckoz6ezW++Yg2XdS/XoKpk72CAzsoukZnS21GYzxuWCkoIuDJoWFyqH1KmaMwxUvELK+EnQMT0M/gdWGE+/XO39uQAAAABJRU5ErkJggg=="},356:n=>{n.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAHYAAAB2AH6XKZyAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABRtJREFUeJztmztsHEUYgL/Z27uzz/b5TRQTHGggiQugQYooaBAUiCSA4gYU6lAgBDQUSKFCoiESQqHmEeJDeYh0hBSIFJFCgVDsXHAeJMJ54LN9Z99jn/NTJAd2OPvetyjZr92d+f75d3Z2/t07CAkJCQl5cFFBiVPTEiNGPwAOuckJ5XTSLyJKKSUqlZYTAi8B51GcUB6fTU6oxXZIj87IZs9gP7ALmADMu4c84LwI3xuaQ5MT6lY7/IcvykhEeFvBboEdCCfVVFo0a2dCDsVHk49zUCklrRCLiEr9zlsInwCJKqcXFby/9wm+aKk/zXsoPgSSqw+pqbRUlCjFMcti374nVaEZ+clfJFHq5bDA7roaCsdVL69PPqJKzfhT09JLhK/X8xvr+oVX43FOffObDDYqP3ZBhou9/Fj34AEUr0iBU6lpGWrGLxFOb+RfNwF32WlGOfPtBXm0XvnRGdnqKM4AO+ttu4pnJcKZ1LSM19swlZbHXMXPwDMbnVctAaDYYRicnbogL9cqn7ooezyDcwq21dpmA7ZLhHOptOyqtcGRtOwWOAtsr3buumtARYTjSjg0s53TB5TSaw6JqCNpdhqKd4HXau6zDhR8h/Dp3m2cvXeBPCBibEvzvFLsB/bU3GddCfg3ktsIvwLzd+JiBHgaeKjuvhphrR9gFMVTCJvq7qqhBNxHVF8D7nPCBAQdQNCECQg6gKAxfbmTBdXhwlgEyhuJIP3m+dsOCuiOKpJxg+GEgWm0JxpPCwtFTc7SWJ5Qfv6W/X1xg5EO+00AAYquUHR9/ir4jPWZDCWMlr0tEWCxqLmx4qEr7DpW++cLPmNJk+Hu1t2dG/nNe0/WAn8ue6zYBuMDJs1eDC1wPeeRs3T1k8v+nEfeNhjvN5u+Nar5101zztZcWXLxm9gn+gJXltyaB7+arKW53AH/hvOs4AizCy5OpXlbBVcLlxZcCk7jIyg4d/pop7/qjWZ7wmzGZbmOq7hia2YzHpbXfJlhecJsxiNnt8f/nzWgEp6Gq1mPgS6D0Z4IiWjlG7PoCPNFn2wDU35jv3BtyaO/22A00Vp/TQkok7U0WUsTNRTdUYVplAOEkiu4DUzVWhEgW9JkS/f4BTxp3F9XAsq4WnDt4KroVvof+K1wmICgAwiaMAFBBxA0hpbWPrPrQYsmaL85c+sahlLEozGS8QSDiT5MI9IWoad9loorLNtFLMehXBAbShE3YyS7Ou83AbQIJcem5NjM53NsTg4xmOhrqXypuMLN5cWKV1yLUHJtSm7n/RXKYc1cLkPeKfFw/yhGk/WoFmEuO0/Oqu0j82r/loFRVJNvJar5190J5koFPN9nfHATEaOxtdLXmutLtyk4Vt1ty/6tQ5swVPv8VcphiysLN3B9v2655/tcXbjZ0ODX+DM32+qvoRx2uZyZY8Wu/XcKK3aJS5k5LK/5n/1YnsPlhTnybfLXWA77XFu8xUB3L8M9Sbqj8crBujbzhWVypXzNwdbk933+uOsf6emnKxprmb++criUJ1vKE41E6IrG/3lceb6P5dkNTdXG/CZd0VhL/I2Vw76P6xcbadoSXN/D9b2W9BVuhYMOIGjCBAQdQNCECQg6gKAJE9DxD/P/J5TCSERjwb2SCZgeM6aNLX3Jg8H9bSJAFIz1932uAN45lflyLpt7w/bcByIVMTMqW5L9Xx18ceTNNQP+4If557xIZCyowDqB6fs3Pn5h9Keg4wgJCQkJ+T/wNxL4/hbh21SVAAAAAElFTkSuQmCC"},126:n=>{n.exports="data:image/png;base64,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"}},e={};function t(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={id:r,exports:{}};return n[r](a,a.exports,t),a.exports}t.m=n,t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{var n=t(72),e=t.n(n),r=t(825),o=t.n(r),a=t(659),i=t.n(a),A=t(56),s=t.n(A),c=t(540),l=t.n(c),d=t(113),p=t.n(d),u=t(430),h={};h.styleTagTransform=p(),h.setAttributes=s(),h.insert=i().bind(null,"head"),h.domAPI=o(),h.insertStyleElement=l(),e()(u.A,h),u.A&&u.A.locals&&u.A.locals;var g=t(208),m={};m.styleTagTransform=p(),m.setAttributes=s(),m.insert=i().bind(null,"head"),m.domAPI=o(),m.insertStyleElement=l(),e()(g.A,m),g.A&&g.A.locals&&g.A.locals;const C=class{constructor(n){this.length=n,this.timesHit=0,this.hits=[],this.isSunk=!1}hit(n=null,e=null){if(this.isSunk)throw new Error("Ship is already sunk");this.timesHit++,this.hits.push({x:n,y:e}),this.determineIfSunk()&&(this.isSunk=!0)}isHit(n,e){return this.hits.some((t=>t.x===n&&t.y===e))}determineIfSunk(){return this.timesHit===this.length}},B=class{constructor(){this.board=this.createBoard(10),this.ships=[],this.missedAttacks=[]}createBoard(n){const e=[];for(let t=0;tn.isSunk))}canPlaceShip(n,e,t,r){if("horizontal"===t){if(this.board.length{let e;do{e=[Math.floor(10*Math.random()),Math.floor(10*Math.random()),Math.random()<.5?"horizontal":"vertical"]}while(!this.canPlaceShip(...e,n));this.placeShip(...e,n)}))}},b=class{constructor(n){this.type=n,this.gameBoard=new B}};new class{constructor(n,e){this.player=n,this.computer=e,this.cellClickHandler=this.cellClickHandler.bind(this)}displayBoardPlayer(){const n=this.player.gameBoard.board,e=document.querySelector(".board.player");e.innerHTML="";for(let t=0;t{n.removeEventListener("click",this.cellClickHandler)}));const e=document.createElement("div");e.classList.add("restart-game-container");const t=document.createElement("h2");t.textContent=`${n} won!`;const r=document.createElement("button");r.textContent="Play Again",r.addEventListener("click",(()=>{this.player.gameBoard=new B,this.computer.gameBoard=new B,this.player.gameBoard.placeShipRandomly(),this.computer.gameBoard.placeShipRandomly(),this.displayBoardPlayer(),this.startingScreen(),e.remove()})),e.append(t,r),document.body.appendChild(e)}startingScreen(){this.player.gameBoard.placeShipRandomly(),this.computer.gameBoard.placeShipRandomly(),this.displayBoardPlayer(),this.displayBoardComputerEmpty();const n=document.createElement("div");n.classList.add("start-game-container");const e=document.createElement("button");e.classList.add("randomize-ships"),e.textContent="Randomize Ships",e.addEventListener("click",(()=>{this.player.gameBoard.placeShipRandomly(),this.displayBoardPlayer()}));const t=document.createElement("button");t.classList.add("start"),t.textContent="Start",t.addEventListener("click",(()=>{this.displayBoardComputer(),n.remove()}));const r=document.querySelector(".computer-container");n.append(e,t),r.appendChild(n)}}(new b("player"),new b("computer")).startingScreen()})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RDRILEVBQW1CRixPQUFPRyxFQUFzQkMsR0FDaERDLEVBQWtCdkgsWUFBWW9ILEVBQ2xDLEdEdkxXLElBQUksRUFBTyxVQUNULElBQUksRUFBTyxhQUdwQkgsZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvcmVzZXQuY3NzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3Qvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3Qvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9yZXNldC5jc3M/ZWRlMCIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvc3R5bGUuY3NzPzcxNjMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vc3JjL3NoaXAuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vc3JjL2dhbWVCb2FyZC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvcGxheWVyLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvZGlzcGxheS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbmIsIHUsIGksIGNlbnRlcixcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsIFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvLCBidXR0b24ge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGJvcmRlcjogMDtcblx0Zm9udC1zaXplOiAxMDAlO1xuXHRmb250OiBpbmhlcml0O1xuXHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG4vKiBIVE1MNSBkaXNwbGF5LXJvbGUgcmVzZXQgZm9yIG9sZGVyIGJyb3dzZXJzICovXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLCBcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSB7XG5cdGxpbmUtaGVpZ2h0OiAxO1xufVxub2wsIHVsIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcbn1cbmJsb2NrcXVvdGUsIHEge1xuXHRxdW90ZXM6IG5vbmU7XG59XG5ibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlcixcbnE6YmVmb3JlLCBxOmFmdGVyIHtcblx0Y29udGVudDogJyc7XG5cdGNvbnRlbnQ6IG5vbmU7XG59XG50YWJsZSB7XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cdGJvcmRlci1zcGFjaW5nOiAwO1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3Jlc2V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7Ozs7Ozs7Ozs7OztDQWFDLFNBQVM7Q0FDVCxVQUFVO0NBQ1YsU0FBUztDQUNULGVBQWU7Q0FDZixhQUFhO0NBQ2Isd0JBQXdCO0FBQ3pCO0FBQ0EsZ0RBQWdEO0FBQ2hEOztDQUVDLGNBQWM7QUFDZjtBQUNBO0NBQ0MsY0FBYztBQUNmO0FBQ0E7Q0FDQyxnQkFBZ0I7QUFDakI7QUFDQTtDQUNDLFlBQVk7QUFDYjtBQUNBOztDQUVDLFdBQVc7Q0FDWCxhQUFhO0FBQ2Q7QUFDQTtDQUNDLHlCQUF5QjtDQUN6QixpQkFBaUI7QUFDbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsIFxcbmZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgXFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvLCBidXR0b24ge1xcblxcdG1hcmdpbjogMDtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdGJvcmRlcjogMDtcXG5cXHRmb250LXNpemU6IDEwMCU7XFxuXFx0Zm9udDogaW5oZXJpdDtcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLCBcXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5ib2R5IHtcXG5cXHRsaW5lLWhlaWdodDogMTtcXG59XFxub2wsIHVsIHtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5ibG9ja3F1b3RlLCBxIHtcXG5cXHRxdW90ZXM6IG5vbmU7XFxufVxcbmJsb2NrcXVvdGU6YmVmb3JlLCBibG9ja3F1b3RlOmFmdGVyLFxcbnE6YmVmb3JlLCBxOmFmdGVyIHtcXG5cXHRjb250ZW50OiAnJztcXG5cXHRjb250ZW50OiBub25lO1xcbn1cXG50YWJsZSB7XFxuXFx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG5cXHRib3JkZXItc3BhY2luZzogMDtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL3RhcmdldC5wbmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL3NlYS5wbmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2ZpcmUucG5nXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYCoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmJvZHkge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIG1vbm9zcGFjZTtcbiAgICBmb250LW9wdGljYWwtc2l6aW5nOiBhdXRvO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8qIGFsaWduLWl0ZW1zOiBjZW50ZXI7ICovXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgLyogbWFyZ2luOiAtM3Z3OyAqL1xuICAgIC8qIGhlaWdodDogMTAwdmg7ICovXG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAycmVtO1xuICAgIGZvbnQtc2l6ZTogY2FsYygyLjVyZW0gKyAxdncpO1xufVxuXG4uZ2FtZS1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLyogbWFyZ2luLXRvcDogMjB2aDsgKi9cbiAgICAvKiB3aWR0aDogNzB2dzsgKi9cbn1cblxuLnBsYXllci1jb250YWluZXIsXG4uY29tcHV0ZXItY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvKiBtYXJnaW46IDJyZW07ICovXG59XG5cbi5wbGF5ZXItY29udGFpbmVyID4gaDQsXG4uY29tcHV0ZXItY29udGFpbmVyID4gaDQge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi5ib2FyZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMCwgMWZyKTtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgxMCwgMWZyKTtcbiAgICB3aWR0aDogY2xhbXAoNDAwcHgsIDMwdncsIDgwMHB4KTtcbiAgICBoZWlnaHQ6IGNsYW1wKDQwMHB4LCAzMHZ3LCA4MDBweCk7XG4gICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XG59XG5cbi5jZWxsIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbn1cblxuLmNvbXB1dGVyIC5jZWxsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19ffSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jb21wdXRlciAuY2VsbC5oaXQ6aG92ZXIge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5wbGF5ZXIgLmNlbGwuc2hpcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyNywgMTg2LCAzOSk7XG4gICAgLyogYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDc5LCAwKTsgKi9cbn1cblxuLmNlbGwud2F0ZXIuaGl0IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19ffSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMjAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMTBweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4uY2VsbC5zaGlwLmhpdCB7XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDY3LCAwKTtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19ffSksIGdyZWVueWVsbG93O1xuICAgIGJhY2tncm91bmQtc2l6ZTogODAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4uY2VsbC5zaGlwLmhpdC5zdW5rIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTU2LCA4LCA4KTtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19ffSksIHJnYigyNTUsIDIwNCwgMjA0KTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDB2aDtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMnJlbTtcblxuICAgIGFuaW1hdGlvbjogZmFkZUluIDAuNXM7XG59XG5cbi5yZXN0YXJ0LWdhbWUtY29udGFpbmVyIGgyIHtcbiAgICBmb250LXNpemU6IDNyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnJlc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOCk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG59XG5cbi5yZXN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOSk7XG59XG5cbi5zdGFydC1nYW1lLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcbiAgICB3aWR0aDogMTAxJTtcbiAgICBoZWlnaHQ6IDEwMSU7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDIwJTtcbn1cblxuLnN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbiB7XG4gICAgcGFkZGluZzogMXJlbSAycmVtO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDAsIDQwLCA0MCk7XG4gICAgY29sb3I6IHdoaXRlO1xuXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xufVxuXG4uc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCk7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxzQkFBc0I7QUFDMUI7O0FBRUE7SUFDSSxxQ0FBcUM7SUFDckMseUJBQXlCO0lBQ3pCLGdCQUFnQjtJQUNoQixrQkFBa0I7O0lBRWxCLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsbUJBQW1COztJQUVuQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsNkJBQTZCO0FBQ2pDOztBQUVBO0lBQ0ksYUFBYTtJQUNiLDZCQUE2QjtJQUM3QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixpQkFBaUI7QUFDckI7O0FBRUE7O0lBRUksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7O0lBRW5CLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7O0lBRUksYUFBYTtJQUNiLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLGFBQWE7SUFDYixzQ0FBc0M7SUFDdEMsbUNBQW1DO0lBQ25DLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0ksdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0kseURBQTJDO0lBQzNDLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsNEJBQTRCO0lBQzVCLDJCQUEyQjtJQUMzQixlQUFlO0FBQ25COztBQUVBO0lBQ0ksbUJBQW1CO0FBQ3ZCOztBQUVBO0lBQ0ksbUNBQW1DO0lBQ25DLHFDQUFxQztBQUN6Qzs7QUFFQTtJQUNJLHlEQUF3QztJQUN4QyxxQkFBcUI7SUFDckIsMkJBQTJCO0lBQzNCLDRCQUE0QjtBQUNoQzs7QUFFQTtJQUNJLCtCQUErQjtJQUMvQixnRUFBZ0Q7SUFDaEQsb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQiw0QkFBNEI7QUFDaEM7O0FBRUE7SUFDSSxnQ0FBZ0M7SUFDaEMsdUVBQXVEO0lBQ3ZELG9CQUFvQjtJQUNwQiwyQkFBMkI7SUFDM0IsNEJBQTRCO0FBQ2hDOztBQUVBO0lBQ0k7UUFDSSxVQUFVO0lBQ2Q7SUFDQTtRQUNJLFVBQVU7SUFDZDtBQUNKOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IsU0FBUztJQUNULDBCQUEwQjtJQUMxQixZQUFZO0lBQ1osYUFBYTs7SUFFYixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsU0FBUzs7SUFFVCxzQkFBc0I7QUFDMUI7O0FBRUE7SUFDSSxlQUFlO0lBQ2YsZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQ0FBbUM7SUFDbkMsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixlQUFlOztJQUVmLGlDQUFpQztBQUNyQzs7QUFFQTtJQUNJLG1DQUFtQztBQUN2Qzs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixnQ0FBZ0M7SUFDaEMsUUFBUTtJQUNSLFNBQVM7SUFDVCwwQkFBMEI7SUFDMUIsV0FBVztJQUNYLFlBQVk7O0lBRVosYUFBYTtJQUNiLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLFFBQVE7QUFDWjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLGlDQUFpQztJQUNqQyxZQUFZOztJQUVaLGlDQUFpQztBQUNyQzs7QUFFQTtJQUNJLDhCQUE4QjtBQUNsQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIqIHtcXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICAgIGZvbnQtZmFtaWx5OiBcXFwiUm9ib3RvIE1vbm9cXFwiLCBtb25vc3BhY2U7XFxuICAgIGZvbnQtb3B0aWNhbC1zaXppbmc6IGF1dG87XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG5cXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgLyogYWxpZ24taXRlbXM6IGNlbnRlcjsgKi9cXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIC8qIG1hcmdpbjogLTN2dzsgKi9cXG4gICAgLyogaGVpZ2h0OiAxMDB2aDsgKi9cXG5cXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uaGVhZGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDJyZW07XFxuICAgIGZvbnQtc2l6ZTogY2FsYygyLjVyZW0gKyAxdncpO1xcbn1cXG5cXG4uZ2FtZS1jb250YWluZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAvKiBtYXJnaW4tdG9wOiAyMHZoOyAqL1xcbiAgICAvKiB3aWR0aDogNzB2dzsgKi9cXG59XFxuXFxuLnBsYXllci1jb250YWluZXIsXFxuLmNvbXB1dGVyLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgLyogbWFyZ2luOiAycmVtOyAqL1xcbn1cXG5cXG4ucGxheWVyLWNvbnRhaW5lciA+IGg0LFxcbi5jb21wdXRlci1jb250YWluZXIgPiBoNCB7XFxuICAgIHBhZGRpbmc6IDFyZW07XFxuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xcbn1cXG5cXG4uYm9hcmQge1xcbiAgICBkaXNwbGF5OiBncmlkO1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMCwgMWZyKTtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMTAsIDFmcik7XFxuICAgIHdpZHRoOiBjbGFtcCg0MDBweCwgMzB2dywgODAwcHgpO1xcbiAgICBoZWlnaHQ6IGNsYW1wKDQwMHB4LCAzMHZ3LCA4MDBweCk7XFxuICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrO1xcbn1cXG5cXG4uY2VsbCB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xcbn1cXG5cXG4uY29tcHV0ZXIgLmNlbGw6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4vaWNvbnMvdGFyZ2V0LnBuZ1xcXCIpO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5jb21wdXRlciAuY2VsbC5oaXQ6aG92ZXIge1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4ucGxheWVyIC5jZWxsLnNoaXAge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTI3LCAxODYsIDM5KTtcXG4gICAgLyogYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDc5LCAwKTsgKi9cXG59XFxuXFxuLmNlbGwud2F0ZXIuaGl0IHtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuL2ljb25zL3NlYS5wbmdcXFwiKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAxMjAlO1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDEwcHg7XFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxufVxcblxcbi5jZWxsLnNoaXAuaGl0IHtcXG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDY3LCAwKTtcXG4gICAgYmFja2dyb3VuZDogdXJsKFxcXCIuL2ljb25zL2ZpcmUucG5nXFxcIiksIGdyZWVueWVsbG93O1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbn1cXG5cXG4uY2VsbC5zaGlwLmhpdC5zdW5rIHtcXG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1NiwgOCwgOCk7XFxuICAgIGJhY2tncm91bmQ6IHVybChcXFwiLi9pY29ucy9maXJlLnBuZ1xcXCIpLCByZ2IoMjU1LCAyMDQsIDIwNCk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogODAlO1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxufVxcblxcbkBrZXlmcmFtZXMgZmFkZUluIHtcXG4gICAgZnJvbSB7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICB9XFxuICAgIHRvIHtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgIH1cXG59XFxuXFxuLnJlc3RhcnQtZ2FtZS1jb250YWluZXIge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgICB0b3A6IDUwJTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcXG4gICAgd2lkdGg6IDEwMHZ3O1xcbiAgICBoZWlnaHQ6IDEwMHZoO1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAycmVtO1xcblxcbiAgICBhbmltYXRpb246IGZhZGVJbiAwLjVzO1xcbn1cXG5cXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciBoMiB7XFxuICAgIGZvbnQtc2l6ZTogM3JlbTtcXG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuLnJlc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uIHtcXG4gICAgcGFkZGluZzogMXJlbSAycmVtO1xcbiAgICBmb250LXNpemU6IDEuNXJlbTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOCk7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXG59XFxuXFxuLnJlc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5zdGFydC1nYW1lLWNvbnRhaW5lciB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgIHRvcDogNTAlO1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xcbiAgICB3aWR0aDogMTAxJTtcXG4gICAgaGVpZ2h0OiAxMDElO1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAyMCU7XFxufVxcblxcbi5zdGFydC1nYW1lLWNvbnRhaW5lciBidXR0b24ge1xcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XFxuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig0MCwgNDAsIDQwKTtcXG4gICAgY29sb3I6IHdoaXRlO1xcblxcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxufVxcblxcbi5zdGFydC1nYW1lLWNvbnRhaW5lciBidXR0b246aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCk7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICB1cmwgPSBTdHJpbmcodXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybCk7XG5cbiAgLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH1cblxuICAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG4gIGlmICgvW1wiJygpIFxcdFxcbl18KCUyMCkvLnRlc3QodXJsKSB8fCBvcHRpb25zLm5lZWRRdW90ZXMpIHtcbiAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KHVybC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIiksIFwiXFxcIlwiKTtcbiAgfVxuICByZXR1cm4gdXJsO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ3OTI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9yZXNldC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Jlc2V0LmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImNsYXNzIFNoaXAge1xuICAgIGNvbnN0cnVjdG9yKGxlbmd0aCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy50aW1lc0hpdCA9IDA7XG4gICAgICAgIHRoaXMuaGl0cyA9IFtdO1xuICAgICAgICB0aGlzLmlzU3VuayA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhpdCh4ID0gbnVsbCwgeSA9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdW5rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaGlwIGlzIGFscmVhZHkgc3Vua1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVzSGl0Kys7XG4gICAgICAgIHRoaXMuaGl0cy5wdXNoKHsgeCwgeSB9KTtcbiAgICAgICAgaWYgKHRoaXMuZGV0ZXJtaW5lSWZTdW5rKCkpIHRoaXMuaXNTdW5rID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0hpdCh4LCB5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpdHMuc29tZSgoaGl0KSA9PiBoaXQueCA9PT0geCAmJiBoaXQueSA9PT0geSk7XG4gICAgfVxuXG4gICAgZGV0ZXJtaW5lSWZTdW5rKCkge1xuICAgICAgICBpZiAodGhpcy50aW1lc0hpdCA9PT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoaXA7XG4iLCJpbXBvcnQgU2hpcCBmcm9tIFwiLi9zaGlwXCI7XG5cbmNsYXNzIEdhbWVCb2FyZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYm9hcmQgPSB0aGlzLmNyZWF0ZUJvYXJkKDEwKTtcbiAgICAgICAgdGhpcy5zaGlwcyA9IFtdO1xuICAgICAgICB0aGlzLm1pc3NlZEF0dGFja3MgPSBbXTtcbiAgICB9XG5cbiAgICBjcmVhdGVCb2FyZChsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYm9hcmQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYm9hcmRbaV0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgYm9hcmRbaV1bal0gPSB7IGhpdDogZmFsc2UsIHNoaXA6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm9hcmQ7XG4gICAgfVxuXG4gICAgcGxhY2VTaGlwKHgsIHksIGRpcmVjdGlvbiwgc2hpcCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUGxhY2VTaGlwKHgsIHksIGRpcmVjdGlvbiwgc2hpcCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNoaXAgY2Fubm90IGJlIHBsYWNlZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNoaXBzLnB1c2goc2hpcCk7XG4gICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFwiaG9yaXpvbnRhbFwiOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hpcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3hdW3kgKyBpXS5zaGlwID0gc2hpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidmVydGljYWxcIjpcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoaXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV1beV0uc2hpcCA9IHNoaXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuUmVjZWl2ZUF0dGFjayh4LCB5KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ib2FyZFt4XVt5XS5oaXQ7XG4gICAgfVxuXG4gICAgcmVjZWl2ZUF0dGFjayh4LCB5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWNlaXZlQXR0YWNrKHgsIHkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3BvdCBpcyBhbHJlYWR5IGhpdFwiKTtcbiAgICAgICAgdGhpcy5ib2FyZFt4XVt5XS5oaXQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5ib2FyZFt4XVt5XS5zaGlwKSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkW3hdW3ldLnNoaXAuaGl0KHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taXNzZWRBdHRhY2tzLnB1c2goeyB4LCB5IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxsU2hpcHNTdW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcy5ldmVyeSgoc2hpcCkgPT4gc2hpcC5pc1N1bmspO1xuICAgIH1cblxuICAgIGNhblBsYWNlU2hpcCh4LCB5LCBkaXJlY3Rpb24sIHNoaXApIHtcbiAgICAgICAgLy9DaGVjayBpZiBzaGlwIGlzIG91dCBvZiBib3VuZHMgb3Igb24gdG9wIG9mIGFub3RoZXIgc2hpcFxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQubGVuZ3RoIDwgeSArIHNoaXAubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoaXAubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmRbeF1beSArIGldLnNoaXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQubGVuZ3RoIDwgeCArIHNoaXAubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoaXAubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmRbeCArIGldW3ldLnNoaXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQ2hlY2sgaWYgc2hpcCBpcyByaWdodCBuZXh0IHRvIGFub3RoZXIgc2hpcFxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLmJvYXJkW3hdW3kgLSAxXSAmJiB0aGlzLmJvYXJkW3hdW3kgLSAxXS5zaGlwKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmJvYXJkW3hdW3kgKyBzaGlwLmxlbmd0aF0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4XVt5ICsgc2hpcC5sZW5ndGhdLnNoaXApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IC0xOyBpIDwgc2hpcC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCAtIDFdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCAtIDFdW3kgKyBpXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggLSAxXVt5ICsgaV0uc2hpcFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgMV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgMV1beSArIGldICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIDFdW3kgKyBpXS5zaGlwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5ib2FyZFt4IC0gMV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4IC0gMV1beV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4IC0gMV1beV0uc2hpcCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5ib2FyZFt4ICsgc2hpcC5sZW5ndGhdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIHNoaXAubGVuZ3RoXVt5XSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBzaGlwLmxlbmd0aF1beV0uc2hpcClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IGkgPCBzaGlwLmxlbmd0aCArIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV1beSAtIDFdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIGldW3kgLSAxXS5zaGlwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBpXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBpXVt5ICsgMV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV1beSArIDFdLnNoaXBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwbGFjZVNoaXBSYW5kb21seSgpIHtcbiAgICAgICAgY29uc3QgZ2V0UmFuZG9tUG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByYW5kb21YID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuICAgICAgICAgICAgY29uc3QgcmFuZG9tWSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmRvbURpcmVjdGlvbiA9XG4gICAgICAgICAgICAgICAgTWF0aC5yYW5kb20oKSA8IDAuNSA/IFwiaG9yaXpvbnRhbFwiIDogXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICAgICAgcmV0dXJuIFtyYW5kb21YLCByYW5kb21ZLCByYW5kb21EaXJlY3Rpb25dO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJvYXJkID0gdGhpcy5jcmVhdGVCb2FyZCgxMCk7XG4gICAgICAgIHRoaXMuc2hpcHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hpcDEgPSBuZXcgU2hpcCgxKTtcbiAgICAgICAgY29uc3Qgc2hpcDIgPSBuZXcgU2hpcCgxKTtcbiAgICAgICAgY29uc3Qgc2hpcDMgPSBuZXcgU2hpcCgxKTtcbiAgICAgICAgY29uc3Qgc2hpcDQgPSBuZXcgU2hpcCgxKTtcbiAgICAgICAgY29uc3Qgc2hpcDUgPSBuZXcgU2hpcCgyKTtcbiAgICAgICAgY29uc3Qgc2hpcDYgPSBuZXcgU2hpcCgyKTtcbiAgICAgICAgY29uc3Qgc2hpcDcgPSBuZXcgU2hpcCgyKTtcbiAgICAgICAgY29uc3Qgc2hpcDggPSBuZXcgU2hpcCgzKTtcbiAgICAgICAgY29uc3Qgc2hpcDkgPSBuZXcgU2hpcCgzKTtcbiAgICAgICAgY29uc3Qgc2hpcDEwID0gbmV3IFNoaXAoNCk7XG4gICAgICAgIHRoaXMuc2hpcHMucHVzaChcbiAgICAgICAgICAgIHNoaXAxLFxuICAgICAgICAgICAgc2hpcDIsXG4gICAgICAgICAgICBzaGlwMyxcbiAgICAgICAgICAgIHNoaXA0LFxuICAgICAgICAgICAgc2hpcDUsXG4gICAgICAgICAgICBzaGlwNixcbiAgICAgICAgICAgIHNoaXA3LFxuICAgICAgICAgICAgc2hpcDgsXG4gICAgICAgICAgICBzaGlwOSxcbiAgICAgICAgICAgIHNoaXAxMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2hpcHMuZm9yRWFjaCgoc2hpcCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJhbmRvbVBvc2l0aW9uO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJhbmRvbVBvc2l0aW9uID0gZ2V0UmFuZG9tUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKCF0aGlzLmNhblBsYWNlU2hpcCguLi5yYW5kb21Qb3NpdGlvbiwgc2hpcCkpO1xuICAgICAgICAgICAgdGhpcy5wbGFjZVNoaXAoLi4ucmFuZG9tUG9zaXRpb24sIHNoaXApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdhbWVCb2FyZDtcbiIsImltcG9ydCBHYW1lQm9hcmQgZnJvbSBcIi4vZ2FtZUJvYXJkXCI7XG5cbmNsYXNzIFBsYXllciB7XG4gICAgY29uc3RydWN0b3IodHlwZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOyAvL1BsYXllciBvciBDb21wdXRlclxuICAgICAgICB0aGlzLmdhbWVCb2FyZCA9IG5ldyBHYW1lQm9hcmQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsYXllcjsiLCJpbXBvcnQgXCIuL3Jlc2V0LmNzc1wiO1xuaW1wb3J0IFwiLi9zdHlsZS5jc3NcIjtcbmltcG9ydCBQbGF5ZXIgZnJvbSBcIi4vcGxheWVyXCI7XG5pbXBvcnQgRGlzcGxheSBmcm9tIFwiLi9kaXNwbGF5XCI7XG5cbmNvbnN0IHBsYXllciA9IG5ldyBQbGF5ZXIoXCJwbGF5ZXJcIik7XG5jb25zdCBjb21wdXRlciA9IG5ldyBQbGF5ZXIoXCJjb21wdXRlclwiKTtcbmNvbnN0IGRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGF5ZXIsIGNvbXB1dGVyKTtcblxuZGlzcGxheS5zdGFydGluZ1NjcmVlbigpO1xuIiwiaW1wb3J0IFNoaXAgZnJvbSBcIi4vc2hpcFwiO1xuaW1wb3J0IEdhbWVCb2FyZCBmcm9tIFwiLi9nYW1lQm9hcmRcIjtcblxuY2xhc3MgRGlzcGxheSB7XG4gICAgY29uc3RydWN0b3IocGxheWVyLCBjb21wdXRlcikge1xuICAgICAgICB0aGlzLnBsYXllciA9IHBsYXllcjtcbiAgICAgICAgdGhpcy5jb21wdXRlciA9IGNvbXB1dGVyO1xuXG4gICAgICAgIHRoaXMuY2VsbENsaWNrSGFuZGxlciA9IHRoaXMuY2VsbENsaWNrSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBkaXNwbGF5Qm9hcmRQbGF5ZXIoKSB7XG4gICAgICAgIGNvbnN0IGJvYXJkID0gdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLmJvYXJkO1xuICAgICAgICAvLyBjb25zdCBib2FyZCA9IGdhbWVCb2FyZC5ib2FyZFxuICAgICAgICBjb25zdCBib2FyZERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5ib2FyZC5wbGF5ZXJgKTtcbiAgICAgICAgYm9hcmREaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2FyZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBib2FyZFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcImNlbGxcIik7XG4gICAgICAgICAgICAgICAgY2VsbC5kYXRhc2V0LnggPSBpO1xuICAgICAgICAgICAgICAgIGNlbGwuZGF0YXNldC55ID0gajtcbiAgICAgICAgICAgICAgICBpZiAoYm9hcmRbaV1bal0uaGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcImhpdFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLnNoaXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwic2hpcFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLnNoaXAuaXNTdW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJzdW5rXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwid2F0ZXJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJvYXJkRGl2LmFwcGVuZENoaWxkKGNlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGxheUJvYXJkQ29tcHV0ZXIoKSB7XG4gICAgICAgIGNvbnN0IGJvYXJkID0gdGhpcy5jb21wdXRlci5nYW1lQm9hcmQuYm9hcmQ7XG4gICAgICAgIC8vIGNvbnN0IGJvYXJkID0gZ2FtZUJvYXJkLmJvYXJkO1xuICAgICAgICBjb25zdCBib2FyZERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5ib2FyZC5jb21wdXRlcmApO1xuICAgICAgICBib2FyZERpdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvYXJkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJvYXJkW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwiY2VsbFwiKTtcbiAgICAgICAgICAgICAgICBjZWxsLmRhdGFzZXQueCA9IGk7XG4gICAgICAgICAgICAgICAgY2VsbC5kYXRhc2V0LnkgPSBqO1xuICAgICAgICAgICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2VsbENsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLmhpdCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJoaXRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2FyZFtpXVtqXS5zaGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJzaGlwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLnNoaXAuaXNTdW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwic3Vua1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcIndhdGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJvYXJkRGl2LmFwcGVuZENoaWxkKGNlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGxheUJvYXJkQ29tcHV0ZXJFbXB0eSgpIHtcbiAgICAgICAgY29uc3QgYm9hcmQgPSB0aGlzLmNvbXB1dGVyLmdhbWVCb2FyZC5ib2FyZDtcbiAgICAgICAgY29uc3QgYm9hcmREaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYm9hcmQuY29tcHV0ZXJgKTtcbiAgICAgICAgYm9hcmREaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2FyZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBib2FyZFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcImNlbGxcIik7XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwidW5jbGlja2FibGVcIik7XG4gICAgICAgICAgICAgICAgYm9hcmREaXYuYXBwZW5kQ2hpbGQoY2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjZWxsQ2xpY2tIYW5kbGVyKGUpIHtcbiAgICAgICAgY29uc3QgeCA9IGUudGFyZ2V0LmRhdGFzZXQueDtcbiAgICAgICAgY29uc3QgeSA9IGUudGFyZ2V0LmRhdGFzZXQueTtcblxuICAgICAgICBjb25zdCBjb21wdXRlckJvYXJkID0gdGhpcy5jb21wdXRlci5nYW1lQm9hcmQuYm9hcmQ7XG4gICAgICAgIGlmIChjb21wdXRlckJvYXJkW3hdW3ldLmhpdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY29tcHV0ZXIuZ2FtZUJvYXJkLnJlY2VpdmVBdHRhY2soeCwgeSk7XG4gICAgICAgIHRoaXMuZGlzcGxheUJvYXJkQ29tcHV0ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuY29tcHV0ZXIuZ2FtZUJvYXJkLmFsbFNoaXBzU3VuaygpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplR2FtZShcIlBsYXllclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vSWYgeW91IGhpdCBhIHNoaXAgeW91IGdldCB0byBwbGF5IGFnYWluXG4gICAgICAgIGlmIChjb21wdXRlckJvYXJkW3hdW3ldLnNoaXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRSYW5kb21BdHRhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmFuZG9tQXR0YWNrWCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKTtcbiAgICAgICAgICAgIGxldCByYW5kb21BdHRhY2tZID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuXG4gICAgICAgICAgICByZXR1cm4gW3JhbmRvbUF0dGFja1gsIHJhbmRvbUF0dGFja1ldO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwbGF5ZXJCb2FyZCA9IHRoaXMucGxheWVyLmdhbWVCb2FyZC5ib2FyZDtcbiAgICAgICAgbGV0IHJhbmRvbUF0dGFja3M7XG4gICAgICAgIGxldCBpc0FscmVhZHloaXQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHJhbmRvbUF0dGFja3MgPSBnZXRSYW5kb21BdHRhY2soKTtcblxuICAgICAgICAgICAgaXNBbHJlYWR5aGl0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGxheWVyQm9hcmRbcmFuZG9tQXR0YWNrc1swXV1bcmFuZG9tQXR0YWNrc1sxXV0uaGl0KSB7XG4gICAgICAgICAgICAgICAgaXNBbHJlYWR5aGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICghdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLmNhblJlY2VpdmVBdHRhY2soLi4ucmFuZG9tQXR0YWNrcykpIHtcbiAgICAgICAgICAgIC8vICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJhbmRvbUF0dGFja3MpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocGxheWVyQm9hcmRbcmFuZG9tQXR0YWNrc1swXV1bcmFuZG9tQXR0YWNrc1sxXV0uc2hpcCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwbGF5ZXJCb2FyZFtyYW5kb21BdHRhY2tzWzBdXVtyYW5kb21BdHRhY2tzWzFdXS5oaXQpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLnJlY2VpdmVBdHRhY2soLi4ucmFuZG9tQXR0YWNrcyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZFBsYXllcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGxheWVyLmdhbWVCb2FyZC5hbGxTaGlwc1N1bmsoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemVHYW1lKFwiQ29tcHV0ZXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKFxuICAgICAgICAgICAgcGxheWVyQm9hcmRbcmFuZG9tQXR0YWNrc1swXV1bcmFuZG9tQXR0YWNrc1sxXV0uc2hpcCB8fFxuICAgICAgICAgICAgaXNBbHJlYWR5aGl0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZmluYWxpemVHYW1lKHdpbm5lcikge1xuICAgICAgICBjb25zdCBjZWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY2VsbFwiKTtcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICAgICAgY2VsbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jZWxsQ2xpY2tIYW5kbGVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdGFydEdhbWVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICByZXN0YXJ0R2FtZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwicmVzdGFydC1nYW1lLWNvbnRhaW5lclwiKTtcbiAgICAgICAgY29uc3Qgd2lubmluZ01lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDJcIik7XG4gICAgICAgIHdpbm5pbmdNZXNzYWdlLnRleHRDb250ZW50ID0gYCR7d2lubmVyfSB3b24hYDtcbiAgICAgICAgY29uc3QgcGxheUFnYWluQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgICAgcGxheUFnYWluQnV0dG9uLnRleHRDb250ZW50ID0gXCJQbGF5IEFnYWluXCI7XG4gICAgICAgIHBsYXlBZ2FpbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkID0gbmV3IEdhbWVCb2FyZCgpO1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlci5nYW1lQm9hcmQgPSBuZXcgR2FtZUJvYXJkKCk7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQucGxhY2VTaGlwUmFuZG9tbHkoKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZXIuZ2FtZUJvYXJkLnBsYWNlU2hpcFJhbmRvbWx5KCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZFBsYXllcigpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGluZ1NjcmVlbigpO1xuICAgICAgICAgICAgcmVzdGFydEdhbWVDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3RhcnRHYW1lQ29udGFpbmVyLmFwcGVuZCh3aW5uaW5nTWVzc2FnZSwgcGxheUFnYWluQnV0dG9uKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZXN0YXJ0R2FtZUNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgc3RhcnRpbmdTY3JlZW4oKSB7XG4gICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5wbGFjZVNoaXBSYW5kb21seSgpO1xuICAgICAgICB0aGlzLmNvbXB1dGVyLmdhbWVCb2FyZC5wbGFjZVNoaXBSYW5kb21seSgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZFBsYXllcigpO1xuICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZENvbXB1dGVyRW1wdHkoKTtcblxuICAgICAgICBjb25zdCBzdGFydEdhbWVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBzdGFydEdhbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInN0YXJ0LWdhbWUtY29udGFpbmVyXCIpO1xuXG4gICAgICAgIGNvbnN0IHJhbmRvbWl6ZVNoaXBzQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgICAgcmFuZG9taXplU2hpcHNCdXR0b24uY2xhc3NMaXN0LmFkZChcInJhbmRvbWl6ZS1zaGlwc1wiKTtcbiAgICAgICAgcmFuZG9taXplU2hpcHNCdXR0b24udGV4dENvbnRlbnQgPSBcIlJhbmRvbWl6ZSBTaGlwc1wiO1xuICAgICAgICByYW5kb21pemVTaGlwc0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLnBsYWNlU2hpcFJhbmRvbWx5KCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZFBsYXllcigpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGFydEdhbWVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgICBzdGFydEdhbWVCdXR0b24uY2xhc3NMaXN0LmFkZChcInN0YXJ0XCIpO1xuICAgICAgICBzdGFydEdhbWVCdXR0b24udGV4dENvbnRlbnQgPSBcIlN0YXJ0XCI7XG4gICAgICAgIHN0YXJ0R2FtZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRDb21wdXRlcigpO1xuICAgICAgICAgICAgLy8gc3RhcnRHYW1lQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgIHN0YXJ0R2FtZUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29tcHV0ZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNvbXB1dGVyLWNvbnRhaW5lclwiKTtcbiAgICAgICAgc3RhcnRHYW1lQ29udGFpbmVyLmFwcGVuZChyYW5kb21pemVTaGlwc0J1dHRvbiwgc3RhcnRHYW1lQnV0dG9uKTtcbiAgICAgICAgY29tcHV0ZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc3RhcnRHYW1lQ29udGFpbmVyKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BsYXk7XG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyIsIlVSTCIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18iLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJ1cmwiLCJvcHRpb25zIiwiU3RyaW5nIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0ZXN0Iiwic2xpY2UiLCJoYXNoIiwibmVlZFF1b3RlcyIsInJlcGxhY2UiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwibiIsImdldHRlciIsImQiLCJhIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYiIsImJhc2VVUkkiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwibmMiLCJsb2NhbHMiLCJjb25zdHJ1Y3RvciIsInRpbWVzSGl0IiwiaGl0cyIsImlzU3VuayIsImhpdCIsIngiLCJ5IiwiZGV0ZXJtaW5lSWZTdW5rIiwiaXNIaXQiLCJzb21lIiwiYm9hcmQiLCJjcmVhdGVCb2FyZCIsInNoaXBzIiwibWlzc2VkQXR0YWNrcyIsImoiLCJzaGlwIiwicGxhY2VTaGlwIiwiZGlyZWN0aW9uIiwiY2FuUGxhY2VTaGlwIiwiY2FuUmVjZWl2ZUF0dGFjayIsInJlY2VpdmVBdHRhY2siLCJhbGxTaGlwc1N1bmsiLCJldmVyeSIsInBsYWNlU2hpcFJhbmRvbWx5Iiwic2hpcDEiLCJzaGlwMiIsInNoaXAzIiwic2hpcDQiLCJzaGlwNSIsInNoaXA2Iiwic2hpcDciLCJzaGlwOCIsInNoaXA5Iiwic2hpcDEwIiwiZm9yRWFjaCIsInJhbmRvbVBvc2l0aW9uIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwidHlwZSIsImdhbWVCb2FyZCIsInBsYXllciIsImNvbXB1dGVyIiwiY2VsbENsaWNrSGFuZGxlciIsImJpbmQiLCJkaXNwbGF5Qm9hcmRQbGF5ZXIiLCJib2FyZERpdiIsImlubmVySFRNTCIsImNlbGwiLCJjbGFzc0xpc3QiLCJhZGQiLCJkYXRhc2V0IiwiZGlzcGxheUJvYXJkQ29tcHV0ZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzcGxheUJvYXJkQ29tcHV0ZXJFbXB0eSIsImNvbXB1dGVyQm9hcmQiLCJmaW5hbGl6ZUdhbWUiLCJwbGF5ZXJCb2FyZCIsInJhbmRvbUF0dGFja3MiLCJpc0FscmVhZHloaXQiLCJ3aW5uZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlc3RhcnRHYW1lQ29udGFpbmVyIiwid2lubmluZ01lc3NhZ2UiLCJ0ZXh0Q29udGVudCIsInBsYXlBZ2FpbkJ1dHRvbiIsInN0YXJ0aW5nU2NyZWVuIiwiYXBwZW5kIiwiYm9keSIsInN0YXJ0R2FtZUNvbnRhaW5lciIsInJhbmRvbWl6ZVNoaXBzQnV0dG9uIiwic3RhcnRHYW1lQnV0dG9uIiwiY29tcHV0ZXJDb250YWluZXIiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +(()=>{"use strict";var n={430:(n,e,t)=>{t.d(e,{A:()=>s});var r=t(354),a=t.n(r),o=t(314),i=t.n(o)()(a());i.push([n.id,"html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video, button {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}","",{version:3,sources:["webpack://./src/reset.css"],names:[],mappings:"AAAA;;;;;;;;;;;;;CAaC,SAAS;CACT,UAAU;CACV,SAAS;CACT,eAAe;CACf,aAAa;CACb,wBAAwB;AACzB;AACA,gDAAgD;AAChD;;CAEC,cAAc;AACf;AACA;CACC,cAAc;AACf;AACA;CACC,gBAAgB;AACjB;AACA;CACC,YAAY;AACb;AACA;;CAEC,WAAW;CACX,aAAa;AACd;AACA;CACC,yBAAyB;CACzB,iBAAiB;AAClB",sourcesContent:["html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video, button {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}"],sourceRoot:""}]);const s=i},208:(n,e,t)=>{t.d(e,{A:()=>m});var r=t(354),a=t.n(r),o=t(314),i=t.n(o),s=t(417),A=t.n(s),l=new URL(t(126),t.b),d=new URL(t(356),t.b),c=new URL(t(837),t.b),h=i()(a()),p=A()(l),u=A()(d),g=A()(c);h.push([n.id,`* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: "Roboto Mono", monospace;\n font-optical-sizing: auto;\n font-weight: 500;\n font-style: normal;\n\n display: flex;\n flex-direction: column;\n /* align-items: center; */\n justify-content: center;\n /* margin: -3vw; */\n /* height: 100vh; */\n\n position: relative;\n}\n\n.header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n font-size: calc(2.5rem + 1vw);\n}\n\n.game-container {\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-wrap: wrap;\n /* margin-top: 20vh; */\n /* width: 70vw; */\n}\n\n.player-container,\n.computer-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n position: relative;\n /* margin: 2rem; */\n}\n\n.player-container > h4,\n.computer-container > h4 {\n padding: 1rem;\n font-size: 1.5rem;\n}\n\n.board {\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-template-rows: repeat(10, 1fr);\n width: clamp(400px, 30vw, 800px);\n height: clamp(400px, 30vw, 800px);\n border: 2px solid black;\n}\n\n.cell {\n border: 1px solid black;\n}\n\n.computer .cell:hover {\n background-image: url(${p});\n background-size: cover;\n background-size: 80%;\n background-repeat: no-repeat;\n background-position: center;\n cursor: pointer;\n}\n\n.computer .cell.hit:hover {\n cursor: not-allowed;\n}\n\n.player .cell.ship {\n background-color: rgb(127, 186, 39);\n /* border: 2px solid rgb(0, 79, 0); */\n}\n\n.cell.water.hit {\n background-image: url(${u});\n background-size: 120%;\n background-position: 0 10px;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit {\n border: 2px solid rgb(0, 67, 0);\n background: url(${g}), greenyellow;\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit.sunk {\n border: 2px solid rgb(156, 8, 8);\n background: url(${g}), rgb(255, 204, 204);\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.restart-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 100vw;\n height: 100vh;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 2rem;\n\n animation: fadeIn 0.5s;\n}\n\n.restart-game-container h2 {\n font-size: 3rem;\n font-weight: 700;\n}\n\n.restart-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n background-color: rgb(0, 0, 0, 0.8);\n color: white;\n border-radius: 5px;\n cursor: pointer;\n\n transition: background-color 0.3s;\n}\n\n.restart-game-container button:hover {\n background-color: rgb(0, 0, 0, 0.9);\n}\n\n.start-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 101%;\n height: 101%;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20%;\n}\n\n.start-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n border-radius: 0.5rem;\n background-color: rgb(40, 40, 40);\n color: white;\n\n transition: background-color 0.3s;\n}\n\n.start-game-container button:hover {\n background-color: rgb(0, 0, 0);\n}\n\n.valid-move {\n background-color: green;\n}\n\n.invalid-move {\n background-color: red;\n}`,"",{version:3,sources:["webpack://./src/style.css"],names:[],mappings:"AAAA;IACI,sBAAsB;AAC1B;;AAEA;IACI,qCAAqC;IACrC,yBAAyB;IACzB,gBAAgB;IAChB,kBAAkB;;IAElB,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;;IAEnB,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,aAAa;IACb,6BAA6B;AACjC;;AAEA;IACI,aAAa;IACb,6BAA6B;IAC7B,mBAAmB;IACnB,eAAe;IACf,sBAAsB;IACtB,iBAAiB;AACrB;;AAEA;;IAEI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;;IAEnB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;;IAEI,aAAa;IACb,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,sCAAsC;IACtC,mCAAmC;IACnC,gCAAgC;IAChC,iCAAiC;IACjC,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,yDAA2C;IAC3C,sBAAsB;IACtB,oBAAoB;IACpB,4BAA4B;IAC5B,2BAA2B;IAC3B,eAAe;AACnB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,mCAAmC;IACnC,qCAAqC;AACzC;;AAEA;IACI,yDAAwC;IACxC,qBAAqB;IACrB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,+BAA+B;IAC/B,gEAAgD;IAChD,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,gCAAgC;IAChC,uEAAuD;IACvD,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI;QACI,UAAU;IACd;IACA;QACI,UAAU;IACd;AACJ;;AAEA;IACI,kBAAkB;IAClB,gCAAgC;IAChC,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,YAAY;IACZ,aAAa;;IAEb,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,SAAS;;IAET,sBAAsB;AAC1B;;AAEA;IACI,eAAe;IACf,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,mCAAmC;IACnC,YAAY;IACZ,kBAAkB;IAClB,eAAe;;IAEf,iCAAiC;AACrC;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,kBAAkB;IAClB,gCAAgC;IAChC,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,WAAW;IACX,YAAY;;IAEZ,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,iCAAiC;IACjC,YAAY;;IAEZ,iCAAiC;AACrC;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,qBAAqB;AACzB",sourcesContent:['* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: "Roboto Mono", monospace;\n font-optical-sizing: auto;\n font-weight: 500;\n font-style: normal;\n\n display: flex;\n flex-direction: column;\n /* align-items: center; */\n justify-content: center;\n /* margin: -3vw; */\n /* height: 100vh; */\n\n position: relative;\n}\n\n.header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n font-size: calc(2.5rem + 1vw);\n}\n\n.game-container {\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-wrap: wrap;\n /* margin-top: 20vh; */\n /* width: 70vw; */\n}\n\n.player-container,\n.computer-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n position: relative;\n /* margin: 2rem; */\n}\n\n.player-container > h4,\n.computer-container > h4 {\n padding: 1rem;\n font-size: 1.5rem;\n}\n\n.board {\n display: grid;\n grid-template-columns: repeat(10, 1fr);\n grid-template-rows: repeat(10, 1fr);\n width: clamp(400px, 30vw, 800px);\n height: clamp(400px, 30vw, 800px);\n border: 2px solid black;\n}\n\n.cell {\n border: 1px solid black;\n}\n\n.computer .cell:hover {\n background-image: url("./icons/target.png");\n background-size: cover;\n background-size: 80%;\n background-repeat: no-repeat;\n background-position: center;\n cursor: pointer;\n}\n\n.computer .cell.hit:hover {\n cursor: not-allowed;\n}\n\n.player .cell.ship {\n background-color: rgb(127, 186, 39);\n /* border: 2px solid rgb(0, 79, 0); */\n}\n\n.cell.water.hit {\n background-image: url("./icons/sea.png");\n background-size: 120%;\n background-position: 0 10px;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit {\n border: 2px solid rgb(0, 67, 0);\n background: url("./icons/fire.png"), greenyellow;\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.cell.ship.hit.sunk {\n border: 2px solid rgb(156, 8, 8);\n background: url("./icons/fire.png"), rgb(255, 204, 204);\n background-size: 80%;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.restart-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 100vw;\n height: 100vh;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 2rem;\n\n animation: fadeIn 0.5s;\n}\n\n.restart-game-container h2 {\n font-size: 3rem;\n font-weight: 700;\n}\n\n.restart-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n background-color: rgb(0, 0, 0, 0.8);\n color: white;\n border-radius: 5px;\n cursor: pointer;\n\n transition: background-color 0.3s;\n}\n\n.restart-game-container button:hover {\n background-color: rgb(0, 0, 0, 0.9);\n}\n\n.start-game-container {\n position: absolute;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n backdrop-filter: blur(2px);\n width: 101%;\n height: 101%;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 20%;\n}\n\n.start-game-container button {\n padding: 1rem 2rem;\n font-size: 1.5rem;\n border-radius: 0.5rem;\n background-color: rgb(40, 40, 40);\n color: white;\n\n transition: background-color 0.3s;\n}\n\n.start-game-container button:hover {\n background-color: rgb(0, 0, 0);\n}\n\n.valid-move {\n background-color: green;\n}\n\n.invalid-move {\n background-color: red;\n}'],sourceRoot:""}]);const m=h},314:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",r=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),r&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),r&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,r,a,o){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var s=0;s0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=o),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),a&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=a):d[4]="".concat(a)),e.push(d))}},e}},417:n=>{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}},354:n=>{n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(a," */");return[e].concat([o]).join("\n")}return[e].join("\n")}},72:n=>{var e=[];function t(n){for(var t=-1,r=0;r{var e={};n.exports=function(n,t){var r=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(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540:n=>{n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56:(n,e,t)=>{n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825:n=>{n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var a=void 0!==t.layer;a&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,a&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(r,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113:n=>{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))}}},837:n=>{n.exports="data:image/png;base64,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"},356:n=>{n.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAHYAAAB2AH6XKZyAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABRtJREFUeJztmztsHEUYgL/Z27uzz/b5TRQTHGggiQugQYooaBAUiCSA4gYU6lAgBDQUSKFCoiESQqHmEeJDeYh0hBSIFJFCgVDsXHAeJMJ54LN9Z99jn/NTJAd2OPvetyjZr92d+f75d3Z2/t07CAkJCQl5cFFBiVPTEiNGPwAOuckJ5XTSLyJKKSUqlZYTAi8B51GcUB6fTU6oxXZIj87IZs9gP7ALmADMu4c84LwI3xuaQ5MT6lY7/IcvykhEeFvBboEdCCfVVFo0a2dCDsVHk49zUCklrRCLiEr9zlsInwCJKqcXFby/9wm+aKk/zXsoPgSSqw+pqbRUlCjFMcti374nVaEZ+clfJFHq5bDA7roaCsdVL69PPqJKzfhT09JLhK/X8xvr+oVX43FOffObDDYqP3ZBhou9/Fj34AEUr0iBU6lpGWrGLxFOb+RfNwF32WlGOfPtBXm0XvnRGdnqKM4AO+ttu4pnJcKZ1LSM19swlZbHXMXPwDMbnVctAaDYYRicnbogL9cqn7ooezyDcwq21dpmA7ZLhHOptOyqtcGRtOwWOAtsr3buumtARYTjSjg0s53TB5TSaw6JqCNpdhqKd4HXau6zDhR8h/Dp3m2cvXeBPCBibEvzvFLsB/bU3GddCfg3ktsIvwLzd+JiBHgaeKjuvhphrR9gFMVTCJvq7qqhBNxHVF8D7nPCBAQdQNCECQg6gKAxfbmTBdXhwlgEyhuJIP3m+dsOCuiOKpJxg+GEgWm0JxpPCwtFTc7SWJ5Qfv6W/X1xg5EO+00AAYquUHR9/ir4jPWZDCWMlr0tEWCxqLmx4qEr7DpW++cLPmNJk+Hu1t2dG/nNe0/WAn8ue6zYBuMDJs1eDC1wPeeRs3T1k8v+nEfeNhjvN5u+Nar5101zztZcWXLxm9gn+gJXltyaB7+arKW53AH/hvOs4AizCy5OpXlbBVcLlxZcCk7jIyg4d/pop7/qjWZ7wmzGZbmOq7hia2YzHpbXfJlhecJsxiNnt8f/nzWgEp6Gq1mPgS6D0Z4IiWjlG7PoCPNFn2wDU35jv3BtyaO/22A00Vp/TQkok7U0WUsTNRTdUYVplAOEkiu4DUzVWhEgW9JkS/f4BTxp3F9XAsq4WnDt4KroVvof+K1wmICgAwiaMAFBBxA0hpbWPrPrQYsmaL85c+sahlLEozGS8QSDiT5MI9IWoad9loorLNtFLMehXBAbShE3YyS7Ou83AbQIJcem5NjM53NsTg4xmOhrqXypuMLN5cWKV1yLUHJtSm7n/RXKYc1cLkPeKfFw/yhGk/WoFmEuO0/Oqu0j82r/loFRVJNvJar5190J5koFPN9nfHATEaOxtdLXmutLtyk4Vt1ty/6tQ5swVPv8VcphiysLN3B9v2655/tcXbjZ0ODX+DM32+qvoRx2uZyZY8Wu/XcKK3aJS5k5LK/5n/1YnsPlhTnybfLXWA77XFu8xUB3L8M9Sbqj8crBujbzhWVypXzNwdbk933+uOsf6emnKxprmb++criUJ1vKE41E6IrG/3lceb6P5dkNTdXG/CZd0VhL/I2Vw76P6xcbadoSXN/D9b2W9BVuhYMOIGjCBAQdQNCECQg6gKAJE9DxD/P/J5TCSERjwb2SCZgeM6aNLX3Jg8H9bSJAFIz1932uAN45lflyLpt7w/bcByIVMTMqW5L9Xx18ceTNNQP+4If557xIZCyowDqB6fs3Pn5h9Keg4wgJCQkJ+T/wNxL4/hbh21SVAAAAAElFTkSuQmCC"},126:n=>{n.exports="data:image/png;base64,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"}},e={};function t(r){var a=e[r];if(void 0!==a)return a.exports;var o=e[r]={id:r,exports:{}};return n[r](o,o.exports,t),o.exports}t.m=n,t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{var n=t(72),e=t.n(n),r=t(825),a=t.n(r),o=t(659),i=t.n(o),s=t(56),A=t.n(s),l=t(540),d=t.n(l),c=t(113),h=t.n(c),p=t(430),u={};u.styleTagTransform=h(),u.setAttributes=A(),u.insert=i().bind(null,"head"),u.domAPI=a(),u.insertStyleElement=d(),e()(p.A,u),p.A&&p.A.locals&&p.A.locals;var g=t(208),m={};m.styleTagTransform=h(),m.setAttributes=A(),m.insert=i().bind(null,"head"),m.domAPI=a(),m.insertStyleElement=d(),e()(g.A,m),g.A&&g.A.locals&&g.A.locals;const B=class{constructor(n){this.length=n,this.timesHit=0,this.hits=[],this.isSunk=!1,this.coordinates=null,this.direction=null}hit(n=null,e=null){if(this.isSunk)throw new Error("Ship is already sunk");this.timesHit++,this.hits.push({x:n,y:e}),this.determineIfSunk()&&(this.isSunk=!0)}isHit(n,e){return this.hits.some((t=>t.x===n&&t.y===e))}determineIfSunk(){return this.timesHit===this.length}getShipDataJSON(){return JSON.stringify({coordinates:this.coordinates,direction:this.direction,length:this.length,allCellCoordinates:this.getAllCellCoordinates()})}getAllCellCoordinates(){const n=[];switch(this.direction){case"horizontal":for(let e=0;en.isSunk))}canPlaceShip(n,e,t,r){if("horizontal"===t){if(this.board.length{let e;do{e=[Math.floor(10*Math.random()),Math.floor(10*Math.random()),Math.random()<.5?"horizontal":"vertical"]}while(!this.canPlaceShip(...e,n));this.placeShip(...e,n)}))}},C=class{constructor(n){this.type=n,this.gameBoard=new b}};new class{constructor(n,e){this.player=n,this.computer=e,this.cellClickHandler=this.cellClickHandler.bind(this),this.dropHandler=this.dropHandler.bind(this),this.dragOverHandler=this.dragOverHandler.bind(this),this.dragStartHandler=this.dragStartHandler.bind(this),this.dragEndHandler=this.dragEndHandler.bind(this),this.dragData=null,this.validDragging=!1}displayBoardPlayer(){const n=this.player.gameBoard.board,e=document.querySelector(".board.player");e.innerHTML="";for(let t=0;tn.classList.remove("valid-move","invalid-move"))),console.log("dragover");const t=this.dragData,r=JSON.parse(t);if(!r)return;const a=new B(r.length),o=Number(n.target.dataset.x),i=Number(n.target.dataset.y);if(isNaN(o)||isNaN(i))return;const s=[];for(let n=0;n{n.classList.add("valid-move")})):s.forEach((n=>{n.classList.add("invalid-move")}))}dropHandler(n){n.preventDefault(),this.validDragging=!0;const e=document.querySelectorAll(".valid-move, .invalid-move");e&&e.forEach((n=>n.classList.remove("valid-move","invalid-move")));const t=n.dataTransfer.getData("text/plain");let r;try{r=JSON.parse(t)}catch(n){return void(this.dragData=null)}const a=new B(r.length);a.direction=r.direction;const o=Number(n.target.dataset.x),i=Number(n.target.dataset.y);if(!isNaN(o)&&!isNaN(i)){if(this.player.gameBoard.canPlaceShip(o,i,a.direction,a))this.player.gameBoard.placeShip(o,i,a.direction,a),this.player.gameBoard.ships=this.player.gameBoard.ships.filter((n=>this.player.gameBoard.board[r.coordinates.x][r.coordinates.y].ship!==n));else{const n=new B(r.length);this.player.gameBoard.placeShip(r.coordinates.x,r.coordinates.y,r.direction,n)}this.displayBoardPlayer()}}dragEndHandler(n){if(this.validDragging)return;console.log("dragend");const e=this.dragData,t=JSON.parse(e),r=new B(t.length);this.player.gameBoard.placeShip(t.coordinates.x,t.coordinates.y,t.direction,r),this.dragData=null,this.validDragging=!1,this.displayBoardPlayer()}displayBoardComputer(){const n=this.computer.gameBoard.board,e=document.querySelector(".board.computer");e.innerHTML="";for(let t=0;t{n.removeEventListener("click",this.cellClickHandler)}));const e=document.createElement("div");e.classList.add("restart-game-container");const t=document.createElement("h2");t.textContent=`${n} won!`;const r=document.createElement("button");r.textContent="Play Again",r.addEventListener("click",(()=>{this.player.gameBoard=new b,this.computer.gameBoard=new b,this.player.gameBoard.placeShipRandomly(),this.computer.gameBoard.placeShipRandomly(),this.displayBoardPlayer(),this.startingScreen(),e.remove()})),e.append(t,r),document.body.appendChild(e)}startingScreen(){document.body.classList.add("starting-screen"),this.player.gameBoard.placeShipRandomly(),this.computer.gameBoard.placeShipRandomly(),this.displayBoardPlayer(),this.displayBoardComputerEmpty();const n=document.createElement("div");n.classList.add("start-game-container");const e=document.createElement("button");e.classList.add("randomize-ships"),e.textContent="Randomize Ships",e.addEventListener("click",(()=>{this.player.gameBoard.placeShipRandomly(),this.displayBoardPlayer()}));const t=document.createElement("button");t.classList.add("start"),t.textContent="Start",t.addEventListener("click",(()=>{document.body.classList.remove("starting-screen"),this.displayBoardPlayer(),this.displayBoardComputer(),n.remove()}));const r=document.querySelector(".computer-container");n.append(e,t),r.appendChild(n)}}(new C("player"),new C("computer")).startingScreen()})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWMsVUFDcERvSixFQUFxQjVDLFVBQVVDLElBQUksbUJBQ25DMkMsRUFBcUJMLFlBQWMsa0JBQ25DSyxFQUFxQnRDLGlCQUFpQixTQUFTLEtBQzNDaE0sS0FBSzRLLE9BQU9ELFVBQVVsQixvQkFDdEJ6SixLQUFLc0wsb0JBQW9CLElBRzdCLE1BQU1pRCxFQUFrQmhLLFNBQVNXLGNBQWMsVUFDL0NxSixFQUFnQjdDLFVBQVVDLElBQUksU0FDOUI0QyxFQUFnQk4sWUFBYyxRQUM5Qk0sRUFBZ0J2QyxpQkFBaUIsU0FBUyxLQUN0Q3pILFNBQVNzSCxLQUFLSCxVQUFVL0gsT0FBTyxtQkFDL0IzRCxLQUFLc0wscUJBQ0x0TCxLQUFLdU4sdUJBRUxjLEVBQW1CMUssUUFBUSxJQUcvQixNQUFNNkssRUFBb0JqSyxTQUFTQyxjQUFjLHVCQUNqRDZKLEVBQW1CRCxPQUFPRSxFQUFzQkMsR0FDaERDLEVBQWtCeEosWUFBWXFKLEVBQ2xDLEdEellXLElBQUksRUFBTyxVQUNULElBQUksRUFBTyxhQUdwQkYsZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvcmVzZXQuY3NzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3Qvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3Qvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9yZXNldC5jc3M/ZWRlMCIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvc3R5bGUuY3NzPzcxNjMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vc3JjL3NoaXAuanMiLCJ3ZWJwYWNrOi8vbXktd2VicGFjay1wcm9qZWN0Ly4vc3JjL2dhbWVCb2FyZC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvcGxheWVyLmpzIiwid2VicGFjazovL215LXdlYnBhY2stcHJvamVjdC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS13ZWJwYWNrLXByb2plY3QvLi9zcmMvZGlzcGxheS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbmIsIHUsIGksIGNlbnRlcixcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsIFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvLCBidXR0b24ge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGJvcmRlcjogMDtcblx0Zm9udC1zaXplOiAxMDAlO1xuXHRmb250OiBpbmhlcml0O1xuXHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG4vKiBIVE1MNSBkaXNwbGF5LXJvbGUgcmVzZXQgZm9yIG9sZGVyIGJyb3dzZXJzICovXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLCBcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSB7XG5cdGxpbmUtaGVpZ2h0OiAxO1xufVxub2wsIHVsIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcbn1cbmJsb2NrcXVvdGUsIHEge1xuXHRxdW90ZXM6IG5vbmU7XG59XG5ibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlcixcbnE6YmVmb3JlLCBxOmFmdGVyIHtcblx0Y29udGVudDogJyc7XG5cdGNvbnRlbnQ6IG5vbmU7XG59XG50YWJsZSB7XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cdGJvcmRlci1zcGFjaW5nOiAwO1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3Jlc2V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7Ozs7Ozs7Ozs7OztDQWFDLFNBQVM7Q0FDVCxVQUFVO0NBQ1YsU0FBUztDQUNULGVBQWU7Q0FDZixhQUFhO0NBQ2Isd0JBQXdCO0FBQ3pCO0FBQ0EsZ0RBQWdEO0FBQ2hEOztDQUVDLGNBQWM7QUFDZjtBQUNBO0NBQ0MsY0FBYztBQUNmO0FBQ0E7Q0FDQyxnQkFBZ0I7QUFDakI7QUFDQTtDQUNDLFlBQVk7QUFDYjtBQUNBOztDQUVDLFdBQVc7Q0FDWCxhQUFhO0FBQ2Q7QUFDQTtDQUNDLHlCQUF5QjtDQUN6QixpQkFBaUI7QUFDbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsIFxcbmZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgXFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvLCBidXR0b24ge1xcblxcdG1hcmdpbjogMDtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdGJvcmRlcjogMDtcXG5cXHRmb250LXNpemU6IDEwMCU7XFxuXFx0Zm9udDogaW5oZXJpdDtcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLCBcXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5ib2R5IHtcXG5cXHRsaW5lLWhlaWdodDogMTtcXG59XFxub2wsIHVsIHtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5ibG9ja3F1b3RlLCBxIHtcXG5cXHRxdW90ZXM6IG5vbmU7XFxufVxcbmJsb2NrcXVvdGU6YmVmb3JlLCBibG9ja3F1b3RlOmFmdGVyLFxcbnE6YmVmb3JlLCBxOmFmdGVyIHtcXG5cXHRjb250ZW50OiAnJztcXG5cXHRjb250ZW50OiBub25lO1xcbn1cXG50YWJsZSB7XFxuXFx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG5cXHRib3JkZXItc3BhY2luZzogMDtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL3RhcmdldC5wbmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL3NlYS5wbmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2ZpcmUucG5nXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYCoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmJvZHkge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIG1vbm9zcGFjZTtcbiAgICBmb250LW9wdGljYWwtc2l6aW5nOiBhdXRvO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8qIGFsaWduLWl0ZW1zOiBjZW50ZXI7ICovXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgLyogbWFyZ2luOiAtM3Z3OyAqL1xuICAgIC8qIGhlaWdodDogMTAwdmg7ICovXG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAycmVtO1xuICAgIGZvbnQtc2l6ZTogY2FsYygyLjVyZW0gKyAxdncpO1xufVxuXG4uZ2FtZS1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLyogbWFyZ2luLXRvcDogMjB2aDsgKi9cbiAgICAvKiB3aWR0aDogNzB2dzsgKi9cbn1cblxuLnBsYXllci1jb250YWluZXIsXG4uY29tcHV0ZXItY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvKiBtYXJnaW46IDJyZW07ICovXG59XG5cbi5wbGF5ZXItY29udGFpbmVyID4gaDQsXG4uY29tcHV0ZXItY29udGFpbmVyID4gaDQge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi5ib2FyZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMCwgMWZyKTtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgxMCwgMWZyKTtcbiAgICB3aWR0aDogY2xhbXAoNDAwcHgsIDMwdncsIDgwMHB4KTtcbiAgICBoZWlnaHQ6IGNsYW1wKDQwMHB4LCAzMHZ3LCA4MDBweCk7XG4gICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XG59XG5cbi5jZWxsIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbn1cblxuLmNvbXB1dGVyIC5jZWxsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19ffSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jb21wdXRlciAuY2VsbC5oaXQ6aG92ZXIge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5wbGF5ZXIgLmNlbGwuc2hpcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyNywgMTg2LCAzOSk7XG4gICAgLyogYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDc5LCAwKTsgKi9cbn1cblxuLmNlbGwud2F0ZXIuaGl0IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19ffSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMjAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMTBweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4uY2VsbC5zaGlwLmhpdCB7XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDY3LCAwKTtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19ffSksIGdyZWVueWVsbG93O1xuICAgIGJhY2tncm91bmQtc2l6ZTogODAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4uY2VsbC5zaGlwLmhpdC5zdW5rIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTU2LCA4LCA4KTtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19ffSksIHJnYigyNTUsIDIwNCwgMjA0KTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDB2aDtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMnJlbTtcblxuICAgIGFuaW1hdGlvbjogZmFkZUluIDAuNXM7XG59XG5cbi5yZXN0YXJ0LWdhbWUtY29udGFpbmVyIGgyIHtcbiAgICBmb250LXNpemU6IDNyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnJlc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOCk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG59XG5cbi5yZXN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDAsIDAuOSk7XG59XG5cbi5zdGFydC1nYW1lLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcbiAgICB3aWR0aDogMTAxJTtcbiAgICBoZWlnaHQ6IDEwMSU7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDIwJTtcbn1cblxuLnN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbiB7XG4gICAgcGFkZGluZzogMXJlbSAycmVtO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDAsIDQwLCA0MCk7XG4gICAgY29sb3I6IHdoaXRlO1xuXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xufVxuXG4uc3RhcnQtZ2FtZS1jb250YWluZXIgYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCk7XG59XG5cbi52YWxpZC1tb3ZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtcbn1cblxuLmludmFsaWQtbW92ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLHFDQUFxQztJQUNyQyx5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjs7SUFFbEIsYUFBYTtJQUNiLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLGtCQUFrQjtJQUNsQixtQkFBbUI7O0lBRW5CLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYiw2QkFBNkI7QUFDakM7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsNkJBQTZCO0lBQzdCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLGlCQUFpQjtBQUNyQjs7QUFFQTs7SUFFSSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLG1CQUFtQjs7SUFFbkIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtBQUN0Qjs7QUFFQTs7SUFFSSxhQUFhO0lBQ2IsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksYUFBYTtJQUNiLHNDQUFzQztJQUN0QyxtQ0FBbUM7SUFDbkMsZ0NBQWdDO0lBQ2hDLGlDQUFpQztJQUNqQyx1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSx1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSx5REFBMkM7SUFDM0Msc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQiw0QkFBNEI7SUFDNUIsMkJBQTJCO0lBQzNCLGVBQWU7QUFDbkI7O0FBRUE7SUFDSSxtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSxtQ0FBbUM7SUFDbkMscUNBQXFDO0FBQ3pDOztBQUVBO0lBQ0kseURBQXdDO0lBQ3hDLHFCQUFxQjtJQUNyQiwyQkFBMkI7SUFDM0IsNEJBQTRCO0FBQ2hDOztBQUVBO0lBQ0ksK0JBQStCO0lBQy9CLGdFQUFnRDtJQUNoRCxvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtBQUNoQzs7QUFFQTtJQUNJLGdDQUFnQztJQUNoQyx1RUFBdUQ7SUFDdkQsb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQiw0QkFBNEI7QUFDaEM7O0FBRUE7SUFDSTtRQUNJLFVBQVU7SUFDZDtJQUNBO1FBQ0ksVUFBVTtJQUNkO0FBQ0o7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsZ0NBQWdDO0lBQ2hDLFFBQVE7SUFDUixTQUFTO0lBQ1QsMEJBQTBCO0lBQzFCLFlBQVk7SUFDWixhQUFhOztJQUViLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixTQUFTOztJQUVULHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLG1DQUFtQztJQUNuQyxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLGVBQWU7O0lBRWYsaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0ksbUNBQW1DO0FBQ3ZDOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGdDQUFnQztJQUNoQyxRQUFRO0lBQ1IsU0FBUztJQUNULDBCQUEwQjtJQUMxQixXQUFXO0lBQ1gsWUFBWTs7SUFFWixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsUUFBUTtBQUNaOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsaUNBQWlDO0lBQ2pDLFlBQVk7O0lBRVosaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0ksOEJBQThCO0FBQ2xDOztBQUVBO0lBQ0ksdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0kscUJBQXFCO0FBQ3pCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIioge1xcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5ib2R5IHtcXG4gICAgZm9udC1mYW1pbHk6IFxcXCJSb2JvdG8gTW9ub1xcXCIsIG1vbm9zcGFjZTtcXG4gICAgZm9udC1vcHRpY2FsLXNpemluZzogYXV0bztcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAvKiBhbGlnbi1pdGVtczogY2VudGVyOyAqL1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgLyogbWFyZ2luOiAtM3Z3OyAqL1xcbiAgICAvKiBoZWlnaHQ6IDEwMHZoOyAqL1xcblxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5oZWFkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMnJlbTtcXG4gICAgZm9udC1zaXplOiBjYWxjKDIuNXJlbSArIDF2dyk7XFxufVxcblxcbi5nYW1lLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBmbGV4LXdyYXA6IHdyYXA7XFxuICAgIC8qIG1hcmdpbi10b3A6IDIwdmg7ICovXFxuICAgIC8qIHdpZHRoOiA3MHZ3OyAqL1xcbn1cXG5cXG4ucGxheWVyLWNvbnRhaW5lcixcXG4uY29tcHV0ZXItY29udGFpbmVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAvKiBtYXJnaW46IDJyZW07ICovXFxufVxcblxcbi5wbGF5ZXItY29udGFpbmVyID4gaDQsXFxuLmNvbXB1dGVyLWNvbnRhaW5lciA+IGg0IHtcXG4gICAgcGFkZGluZzogMXJlbTtcXG4gICAgZm9udC1zaXplOiAxLjVyZW07XFxufVxcblxcbi5ib2FyZCB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEwLCAxZnIpO1xcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgxMCwgMWZyKTtcXG4gICAgd2lkdGg6IGNsYW1wKDQwMHB4LCAzMHZ3LCA4MDBweCk7XFxuICAgIGhlaWdodDogY2xhbXAoNDAwcHgsIDMwdncsIDgwMHB4KTtcXG4gICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XFxufVxcblxcbi5jZWxsIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XFxufVxcblxcbi5jb21wdXRlciAuY2VsbDpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi9pY29ucy90YXJnZXQucG5nXFxcIik7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogODAlO1xcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmNvbXB1dGVyIC5jZWxsLmhpdDpob3ZlciB7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5wbGF5ZXIgLmNlbGwuc2hpcCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMjcsIDE4NiwgMzkpO1xcbiAgICAvKiBib3JkZXI6IDJweCBzb2xpZCByZ2IoMCwgNzksIDApOyAqL1xcbn1cXG5cXG4uY2VsbC53YXRlci5oaXQge1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4vaWNvbnMvc2VhLnBuZ1xcXCIpO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEyMCU7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMTBweDtcXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuXFxuLmNlbGwuc2hpcC5oaXQge1xcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMCwgNjcsIDApO1xcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXFxcIi4vaWNvbnMvZmlyZS5wbmdcXFwiKSwgZ3JlZW55ZWxsb3c7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogODAlO1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxufVxcblxcbi5jZWxsLnNoaXAuaGl0LnN1bmsge1xcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTU2LCA4LCA4KTtcXG4gICAgYmFja2dyb3VuZDogdXJsKFxcXCIuL2ljb25zL2ZpcmUucG5nXFxcIiksIHJnYigyNTUsIDIwNCwgMjA0KTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiA4MCU7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuXFxuQGtleWZyYW1lcyBmYWRlSW4ge1xcbiAgICBmcm9tIHtcXG4gICAgICAgIG9wYWNpdHk6IDA7XFxuICAgIH1cXG4gICAgdG8ge1xcbiAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgfVxcbn1cXG5cXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgIHRvcDogNTAlO1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xcbiAgICB3aWR0aDogMTAwdnc7XFxuICAgIGhlaWdodDogMTAwdmg7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDJyZW07XFxuXFxuICAgIGFuaW1hdGlvbjogZmFkZUluIDAuNXM7XFxufVxcblxcbi5yZXN0YXJ0LWdhbWUtY29udGFpbmVyIGgyIHtcXG4gICAgZm9udC1zaXplOiAzcmVtO1xcbiAgICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciBidXR0b24ge1xcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XFxuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCwgMC44KTtcXG4gICAgY29sb3I6IHdoaXRlO1xcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xcbn1cXG5cXG4ucmVzdGFydC1nYW1lLWNvbnRhaW5lciBidXR0b246aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCwgMC45KTtcXG59XFxuXFxuLnN0YXJ0LWdhbWUtY29udGFpbmVyIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgdG9wOiA1MCU7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XFxuICAgIHdpZHRoOiAxMDElO1xcbiAgICBoZWlnaHQ6IDEwMSU7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDIwJTtcXG59XFxuXFxuLnN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbiB7XFxuICAgIHBhZGRpbmc6IDFyZW0gMnJlbTtcXG4gICAgZm9udC1zaXplOiAxLjVyZW07XFxuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDQwLCA0MCwgNDApO1xcbiAgICBjb2xvcjogd2hpdGU7XFxuXFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXG59XFxuXFxuLnN0YXJ0LWdhbWUtY29udGFpbmVyIGJ1dHRvbjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwLCAwLCAwKTtcXG59XFxuXFxuLnZhbGlkLW1vdmUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtcXG59XFxuXFxuLmludmFsaWQtbW92ZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHVybCA9IFN0cmluZyh1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsKTtcblxuICAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cbiAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgfVxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfVxuXG4gIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDc5MjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Jlc2V0LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vcmVzZXQuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiY2xhc3MgU2hpcCB7XG4gICAgY29uc3RydWN0b3IobGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB0aGlzLnRpbWVzSGl0ID0gMDtcbiAgICAgICAgdGhpcy5oaXRzID0gW107XG4gICAgICAgIHRoaXMuaXNTdW5rID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgaGl0KHggPSBudWxsLCB5ID0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5pc1N1bmspIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNoaXAgaXMgYWxyZWFkeSBzdW5rXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXNIaXQrKztcbiAgICAgICAgdGhpcy5oaXRzLnB1c2goeyB4LCB5IH0pO1xuICAgICAgICBpZiAodGhpcy5kZXRlcm1pbmVJZlN1bmsoKSkgdGhpcy5pc1N1bmsgPSB0cnVlO1xuICAgIH1cblxuICAgIGlzSGl0KHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGl0cy5zb21lKChoaXQpID0+IGhpdC54ID09PSB4ICYmIGhpdC55ID09PSB5KTtcbiAgICB9XG5cbiAgICBkZXRlcm1pbmVJZlN1bmsoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVzSGl0ID09PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFNoaXBEYXRhSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNvb3JkaW5hdGVzLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXG4gICAgICAgICAgICBhbGxDZWxsQ29vcmRpbmF0ZXM6IHRoaXMuZ2V0QWxsQ2VsbENvb3JkaW5hdGVzKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFsbENlbGxDb29yZGluYXRlcygpIHtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBbXTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBcImhvcml6b250YWxcIjpcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMucHVzaChbdGhpcy5jb29yZGluYXRlcy54LCB0aGlzLmNvb3JkaW5hdGVzLnkgKyBpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLnB1c2goW3RoaXMuY29vcmRpbmF0ZXMueCArIGksIHRoaXMuY29vcmRpbmF0ZXMueV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGlwO1xuIiwiaW1wb3J0IFNoaXAgZnJvbSBcIi4vc2hpcFwiO1xuXG5jbGFzcyBHYW1lQm9hcmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJvYXJkID0gdGhpcy5jcmVhdGVCb2FyZCgxMCk7XG4gICAgICAgIHRoaXMuc2hpcHMgPSBbXTtcbiAgICAgICAgdGhpcy5taXNzZWRBdHRhY2tzID0gW107XG4gICAgfVxuXG4gICAgY3JlYXRlQm9hcmQobGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJvYXJkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJvYXJkW2ldID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgIGJvYXJkW2ldW2pdID0geyBoaXQ6IGZhbHNlLCBzaGlwOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvYXJkO1xuICAgIH1cblxuICAgIHBsYWNlU2hpcCh4LCB5LCBkaXJlY3Rpb24sIHNoaXApIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblBsYWNlU2hpcCh4LCB5LCBkaXJlY3Rpb24sIHNoaXApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaGlwIGNhbm5vdCBiZSBwbGFjZWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGlwcy5wdXNoKHNoaXApO1xuICAgICAgICBzaGlwLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgc2hpcC5jb29yZGluYXRlcyA9IHsgeCwgeSB9O1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh4LCB5LCBkaXJlY3Rpb24sIHNoaXApO1xuICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBcImhvcml6b250YWxcIjpcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoaXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4XVt5ICsgaV0uc2hpcCA9IHNoaXA7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNoaXAuY29vcmRpbmF0ZXMucHVzaCh7IHg6IHgsIHk6IHkgKyBpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbFwiOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hpcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBpXVt5XS5zaGlwID0gc2hpcDtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hpcC5jb29yZGluYXRlcy5wdXNoKHsgeDogeCArIGksIHk6IHkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuUmVjZWl2ZUF0dGFjayh4LCB5KSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ib2FyZFt4XVt5XS5oaXQ7XG4gICAgfVxuXG4gICAgcmVjZWl2ZUF0dGFjayh4LCB5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWNlaXZlQXR0YWNrKHgsIHkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3BvdCBpcyBhbHJlYWR5IGhpdFwiKTtcbiAgICAgICAgdGhpcy5ib2FyZFt4XVt5XS5oaXQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5ib2FyZFt4XVt5XS5zaGlwKSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkW3hdW3ldLnNoaXAuaGl0KHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taXNzZWRBdHRhY2tzLnB1c2goeyB4LCB5IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxsU2hpcHNTdW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlwcy5ldmVyeSgoc2hpcCkgPT4gc2hpcC5pc1N1bmspO1xuICAgIH1cblxuICAgIGNhblBsYWNlU2hpcCh4LCB5LCBkaXJlY3Rpb24sIHNoaXApIHtcbiAgICAgICAgLy9DaGVjayBpZiBzaGlwIGlzIG91dCBvZiBib3VuZHMgb3Igb24gdG9wIG9mIGFub3RoZXIgc2hpcFxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQubGVuZ3RoIDwgeSArIHNoaXAubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoaXAubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmRbeF1beSArIGldLnNoaXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5ib2FyZC5sZW5ndGgsIHgsIHNoaXAubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvYXJkLmxlbmd0aCA8IHggKyBzaGlwLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGlwLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJvYXJkW3ggKyBpXVt5XS5zaGlwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvL0NoZWNrIGlmIHNoaXAgaXMgcmlnaHQgbmV4dCB0byBhbm90aGVyIHNoaXBcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5ib2FyZFt4XVt5IC0gMV0gJiYgdGhpcy5ib2FyZFt4XVt5IC0gMV0uc2hpcCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5ib2FyZFt4XVt5ICsgc2hpcC5sZW5ndGhdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeF1beSArIHNoaXAubGVuZ3RoXS5zaGlwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAtMTsgaSA8IHNoaXAubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggLSAxXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggLSAxXVt5ICsgaV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4IC0gMV1beSArIGldLnNoaXBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIDFdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIDFdW3kgKyBpXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyAxXVt5ICsgaV0uc2hpcFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuYm9hcmRbeCAtIDFdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCAtIDFdW3ldICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCAtIDFdW3ldLnNoaXApIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuYm9hcmRbeCArIHNoaXAubGVuZ3RoXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBzaGlwLmxlbmd0aF1beV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgc2hpcC5sZW5ndGhdW3ldLnNoaXApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IC0xOyBpIDwgc2hpcC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIGldICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIGldW3kgLSAxXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkW3ggKyBpXVt5IC0gMV0uc2hpcFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZFt4ICsgaV1beSArIDFdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmRbeCArIGldW3kgKyAxXS5zaGlwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGxhY2VTaGlwUmFuZG9tbHkoKSB7XG4gICAgICAgIGNvbnN0IGdldFJhbmRvbVBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmFuZG9tWCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmRvbVkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCk7XG4gICAgICAgICAgICBjb25zdCByYW5kb21EaXJlY3Rpb24gPVxuICAgICAgICAgICAgICAgIE1hdGgucmFuZG9tKCkgPCAwLjUgPyBcImhvcml6b250YWxcIiA6IFwidmVydGljYWxcIjtcbiAgICAgICAgICAgIHJldHVybiBbcmFuZG9tWCwgcmFuZG9tWSwgcmFuZG9tRGlyZWN0aW9uXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ib2FyZCA9IHRoaXMuY3JlYXRlQm9hcmQoMTApO1xuICAgICAgICB0aGlzLnNoaXBzID0gW107XG4gICAgICAgIGNvbnN0IHNoaXAxID0gbmV3IFNoaXAoMSk7XG4gICAgICAgIGNvbnN0IHNoaXAyID0gbmV3IFNoaXAoMSk7XG4gICAgICAgIGNvbnN0IHNoaXAzID0gbmV3IFNoaXAoMSk7XG4gICAgICAgIGNvbnN0IHNoaXA0ID0gbmV3IFNoaXAoMSk7XG4gICAgICAgIGNvbnN0IHNoaXA1ID0gbmV3IFNoaXAoMik7XG4gICAgICAgIGNvbnN0IHNoaXA2ID0gbmV3IFNoaXAoMik7XG4gICAgICAgIGNvbnN0IHNoaXA3ID0gbmV3IFNoaXAoMik7XG4gICAgICAgIGNvbnN0IHNoaXA4ID0gbmV3IFNoaXAoMyk7XG4gICAgICAgIGNvbnN0IHNoaXA5ID0gbmV3IFNoaXAoMyk7XG4gICAgICAgIGNvbnN0IHNoaXAxMCA9IG5ldyBTaGlwKDQpO1xuICAgICAgICBjb25zdCBzaGlwc1RvUGxhY2UgPSBbXTtcbiAgICAgICAgc2hpcHNUb1BsYWNlLnB1c2goXG4gICAgICAgICAgICBzaGlwMSxcbiAgICAgICAgICAgIHNoaXAyLFxuICAgICAgICAgICAgc2hpcDMsXG4gICAgICAgICAgICBzaGlwNCxcbiAgICAgICAgICAgIHNoaXA1LFxuICAgICAgICAgICAgc2hpcDYsXG4gICAgICAgICAgICBzaGlwNyxcbiAgICAgICAgICAgIHNoaXA4LFxuICAgICAgICAgICAgc2hpcDksXG4gICAgICAgICAgICBzaGlwMTBcbiAgICAgICAgKTtcblxuICAgICAgICBzaGlwc1RvUGxhY2UuZm9yRWFjaCgoc2hpcCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJhbmRvbVBvc2l0aW9uO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJhbmRvbVBvc2l0aW9uID0gZ2V0UmFuZG9tUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKCF0aGlzLmNhblBsYWNlU2hpcCguLi5yYW5kb21Qb3NpdGlvbiwgc2hpcCkpO1xuICAgICAgICAgICAgdGhpcy5wbGFjZVNoaXAoLi4ucmFuZG9tUG9zaXRpb24sIHNoaXApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdhbWVCb2FyZDtcbiIsImltcG9ydCBHYW1lQm9hcmQgZnJvbSBcIi4vZ2FtZUJvYXJkXCI7XG5cbmNsYXNzIFBsYXllciB7XG4gICAgY29uc3RydWN0b3IodHlwZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOyAvL1BsYXllciBvciBDb21wdXRlclxuICAgICAgICB0aGlzLmdhbWVCb2FyZCA9IG5ldyBHYW1lQm9hcmQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsYXllcjsiLCJpbXBvcnQgXCIuL3Jlc2V0LmNzc1wiO1xuaW1wb3J0IFwiLi9zdHlsZS5jc3NcIjtcbmltcG9ydCBQbGF5ZXIgZnJvbSBcIi4vcGxheWVyXCI7XG5pbXBvcnQgRGlzcGxheSBmcm9tIFwiLi9kaXNwbGF5XCI7XG5cbmNvbnN0IHBsYXllciA9IG5ldyBQbGF5ZXIoXCJwbGF5ZXJcIik7XG5jb25zdCBjb21wdXRlciA9IG5ldyBQbGF5ZXIoXCJjb21wdXRlclwiKTtcbmNvbnN0IGRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGF5ZXIsIGNvbXB1dGVyKTtcblxuZGlzcGxheS5zdGFydGluZ1NjcmVlbigpO1xuIiwiaW1wb3J0IFNoaXAgZnJvbSBcIi4vc2hpcFwiO1xuaW1wb3J0IEdhbWVCb2FyZCBmcm9tIFwiLi9nYW1lQm9hcmRcIjtcblxuY2xhc3MgRGlzcGxheSB7XG4gICAgY29uc3RydWN0b3IocGxheWVyLCBjb21wdXRlcikge1xuICAgICAgICB0aGlzLnBsYXllciA9IHBsYXllcjtcbiAgICAgICAgdGhpcy5jb21wdXRlciA9IGNvbXB1dGVyO1xuXG4gICAgICAgIHRoaXMuY2VsbENsaWNrSGFuZGxlciA9IHRoaXMuY2VsbENsaWNrSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuZHJvcEhhbmRsZXIgPSB0aGlzLmRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJhZ092ZXJIYW5kbGVyID0gdGhpcy5kcmFnT3ZlckhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kcmFnU3RhcnRIYW5kbGVyID0gdGhpcy5kcmFnU3RhcnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJhZ0VuZEhhbmRsZXIgPSB0aGlzLmRyYWdFbmRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJhZ0RhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbGlkRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgZGlzcGxheUJvYXJkUGxheWVyKCkge1xuICAgICAgICBjb25zdCBib2FyZCA9IHRoaXMucGxheWVyLmdhbWVCb2FyZC5ib2FyZDtcbiAgICAgICAgLy8gY29uc3QgYm9hcmQgPSBnYW1lQm9hcmQuYm9hcmRcbiAgICAgICAgY29uc3QgYm9hcmREaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYm9hcmQucGxheWVyYCk7XG4gICAgICAgIGJvYXJkRGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9hcmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYm9hcmRbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJjZWxsXCIpO1xuICAgICAgICAgICAgICAgIGNlbGwuZGF0YXNldC54ID0gaTtcbiAgICAgICAgICAgICAgICBjZWxsLmRhdGFzZXQueSA9IGo7XG4gICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLmhpdCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJoaXRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChib2FyZFtpXVtqXS5zaGlwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcInNoaXBcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2FyZFtpXVtqXS5zaGlwLmlzU3Vuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwic3Vua1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzdGFydGluZy1zY3JlZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRyYWdzdGFydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0SGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdlbmRcIiwgdGhpcy5kcmFnRW5kSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJ3YXRlclwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBib2FyZERpdi5hcHBlbmRDaGlsZChjZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzdGFydGluZy1zY3JlZW5cIikpIHtcbiAgICAgICAgICAgIGJvYXJkRGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCB0aGlzLmRyYWdPdmVySGFuZGxlcik7XG4gICAgICAgICAgICBib2FyZERpdi5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvYXJkRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCB0aGlzLmRyYWdPdmVySGFuZGxlcik7XG4gICAgICAgICAgICBib2FyZERpdi5yZW1vdmVFdmVudExpc3RlbmVyKFwiZHJvcFwiLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYWdTdGFydEhhbmRsZXIoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImRyYWdzdGFydFwiKTtcbiAgICAgICAgY29uc3QgYm9hcmQgPSB0aGlzLnBsYXllci5nYW1lQm9hcmQuYm9hcmQ7XG4gICAgICAgIGNvbnN0IGkgPSBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC54KTtcbiAgICAgICAgY29uc3QgaiA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0LnkpO1xuXG4gICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoXG4gICAgICAgICAgICBcInRleHQvcGxhaW5cIixcbiAgICAgICAgICAgIGJvYXJkW2ldW2pdLnNoaXAuZ2V0U2hpcERhdGFKU09OKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kcmFnRGF0YSA9IGJvYXJkW2ldW2pdLnNoaXAuZ2V0U2hpcERhdGFKU09OKCk7XG5cbiAgICAgICAgLy9SZW1vdmUgc2hpcCBmcm9tIG9sZCBwb3NpdGlvblxuICAgICAgICBjb25zdCBvbGRTaGlwID0gYm9hcmRbaV1bal0uc2hpcDtcbiAgICAgICAgY29uc29sZS5sb2cob2xkU2hpcCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBgLmNlbGxbZGF0YS14PVwiJHtvbGRTaGlwLmNvb3JkaW5hdGVzLnh9XCJdW2RhdGEteT1cIiR7b2xkU2hpcC5jb29yZGluYXRlcy55ICsgaX1cIl1gXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2xkU2hpcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG9sZFNoaXAuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYC5jZWxsW2RhdGEteD1cIiR7b2xkU2hpcC5jb29yZGluYXRlcy54fVwiXVtkYXRhLXk9XCIke29sZFNoaXAuY29vcmRpbmF0ZXMueSArIGl9XCJdYFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKFwic2hpcFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQuYm9hcmRbb2xkU2hpcC5jb29yZGluYXRlcy54XVtcbiAgICAgICAgICAgICAgICAgICAgb2xkU2hpcC5jb29yZGluYXRlcy55ICsgaVxuICAgICAgICAgICAgICAgIF0uc2hpcCA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYC5jZWxsW2RhdGEteD1cIiR7b2xkU2hpcC5jb29yZGluYXRlcy54ICsgaX1cIl1bZGF0YS15PVwiJHtvbGRTaGlwLmNvb3JkaW5hdGVzLnl9XCJdYFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKFwic2hpcFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQuYm9hcmRbb2xkU2hpcC5jb29yZGluYXRlcy54ICsgaV1bXG4gICAgICAgICAgICAgICAgICAgIG9sZFNoaXAuY29vcmRpbmF0ZXMueVxuICAgICAgICAgICAgICAgIF0uc2hpcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmFnT3ZlckhhbmRsZXIoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcIm1vdmVcIjtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnZhbGlkLW1vdmUsIC5pbnZhbGlkLW1vdmVcIik7XG4gICAgICAgIGlmIChjZWxscylcbiAgICAgICAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKFwidmFsaWQtbW92ZVwiLCBcImludmFsaWQtbW92ZVwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJkcmFnb3ZlclwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcInRleHQvcGxhaW5cIikpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kcmFnRGF0YTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIGNvbnN0IHNoaXBEYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgaWYgKCFzaGlwRGF0YSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXdTaGlwID0gbmV3IFNoaXAoc2hpcERhdGEubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCB0YXJnZXRDZWxsWCA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0LngpO1xuICAgICAgICBjb25zdCB0YXJnZXRDZWxsWSA9IE51bWJlcihlLnRhcmdldC5kYXRhc2V0LnkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0YXJnZXRDZWxsWCwgdGFyZ2V0Q2VsbFkpO1xuICAgICAgICBpZiAoaXNOYU4odGFyZ2V0Q2VsbFgpIHx8IGlzTmFOKHRhcmdldENlbGxZKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNlbGxzVG9Nb3ZlVG8gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdTaGlwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpcERhdGEuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDZWxsWSArIGkgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsc1RvTW92ZVRvLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAucGxheWVyIC5jZWxsW2RhdGEteD1cIiR7dGFyZ2V0Q2VsbFh9XCJdW2RhdGEteT1cIiR7dGFyZ2V0Q2VsbFkgKyBpfVwiXWBcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDZWxsWCArIGkgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsc1RvTW92ZVRvLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAucGxheWVyIC5jZWxsW2RhdGEteD1cIiR7dGFyZ2V0Q2VsbFggKyBpfVwiXVtkYXRhLXk9XCIke3RhcmdldENlbGxZfVwiXWBcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQuY2FuUGxhY2VTaGlwKFxuICAgICAgICAgICAgICAgIHRhcmdldENlbGxYLFxuICAgICAgICAgICAgICAgIHRhcmdldENlbGxZLFxuICAgICAgICAgICAgICAgIHNoaXBEYXRhLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBuZXdTaGlwXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgY2VsbHNUb01vdmVUby5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwidmFsaWQtbW92ZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VsbHNUb01vdmVUby5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwiaW52YWxpZC1tb3ZlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wSGFuZGxlcihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy52YWxpZERyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnZhbGlkLW1vdmUsIC5pbnZhbGlkLW1vdmVcIik7XG4gICAgICAgIGlmIChjZWxscylcbiAgICAgICAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKFwidmFsaWQtbW92ZVwiLCBcImludmFsaWQtbW92ZVwiKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBkYXRhID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICBsZXQgc2hpcERhdGE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGlwRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kcmFnRGF0YSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpcCA9IG5ldyBTaGlwKHNoaXBEYXRhLmxlbmd0aCk7XG4gICAgICAgIC8vIHNoaXAuY29vcmRpbmF0ZXMgPSB7IHg6IGksIHk6IGogfTtcbiAgICAgICAgc2hpcC5kaXJlY3Rpb24gPSBzaGlwRGF0YS5kaXJlY3Rpb247XG4gICAgICAgIGNvbnN0IHRhcmdldENlbGxYID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQueCk7XG4gICAgICAgIGNvbnN0IHRhcmdldENlbGxZID0gTnVtYmVyKGUudGFyZ2V0LmRhdGFzZXQueSk7XG4gICAgICAgIGlmIChpc05hTih0YXJnZXRDZWxsWCkgfHwgaXNOYU4odGFyZ2V0Q2VsbFkpKSByZXR1cm47XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRhcmdldENlbGxYLCB0YXJnZXRDZWxsWSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5jYW5QbGFjZVNoaXAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0Q2VsbFgsXG4gICAgICAgICAgICAgICAgdGFyZ2V0Q2VsbFksXG4gICAgICAgICAgICAgICAgc2hpcC5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2hpcFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5wbGFjZVNoaXAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0Q2VsbFgsXG4gICAgICAgICAgICAgICAgdGFyZ2V0Q2VsbFksXG4gICAgICAgICAgICAgICAgc2hpcC5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2hpcFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy9SZW1vdmUgc2hpcCBmcm9tIG9sZCBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLnNoaXBzID0gdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLnNoaXBzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5ib2FyZFtzaGlwRGF0YS5jb29yZGluYXRlcy54XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlwRGF0YS5jb29yZGluYXRlcy55XG4gICAgICAgICAgICAgICAgICAgICAgICBdLnNoaXAgIT09IHNwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNoaXAgPSBuZXcgU2hpcChzaGlwRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLnBsYWNlU2hpcChcbiAgICAgICAgICAgICAgICBzaGlwRGF0YS5jb29yZGluYXRlcy54LFxuICAgICAgICAgICAgICAgIHNoaXBEYXRhLmNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgICAgICAgc2hpcERhdGEuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIG9sZFNoaXBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRQbGF5ZXIoKTtcbiAgICB9XG5cbiAgICBkcmFnRW5kSGFuZGxlcihlKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudmFsaWREcmFnZ2luZyk7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkRHJhZ2dpbmcpIHJldHVybjtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImRyYWdlbmRcIik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRyYWdEYXRhO1xuICAgICAgICBjb25zdCBzaGlwRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIGNvbnN0IG9sZFNoaXAgPSBuZXcgU2hpcChzaGlwRGF0YS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQucGxhY2VTaGlwKFxuICAgICAgICAgICAgc2hpcERhdGEuY29vcmRpbmF0ZXMueCxcbiAgICAgICAgICAgIHNoaXBEYXRhLmNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgICBzaGlwRGF0YS5kaXJlY3Rpb24sXG4gICAgICAgICAgICBvbGRTaGlwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZHJhZ0RhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbGlkRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRQbGF5ZXIoKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Qm9hcmRDb21wdXRlcigpIHtcbiAgICAgICAgY29uc3QgYm9hcmQgPSB0aGlzLmNvbXB1dGVyLmdhbWVCb2FyZC5ib2FyZDtcbiAgICAgICAgLy8gY29uc3QgYm9hcmQgPSBnYW1lQm9hcmQuYm9hcmQ7XG4gICAgICAgIGNvbnN0IGJvYXJkRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmJvYXJkLmNvbXB1dGVyYCk7XG4gICAgICAgIGJvYXJkRGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9hcmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYm9hcmRbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJjZWxsXCIpO1xuICAgICAgICAgICAgICAgIGNlbGwuZGF0YXNldC54ID0gaTtcbiAgICAgICAgICAgICAgICBjZWxsLmRhdGFzZXQueSA9IGo7XG4gICAgICAgICAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jZWxsQ2xpY2tIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoYm9hcmRbaV1bal0uaGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcImhpdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ldW2pdLnNoaXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZChcInNoaXBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9hcmRbaV1bal0uc2hpcC5pc1N1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJzdW5rXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwid2F0ZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm9hcmREaXYuYXBwZW5kQ2hpbGQoY2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwbGF5Qm9hcmRDb21wdXRlckVtcHR5KCkge1xuICAgICAgICBjb25zdCBib2FyZCA9IHRoaXMuY29tcHV0ZXIuZ2FtZUJvYXJkLmJvYXJkO1xuICAgICAgICBjb25zdCBib2FyZERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5ib2FyZC5jb21wdXRlcmApO1xuICAgICAgICBib2FyZERpdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvYXJkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJvYXJkW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKFwiY2VsbFwiKTtcbiAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJ1bmNsaWNrYWJsZVwiKTtcbiAgICAgICAgICAgICAgICBib2FyZERpdi5hcHBlbmRDaGlsZChjZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNlbGxDbGlja0hhbmRsZXIoZSkge1xuICAgICAgICBjb25zdCB4ID0gZS50YXJnZXQuZGF0YXNldC54O1xuICAgICAgICBjb25zdCB5ID0gZS50YXJnZXQuZGF0YXNldC55O1xuXG4gICAgICAgIGNvbnN0IGNvbXB1dGVyQm9hcmQgPSB0aGlzLmNvbXB1dGVyLmdhbWVCb2FyZC5ib2FyZDtcbiAgICAgICAgaWYgKGNvbXB1dGVyQm9hcmRbeF1beV0uaGl0KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jb21wdXRlci5nYW1lQm9hcmQucmVjZWl2ZUF0dGFjayh4LCB5KTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRDb21wdXRlcigpO1xuICAgICAgICBpZiAodGhpcy5jb21wdXRlci5nYW1lQm9hcmQuYWxsU2hpcHNTdW5rKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVHYW1lKFwiUGxheWVyXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9JZiB5b3UgaGl0IGEgc2hpcCB5b3UgZ2V0IHRvIHBsYXkgYWdhaW5cbiAgICAgICAgaWYgKGNvbXB1dGVyQm9hcmRbeF1beV0uc2hpcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdldFJhbmRvbUF0dGFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCByYW5kb21BdHRhY2tYID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApO1xuICAgICAgICAgICAgbGV0IHJhbmRvbUF0dGFja1kgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBbcmFuZG9tQXR0YWNrWCwgcmFuZG9tQXR0YWNrWV07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBsYXllckJvYXJkID0gdGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLmJvYXJkO1xuICAgICAgICBsZXQgcmFuZG9tQXR0YWNrcztcbiAgICAgICAgbGV0IGlzQWxyZWFkeWhpdDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgcmFuZG9tQXR0YWNrcyA9IGdldFJhbmRvbUF0dGFjaygpO1xuXG4gICAgICAgICAgICBpc0FscmVhZHloaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwbGF5ZXJCb2FyZFtyYW5kb21BdHRhY2tzWzBdXVtyYW5kb21BdHRhY2tzWzFdXS5oaXQpIHtcbiAgICAgICAgICAgICAgICBpc0FscmVhZHloaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnBsYXllci5nYW1lQm9hcmQuY2FuUmVjZWl2ZUF0dGFjayguLi5yYW5kb21BdHRhY2tzKSkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmFuZG9tQXR0YWNrcyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwbGF5ZXJCb2FyZFtyYW5kb21BdHRhY2tzWzBdXVtyYW5kb21BdHRhY2tzWzFdXS5zaGlwKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHBsYXllckJvYXJkW3JhbmRvbUF0dGFja3NbMF1dW3JhbmRvbUF0dGFja3NbMV1dLmhpdCk7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQucmVjZWl2ZUF0dGFjayguLi5yYW5kb21BdHRhY2tzKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUJvYXJkUGxheWVyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wbGF5ZXIuZ2FtZUJvYXJkLmFsbFNoaXBzU3VuaygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZUdhbWUoXCJDb21wdXRlclwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoXG4gICAgICAgICAgICBwbGF5ZXJCb2FyZFtyYW5kb21BdHRhY2tzWzBdXVtyYW5kb21BdHRhY2tzWzFdXS5zaGlwIHx8XG4gICAgICAgICAgICBpc0FscmVhZHloaXRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmaW5hbGl6ZUdhbWUod2lubmVyKSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jZWxsXCIpO1xuICAgICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgICBjZWxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNlbGxDbGlja0hhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN0YXJ0R2FtZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlc3RhcnRHYW1lQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJyZXN0YXJ0LWdhbWUtY29udGFpbmVyXCIpO1xuICAgICAgICBjb25zdCB3aW5uaW5nTWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMlwiKTtcbiAgICAgICAgd2lubmluZ01lc3NhZ2UudGV4dENvbnRlbnQgPSBgJHt3aW5uZXJ9IHdvbiFgO1xuICAgICAgICBjb25zdCBwbGF5QWdhaW5CdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgICBwbGF5QWdhaW5CdXR0b24udGV4dENvbnRlbnQgPSBcIlBsYXkgQWdhaW5cIjtcbiAgICAgICAgcGxheUFnYWluQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQgPSBuZXcgR2FtZUJvYXJkKCk7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVyLmdhbWVCb2FyZCA9IG5ldyBHYW1lQm9hcmQoKTtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5wbGFjZVNoaXBSYW5kb21seSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlci5nYW1lQm9hcmQucGxhY2VTaGlwUmFuZG9tbHkoKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUJvYXJkUGxheWVyKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0aW5nU2NyZWVuKCk7XG4gICAgICAgICAgICByZXN0YXJ0R2FtZUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdGFydEdhbWVDb250YWluZXIuYXBwZW5kKHdpbm5pbmdNZXNzYWdlLCBwbGF5QWdhaW5CdXR0b24pO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3RhcnRHYW1lQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBzdGFydGluZ1NjcmVlbigpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwic3RhcnRpbmctc2NyZWVuXCIpO1xuICAgICAgICB0aGlzLnBsYXllci5nYW1lQm9hcmQucGxhY2VTaGlwUmFuZG9tbHkoKTtcbiAgICAgICAgdGhpcy5jb21wdXRlci5nYW1lQm9hcmQucGxhY2VTaGlwUmFuZG9tbHkoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRQbGF5ZXIoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRDb21wdXRlckVtcHR5KCk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRHYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgc3RhcnRHYW1lQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJzdGFydC1nYW1lLWNvbnRhaW5lclwiKTtcblxuICAgICAgICBjb25zdCByYW5kb21pemVTaGlwc0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgICAgIHJhbmRvbWl6ZVNoaXBzQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJyYW5kb21pemUtc2hpcHNcIik7XG4gICAgICAgIHJhbmRvbWl6ZVNoaXBzQnV0dG9uLnRleHRDb250ZW50ID0gXCJSYW5kb21pemUgU2hpcHNcIjtcbiAgICAgICAgcmFuZG9taXplU2hpcHNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmdhbWVCb2FyZC5wbGFjZVNoaXBSYW5kb21seSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Qm9hcmRQbGF5ZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRHYW1lQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgICAgc3RhcnRHYW1lQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJzdGFydFwiKTtcbiAgICAgICAgc3RhcnRHYW1lQnV0dG9uLnRleHRDb250ZW50ID0gXCJTdGFydFwiO1xuICAgICAgICBzdGFydEdhbWVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInN0YXJ0aW5nLXNjcmVlblwiKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUJvYXJkUGxheWVyKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlCb2FyZENvbXB1dGVyKCk7XG4gICAgICAgICAgICAvLyBzdGFydEdhbWVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgc3RhcnRHYW1lQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb21wdXRlckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY29tcHV0ZXItY29udGFpbmVyXCIpO1xuICAgICAgICBzdGFydEdhbWVDb250YWluZXIuYXBwZW5kKHJhbmRvbWl6ZVNoaXBzQnV0dG9uLCBzdGFydEdhbWVCdXR0b24pO1xuICAgICAgICBjb21wdXRlckNvbnRhaW5lci5hcHBlbmRDaGlsZChzdGFydEdhbWVDb250YWluZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheTtcbiJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIiwiVVJMIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwidGhpcyIsIm1hcCIsIml0ZW0iLCJjb250ZW50IiwibmVlZExheWVyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsImkiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwidW5kZWZpbmVkIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImsiLCJfayIsInVybCIsIm9wdGlvbnMiLCJTdHJpbmciLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInRlc3QiLCJzbGljZSIsImhhc2giLCJuZWVkUXVvdGVzIiwicmVwbGFjZSIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsInJlc3VsdCIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImJhc2UiLCJjb3VudCIsImluZGV4QnlJZGVudGlmaWVyIiwib2JqIiwiY3NzIiwic291cmNlTWFwIiwicmVmZXJlbmNlcyIsInVwZGF0ZXIiLCJhZGRFbGVtZW50U3R5bGUiLCJieUluZGV4Iiwic3BsaWNlIiwiYXBpIiwiZG9tQVBJIiwidXBkYXRlIiwibmV3T2JqIiwicmVtb3ZlIiwibGFzdElkZW50aWZpZXJzIiwibmV3TGlzdCIsImluZGV4IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0Iiwic3R5bGUiLCJ0YXJnZXQiLCJzdHlsZVRhcmdldCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIndpbmRvdyIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsImUiLCJnZXRUYXJnZXQiLCJFcnJvciIsImFwcGVuZENoaWxkIiwiZWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInN0eWxlRWxlbWVudCIsIm5vbmNlIiwic2V0QXR0cmlidXRlIiwiaW5zZXJ0U3R5bGVFbGVtZW50Iiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJhcHBseSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJuIiwiZ2V0dGVyIiwiZCIsImEiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJiIiwiYmFzZVVSSSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJuYyIsImxvY2FscyIsImNvbnN0cnVjdG9yIiwidGltZXNIaXQiLCJoaXRzIiwiaXNTdW5rIiwiY29vcmRpbmF0ZXMiLCJkaXJlY3Rpb24iLCJoaXQiLCJ4IiwieSIsImRldGVybWluZUlmU3VuayIsImlzSGl0Iiwic29tZSIsImdldFNoaXBEYXRhSlNPTiIsImFsbENlbGxDb29yZGluYXRlcyIsImdldEFsbENlbGxDb29yZGluYXRlcyIsImJvYXJkIiwiY3JlYXRlQm9hcmQiLCJzaGlwcyIsIm1pc3NlZEF0dGFja3MiLCJqIiwic2hpcCIsInBsYWNlU2hpcCIsImNhblBsYWNlU2hpcCIsImNhblJlY2VpdmVBdHRhY2siLCJyZWNlaXZlQXR0YWNrIiwiYWxsU2hpcHNTdW5rIiwiZXZlcnkiLCJwbGFjZVNoaXBSYW5kb21seSIsInNoaXAxIiwic2hpcDIiLCJzaGlwMyIsInNoaXA0Iiwic2hpcDUiLCJzaGlwNiIsInNoaXA3Iiwic2hpcDgiLCJzaGlwOSIsInNoaXAxMCIsInNoaXBzVG9QbGFjZSIsImZvckVhY2giLCJyYW5kb21Qb3NpdGlvbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInR5cGUiLCJnYW1lQm9hcmQiLCJwbGF5ZXIiLCJjb21wdXRlciIsImNlbGxDbGlja0hhbmRsZXIiLCJiaW5kIiwiZHJvcEhhbmRsZXIiLCJkcmFnT3ZlckhhbmRsZXIiLCJkcmFnU3RhcnRIYW5kbGVyIiwiZHJhZ0VuZEhhbmRsZXIiLCJkcmFnRGF0YSIsInZhbGlkRHJhZ2dpbmciLCJkaXNwbGF5Qm9hcmRQbGF5ZXIiLCJib2FyZERpdiIsImlubmVySFRNTCIsImNlbGwiLCJjbGFzc0xpc3QiLCJhZGQiLCJkYXRhc2V0IiwiYm9keSIsImNvbnRhaW5zIiwiZHJhZ2dhYmxlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb25zb2xlIiwibG9nIiwiTnVtYmVyIiwiZGF0YVRyYW5zZmVyIiwic2V0RGF0YSIsIm9sZFNoaXAiLCJwcmV2ZW50RGVmYXVsdCIsImRyb3BFZmZlY3QiLCJjZWxscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzaGlwRGF0YSIsInBhcnNlIiwibmV3U2hpcCIsInRhcmdldENlbGxYIiwidGFyZ2V0Q2VsbFkiLCJpc05hTiIsImNlbGxzVG9Nb3ZlVG8iLCJnZXREYXRhIiwiZXJyIiwiZmlsdGVyIiwic3AiLCJkaXNwbGF5Qm9hcmRDb21wdXRlciIsImRpc3BsYXlCb2FyZENvbXB1dGVyRW1wdHkiLCJjb21wdXRlckJvYXJkIiwiZmluYWxpemVHYW1lIiwicGxheWVyQm9hcmQiLCJyYW5kb21BdHRhY2tzIiwiaXNBbHJlYWR5aGl0Iiwid2lubmVyIiwicmVzdGFydEdhbWVDb250YWluZXIiLCJ3aW5uaW5nTWVzc2FnZSIsInRleHRDb250ZW50IiwicGxheUFnYWluQnV0dG9uIiwic3RhcnRpbmdTY3JlZW4iLCJhcHBlbmQiLCJzdGFydEdhbWVDb250YWluZXIiLCJyYW5kb21pemVTaGlwc0J1dHRvbiIsInN0YXJ0R2FtZUJ1dHRvbiIsImNvbXB1dGVyQ29udGFpbmVyIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file