diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index b288507..0000000 --- a/dist/index.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{"use strict";var e=function(e){var t=document.querySelector("#whoChoosesParagraph");3===e.pokemons.length?t.textContent="Wait for the game to start...":t.textContent=e.name+" chooses 1 pokemon"},t=function(){function e(e,t,n,o,r,a,c){this._name=e,this._image=t,this._maxHP=n,this._currentHP=n,this._attackPoints=o,this._defensePoints=r,this._types=a,this._moves=c}return Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"image",{get:function(){return this._image},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentHP",{get:function(){return this._currentHP},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxHP",{get:function(){return this._maxHP},enumerable:!1,configurable:!0}),e.prototype.subtractHP=function(e){var t=this._currentHP-e;t<0&&(this._currentHP=0),this._currentHP=t},e.prototype.heal=function(){this._currentHP=this._maxHP},Object.defineProperty(e.prototype,"attackPoints",{get:function(){return this._attackPoints},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"defensePoints",{get:function(){return this._defensePoints},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"types",{get:function(){return this._types},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"moves",{get:function(){return this._moves},enumerable:!1,configurable:!0}),e.prototype.isAlive=function(){return this._currentHP>0},e}(),n=function(){function e(e){this._pokemons=[];for(var n=0,o=e;ne.alivePokemons.length-1;n--)t[n].classList.add("disabledPokemon")},n=Array.from(document.querySelectorAll("#fight-page-player1 .pokeballWithPokemon")),o=Array.from(document.querySelectorAll("#fight-page-player2 .pokeballWithPokemon"));t(e.playerOne,n),t(e.playerTwo,o)},u=function(e,t,n,o){e.addEventListener("click",(function(u){console.log(e.innerText+" used!"),o&&(o(n,u),function(e,t,n){var o=document.querySelector(".gameLogs"),r=document.createElement("p"),a=document.createTextNode("No move found"),c=e.currentPlayer.getActivePokemon.name,i=n.currentTarget.textContent,u=e.currentPlayer.name;switch(console.log(),t){case p:a.nodeValue=u+": "+c+" used "+i+"!";break;case m:a.nodeValue=u+" changed Pokemon: "+c+" comes into play!";break;case y:a.nodeValue=u+" used mango: "+c+" is healed!";break;default:console.log("No move found")}console.log(r),r.append(a),o.insertBefore(r,o.firstChild)}(n,o,u),r(n),c(n.playerOne,n.playerTwo),i(n),n.switchPlayer(),a(n)),setTimeout((function(){n.generateAttackButtons(),n.generateSwitchButtons(),n.generateActionButtons()}),1e3),l(t)}))},s=function(e){for(var t=0;t\n
'+a.getActivePokemon.moves[1].moveName+'
\n
back
',e=this,t=document.querySelector("#attackButtonOne"),n=document.querySelector("#attackButtonTwo"),o=document.getElementsByClassName("battleButton"),r=document.querySelector("#backButton"),s(o),u(t,o,e,p),u(n,o,e,p),u(r,o,e)},e.prototype.generateSwitchButtons=function(){var e,t,n,o,r,a=this.currentPlayer;console.log("Switch choose modal"),document.querySelector("#actionModals").innerHTML='\n
'+a.notActivePokemons[0].name+'
\n
'+a.notActivePokemons[1].name+'
\n
back
',e=this,t=document.querySelector("#switchButtonOne"),n=document.querySelector("#switchButtonTwo"),o=document.getElementsByClassName("battleButton"),r=document.querySelector("#backButton"),s(o),u(t,o,e,m),u(n,o,e,m),u(r,o,e)},e}(),h=function(e,t){e.pokemons.length<3||t.pokemons.length<3||function(e,t,n){var o=new d(e,t);setTimeout((function(){return e=n,t=o,u=document.querySelector("#fight-page-template"),e.innerHTML=u.innerHTML,function(e){var t=document.querySelector("#fight-page-player1-name"),n=document.querySelector("#fight-page-player2-name");t.textContent=e.playerOne.name,n.textContent=e.playerTwo.name}(t),a(t),r(t),c(t.playerOne,t.playerTwo),i(t),void t.generateActionButtons();var e,t,u}),2e3)}(e,t,document.querySelector("#app"))},f=function(t,r){var a=t;!function(e,t){document.querySelector("#choosePagePlayer1Name").textContent=e.name,document.querySelector("#choosePagePlayer2Name").textContent=t.name}(t,r),e(a),function(t,r,a){var c=o.x,i=new n(c);Array.from(document.querySelectorAll("#pokemonList img")).forEach((function(n){return n.addEventListener("click",(function(n){3!==a.pokemons.length&&(function(e,t,n){var o=e.target,r=o.id,a=t.getPokemonByName(r);n.addPokemon(a),o.style.cursor="default",o.style.filter="grayscale(100%)"}(n,i,a),function(e,t){var n=t===e?Array.from(document.querySelectorAll("#choosePagePlayer1 img")):Array.from(document.querySelectorAll("#choosePagePlayer2 img")),o=t.pokemons[t.pokemons.length-1].name.toLowerCase();n[t.pokemons.length-1].setAttribute("src","./assets/"+o+".png")}(t,a),e(a=a===t?r:t),h(t,r))}),{once:!0})}))}(t,r,a)},g=function(){function e(e,t){if(e.length>8)throw new Error("Too long name");if(t.length>3)throw new Error("Wrong number of pokemons");this._name=e,this._pokemons=t,this._indexOfActivePokemon=0,this._hasMango=!0}return Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pokemons",{get:function(){return this._pokemons},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"indexOfActivePokemon",{set:function(e){this._indexOfActivePokemon=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"getActivePokemon",{get:function(){return this._pokemons[this._indexOfActivePokemon]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alivePokemons",{get:function(){return this.pokemons.filter((function(e){return e.isAlive()}))},enumerable:!1,configurable:!0}),e.prototype.useMango=function(){if(!this._hasMango)throw new Error("You cannot use mango. You use all mangos");this._hasMango=!1,this.getActivePokemon.heal()},Object.defineProperty(e.prototype,"hasMango",{get:function(){return this._hasMango},enumerable:!1,configurable:!0}),e.prototype.addPokemon=function(e){this._pokemons.push(e)},Object.defineProperty(e.prototype,"notActivePokemons",{get:function(){var e=this;return this.pokemons.filter((function(t){return t.name!==e.getActivePokemon.name}))},enumerable:!1,configurable:!0}),e}(),b=function(e,t,n){e.value.length>0&&t.value.length>0&&e.value.length<=8&&t.value.length<=8?(n.className="button-enabled",n.disabled=!1):(n.className="button-disabled",n.disabled=!0)};setTimeout((function(){var e,t,n,o,r,a,c,i,u,s=document.querySelector("#app");e=s,t=document.querySelector("#starting-page-template"),e.innerHTML=t.innerHTML,function(e){var t=document.querySelector("#info-modal-template");e.innerHTML+=t.innerHTML}(s),n=document.querySelector("#enter-player1-name"),o=document.querySelector("#enter-player2-name"),r=document.querySelector("#start-game-button"),n.addEventListener("keyup",(function(){b(n,o,r)})),o.addEventListener("keyup",(function(){b(n,o,r)})),i=document.querySelector("#how-to-play-button"),u=document.querySelector("#info-modal-screen"),i.addEventListener("click",(function(){u.style.display="flex"})),null==(c=(a=u).querySelector(".exitButton"))||c.addEventListener("click",(function(){a.style.display="none"})),function(e){var t=document.querySelector("#start-game-button");null==t||t.addEventListener("click",(function(){var t=document.querySelector("#enter-player1-name").value,n=document.querySelector("#enter-player2-name").value,o=document.querySelector("#choose-page-template");e.innerHTML=o.innerHTML,f(new g(t,[]),new g(n,[]))}))}(s)}),2e3)})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL21vZGFsUG9wVXBGdW5jdGlvbnMudHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9jaG9vc2VQb2tlbW9uc1BhZ2UvY3JlYXRlQWN0aXZlUGxheWVyTmFtZS50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL3Bva2Vtb25DbGFzcy50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL3Bva2Vtb25GYWN0b3J5LnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvZmlnaHRQYWdlL2NyZWF0ZUFjdGl2ZVBva2Vtb24udHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9maWdodFBhZ2UvY3JlYXRlQWN0aXZlUGxheWVyLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvZmlnaHRQYWdlL2NyZWF0ZUhQQmFycy50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL2ZpZ2h0UGFnZS9jcmVhdGVGaWdodFBhZ2VQb2tlYmFsbHMudHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9maWdodFBhZ2UvYnV0dG9uc0V2ZW50TGlzdGVuZXJzLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvZmlnaHRQYWdlL3VwZGF0ZU1vdmVzTGlzdC50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL2dhbWVIYW5kbGVyQ2xhc3MudHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9jaG9vc2VQb2tlbW9uc1BhZ2Uvc3RhcnRHYW1lSWZSZWFkeS50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL2ZpZ2h0UGFnZS9zdGFydEJhdHRsZS50cyIsIndlYnBhY2s6Ly9jb2RlcnNjYW1wMjAyMC5wcm9qZWN0LnR5cGVzY3JpcHQucG9rZW1vbmZpZ2h0Ly4vc3JjL2ZpZ2h0UGFnZS9yZW5kZXJGaWdodFBhZ2UudHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9jaG9vc2VQb2tlbW9uc1BhZ2UvY2hvb3NlUG9rZW1vbnNQYWdlLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvY2hvb3NlUG9rZW1vbnNQYWdlL2NyZWF0ZVBsYXllck5hbWVzLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvY2hvb3NlUG9rZW1vbnNQYWdlL2NyZWF0ZVBva2Vtb25zLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvY2hvb3NlUG9rZW1vbnNQYWdlL2FkZENob3NlblBva2Vtb24udHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9jaG9vc2VQb2tlbW9uc1BhZ2UvY3JlYXRlUG9rZWJhbGxzLnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvcGxheWVyQ2xhc3MudHMiLCJ3ZWJwYWNrOi8vY29kZXJzY2FtcDIwMjAucHJvamVjdC50eXBlc2NyaXB0LnBva2Vtb25maWdodC8uL3NyYy9hY3RpdmF0ZVN0YXJ0LnRzIiwid2VicGFjazovL2NvZGVyc2NhbXAyMDIwLnByb2plY3QudHlwZXNjcmlwdC5wb2tlbW9uZmlnaHQvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOlsiY3JlYXRlQWN0aXZlUGxheWVyTmFtZSIsImFjdGl2ZVBsYXllciIsIndob0Nob29zZXNQb2tlbW9uVGV4dCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBva2Vtb25zIiwibGVuZ3RoIiwidGV4dENvbnRlbnQiLCJuYW1lIiwiaW1hZ2UiLCJtYXhIUCIsImF0dGFja1BvaW50cyIsImRlZmVuc2VQb2ludHMiLCJ0eXBlcyIsIm1vdmVzIiwidGhpcyIsIl9uYW1lIiwiX2ltYWdlIiwiX21heEhQIiwiX2N1cnJlbnRIUCIsIl9hdHRhY2tQb2ludHMiLCJfZGVmZW5zZVBvaW50cyIsIl90eXBlcyIsIl9tb3ZlcyIsInN1YnRyYWN0SFAiLCJwb2ludHNUb1N1YnRyYWN0IiwibmV3SFAiLCJoZWFsIiwiaXNBbGl2ZSIsInBva2VEYXRhIiwiX3Bva2Vtb25zIiwicG9rZW1vbiIsInBva2VJbWciLCJwb2tlTW92ZXMiLCJyZWR1Y2UiLCJ0YWIiLCJtb3ZlIiwicHVzaCIsIm1vdmVOYW1lIiwibW92ZVR5cGUiLCJ0eXBlIiwicG9rZVR5cGVzIiwibWFwIiwidiIsInBva2Vtb25PYmplY3QiLCJQb2tlbW9uIiwiX2NhcGl0YWxpemUiLCJzdGF0cyIsImhwIiwiYXR0YWNrIiwiZGVmZW5zZSIsImdldFBva2Vtb25CeU5hbWUiLCJmaW5kIiwidG9Mb3dlckNhc2UiLCJ1bmRlZmluZWQiLCJFcnJvciIsInN0ciIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJjcmVhdGVBY3RpdmVQb2tlbW9uIiwiZ2FtZUhhbmRsZXIiLCJwbGF5ZXJPbmVBY3RpdmVQb2tlbW9uSW1hZ2VBcmVhIiwicGxheWVyVHdvQWN0aXZlUG9rZW1vbkltYWdlQXJlYSIsInBsYXllck9uZUFjdGl2ZVBva2Vtb25OYW1lQXJlYSIsInBsYXllclR3b0FjdGl2ZVBva2Vtb25OYW1lQXJlYSIsImNyZWF0ZVBva2Vtb24iLCJwbGF5ZXIiLCJpbWFnZUFyZWEiLCJuYW1lQXJlYSIsInBva2Vtb25OYW1lIiwiZ2V0QWN0aXZlUG9rZW1vbiIsInNldEF0dHJpYnV0ZSIsInBsYXllck9uZSIsInBsYXllclR3byIsImNyZWF0ZUFjdGl2ZVBsYXllciIsImN1cnJlbnRQbGF5ZXIiLCJwbGF5ZXJPbmVVbmRlcmxpbmVBcmVhIiwicGxheWVyVHdvVW5kZXJsaW5lQXJlYSIsImNsYXNzTGlzdCIsInJlbW92ZSIsImFkZCIsImNyZWF0ZUhQQmFycyIsImNyZWF0ZUJhciIsIkhQQmFyIiwiSFBJblBlcmNlbnQiLCJjdXJyZW50SFAiLCJjb25zb2xlIiwibG9nIiwic3R5bGUiLCJ3aWR0aCIsIkhQQ2xhc3NMaXN0IiwicGxheWVyT25lSFBCYXIiLCJwbGF5ZXJUd29IUEJhciIsImNyZWF0ZUZpZ2h0UGFnZVBva2ViYWxscyIsImNoYW5nZUNsYXNzT2ZEaXNhYmxlZFBva2Vtb25zIiwicGxheWVyUG9rZWJhbGxzIiwiaSIsImFsaXZlUG9rZW1vbnMiLCJwbGF5ZXJPbmVQb2tlYmFsbHMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwicGxheWVyVHdvUG9rZWJhbGxzIiwibWFnaWNGdW5jdGlvbiIsImJ1dHRvbiIsImJ1dHRvbnMiLCJmdW5jdGlvblRvQ2FsbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiaW5uZXJUZXh0IiwiY2FsbGVkRnVuY3Rpb24iLCJldmVudCIsIm1vdmVMaXN0IiwibmV3TW92ZSIsImNyZWF0ZUVsZW1lbnQiLCJuZXdNb3ZlVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiYnV0dG9uQ29udGVudCIsImN1cnJlbnRUYXJnZXQiLCJwbGF5ZXJOYW1lIiwibm9kZVZhbHVlIiwic3dpdGNoUG9rZSIsImVhdE1hbmdvIiwiYXBwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsInVwZGF0ZU1vdmVzTGlzdCIsInN3aXRjaFBsYXllciIsInNldFRpbWVvdXQiLCJnZW5lcmF0ZUF0dGFja0J1dHRvbnMiLCJnZW5lcmF0ZVN3aXRjaEJ1dHRvbnMiLCJnZW5lcmF0ZUFjdGlvbkJ1dHRvbnMiLCJhbmltYXRpb25CdXR0b25zRXhpdCIsImFuaW1hdGlvbkJ1dHRvbnNFbnRyeSIsImFuaW1hdGlvbiIsImFuaW1hdGlvbkRlbGF5IiwibmFtZU9mQ2hvc2VuUG9rZW1vbiIsInN3aXRjaFBva2Vtb24iLCJtYW5nb0J1dHRvbiIsIm1hbmdvIiwidXNlTWFuZ28iLCJpbm5lckhUTUwiLCJfcGxheWVyT25lIiwiX3BsYXllclR3byIsIl9jdXJyZW50UGxheWVyIiwiZGlkUGxheWVyTG9vc2UiLCJpc0dhbWVGaW5pc2hlZCIsImdldFdpbm5lciIsImluZGV4T2ZBY3RpdmVQb2tlbW9uIiwiZmluZEluZGV4IiwiYmF0dGxlQnV0dG9ucyIsImF0dGFja0J1dHRvbiIsInN3aXRjaEJ1dHRvbiIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJoYXNNYW5nbyIsImF0dGFja0J1dHRvbk9uZSIsImF0dGFja0J1dHRvblR3byIsImJhY2tCdXR0b24iLCJzd2l0Y2hCdXR0b25PbmUiLCJzd2l0Y2hCdXR0b25Ud28iLCJub3RBY3RpdmVQb2tlbW9ucyIsInN0YXJ0R2FtZUlmUmVhZHkiLCJhcHAiLCJnYW1lIiwiR2FtZUhhbmRsZXIiLCJhcHBEaXYiLCJmaWdodFBhZ2UiLCJwbGF5ZXJPbmVOYW1lIiwicGxheWVyVHdvTmFtZSIsImNyZWF0ZVBsYXllckZpZ2h0TmFtZXMiLCJzdGFydEJhdHRsZSIsImNyZWF0ZUNob29zZVBhZ2UiLCJjcmVhdGVQbGF5ZXJOYW1lcyIsInBva2Vtb25GYWN0b3J5IiwiUG9rZW1vbkZhY3RvcnkiLCJmb3JFYWNoIiwicG9rZW1vbkltYWdlIiwiZmFjdG9yeSIsImNsaWNrZWRQb2tlbW9uIiwidGFyZ2V0IiwiaWQiLCJuZXdQb2tlbW9uT2JqZWN0IiwiYWRkUG9rZW1vbiIsImN1cnNvciIsImZpbHRlciIsImFkZENob3NlblBva2Vtb24iLCJwbGF5ZXJMYXN0UG9rZW1vbk5hbWUiLCJjcmVhdGVQb2tlYmFsbHMiLCJvbmNlIiwiY3JlYXRlUG9rZW1vbnMiLCJfaW5kZXhPZkFjdGl2ZVBva2Vtb24iLCJfaGFzTWFuZ28iLCJudW1PZkFjdGl2ZVBva2Vtb24iLCJhY3RpdmF0ZVN0YXJ0IiwibmFtZTFJbnB1dCIsIm5hbWUySW5wdXQiLCJzdGFydEJ1dHRvbiIsInZhbHVlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJzdGFydGluZ1BhZ2UiLCJwbGF5ZXIxTmFtZUlucHV0IiwicGxheWVyMk5hbWVJbnB1dCIsInNjcmVlblRvRGlzcGxheSIsImV4aXRCdXR0b24iLCJob3dUb1BsYXlCdXR0b24iLCJpbmZvTW9kYWwiLCJyZW5kZXJIb3dUb1BsYXlNb2RhbCIsImRpc3BsYXkiLCJwbGF5QnV0dG9uIiwiY2hvb3NlUG9rZW1vblNjcmVlbiIsIlBsYXllciIsInJlbmRlckNob29zZVBva2Vtb25TY3JlZW4iXSwibWFwcGluZ3MiOiJtQkFBTyxJQ0VNQSxFQUF5QixTQUFDQyxHQUNyQyxJQUFJQyxFQUF3QkMsU0FBU0MsY0FBYyx3QkFDbEIsSUFBakNILEVBQWFJLFNBQVNDLE9BQ2pCSixFQUFzQkssWUFBYyxnQ0FDcENMLEVBQXNCSyxZQUFpQk4sRUFBYU8sS0FBSSxzQkNTL0QsYUFXRSxXQUFZQSxFQUFjQyxFQUFlQyxFQUFlQyxFQUN0REMsRUFBdUJDLEVBQXNCQyxHQUU3Q0MsS0FBS0MsTUFBUVIsRUFDYk8sS0FBS0UsT0FBU1IsRUFDZE0sS0FBS0csT0FBU1IsRUFD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T3hCLFVBQVkyRCxFQUFhM0QsVUFFTCxTQUFDd0IsR0FDNUIsSUFBTXlDLEVBQVk1TSxTQUFTQyxjQUN6Qix3QkFFRmtLLEVBQU94QixXQUFhaUUsRUFBVWpFLFVBNkM5QmtFLENBQXFCN0MsR0E3QmZ1QyxFQUFtQnZNLFNBQVNDLGNBQWMsdUJBQzFDdU0sRUFBbUJ4TSxTQUFTQyxjQUFjLHVCQUMxQ2lNLEVBQWNsTSxTQUFTQyxjQUFjLHNCQUMzQ3NNLEVBQWlCOUYsaUJBQWlCLFNBQVMsV0FDdkNzRixFQUFjUSxFQUFrQkMsRUFBa0JOLE1BRXRETSxFQUFpQi9GLGlCQUFpQixTQUFTLFdBQ3ZDc0YsRUFBY1EsRUFBa0JDLEVBQWtCTixNQXBCaERTLEVBQWtCM00sU0FBU0MsY0FDL0IsdUJBRUkyTSxFQUFZNU0sU0FBU0MsY0FDekIsc0JBRUYwTSxFQUFnQmxHLGlCQUFpQixTQUFTLFdBQzlCbUcsRXJCckJJdEgsTUFBTXdILFFxQnFCQyxVckJoQnZCSixPQURNQSxHQURrQkQsRXFCb0JkRyxHckJuQnlCM00sY0FBYyxpQkFDakR5TSxFQUFZakcsaUJBQWlCLFNBQVMsV0FDcENnRyxFQUFnQm5ILE1BQU13SCxRQUFVLFVxQmdDRixTQUFDM0MsR0FDakMsSUFBTTRDLEVBQWEvTSxTQUFTQyxjQUMxQixzQkFFRjhNLFdBQVl0RyxpQkFBaUIsU0FBUyxXQUNwQyxJQUFNOEYsRUFBb0J2TSxTQUFTQyxjQUFjLHVCQUE0Q2tNLE1BQ3ZGSyxFQUFvQnhNLFNBQVNDLGNBQWMsdUJBQTRDa00sTUFDdkZhLEVBQXNCaE4sU0FBU0MsY0FDbkMseUJBRUZrSyxFQUFPeEIsVUFBWXFFLEVBQW9CckUsVUFDdkM4QixFQUFpQixJQUFJd0MsRUFBT1YsRUFBa0IsSUFBSyxJQUFJVSxFQUFPVCxFQUFrQixRQVVsRlUsQ0FBMEJsRCxLQUdOLE0iLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc2hvd01vZGFsID0gKFxyXG4gIHNjcmVlblRvRGlzcGxheTogSFRNTERpdkVsZW1lbnQsXHJcbiAgc3RhcnRpbmdQb3NpdGlvbjogc3RyaW5nXHJcbikgPT4ge1xyXG4gIHNjcmVlblRvRGlzcGxheS5zdHlsZS5kaXNwbGF5ID0gc3RhcnRpbmdQb3NpdGlvbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoaWRlTW9kYWwgPSAoc2NyZWVuVG9EaXNwbGF5OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gIGNvbnN0IGV4aXRCdXR0b24gPSBzY3JlZW5Ub0Rpc3BsYXkucXVlcnlTZWxlY3RvcihcIi5leGl0QnV0dG9uXCIpO1xyXG4gIGV4aXRCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBzY3JlZW5Ub0Rpc3BsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gIH0pO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi4vcGxheWVyQ2xhc3NcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVBY3RpdmVQbGF5ZXJOYW1lID0gKGFjdGl2ZVBsYXllcjogUGxheWVyKSA9PiB7XHJcbiAgbGV0IHdob0Nob29zZXNQb2tlbW9uVGV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjd2hvQ2hvb3Nlc1BhcmFncmFwaFwiKSE7XHJcbiAgYWN0aXZlUGxheWVyLnBva2Vtb25zLmxlbmd0aCA9PT0gM1xyXG4gICAgPyAod2hvQ2hvb3Nlc1Bva2Vtb25UZXh0LnRleHRDb250ZW50ID0gXCJXYWl0IGZvciB0aGUgZ2FtZSB0byBzdGFydC4uLlwiKVxyXG4gICAgOiAod2hvQ2hvb3Nlc1Bva2Vtb25UZXh0LnRleHRDb250ZW50ID0gYCR7YWN0aXZlUGxheWVyLm5hbWV9IGNob29zZXMgMSBwb2tlbW9uYCk7XHJcbn07XHJcbiIsImV4cG9ydCB0eXBlIFBva2Vtb25UeXBlID1cclxuICB8IFwiZ3Jhc3NcIlxyXG4gIHwgXCJwb2lzb25cIlxyXG4gIHwgXCJmaXJlXCJcclxuICB8IFwid2F0ZXJcIlxyXG4gIHwgXCJidWdcIlxyXG4gIHwgXCJub3JtYWxcIlxyXG4gIHwgXCJmbHlpbmdcIlxyXG4gIHwgXCJlbGVjdHJpY1wiXHJcbiAgfCBcImdyb3VuZFwiXHJcbiAgfCBcImZhaXJ5XCJcclxuICB8IFwicHN5Y2hpY1wiXHJcbiAgfCBcImZpZ2h0aW5nXCJcclxuICB8IFwicm9ja1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBva2Vtb24ge1xyXG5cclxuICByZWFkb25seSBfbmFtZTogc3RyaW5nO1xyXG4gIHJlYWRvbmx5IF9pbWFnZTogc3RyaW5nO1xyXG4gIHJlYWRvbmx5IF9tYXhIUDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRIUDogbnVtYmVyO1xyXG4gIHJlYWRvbmx5IF9hdHRhY2tQb2ludHM6IG51bWJlcjtcclxuICByZWFkb25seSBfZGVmZW5zZVBvaW50czogbnVtYmVyO1xyXG4gIHJlYWRvbmx5IF90eXBlczogUG9rZW1vblR5cGVbXTtcclxuICByZWFkb25seSBfbW92ZXM6IHsgbW92ZU5hbWU6IHN0cmluZzsgbW92ZVR5cGU6IFBva2Vtb25UeXBlIH1bXTtcclxuXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBpbWFnZTogc3RyaW5nLCBtYXhIUDogbnVtYmVyLCBhdHRhY2tQb2ludHM6IG51bWJlcixcclxuICAgIGRlZmVuc2VQb2ludHM6IG51bWJlciwgdHlwZXM6IFBva2Vtb25UeXBlW10sIG1vdmVzOiB7IG1vdmVOYW1lOiBzdHJpbmc7IG1vdmVUeXBlOiBQb2tlbW9uVHlwZSB9W10pIHtcclxuXHJcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgIHRoaXMuX2ltYWdlID0gaW1hZ2U7XHJcbiAgICB0aGlzLl9tYXhIUCA9IG1heEhQO1xyXG4gICAgdGhpcy5fY3VycmVudEhQID0gbWF4SFA7XHJcbiAgICB0aGlzLl9hdHRhY2tQb2ludHMgPSBhdHRhY2tQb2ludHM7XHJcbiAgICB0aGlzLl9kZWZlbnNlUG9pbnRzID0gZGVmZW5zZVBvaW50cztcclxuICAgIHRoaXMuX3R5cGVzID0gdHlwZXM7XHJcbiAgICB0aGlzLl9tb3ZlcyA9IG1vdmVzO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaW1hZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1hZ2U7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudEhQKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRIUDtcclxuICB9XHJcblxyXG4gIGdldCBtYXhIUCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhIUDtcclxuICB9XHJcblxyXG4gIHN1YnRyYWN0SFAocG9pbnRzVG9TdWJ0cmFjdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdIUCA9IHRoaXMuX2N1cnJlbnRIUCAtIHBvaW50c1RvU3VidHJhY3Q7XHJcbiAgICBpZiAobmV3SFAgPCAwKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRIUCA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jdXJyZW50SFAgPSBuZXdIUDtcclxuICB9XHJcblxyXG4gIGhlYWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJyZW50SFAgPSB0aGlzLl9tYXhIUDtcclxuICB9XHJcblxyXG4gIGdldCBhdHRhY2tQb2ludHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXR0YWNrUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmVuc2VQb2ludHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVmZW5zZVBvaW50cztcclxuICB9XHJcblxyXG4gIGdldCB0eXBlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl90eXBlcztcclxuICB9XHJcblxyXG4gIGdldCBtb3ZlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9tb3ZlcztcclxuICB9XHJcblxyXG4gIGlzQWxpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEhQID4gMDtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUG9rZW1vbiB9IGZyb20gXCIuL3Bva2Vtb25DbGFzc1wiXHJcbmltcG9ydCB7IFBva2Vtb25UeXBlIH0gZnJvbSBcIi4vcG9rZW1vbkNsYXNzXCJcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUG9rZW1vbkZhY3Rvcnkge1xyXG4gICAgcmVhZG9ubHkgX3Bva2Vtb25zOiBQb2tlbW9uW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocG9rZURhdGE6IHtcclxuICAgICAgICBuYW1lOiBzdHJpbmc7IHR5cGVzOiBzdHJpbmdbXTtcclxuICAgICAgICBzdGF0czogeyBocDogbnVtYmVyOyBhdHRhY2s6IG51bWJlcjsgZGVmZW5zZTogbnVtYmVyOyB9O1xyXG4gICAgICAgIG1vdmVzOiB7IG5hbWU6IHN0cmluZzsgYWNjdXJhY3k6IG51bWJlcjsgcG93ZXI6IG51bWJlcjsgdHlwZTogc3RyaW5nOyB9W11cclxuICAgIH1bXSkge1xyXG4gICAgICAgIHRoaXMuX3Bva2Vtb25zID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IHBva2Vtb24gb2YgcG9rZURhdGEpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBva2VJbWcgPSBcIi4uL2Fzc2V0cy9cIiArIHBva2Vtb24ubmFtZSArIFwiLnBuZ1wiXHJcblxyXG4gICAgICAgICAgICBjb25zdCBwb2tlTW92ZXMgPSBwb2tlbW9uLm1vdmVzLnJlZHVjZSggKHRhYiwgbW92ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGFiLnB1c2goe21vdmVOYW1lOiBtb3ZlLm5hbWUsIG1vdmVUeXBlOiBtb3ZlLnR5cGUgYXMgUG9rZW1vblR5cGV9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYlxyXG4gICAgICAgICAgICAgICAgfSwgW10gYXMge21vdmVOYW1lOiBzdHJpbmcsIG1vdmVUeXBlOiBQb2tlbW9uVHlwZX1bXSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBva2VUeXBlczogUG9rZW1vblR5cGVbXSA9IHBva2Vtb24udHlwZXMubWFwKHYgPT4gdiBhcyBQb2tlbW9uVHlwZSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBva2Vtb25PYmplY3QgPSBuZXcgUG9rZW1vbih0aGlzLl9jYXBpdGFsaXplKHBva2Vtb24ubmFtZSksIHBva2VJbWcsIFxyXG4gICAgICAgICAgICAgICAgcG9rZW1vbi5zdGF0cy5ocCwgcG9rZW1vbi5zdGF0cy5hdHRhY2ssIHBva2Vtb24uc3RhdHMuZGVmZW5zZSxcclxuICAgICAgICAgICAgICAgIHBva2VUeXBlcywgcG9rZU1vdmVzKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9rZW1vbnMucHVzaChwb2tlbW9uT2JqZWN0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9rZW1vbnMoKTogUG9rZW1vbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9rZW1vbnNcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb2tlbW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBva2Vtb24ge1xyXG4gICAgICAgIGNvbnN0IHBva2Vtb24gPSB0aGlzLl9wb2tlbW9ucy5maW5kKCBwb2tlbW9uID0+IHBva2Vtb24ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmIChwb2tlbW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2tlbW9uICR7bmFtZX0gaXMgbm90IGZvdW5kIGluIHRoZSBwb2tlbW9uIGZhY3RvcnlgKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9rZW1vblxyXG4gICAgfVxyXG5cclxuICAgIF9jYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXJDbGFzc1wiO1xyXG5pbXBvcnQgeyBHYW1lSGFuZGxlciB9IGZyb20gXCIuLi9nYW1lSGFuZGxlckNsYXNzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aXZlUG9rZW1vbiA9IChnYW1lSGFuZGxlcjogR2FtZUhhbmRsZXIpID0+IHtcclxuICBjb25zdCBwbGF5ZXJPbmVBY3RpdmVQb2tlbW9uSW1hZ2VBcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgIFwiI3Bva2Vtb24taW1hZ2UtcGxheWVyMVwiXHJcbiAgKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gIGNvbnN0IHBsYXllclR3b0FjdGl2ZVBva2Vtb25JbWFnZUFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjcG9rZW1vbi1pbWFnZS1wbGF5ZXIyXCJcclxuICApIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgY29uc3QgcGxheWVyT25lQWN0aXZlUG9rZW1vbk5hbWVBcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgIFwiI3Bva2Vtb24tbmFtZS1wbGF5ZXIxXCJcclxuICApIGFzIEhUTUxIZWFkaW5nRWxlbWVudDtcclxuICBjb25zdCBwbGF5ZXJUd29BY3RpdmVQb2tlbW9uTmFtZUFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjcG9rZW1vbi1uYW1lLXBsYXllcjJcIlxyXG4gICkgYXMgSFRNTEhlYWRpbmdFbGVtZW50O1xyXG4gIGNvbnN0IGNyZWF0ZVBva2Vtb24gPSAoXHJcbiAgICBwbGF5ZXI6IFBsYXllcixcclxuICAgIGltYWdlQXJlYTogSFRNTEltYWdlRWxlbWVudCxcclxuICAgIG5hbWVBcmVhOiBIVE1MSGVhZGluZ0VsZW1lbnRcclxuICApID0+IHtcclxuICAgIGNvbnN0IHBva2Vtb25OYW1lID0gcGxheWVyLmdldEFjdGl2ZVBva2Vtb24ubmFtZTtcclxuICAgIGltYWdlQXJlYS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgYC4vYXNzZXRzLyR7cG9rZW1vbk5hbWUudG9Mb3dlckNhc2UoKX0ucG5nYCk7XHJcbiAgICBuYW1lQXJlYS50ZXh0Q29udGVudCA9IHBva2Vtb25OYW1lO1xyXG4gIH07XHJcbiAgY3JlYXRlUG9rZW1vbihcclxuICAgIGdhbWVIYW5kbGVyLnBsYXllck9uZSxcclxuICAgIHBsYXllck9uZUFjdGl2ZVBva2Vtb25JbWFnZUFyZWEsXHJcbiAgICBwbGF5ZXJPbmVBY3RpdmVQb2tlbW9uTmFtZUFyZWFcclxuICApO1xyXG4gIGNyZWF0ZVBva2Vtb24oXHJcbiAgICBnYW1lSGFuZGxlci5wbGF5ZXJUd28sXHJcbiAgICBwbGF5ZXJUd29BY3RpdmVQb2tlbW9uSW1hZ2VBcmVhLFxyXG4gICAgcGxheWVyVHdvQWN0aXZlUG9rZW1vbk5hbWVBcmVhXHJcbiAgKTtcclxufTtcclxuIiwiaW1wb3J0IHsgR2FtZUhhbmRsZXIgfSBmcm9tIFwiLi4vZ2FtZUhhbmRsZXJDbGFzc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGl2ZVBsYXllciA9IChnYW1lSGFuZGxlcjogR2FtZUhhbmRsZXIpID0+IHtcclxuICBjb25zdCBhY3RpdmVQbGF5ZXJBcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgIFwiI2FjdGl2ZS1wbGF5ZXItaW5mb1wiXHJcbiAgKSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICBhY3RpdmVQbGF5ZXJBcmVhLnRleHRDb250ZW50ID0gYCR7Z2FtZUhhbmRsZXIuY3VycmVudFBsYXllci5uYW1lfSBub3cgaXMgeW91ciB0dXJuLiBHZXQgdGhlIHJldmVuZ2UhYDtcclxuICBjb25zdCBwbGF5ZXJPbmVVbmRlcmxpbmVBcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmaWdodC1wYWdlLXBsYXllcjFcIik7XHJcbiAgY29uc3QgcGxheWVyVHdvVW5kZXJsaW5lQXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZmlnaHQtcGFnZS1wbGF5ZXIyXCIpO1xyXG4gIGlmIChnYW1lSGFuZGxlci5jdXJyZW50UGxheWVyID09PSBnYW1lSGFuZGxlci5wbGF5ZXJPbmUpIHtcclxuICAgIHBsYXllclR3b1VuZGVybGluZUFyZWE/LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVQbGF5ZXJcIik7XHJcbiAgICBwbGF5ZXJPbmVVbmRlcmxpbmVBcmVhPy5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlUGxheWVyXCIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwbGF5ZXJPbmVVbmRlcmxpbmVBcmVhPy5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlUGxheWVyXCIpO1xyXG4gICAgcGxheWVyVHdvVW5kZXJsaW5lQXJlYT8uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVBsYXllclwiKTtcclxuICB9XHJcbn07XHJcbiIsImltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXJDbGFzc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUhQQmFycyA9IChwbGF5ZXJPbmU6IFBsYXllciwgcGxheWVyVHdvOiBQbGF5ZXIpID0+IHtcclxuICBjb25zdCBjcmVhdGVCYXIgPSAocGxheWVyOiBQbGF5ZXIsIEhQQmFyOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgbWF4SFAgPSBwbGF5ZXIuZ2V0QWN0aXZlUG9rZW1vbi5tYXhIUDtcclxuICAgIGNvbnN0IGN1cnJlbnRIUCA9IHBsYXllci5nZXRBY3RpdmVQb2tlbW9uLmN1cnJlbnRIUDtcclxuICAgIGNvbnN0IEhQSW5QZXJjZW50ID0gKGN1cnJlbnRIUCAvIG1heEhQKSAqIDEwMDtcclxuICAgIGNvbnNvbGUubG9nKEhQSW5QZXJjZW50KTtcclxuICAgIEhQQmFyLnN0eWxlLndpZHRoID0gYCR7SFBJblBlcmNlbnR9JWA7XHJcbiAgICBsZXQgSFBDbGFzc0xpc3QgPSBIUEJhci5jbGFzc0xpc3Q7XHJcbiAgICBpZiAoSFBJblBlcmNlbnQgPCAyMCkge1xyXG4gICAgICBIUENsYXNzTGlzdC5yZW1vdmUoXCJocEJhckhpZ2hMZXZlbFwiKTtcclxuICAgICAgSFBDbGFzc0xpc3QuYWRkKFwiaHBCYXJMb3dMZXZlbFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIEhQQ2xhc3NMaXN0LnJlbW92ZShcImhwQmFyTG93TGV2ZWxcIik7XHJcbiAgICAgIEhQQ2xhc3NMaXN0LmFkZChcImhwQmFySGlnaExldmVsXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29uc3QgcGxheWVyT25lSFBCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjaHAtYmFyLXBsYXllcjFcIlxyXG4gICkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgY29uc3QgcGxheWVyVHdvSFBCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjaHAtYmFyLXBsYXllcjJcIlxyXG4gICkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgY3JlYXRlQmFyKHBsYXllck9uZSwgcGxheWVyT25lSFBCYXIpO1xyXG4gIGNyZWF0ZUJhcihwbGF5ZXJUd28sIHBsYXllclR3b0hQQmFyKTtcclxufTtcclxuIiwiaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4uL3BsYXllckNsYXNzXCI7XHJcbmltcG9ydCB7IEdhbWVIYW5kbGVyIH0gZnJvbSBcIi4uL2dhbWVIYW5kbGVyQ2xhc3NcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVGaWdodFBhZ2VQb2tlYmFsbHMgPSAoZ2FtZUhhbmRsZXI6IEdhbWVIYW5kbGVyKSA9PiB7XHJcbiAgY29uc3QgY2hhbmdlQ2xhc3NPZkRpc2FibGVkUG9rZW1vbnMgPSAoXHJcbiAgICBwbGF5ZXI6IFBsYXllcixcclxuICAgIHBsYXllclBva2ViYWxsczogSFRNTEltYWdlRWxlbWVudFtdXHJcbiAgKSA9PiB7XHJcbiAgICBmb3IgKGxldCBpID0gMjsgaSA+IHBsYXllci5hbGl2ZVBva2Vtb25zLmxlbmd0aCAtIDE7IGktLSkge1xyXG4gICAgICBwbGF5ZXJQb2tlYmFsbHNbaV0uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkUG9rZW1vblwiKTtcclxuICAgIH1cclxuICB9O1xyXG4gIGNvbnN0IHBsYXllck9uZVBva2ViYWxscyA9IEFycmF5LmZyb20oXHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI2ZpZ2h0LXBhZ2UtcGxheWVyMSAucG9rZWJhbGxXaXRoUG9rZW1vblwiKVxyXG4gICkgYXMgSFRNTEltYWdlRWxlbWVudFtdO1xyXG4gIGNvbnN0IHBsYXllclR3b1Bva2ViYWxscyA9IEFycmF5LmZyb20oXHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI2ZpZ2h0LXBhZ2UtcGxheWVyMiAucG9rZWJhbGxXaXRoUG9rZW1vblwiKVxyXG4gICkgYXMgSFRNTEltYWdlRWxlbWVudFtdO1xyXG4gIGNoYW5nZUNsYXNzT2ZEaXNhYmxlZFBva2Vtb25zKGdhbWVIYW5kbGVyLnBsYXllck9uZSwgcGxheWVyT25lUG9rZWJhbGxzKTtcclxuICBjaGFuZ2VDbGFzc09mRGlzYWJsZWRQb2tlbW9ucyhnYW1lSGFuZGxlci5wbGF5ZXJUd28sIHBsYXllclR3b1Bva2ViYWxscyk7XHJcbn07XHJcbiIsImltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXJDbGFzc1wiO1xyXG5pbXBvcnQgeyBHYW1lSGFuZGxlciB9IGZyb20gXCIuLi9nYW1lSGFuZGxlckNsYXNzXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUFjdGl2ZVBva2Vtb24gfSBmcm9tIFwiLi9jcmVhdGVBY3RpdmVQb2tlbW9uXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUFjdGl2ZVBsYXllciB9IGZyb20gXCIuL2NyZWF0ZUFjdGl2ZVBsYXllclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVIUEJhcnMgfSBmcm9tIFwiLi9jcmVhdGVIUEJhcnNcIjtcclxuaW1wb3J0IHsgY3JlYXRlRmlnaHRQYWdlUG9rZWJhbGxzIH0gZnJvbSBcIi4vY3JlYXRlRmlnaHRQYWdlUG9rZWJhbGxzXCI7XHJcbmltcG9ydCB7IHVwZGF0ZU1vdmVzTGlzdCB9IGZyb20gXCIuL3VwZGF0ZU1vdmVzTGlzdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFjdGlvbnNCdXR0b25FdmVudExpc3RlbmVyID0gKFxyXG4gIC8vcGxheWVyOiBQbGF5ZXIsXHJcbiAgZ2FtZUhhbmRsZXI6IEdhbWVIYW5kbGVyXHJcbikgPT4ge1xyXG4gIGNvbnN0IGJhdHRsZUJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgXCJiYXR0bGVCdXR0b25cIlxyXG4gICkhIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+O1xyXG4gIGNvbnN0IGF0dGFja0J1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNhdHRhY2tCdXR0b25cIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IHN3aXRjaEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNzd2l0Y2hCdXR0b25cIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IG1hbmdvQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYW5nb0J1dHRvblwiKSEgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgY29uc3QgbWFuZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hbmdvXCIpISBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgYW5pbWF0aW9uQnV0dG9uc0VudHJ5KGJhdHRsZUJ1dHRvbnMpO1xyXG5cclxuICBhdHRhY2tCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIGFuaW1hdGlvbkJ1dHRvbnNFeGl0KGJhdHRsZUJ1dHRvbnMpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGdhbWVIYW5kbGVyLmdlbmVyYXRlQXR0YWNrQnV0dG9ucygpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfSk7XHJcbiAgc3dpdGNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBhbmltYXRpb25CdXR0b25zRXhpdChiYXR0bGVCdXR0b25zKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBnYW1lSGFuZGxlci5nZW5lcmF0ZVN3aXRjaEJ1dHRvbnMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH0pO1xyXG5cclxuICBpZiAoZ2FtZUhhbmRsZXIuY3VycmVudFBsYXllci5oYXNNYW5nbykge1xyXG4gICAgbWFnaWNGdW5jdGlvbihtYW5nb0J1dHRvbiwgYmF0dGxlQnV0dG9ucywgZ2FtZUhhbmRsZXIsIGVhdE1hbmdvKTtcclxuICB9IGVsc2Uge1xyXG4gICAgbWFuZ28uaW5uZXJIVE1MID0gXCIwXCI7XHJcbiAgICBtYW5nb0J1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRCdXR0b25cIik7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGF0dGFja3NCdXR0b25FdmVudExpc3RlbmVyID0gKGdhbWVIYW5kbGVyOiBHYW1lSGFuZGxlcikgPT4ge1xyXG4gIGNvbnN0IGF0dGFja0J1dHRvbk9uZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNhdHRhY2tCdXR0b25PbmVcIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IGF0dGFja0J1dHRvblR3byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNhdHRhY2tCdXR0b25Ud29cIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IGJhdHRsZUJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgXCJiYXR0bGVCdXR0b25cIlxyXG4gICkhIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+O1xyXG4gIGNvbnN0IGJhY2tCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2JhY2tCdXR0b25cIikhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICBhbmltYXRpb25CdXR0b25zRW50cnkoYmF0dGxlQnV0dG9ucyk7XHJcbiAgbWFnaWNGdW5jdGlvbihhdHRhY2tCdXR0b25PbmUsIGJhdHRsZUJ1dHRvbnMsIGdhbWVIYW5kbGVyLCBhdHRhY2spO1xyXG4gIG1hZ2ljRnVuY3Rpb24oYXR0YWNrQnV0dG9uVHdvLCBiYXR0bGVCdXR0b25zLCBnYW1lSGFuZGxlciwgYXR0YWNrKTtcclxuICBtYWdpY0Z1bmN0aW9uKGJhY2tCdXR0b24sIGJhdHRsZUJ1dHRvbnMsIGdhbWVIYW5kbGVyKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzd2l0Y2hCdXR0b25FdmVudExpc3RlbmVyID0gKGdhbWVIYW5kbGVyOiBHYW1lSGFuZGxlcikgPT4ge1xyXG4gIGNvbnN0IHN3aXRjaEJ1dHRvbk9uZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNzd2l0Y2hCdXR0b25PbmVcIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IHN3aXRjaEJ1dHRvblR3byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNzd2l0Y2hCdXR0b25Ud29cIlxyXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGNvbnN0IGJhdHRsZUJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgXCJiYXR0bGVCdXR0b25cIlxyXG4gICkhIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+O1xyXG4gIGNvbnN0IGJhY2tCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2JhY2tCdXR0b25cIikhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICBhbmltYXRpb25CdXR0b25zRW50cnkoYmF0dGxlQnV0dG9ucyk7XHJcblxyXG4gIG1hZ2ljRnVuY3Rpb24oc3dpdGNoQnV0dG9uT25lLCBiYXR0bGVCdXR0b25zLCBnYW1lSGFuZGxlciwgc3dpdGNoUG9rZSk7XHJcbiAgbWFnaWNGdW5jdGlvbihzd2l0Y2hCdXR0b25Ud28sIGJhdHRsZUJ1dHRvbnMsIGdhbWVIYW5kbGVyLCBzd2l0Y2hQb2tlKTtcclxuICBtYWdpY0Z1bmN0aW9uKGJhY2tCdXR0b24sIGJhdHRsZUJ1dHRvbnMsIGdhbWVIYW5kbGVyKTtcclxufTtcclxuXHJcbmNvbnN0IG1hZ2ljRnVuY3Rpb24gPSAoXHJcbiAgYnV0dG9uOiBIVE1MRGl2RWxlbWVudCxcclxuICBidXR0b25zOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50PixcclxuICBnYW1lSGFuZGxlcjogR2FtZUhhbmRsZXIsXHJcbiAgZnVuY3Rpb25Ub0NhbGw/OiBhbnlcclxuKSA9PiB7XHJcbiAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coYCR7YnV0dG9uLmlubmVyVGV4dH0gdXNlZCFgKTtcclxuICAgIGlmIChmdW5jdGlvblRvQ2FsbCkge1xyXG4gICAgICBmdW5jdGlvblRvQ2FsbChnYW1lSGFuZGxlciwgZSk7XHJcbiAgICAgIHVwZGF0ZU1vdmVzTGlzdChnYW1lSGFuZGxlciwgZnVuY3Rpb25Ub0NhbGwsIGUpO1xyXG4gICAgICBjcmVhdGVBY3RpdmVQb2tlbW9uKGdhbWVIYW5kbGVyKTtcclxuICAgICAgY3JlYXRlSFBCYXJzKGdhbWVIYW5kbGVyLnBsYXllck9uZSwgZ2FtZUhhbmRsZXIucGxheWVyVHdvKTtcclxuICAgICAgY3JlYXRlRmlnaHRQYWdlUG9rZWJhbGxzKGdhbWVIYW5kbGVyKTtcclxuICAgICAgZ2FtZUhhbmRsZXIuc3dpdGNoUGxheWVyKCk7XHJcbiAgICAgIGNyZWF0ZUFjdGl2ZVBsYXllcihnYW1lSGFuZGxlcik7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZ2FtZUhhbmRsZXIuZ2VuZXJhdGVBdHRhY2tCdXR0b25zKCk7XHJcbiAgICAgIGdhbWVIYW5kbGVyLmdlbmVyYXRlU3dpdGNoQnV0dG9ucygpO1xyXG4gICAgICBnYW1lSGFuZGxlci5nZW5lcmF0ZUFjdGlvbkJ1dHRvbnMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gICAgYW5pbWF0aW9uQnV0dG9uc0V4aXQoYnV0dG9ucyk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBhbmltYXRpb25CdXR0b25zRW50cnkgPSAoYnV0dG9uczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pID0+IHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGJ1dHRvbnNbaV0uc3R5bGUuYW5pbWF0aW9uID1cclxuICAgICAgXCJzY2FsZS1pbi1ob3ItY2VudGVyIDAuNXMgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSBib3RoXCI7XHJcbiAgICBidXR0b25zW2ldLnN0eWxlLmFuaW1hdGlvbkRlbGF5ID0gYCR7aSAqIDAuMTV9c2A7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYW5pbWF0aW9uQnV0dG9uc0V4aXQgPSAoYnV0dG9uczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pID0+IHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGJ1dHRvbnNbaV0uc3R5bGUuYW5pbWF0aW9uID1cclxuICAgICAgXCJzY2FsZS1vdXQtaG9yaXpvbnRhbCAwLjVzIGN1YmljLWJlemllcigwLjU1MCwgMC4wODUsIDAuNjgwLCAwLjUzMCkgYm90aFwiO1xyXG4gICAgYnV0dG9uc1tpXS5zdHlsZS5hbmltYXRpb25EZWxheSA9IGAke2kgKiAwLjE1fXNgO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBhdHRhY2sgPSAoZ2FtZUhhbmRsZXI6IEdhbWVIYW5kbGVyKSA9PiB7XHJcbiAgY29uc29sZS5sb2coXCJidW0gYnVtIGJhY2ghXCIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHN3aXRjaFBva2UgPSAoZ2FtZUhhbmRsZXI6IEdhbWVIYW5kbGVyLCBldmVudDogRXZlbnQpID0+IHtcclxuICBjb25zdCBuYW1lT2ZDaG9zZW5Qb2tlbW9uID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpXHJcbiAgICAudGV4dENvbnRlbnQ7XHJcbiAgZ2FtZUhhbmRsZXIuc3dpdGNoUG9rZW1vbihuYW1lT2ZDaG9zZW5Qb2tlbW9uISk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWF0TWFuZ28gPSAoZ2FtZUhhbmRsZXI6IEdhbWVIYW5kbGVyKSA9PiB7XHJcbiAgY29uc3QgbWFuZ29CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hbmdvQnV0dG9uXCIpISBhcyBIVE1MRGl2RWxlbWVudDtcclxuICBjb25zdCBtYW5nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWFuZ29cIikhIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIGdhbWVIYW5kbGVyLmN1cnJlbnRQbGF5ZXIudXNlTWFuZ28oKTtcclxuICBtYW5nby5pbm5lckhUTUwgPSBcIjBcIjtcclxuICBtYW5nb0J1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRCdXR0b25cIik7XHJcbn07XHJcbiIsImltcG9ydCB7IEdhbWVIYW5kbGVyIH0gZnJvbSBcIi4uL2dhbWVIYW5kbGVyQ2xhc3NcIjtcclxuaW1wb3J0IHsgYXR0YWNrLCBzd2l0Y2hQb2tlLCBlYXRNYW5nbyB9IGZyb20gXCIuL2J1dHRvbnNFdmVudExpc3RlbmVyc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHVwZGF0ZU1vdmVzTGlzdCA9IChcclxuICBnYW1lSGFuZGxlcjogR2FtZUhhbmRsZXIsXHJcbiAgY2FsbGVkRnVuY3Rpb246IGFueSxcclxuICBldmVudDogRXZlbnRcclxuKSA9PiB7XHJcbiAgY29uc3QgbW92ZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmdhbWVMb2dzXCIpITtcclxuICBjb25zdCBuZXdNb3ZlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgbGV0IG5ld01vdmVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJObyBtb3ZlIGZvdW5kXCIpO1xyXG4gIGNvbnN0IHBva2Vtb25OYW1lID0gZ2FtZUhhbmRsZXIuY3VycmVudFBsYXllci5nZXRBY3RpdmVQb2tlbW9uLm5hbWU7XHJcbiAgY29uc3QgYnV0dG9uQ29udGVudCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS50ZXh0Q29udGVudDtcclxuICBjb25zdCBwbGF5ZXJOYW1lID0gZ2FtZUhhbmRsZXIuY3VycmVudFBsYXllci5uYW1lO1xyXG4gIGNvbnNvbGUubG9nKCk7XHJcbiAgc3dpdGNoIChjYWxsZWRGdW5jdGlvbikge1xyXG4gICAgY2FzZSBhdHRhY2s6XHJcbiAgICAgIG5ld01vdmVUZXh0Lm5vZGVWYWx1ZSA9IGAke3BsYXllck5hbWV9OiAke3Bva2Vtb25OYW1lfSB1c2VkICR7YnV0dG9uQ29udGVudH0hYDtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIHN3aXRjaFBva2U6XHJcbiAgICAgIG5ld01vdmVUZXh0Lm5vZGVWYWx1ZSA9IGAke3BsYXllck5hbWV9IGNoYW5nZWQgUG9rZW1vbjogJHtwb2tlbW9uTmFtZX0gY29tZXMgaW50byBwbGF5IWA7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBlYXRNYW5nbzpcclxuICAgICAgbmV3TW92ZVRleHQubm9kZVZhbHVlID0gYCR7cGxheWVyTmFtZX0gdXNlZCBtYW5nbzogJHtwb2tlbW9uTmFtZX0gaXMgaGVhbGVkIWA7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgY29uc29sZS5sb2coXCJObyBtb3ZlIGZvdW5kXCIpO1xyXG4gIH1cclxuICBjb25zb2xlLmxvZyhuZXdNb3ZlKTtcclxuICBuZXdNb3ZlLmFwcGVuZChuZXdNb3ZlVGV4dCk7XHJcbiAgbW92ZUxpc3QuaW5zZXJ0QmVmb3JlKG5ld01vdmUsIG1vdmVMaXN0LmZpcnN0Q2hpbGQpO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi9wbGF5ZXJDbGFzc1wiO1xyXG5pbXBvcnQge1xyXG4gIGFjdGlvbnNCdXR0b25FdmVudExpc3RlbmVyLFxyXG4gIGF0dGFja3NCdXR0b25FdmVudExpc3RlbmVyLFxyXG4gIHN3aXRjaEJ1dHRvbkV2ZW50TGlzdGVuZXIsXHJcbn0gZnJvbSBcIi4vZmlnaHRQYWdlL2J1dHRvbnNFdmVudExpc3RlbmVyc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWVIYW5kbGVyIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BsYXllck9uZTogUGxheWVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGxheWVyVHdvOiBQbGF5ZXJcclxuICApIHt9XHJcblxyXG4gIHByaXZhdGUgX2N1cnJlbnRQbGF5ZXI6IFBsYXllciA9IHRoaXMuX3BsYXllck9uZTtcclxuXHJcbiAgZ2V0IHBsYXllck9uZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXJPbmU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGxheWVyVHdvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXllclR3bztcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50UGxheWVyKCk6IFBsYXllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBsYXllcjtcclxuICB9XHJcblxyXG4gIGdldCBvcHBvbmVudFBsYXllcigpOiBQbGF5ZXIge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRQbGF5ZXIgPT09IHRoaXMuX3BsYXllck9uZSkgcmV0dXJuIHRoaXMuX3BsYXllclR3bztcclxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXJPbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpZFBsYXllckxvb3NlKHBsYXllcjogUGxheWVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gcGxheWVyLmFsaXZlUG9rZW1vbnMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgaXNHYW1lRmluaXNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmRpZFBsYXllckxvb3NlKHRoaXMuX3BsYXllck9uZSkgfHxcclxuICAgICAgdGhpcy5kaWRQbGF5ZXJMb29zZSh0aGlzLl9wbGF5ZXJUd28pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lubmVyKCk6IFBsYXllciB8IEVycm9yIHtcclxuICAgIGlmICghdGhpcy5pc0dhbWVGaW5pc2hlZCgpKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IGdldCB0aGUgd2lubmVyLiBUaGUgZ2FtZSBpcyBub3Qgb3Zlci5cIik7XHJcbiAgICByZXR1cm4gdGhpcy5kaWRQbGF5ZXJMb29zZSh0aGlzLl9wbGF5ZXJPbmUpID09PSB0cnVlXHJcbiAgICAgID8gdGhpcy5fcGxheWVyVHdvXHJcbiAgICAgIDogdGhpcy5fcGxheWVyT25lO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoUGxheWVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VycmVudFBsYXllciA9XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRQbGF5ZXIgPT09IHRoaXMuX3BsYXllck9uZVxyXG4gICAgICAgID8gdGhpcy5fcGxheWVyVHdvXHJcbiAgICAgICAgOiB0aGlzLl9wbGF5ZXJPbmU7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hQb2tlbW9uKHBva2Vtb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRQbGF5ZXIuaW5kZXhPZkFjdGl2ZVBva2Vtb24gPSB0aGlzLl9jdXJyZW50UGxheWVyLnBva2Vtb25zLmZpbmRJbmRleChcclxuICAgICAgKHBva2Vtb24pID0+IHBva2Vtb24ubmFtZSA9PT0gcG9rZW1vbk5hbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFjdGlvbkJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmN1cnJlbnRQbGF5ZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcIlN0YXJ0IC0gYWN0aW9uIG1vZGFsXCIpO1xyXG4gICAgY29uc3QgYWN0aW9uQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY3Rpb25Nb2RhbHNcIikhO1xyXG4gICAgYWN0aW9uQ29udGFpbmVyLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGJhdHRsZUJ1dHRvblwiIGlkPVwiYXR0YWNrQnV0dG9uXCI+YXR0YWNrPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBiYXR0bGVCdXR0b25cIiBpZD1cInN3aXRjaEJ1dHRvblwiPnN3aXRjaDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24gYmF0dGxlQnV0dG9uXCIgaWQ9XCJtYW5nb0J1dHRvblwiPnVzZSBtYW5nbyAoPHNwYW4gaWQ9XCJtYW5nb1wiPjE8L3NwYW4+KTwvZGl2PmA7XHJcbiAgICBhY3Rpb25zQnV0dG9uRXZlbnRMaXN0ZW5lcih0aGlzKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQXR0YWNrQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuY3VycmVudFBsYXllcjtcclxuICAgIGNvbnNvbGUubG9nKFwiQXR0YWNrIGNob29zZSBtb2RhbFwiKTtcclxuICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWN0aW9uTW9kYWxzXCIpITtcclxuICAgIGFjdGlvbkNvbnRhaW5lci5pbm5lckhUTUwgPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBiYXR0bGVCdXR0b25cIiBpZD1cImF0dGFja0J1dHRvbk9uZVwiPiR7cGxheWVyLmdldEFjdGl2ZVBva2Vtb24ubW92ZXNbMF0ubW92ZU5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBiYXR0bGVCdXR0b25cIiBpZD1cImF0dGFja0J1dHRvblR3b1wiPiR7cGxheWVyLmdldEFjdGl2ZVBva2Vtb24ubW92ZXNbMV0ubW92ZU5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBiYXR0bGVCdXR0b25cIiBpZD1cImJhY2tCdXR0b25cIj5iYWNrPC9kaXY+YDtcclxuICAgIGF0dGFja3NCdXR0b25FdmVudExpc3RlbmVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVTd2l0Y2hCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxheWVyID0gdGhpcy5jdXJyZW50UGxheWVyO1xyXG4gICAgY29uc29sZS5sb2coXCJTd2l0Y2ggY2hvb3NlIG1vZGFsXCIpO1xyXG4gICAgY29uc3QgYWN0aW9uQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY3Rpb25Nb2RhbHNcIikhO1xyXG4gICAgYWN0aW9uQ29udGFpbmVyLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGJhdHRsZUJ1dHRvblwiIGlkPVwic3dpdGNoQnV0dG9uT25lXCI+JHtwbGF5ZXIubm90QWN0aXZlUG9rZW1vbnNbMF0ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGJhdHRsZUJ1dHRvblwiIGlkPVwic3dpdGNoQnV0dG9uVHdvXCI+JHtwbGF5ZXIubm90QWN0aXZlUG9rZW1vbnNbMV0ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGJhdHRsZUJ1dHRvblwiIGlkPVwiYmFja0J1dHRvblwiPmJhY2s8L2Rpdj5gO1xyXG4gICAgc3dpdGNoQnV0dG9uRXZlbnRMaXN0ZW5lcih0aGlzKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4uL3BsYXllckNsYXNzXCI7XHJcbmltcG9ydCB7IHN0YXJ0QmF0dGxlIH0gZnJvbSBcIi4uL2ZpZ2h0UGFnZS9zdGFydEJhdHRsZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBzdGFydEdhbWVJZlJlYWR5ID0gKHBsYXllck9uZTogUGxheWVyLCBwbGF5ZXJUd286IFBsYXllcikgPT4ge1xyXG4gIGlmIChwbGF5ZXJPbmUucG9rZW1vbnMubGVuZ3RoIDwgMyB8fCBwbGF5ZXJUd28ucG9rZW1vbnMubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gIGNvbnN0IGFwcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwXCIpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gIHN0YXJ0QmF0dGxlKHBsYXllck9uZSwgcGxheWVyVHdvLCBhcHApO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi4vcGxheWVyQ2xhc3NcIjtcclxuaW1wb3J0IHsgR2FtZUhhbmRsZXIgfSBmcm9tIFwiLi4vZ2FtZUhhbmRsZXJDbGFzc1wiO1xyXG5pbXBvcnQgeyBjcmVhdGVGaWdodFBhZ2UgfSBmcm9tIFwiLi9yZW5kZXJGaWdodFBhZ2VcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBzdGFydEJhdHRsZSA9IChcclxuICBwbGF5ZXJPbmU6IFBsYXllcixcclxuICBwbGF5ZXJUd286IFBsYXllcixcclxuICBhcHA6IEhUTUxEaXZFbGVtZW50XHJcbikgPT4ge1xyXG4gIGNvbnN0IGdhbWUgPSBuZXcgR2FtZUhhbmRsZXIocGxheWVyT25lLCBwbGF5ZXJUd28pO1xyXG4gIHNldFRpbWVvdXQoKCkgPT4gY3JlYXRlRmlnaHRQYWdlKGFwcCwgZ2FtZSksIDIwMDApO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi4vcGxheWVyQ2xhc3NcIjtcclxuaW1wb3J0IHsgR2FtZUhhbmRsZXIgfSBmcm9tIFwiLi4vZ2FtZUhhbmRsZXJDbGFzc1wiO1xyXG5pbXBvcnQgeyBjcmVhdGVBY3RpdmVQb2tlbW9uIH0gZnJvbSBcIi4vY3JlYXRlQWN0aXZlUG9rZW1vblwiO1xyXG5pbXBvcnQgeyBjcmVhdGVBY3RpdmVQbGF5ZXIgfSBmcm9tIFwiLi9jcmVhdGVBY3RpdmVQbGF5ZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlSFBCYXJzIH0gZnJvbSBcIi4vY3JlYXRlSFBCYXJzXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUZpZ2h0UGFnZVBva2ViYWxscyB9IGZyb20gXCIuL2NyZWF0ZUZpZ2h0UGFnZVBva2ViYWxsc1wiO1xyXG5cclxuY29uc3QgY3JlYXRlUGxheWVyRmlnaHROYW1lcyA9IChnYW1lSGFuZGxlcjogR2FtZUhhbmRsZXIpID0+IHtcclxuICBjb25zdCBwbGF5ZXJPbmVOYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgIFwiI2ZpZ2h0LXBhZ2UtcGxheWVyMS1uYW1lXCJcclxuICApIGFzIEhUTUxIZWFkaW5nRWxlbWVudDtcclxuICBjb25zdCBwbGF5ZXJUd29OYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgIFwiI2ZpZ2h0LXBhZ2UtcGxheWVyMi1uYW1lXCJcclxuICApIGFzIEhUTUxIZWFkaW5nRWxlbWVudDtcclxuICBwbGF5ZXJPbmVOYW1lLnRleHRDb250ZW50ID0gZ2FtZUhhbmRsZXIucGxheWVyT25lLm5hbWU7XHJcbiAgcGxheWVyVHdvTmFtZS50ZXh0Q29udGVudCA9IGdhbWVIYW5kbGVyLnBsYXllclR3by5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpZ2h0UGFnZSA9IChcclxuICBhcHBEaXY6IEhUTUxEaXZFbGVtZW50LFxyXG4gIGdhbWVIYW5kbGVyOiBHYW1lSGFuZGxlclxyXG4pID0+IHtcclxuICBjb25zdCBmaWdodFBhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjZmlnaHQtcGFnZS10ZW1wbGF0ZVwiXHJcbiAgKSBhcyBIVE1MVGVtcGxhdGVFbGVtZW50O1xyXG4gIGFwcERpdi5pbm5lckhUTUwgPSBmaWdodFBhZ2UuaW5uZXJIVE1MO1xyXG4gIGNyZWF0ZVBsYXllckZpZ2h0TmFtZXMoZ2FtZUhhbmRsZXIpO1xyXG4gIGNyZWF0ZUFjdGl2ZVBsYXllcihnYW1lSGFuZGxlcik7XHJcbiAgY3JlYXRlQWN0aXZlUG9rZW1vbihnYW1lSGFuZGxlcik7XHJcbiAgY3JlYXRlSFBCYXJzKGdhbWVIYW5kbGVyLnBsYXllck9uZSwgZ2FtZUhhbmRsZXIucGxheWVyVHdvKTtcclxuICBjcmVhdGVGaWdodFBhZ2VQb2tlYmFsbHMoZ2FtZUhhbmRsZXIpO1xyXG4gIC8vIGdlbmVyYXRlIGNob29zZSBhY3Rpb24gYnV0dG9uc1xyXG4gIGdhbWVIYW5kbGVyLmdlbmVyYXRlQWN0aW9uQnV0dG9ucygpO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi4vcGxheWVyQ2xhc3NcIjtcclxuaW1wb3J0IHsgY3JlYXRlQWN0aXZlUGxheWVyTmFtZSB9IGZyb20gXCIuL2NyZWF0ZUFjdGl2ZVBsYXllck5hbWVcIjtcclxuaW1wb3J0IHsgY3JlYXRlUGxheWVyTmFtZXMgfSBmcm9tIFwiLi9jcmVhdGVQbGF5ZXJOYW1lc1wiO1xyXG5pbXBvcnQgeyBjcmVhdGVQb2tlbW9ucyB9IGZyb20gXCIuL2NyZWF0ZVBva2Vtb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQ2hvb3NlUGFnZSA9IChwbGF5ZXJPbmU6IFBsYXllciwgcGxheWVyVHdvOiBQbGF5ZXIpID0+IHtcclxuICBsZXQgYWN0aXZlUGxheWVyID0gcGxheWVyT25lO1xyXG4gIGNyZWF0ZVBsYXllck5hbWVzKHBsYXllck9uZSwgcGxheWVyVHdvKTtcclxuICBjcmVhdGVBY3RpdmVQbGF5ZXJOYW1lKGFjdGl2ZVBsYXllcik7XHJcbiAgY3JlYXRlUG9rZW1vbnMocGxheWVyT25lLCBwbGF5ZXJUd28sIGFjdGl2ZVBsYXllcik7XHJcbn07XHJcbiIsImltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXJDbGFzc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsYXllck5hbWVzID0gKHBsYXllck9uZTogUGxheWVyLCBwbGF5ZXJUd286IFBsYXllcikgPT4ge1xyXG4gIGxldCBwbGF5ZXJPbmVOYW1lQXJlYVRleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Nob29zZVBhZ2VQbGF5ZXIxTmFtZVwiKSE7XHJcbiAgcGxheWVyT25lTmFtZUFyZWFUZXh0LnRleHRDb250ZW50ID0gcGxheWVyT25lLm5hbWU7XHJcbiAgbGV0IHBsYXllclR3b05hbWVBcmVhVGV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2hvb3NlUGFnZVBsYXllcjJOYW1lXCIpITtcclxuICBwbGF5ZXJUd29OYW1lQXJlYVRleHQudGV4dENvbnRlbnQgPSBwbGF5ZXJUd28ubmFtZTtcclxufTtcclxuIiwiaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4uL3BsYXllckNsYXNzXCI7XHJcbmltcG9ydCB7IFBva2Vtb25GYWN0b3J5IH0gZnJvbSBcIi4uL3Bva2Vtb25GYWN0b3J5XCI7XHJcbmltcG9ydCAqIGFzIGRhdGEgZnJvbSBcIi4uLy4uL2Fzc2V0cy9wb2tlX2RhdGEuanNvblwiO1xyXG5pbXBvcnQgeyBzdGFydEdhbWVJZlJlYWR5IH0gZnJvbSBcIi4vc3RhcnRHYW1lSWZSZWFkeVwiO1xyXG5pbXBvcnQgeyBhZGRDaG9zZW5Qb2tlbW9uIH0gZnJvbSBcIi4vYWRkQ2hvc2VuUG9rZW1vblwiO1xyXG5pbXBvcnQgeyBjcmVhdGVQb2tlYmFsbHMgfSBmcm9tIFwiLi9jcmVhdGVQb2tlYmFsbHNcIjtcclxuaW1wb3J0IHsgY3JlYXRlQWN0aXZlUGxheWVyTmFtZSB9IGZyb20gXCIuL2NyZWF0ZUFjdGl2ZVBsYXllck5hbWVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQb2tlbW9ucyA9IChcclxuICBwbGF5ZXJPbmU6IFBsYXllcixcclxuICBwbGF5ZXJUd286IFBsYXllcixcclxuICBhY3RpdmVQbGF5ZXI6IFBsYXllclxyXG4pID0+IHtcclxuICBjb25zdCBwb2tlRGF0YSA9IGRhdGEucG9rZW1vbnM7XHJcbiAgY29uc3QgcG9rZW1vbkZhY3RvcnkgPSBuZXcgUG9rZW1vbkZhY3RvcnkocG9rZURhdGEpO1xyXG4gIGNvbnN0IHBva2Vtb25JbWFnZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiNwb2tlbW9uTGlzdCBpbWdcIilcclxuICApIGFzIFtIVE1MSW1hZ2VFbGVtZW50XTtcclxuXHJcbiAgcG9rZW1vbkltYWdlcy5mb3JFYWNoKChwb2tlbW9uSW1hZ2UpID0+XHJcbiAgICBwb2tlbW9uSW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgXCJjbGlja1wiLFxyXG4gICAgICAoZSkgPT4ge1xyXG4gICAgICAgIGlmIChhY3RpdmVQbGF5ZXIucG9rZW1vbnMubGVuZ3RoID09PSAzKSByZXR1cm47XHJcbiAgICAgICAgYWRkQ2hvc2VuUG9rZW1vbihlLCBwb2tlbW9uRmFjdG9yeSwgYWN0aXZlUGxheWVyKTtcclxuICAgICAgICBjcmVhdGVQb2tlYmFsbHMocGxheWVyT25lLCBhY3RpdmVQbGF5ZXIpO1xyXG4gICAgICAgIC8vIGNoYW5nZSBwbGF5ZXJcclxuICAgICAgICBhY3RpdmVQbGF5ZXIgPSBhY3RpdmVQbGF5ZXIgPT09IHBsYXllck9uZSA/IHBsYXllclR3byA6IHBsYXllck9uZTtcclxuICAgICAgICBjcmVhdGVBY3RpdmVQbGF5ZXJOYW1lKGFjdGl2ZVBsYXllcik7XHJcbiAgICAgICAgc3RhcnRHYW1lSWZSZWFkeShwbGF5ZXJPbmUsIHBsYXllclR3byk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgb25jZTogdHJ1ZSB9XHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuIiwiaW1wb3J0IHsgUG9rZW1vbiB9IGZyb20gXCIuLi9wb2tlbW9uQ2xhc3NcIjtcclxuaW1wb3J0IHsgUG9rZW1vbkZhY3RvcnkgfSBmcm9tIFwiLi4vcG9rZW1vbkZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4uL3BsYXllckNsYXNzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgYWRkQ2hvc2VuUG9rZW1vbiA9IChcclxuICBldmVudDogRXZlbnQsXHJcbiAgZmFjdG9yeTogUG9rZW1vbkZhY3RvcnksXHJcbiAgYWN0aXZlUGxheWVyOiBQbGF5ZXJcclxuKSA9PiB7XHJcbiAgY29uc3QgY2xpY2tlZFBva2Vtb24gPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICBjb25zdCBwb2tlbW9uTmFtZSA9IGNsaWNrZWRQb2tlbW9uLmlkO1xyXG4gIGNvbnN0IG5ld1Bva2Vtb25PYmplY3Q6IFBva2Vtb24gPSBmYWN0b3J5LmdldFBva2Vtb25CeU5hbWUocG9rZW1vbk5hbWUpO1xyXG4gIGFjdGl2ZVBsYXllci5hZGRQb2tlbW9uKG5ld1Bva2Vtb25PYmplY3QpO1xyXG4gIGNsaWNrZWRQb2tlbW9uLnN0eWxlLmN1cnNvciA9IFwiZGVmYXVsdFwiO1xyXG4gIGNsaWNrZWRQb2tlbW9uLnN0eWxlLmZpbHRlciA9IFwiZ3JheXNjYWxlKDEwMCUpXCI7XHJcbn07XHJcbiIsImltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXJDbGFzc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBva2ViYWxscyA9IChwbGF5ZXJPbmU6IFBsYXllciwgYWN0aXZlUGxheWVyOiBQbGF5ZXIpID0+IHtcclxuICBjb25zdCBwbGF5ZXJQb2tlYmFsbHM6IEhUTUxJbWFnZUVsZW1lbnRbXSA9XHJcbiAgICBhY3RpdmVQbGF5ZXIgPT09IHBsYXllck9uZVxyXG4gICAgICA/IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiNjaG9vc2VQYWdlUGxheWVyMSBpbWdcIikpXHJcbiAgICAgIDogQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI2Nob29zZVBhZ2VQbGF5ZXIyIGltZ1wiKSk7XHJcbiAgY29uc3QgcGxheWVyTGFzdFBva2Vtb25OYW1lOiBzdHJpbmcgPSBhY3RpdmVQbGF5ZXIucG9rZW1vbnNbXHJcbiAgICBhY3RpdmVQbGF5ZXIucG9rZW1vbnMubGVuZ3RoIC0gMVxyXG4gIF0ubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gIGNvbnN0IG51bWJlck9mTGFzdFBva2Vtb246IG51bWJlciA9IGFjdGl2ZVBsYXllci5wb2tlbW9ucy5sZW5ndGggLSAxO1xyXG4gIHBsYXllclBva2ViYWxsc1tudW1iZXJPZkxhc3RQb2tlbW9uXS5zZXRBdHRyaWJ1dGUoXHJcbiAgICBcInNyY1wiLFxyXG4gICAgYC4vYXNzZXRzLyR7cGxheWVyTGFzdFBva2Vtb25OYW1lfS5wbmdgXHJcbiAgKTtcclxufTtcclxuIiwiaW1wb3J0IHsgUG9rZW1vbiB9IGZyb20gXCIuL3Bva2Vtb25DbGFzc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsYXllciB7XHJcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3Bva2Vtb25zOiBQb2tlbW9uW107XHJcbiAgcHJpdmF0ZSBfaW5kZXhPZkFjdGl2ZVBva2Vtb246IG51bWJlcjtcclxuICBwcml2YXRlIF9oYXNNYW5nbzogQm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHBva2Vtb25zOiBQb2tlbW9uW10pIHtcclxuICAgIGlmIChuYW1lLmxlbmd0aCA+IDgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG9vIGxvbmcgbmFtZVwiKTtcclxuICAgIH1cclxuICAgIGlmIChwb2tlbW9ucy5sZW5ndGggPiAzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIG51bWJlciBvZiBwb2tlbW9uc1wiKTtcclxuICAgIH1cclxuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5fcG9rZW1vbnMgPSBwb2tlbW9ucztcclxuICAgIHRoaXMuX2luZGV4T2ZBY3RpdmVQb2tlbW9uID0gMDtcclxuICAgIHRoaXMuX2hhc01hbmdvID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICB9XHJcbiAgZ2V0IHBva2Vtb25zKCk6IFBva2Vtb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9rZW1vbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5kZXhPZkFjdGl2ZVBva2Vtb24obnVtT2ZBY3RpdmVQb2tlbW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2luZGV4T2ZBY3RpdmVQb2tlbW9uID0gbnVtT2ZBY3RpdmVQb2tlbW9uO1xyXG4gIH1cclxuICBnZXQgZ2V0QWN0aXZlUG9rZW1vbigpOiBQb2tlbW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9wb2tlbW9uc1t0aGlzLl9pbmRleE9mQWN0aXZlUG9rZW1vbl07XHJcbiAgfVxyXG5cclxuICBnZXQgYWxpdmVQb2tlbW9ucygpOiBQb2tlbW9uW10ge1xyXG4gICAgY29uc3QgYWxpdmVQb2tlbW9uc1RhYjogUG9rZW1vbltdID0gdGhpcy5wb2tlbW9ucy5maWx0ZXIoKHBva2Vtb24pID0+XHJcbiAgICAgIHBva2Vtb24uaXNBbGl2ZSgpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGFsaXZlUG9rZW1vbnNUYWI7XHJcbiAgfVxyXG5cclxuICB1c2VNYW5nbygpOiB2b2lkIHwgRXJyb3Ige1xyXG4gICAgaWYgKCF0aGlzLl9oYXNNYW5nbylcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCB1c2UgbWFuZ28uIFlvdSB1c2UgYWxsIG1hbmdvc1wiKTtcclxuICAgIHRoaXMuX2hhc01hbmdvID0gZmFsc2U7XHJcbiAgICB0aGlzLmdldEFjdGl2ZVBva2Vtb24uaGVhbCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc01hbmdvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc01hbmdvO1xyXG4gIH1cclxuXHJcbiAgYWRkUG9rZW1vbihwb2tlbW9uOiBQb2tlbW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb2tlbW9ucy5wdXNoKHBva2Vtb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vdEFjdGl2ZVBva2Vtb25zKCk6IFBva2Vtb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb2tlbW9ucy5maWx0ZXIoXHJcbiAgICAgIChwb2tlbW9uKSA9PiBwb2tlbW9uLm5hbWUgIT09IHRoaXMuZ2V0QWN0aXZlUG9rZW1vbi5uYW1lXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3QgYWN0aXZhdGVTdGFydCA9IChuYW1lMUlucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBuYW1lMklucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBzdGFydEJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQpID0+IHtcclxuICAgIGlmIChuYW1lMUlucHV0LnZhbHVlLmxlbmd0aCA+IDAgJiYgbmFtZTJJbnB1dC52YWx1ZS5sZW5ndGggPiAwICYmIG5hbWUxSW5wdXQudmFsdWUubGVuZ3RoIDw9IDggJiYgbmFtZTJJbnB1dC52YWx1ZS5sZW5ndGggPD0gOCkge1xyXG4gICAgICAgIHN0YXJ0QnV0dG9uLmNsYXNzTmFtZSA9ICdidXR0b24tZW5hYmxlZCdcclxuICAgICAgICBzdGFydEJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzdGFydEJ1dHRvbi5jbGFzc05hbWUgPSAnYnV0dG9uLWRpc2FibGVkJ1xyXG4gICAgICAgIHN0YXJ0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IHsgc2hvd01vZGFsLCBoaWRlTW9kYWwgfSBmcm9tIFwiLi9tb2RhbFBvcFVwRnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUNob29zZVBhZ2UgfSBmcm9tIFwiLi9jaG9vc2VQb2tlbW9uc1BhZ2UvY2hvb3NlUG9rZW1vbnNQYWdlXCJcclxuaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4vcGxheWVyQ2xhc3NcIjtcclxuaW1wb3J0IHsgYWN0aXZhdGVTdGFydCB9IGZyb20gJy4vYWN0aXZhdGVTdGFydCc7XHJcblxyXG5jb25zdCByZW5kZXJTdGFydGluZ1BhZ2UgPSAoYXBwRGl2OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gIGNvbnN0IHN0YXJ0aW5nUGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNzdGFydGluZy1wYWdlLXRlbXBsYXRlXCJcclxuICApIGFzIEhUTUxUZW1wbGF0ZUVsZW1lbnQ7XHJcbiAgYXBwRGl2LmlubmVySFRNTCA9IHN0YXJ0aW5nUGFnZS5pbm5lckhUTUw7XHJcbn07XHJcbmNvbnN0IHJlbmRlckhvd1RvUGxheU1vZGFsID0gKGFwcERpdjogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBjb25zdCBpbmZvTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjaW5mby1tb2RhbC10ZW1wbGF0ZVwiXHJcbiAgKSBhcyBIVE1MVGVtcGxhdGVFbGVtZW50O1xyXG4gIGFwcERpdi5pbm5lckhUTUwgKz0gaW5mb01vZGFsLmlubmVySFRNTDtcclxufTtcclxuY29uc3QgY3JlYXRlSG93VG9QbGF5QnV0dG9uID0gKCkgPT4ge1xyXG4gIGNvbnN0IGhvd1RvUGxheUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIiNob3ctdG8tcGxheS1idXR0b25cIlxyXG4gICkgYXMgSFRNTFVMaXN0RWxlbWVudDtcclxuICBjb25zdCBpbmZvTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjaW5mby1tb2RhbC1zY3JlZW5cIlxyXG4gICkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgaG93VG9QbGF5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBzaG93TW9kYWwoaW5mb01vZGFsLCBcImZsZXhcIik7XHJcbiAgfSk7XHJcbiAgaGlkZU1vZGFsKGluZm9Nb2RhbCk7XHJcbn07XHJcblxyXG5jb25zdCBhY3RpdmF0ZVN0YXJ0QnV0dG9uID0gKCkgPT4ge1xyXG4gIGNvbnN0IHBsYXllcjFOYW1lSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZW50ZXItcGxheWVyMS1uYW1lJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICBjb25zdCBwbGF5ZXIyTmFtZUlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2VudGVyLXBsYXllcjItbmFtZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgY29uc3Qgc3RhcnRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3N0YXJ0LWdhbWUtYnV0dG9uXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gIHBsYXllcjFOYW1lSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICgpID0+IHtcclxuICAgICAgYWN0aXZhdGVTdGFydChwbGF5ZXIxTmFtZUlucHV0LCBwbGF5ZXIyTmFtZUlucHV0LCBzdGFydEJ1dHRvbilcclxuICB9KVxyXG4gIHBsYXllcjJOYW1lSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICgpID0+IHtcclxuICAgICAgYWN0aXZhdGVTdGFydChwbGF5ZXIxTmFtZUlucHV0LCBwbGF5ZXIyTmFtZUlucHV0LCBzdGFydEJ1dHRvbilcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IHJlbmRlckNob29zZVBva2Vtb25TY3JlZW4gPSAoYXBwRGl2OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gIGNvbnN0IHBsYXlCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCIjc3RhcnQtZ2FtZS1idXR0b25cIlxyXG4gICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgcGxheUJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIGNvbnN0IHBsYXllcjFOYW1lSW5wdXQgPSAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2VudGVyLXBsYXllcjEtbmFtZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgY29uc3QgcGxheWVyMk5hbWVJbnB1dCA9IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZW50ZXItcGxheWVyMi1uYW1lJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICBjb25zdCBjaG9vc2VQb2tlbW9uU2NyZWVuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIjY2hvb3NlLXBhZ2UtdGVtcGxhdGVcIlxyXG4gICAgKSBhcyBIVE1MVGVtcGxhdGVFbGVtZW50O1xyXG4gICAgYXBwRGl2LmlubmVySFRNTCA9IGNob29zZVBva2Vtb25TY3JlZW4uaW5uZXJIVE1MO1xyXG4gICAgY3JlYXRlQ2hvb3NlUGFnZShuZXcgUGxheWVyKHBsYXllcjFOYW1lSW5wdXQsIFtdKSwgbmV3IFBsYXllcihwbGF5ZXIyTmFtZUlucHV0LCBbXSkpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5jb25zdCByZW5kZXJBcHAgPSAoKSA9PiB7XHJcbiAgY29uc3QgYXBwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHBcIikgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgcmVuZGVyU3RhcnRpbmdQYWdlKGFwcCk7XHJcbiAgcmVuZGVySG93VG9QbGF5TW9kYWwoYXBwKTtcclxuICBhY3RpdmF0ZVN0YXJ0QnV0dG9uKCk7XHJcbiAgY3JlYXRlSG93VG9QbGF5QnV0dG9uKCk7XHJcbiAgcmVuZGVyQ2hvb3NlUG9rZW1vblNjcmVlbihhcHApO1xyXG59O1xyXG5cclxuc2V0VGltZW91dChyZW5kZXJBcHAsIDIwMDApO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/index.html b/index.html index cf6cc49..e0b516b 100644 --- a/index.html +++ b/index.html @@ -152,7 +152,7 @@

HP:

- + diff --git a/src/choosePokemonsPage/createPokeballs.ts b/src/choosePokemonsPage/createPokeballs.ts index 2640f9d..c6aa7e4 100644 --- a/src/choosePokemonsPage/createPokeballs.ts +++ b/src/choosePokemonsPage/createPokeballs.ts @@ -11,6 +11,6 @@ export const createPokeballs = (playerOne: Player, activePlayer: Player) => { const numberOfLastPokemon: number = activePlayer.pokemons.length - 1; playerPokeballs[numberOfLastPokemon].setAttribute( "src", - `./assets/${playerLastPokemonName}.png` + `./assets/${playerLastPokemonName}.png` // `./${playerLastPokemonName}.eadfd35a.png` For Abra works :D ); };