{"created_by":"Fahad Karim","description":"This artwork is best experienced full screen on laptop/desktop using Chrome: https://www.fahadkarim.com/spaghetty\n\n—\n\nThe last few years have seen a mainstream explosion of AI, from text-to-image generators to open-ended multimodal conversations with machines. How did we get here and what does the future look like?\n\nThese questions were the basis for ‘Would you like some assistance today?’ - a highly interactive browser-based artwork by Fahad Karim that takes viewers on a journey of examining their relationship with AI. The story is told through a collaborative generative art experience in which a character named Spaghetty assists you in creating art.\n\nThe aesthetics, dialogue, and mannerisms of Spaghetty may feel nostalgic - they are directly inspired by Microsoft’s Clippy, one of the first, most memorable, and most famously annoying ‘productivity assistants’ of tech history. For those who persevere, the conversation with Spaghetty can take some unexpected turns - progressing from the basics of generative art (composition, color palettes, the infinite space of randomness) to more philosophical and controversial topics suddenly relevant in our race to outdo each other’s AIs and achieve artificial general intelligence (or, you know, the technological singularity).","external_url":"https://www.fahadkarim.com/projects/wylsat","name":"Would you like some assistance today?","animation_details":"{\"format\":\"HTML\"}","animation_url":"data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBtYXhpbXVtLXNjYWxlPTEiPgogICAgPHRpdGxlPidXb3VsZCB5b3UgbGlrZSBzb21lIGFzc2lzdGFuY2UgdG9kYXk/JyBieSBGYWhhZCBLYXJpbTwvdGl0bGU+CiAgICA8bGluayByZWw9Imljb24iIGhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwKICAgICAgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMDAgMTAwJz4KICAgICAgICA8dGV4dCB4PSc1MCcgeT0nODUnIGZvbnQtc2l6ZT0nODUnIHRleHQtYW5jaG9yPSdtaWRkbGUnPvCfk448L3RleHQ+CiAgICAgIDwvc3ZnPiI+CiAgICA8c3R5bGU+CiAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIGNhbnZhcyB7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgogICAgPHNjcmlwdD5jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy50PSExO2xldCB0PWZ1bmN0aW9uKHQpe2xldCBpPXBhcnNlSW50KHQuc3Vic3RyKDAsOCksMTYpLGU9cGFyc2VJbnQodC5zdWJzdHIoOCw4KSwxNikscz1wYXJzZUludCh0LnN1YnN0cigxNiw4KSwxNiksaD1wYXJzZUludCh0LnN1YnN0cigyNCw4KSwxNik7cmV0dXJuIGZ1bmN0aW9uKCl7aXw9MCxlfD0wLHN8PTAsaHw9MDtsZXQgdD0oaStlfDApK2h8MDtyZXR1cm4gaD1oKzF8MCxpPWVeZT4+PjksZT1zKyhzPDwzKXwwLHM9czw8MjF8cz4+PjExLHM9cyt0fDAsKHQ+Pj4wKS80Mjk0OTY3Mjk2fX07dGhpcy5pPW5ldyB0KGcuc3Vic3RyKDIsMzIpKSx0aGlzLmg9bmV3IHQoZy5zdWJzdHIoMzQsMzIpKTtmb3IobGV0IHQ9MDt0PDFlNjt0Kz0yKXRoaXMuaSgpLHRoaXMuaCgpfWwoKXtyZXR1cm4gdGhpcy50PSF0aGlzLnQsdGhpcy50P3RoaXMuaSgpOnRoaXMuaCgpfW8odD0wLGk9MSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dGhpcy5wKHQpOnQrKGktdCkqdGhpcy5sKCl9dSh0PTAsaT0xLGU9Mil7cmV0dXJuIHQrKGktdCkqTWF0aC5wb3codGhpcy5sKCksZSl9Xyh0LGkpe3JldHVybiBNYXRoLmZsb29yKHRoaXMubyh0LGkrMSkpfXAodCl7cmV0dXJuIHRbdGhpcy5fKDAsdC5sZW5ndGgtMSldfU0odCxpLGU9bnVsbCl7bGV0IHM9aS5yZWR1Y2UoKCh0LGkpPT50K2kpLDApLGg9aS5zbGljZSgpLm1hcCgodD0+dC9zKSksbj1udWxsIT1lP2U6dGhpcy5sKCksbD0wO2ZvcihsZXQgaT0wO2k8aC5sZW5ndGg7aSsrKWlmKGwrPWhbaV0sbjxsKXJldHVybiB0W2ldfX1mdW5jdGlvbiBpKCl7aGFzaD0iMHgiO2Zvcih2YXIgdD0wO3Q8NjQ7dCsrKWhhc2grPU1hdGguZmxvb3IoMTYqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO3JldHVybiBoYXNofWNvbnN0IGU9MSxzPTIsaD0zLG49NCxsPTUscj02LG89NyxhPTgsdT05LGM9MTAsZj0xMSxfPTEyLGQ9MTMsTT0xNCxiPTE1LHc9MTYseT0xNyxtPTE4LHg9MTk7dmFyIGc7bGV0IGs9Imh0dHBzOi8vZ2VuZXJhdG9yLmFydGJsb2Nrcy5pby8lY29udHJhY3QlLyV0b2tlbiUiLFc9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3A1LmpzLzEuMC4wL3A1Lm1pbi5qcyIsdj1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxaPXYuc2VhcmNoUGFyYW1zLmdldCgiaGFzaCIpLEc9di5zZWFyY2hQYXJhbXMuZ2V0KCJhYl9nZW5lcmF0b3JfdXJsIiksTD12LnNlYXJjaFBhcmFtcy5nZXQoInA1X3YxX3VybCIpO2c9bnVsbCE9WiYmNjY9PVoubGVuZ3RoP1o6Ij8iPT1aP2koKToiMHg5OTg2NDhhNTVjZjRkMTQ3YmJlMzI0NTFjYjhlMmM0ZDA1Mjk4NmE5ZjgzYTg1YWI3Njk5Y2IyZjRlNGMxZDIxIixudWxsIT1HJiYoaz1HKSxudWxsIT1MJiYoVz1MKSxjb25zb2xlLmxvZygiJ1dvdWxkIHlvdSBsaWtlIHNvbWUgYXNzaXN0YW5jZSB0b2RheT8nXG5GYWhhZCBLYXJpbVxuMjAyM1xuaHR0cHM6Ly9mYWhhZGthcmltLmNvbSIpO2xldCBSLFk9bnVsbCxYPW51bGwsVj1udWxsLFM9bnVsbCxKPW51bGwsRT1udWxsLE49bnVsbCxGPW51bGwsVT1udWxsLHo9bnVsbCxRPW51bGwsST1udWxsLGo9bnVsbCxIPW51bGwsQj1udWxsLEE9W10sQz0wLFQ9MCxEPTAsJD0tMSxLPTAscT0wLFA9MCxPPTAsdHQ9bnVsbCxpdD0hMSxldD0yLHN0PSExLGh0PS0xLG50PTAsbHQ9MCxydD0hMSxvdD1uZXcgTWFwLGF0PW5ldyBNYXAscHQ9bnVsbCx1dD0wLGN0PVtdLGZ0PSIiLF90PTAsZHQ9MCxNdD0uNDIsYnQ9ITEsd3Q9ITEseXQ9ITEsbXQ9ITEseHQ9ITEsZ3Q9ITEsa3Q9bnVsbCxXdD1hbmFseXNlcj1kYXRhQXJyYXk9YnVmZmVyTGVuZ3RoPW51bGwsdnQ9bnVsbCxadD0wLEd0PTAsTHQ9ITAsUnQ9MCxZdD0hMSxYdD0hMSxWdD0wLFN0PSExLEp0PSExLEV0PTAsTnQ9ITEsRnQ9MCxVdD0wLHp0PTUsUXQ9MCxJdD0wLGp0PTAsSHQ9ITEsQnQ9ITEsQXQ9W10sQ3Q9WzIzMCwyMDAsMzA1LDI4NSwzNTAsMCwxMjAsMTUsMTYwLDMwLDUwLDgwLDIxMCwyNjBdLFR0PW5ldyBNYXA7VHQuc2V0KGUsIlFYTnphWE4wWVc1alpRPT0iKSxUdC5zZXQocywiVFc5MlpTeE1ZWGx2ZFhRc1EyOXRjRzl6YVhScGIyNHNVRzl6YVhScGIyNHNVR3hoWTJWdFpXNTBMRU52YjNKa2FXNWhkR1Z6TEVkeWFXUXNVM0JoWTJVc2JHOWpZWFJwYjI0c2FXNTBaWEpoWTNScGRtVT0iKSxUdC5zZXQoYywiUkdWc1pYUmxMRTFwYm1sdFlXeHBjMjBzVW1WdGIzWmxMRU5zWldGeUxFeGxjM01zUTJGdVkyVnNMRlZ1Wkc4c2MybHRjR3hsY2l4dVpXZGhkR2wyWlNCemNHRmpaUT09IiksVHQuc2V0KGgsIlUyRjJaU3hFYjNkdWJHOWhaQ3hLVUVjc1JtbHNaU3hCY21Ob2FYWmxMRU52Ym5ObGNuWmhkR2x2Yml4U1pYUmhhVzRzVTJOeVpXVnVjMmh2ZEN4amRISnNLM009IiksVHQuc2V0KG4sIlVtVm1jbVZ6YUN4U1pXSjFhV3hrTEVsdVptbHVhWFI1TEdkbGJtVnlZWFJ2Y2l4U1pXZGxibVZ5WVhSbExISmhibVJ2YlNncExFeDFZMnQ1TEdScFkyVXNiRzkwZEdWeWVTeGpkSEpzSzNJPSIpLFR0LnNldChyLCJRMjlzYjNJc1FpWlhMRWgxWlN4VFlYUjFjbUYwYVc5dUxFSnlhV2RvZEc1bGMzTXNVa2RDTEVOdmJHOTFjaXhNZFcxcGJtRnVZMlVzYlc5dlpBPT0iKSxUdC5zZXQodSwiU1c1MlpYSjBMRXhwWjJoMExFUmhjbXNzVG1sbmFIUXNSR0Y1TEVkdmIyUXNSWFpwYkE9PSIpLFR0LnNldChmLCJVMmx1WjNWc1lYSnBkSGtzUkc5dmJTeG1kWFIxY21Vc1ZHVmphRzV2Ykc5bmVTeE5ZV05vYVc1bGN5eFZibk4wYjNCd1lXSnNaU3hVY21GdWMyTmxibVJsYm1ObExITjFjR1Z5YUhWdFlXNHNiV2x6YzJsdmJpeDBjblZ6ZEN3eU1EUTUiKSxUdC5zZXQoTSwiWm5KcFpXNWtJSEpsY1hWbGMzUXNSbkpwWlc1a2MyaHBjQ3hJWVhCd2VTeERiMjF0ZFc1cGRIa3NSbUZ0YVd4NUxHSmxjM1JtY21sbGJtUXNkRzluWlhSb1pYSXNjR0Z5ZEc1bGNuTm9hWEFzY21GcGJtSnZkdz09IiksVHQuc2V0KGIsImFXUmxiblJwZEhrc1pYaHdjbVZ6YzJsdmJpeERiMnhzWVdJc1VIVnljRzl6WlN4TVpXZGhZM2tzUTI5dWRISnBZblYwYVc5dUxGQmxjbk52Ym1GcyIpLFR0LnNldCh3LCJVMlZsTEVWNVpYTXNRMkZ0WlhKaExGWnBjMmx2Yml4M1pXSmpZVzBzYzNWeWRtVnBiR3hoYm1ObExIQm9iM1J2WjNKaGNHaDVMR1JoZEdFc1lteHBibVE9IiksVHQuc2V0KHksIlNHVmhjaXhsWVhKekxGWnZhV05sTEZOdmRXNWtjeXgyYjJ4MWJXVXNUWFZ6YVdOaGJDeFRjR1ZsWTJnc1pHRjBZU3h6YVd4bGJtTmxMSEpoWkdsdiIpLFR0LnNldChfLCJZMjl0YldsemMybHZiaXhqWVhCcGRHRnNhWE50TEZCaGVXMWxiblFzVTJGc1lYSjVMRTF2Ym1WNUxFUnZiR3hoY25Nc1EyOXpkQ3hGZUhCbGJuTnBkbVVzVTJWeWRtbGpaU3hYWVd4c1pYUXNWSEpoYm5OaFkzUnBiMjRzUlZSSUxFSlVRdz09IiksVHQuc2V0KG0sIlNXNXpjR2x5WVhScGIyNHNSMlZ1WlhKaGRHbDJaU0JCY25Rc1RYVnpaWFZ0TEVScFoybDBZV3dnUVhKMExFZGhiR3hsY25rc1NXUmxZWE1zUldSMVkyRjBhVzl1TEVGd2NISmxZMmxoZEdsdmJpeGljbTkzYzJVc1lYSjBJR2hwYzNSdmNuaz0iKSxUdC5zZXQoeCwiUW14aFkyc2dZbTk0TEcxdlpHVnNMR0p5WVdsdUxHUmxZMmx6YVc5dWN5eHplWE4wWlcwc1FVa3NNQ3d4TEhKMWJHVnpMR1JwYzNSeWFXSjFkR2x2Ymc9PSIpO2xldCBEdD0iMHhhN2Q4ZDllZjhkOGNlODk5MmRmMzNkOGI4Y2Y0YWViYWJkNWJkMjcwIiwkdD0iMHg5OWE5YjdjMTExNmY5Y2VlYjE2NTJkZTA0ZDU5NjljY2U1MDliMDY5IixLdD0iMHgwYTFiYmQ1NzAzM2Y1N2U3YjY3NDM2MjFiNzlmY2I5ZWIyY2UzNjc2IixxdD1bW0R0LDMzM2U2LDUwMF0sW0t0LDE5ZTYsMTAwXSxbIjB4MDU5ZWRkNzJjZDM1M2RmNTEwNmQyYjljYzVhYjgzYTUyMjg3YWMzYSIsMCwxZTRdLFtEdCwxM2U2LDFlM10sW0R0LDI3ZTYsNzIwXSxbRHQsNzhlNiw5OTldLFtEdCwxMzhlNiwxZTNdLFtEdCwyMDZlNiw5ODBdLFtEdCwyODJlNiwxMDI0XSxbRHQsMzA0ZTYsODAwXSxbRHQsMzJlNyw1MDBdLFtEdCwzMzRlNiw1MDBdLFtEdCwzMzdlNiw3MDBdLFtEdCwzMzZlNiw0MDBdLFskdCw0MDdlNiw0MDBdLFskdCw0MjZlNiwxZTNdLFskdCw0MjhlNiw0NTBdLFskdCw0NTdlNiw3NzddLFskdCw0MTJlNiwzMDBdLFskdCw0NjZlNiwzMDBdLFskdCw0NzJlNiw2NTBdLFtEdCwyOGU3LDQwNF0sW0R0LDI4MWU2LDQyNl0sW0R0LDI5NGU2LDUxMl0sWyR0LDQ0NmU2LDIwMF0sWyIweDE0NTc4OTI0Nzk3M2M1ZDYxMmJmMTIxZTllNGVlZjg0YjYzZWI3MDciLDAsOTQwXSxbS3QsNDllNiwxMDBdLFtLdCw4ZTYsMTAwXSxbS3QsMTZlNiw0MDBdLFtLdCw0NmU2LDEwMF0sWyIweGUwMzRiYjJiMWI5NDcxZTExY2YxYTBhOTE5OWExNTZmYjIyN2FhNWQiLDAsNTAwXV0sUHQ9ZnVuY3Rpb24ocCl7cC5jdz0yNzAwLHAuY2g9MTgwMDtsZXQgdixaLEc9bnVsbCxMPW51bGw7cC5jb2xvck1vZGUocC5IU0IpO2xldCBEdD1wLmNvbG9yKDAsMCwxMDAsLjEyKSwkdD1wLmNvbG9yKDAsMCwwLC4xMiksS3Q9cC5jb2xvcigwLDAsMTAwLC4wNyksUHQ9cC5jb2xvcigwLDAsMCwuMDUpLE90PXAuY29sb3IoMjA1LDkwLDk4LDEpLHRpPTAsaWk9cC5jb2xvcigyMDUsOCwxMDAsLjY1KSxlaT1wLmNvbG9yKDAsMCwwLDEpLHNpPXAuY29sb3IoMCwwLDEwMCwxKSxoaT0xMjtwLnNjYWxlX2ZhY3Rvcj0xO2xldCBuaT0wLGxpPTEscmk9MSxvaT1uZXcgTWFwLGFpPW5ldyBNYXAscGk9bmV3IE1hcDtmdW5jdGlvbiB1aSh0PSExKXtHPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx3aW5kb3cuaW5uZXJXaWR0aHx8MCksTD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8MCksdD9jbnY9cC5yZXNpemVDYW52YXMoRyxMKTooIWZ1bmN0aW9uKCl7bGV0IHQ9RyxpPUwsZT1wLmN3L3AuY2gqaTtwLmN3LHAuY2g7cC5zY2FsZV9mYWN0b3I9ZTx0P2kvcC5jaDp0L3AuY3d9KCksY252PXAuY3JlYXRlQ2FudmFzKEcsTCkpLG51bGwhPUUmJkUucmVtb3ZlKCksRT1wLmNyZWF0ZUdyYXBoaWNzKEcsTCk7bGV0IGk9TWF0aC5yb3VuZChwLmN3KnAuc2NhbGVfZmFjdG9yKSxlPU1hdGgucm91bmQocC5jaCpwLnNjYWxlX2ZhY3Rvcik7dj0ocC53aWR0aC1pKS8yLFo9KHAuaGVpZ2h0LWUpLzJ9ZnVuY3Rpb24gY2koKXtyXz1uZXcgdDtsZXQgaT00Mjk0OTY3Mjk2KnJfLm8oKTtwLm5vaXNlU2VlZChpKX1mdW5jdGlvbiBmaSh0LGksZT0wLHM9MCl7dC5pbWFnZShpLGUscyxpLndpZHRoLGkuaGVpZ2h0KX1mdW5jdGlvbiBfaSh0LGkpe2xldCBlPU1hdGguY2VpbCh0KSxzPU1hdGguZmxvb3IoaSk7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoocy1lKStlKX1mdW5jdGlvbiBkaSh0LGkpe3JldHVybiBNYXRoLnJhbmRvbSgpKihpLXQpK3R9ZnVuY3Rpb24gTWkodCl7cmV0dXJuIHRbX2koMCx0Lmxlbmd0aCldfWZ1bmN0aW9uIGJpKCl7aWYobnVsbD09cHQpcmV0dXJuO0tpKG90LmdldChwdCkpLHB0PW51bGwsaXQ9ITEsSXQ9Q31mdW5jdGlvbiB3aSh0KXtpdD0hMDtsZXQgaT1vdC5nZXQodCk7aS5zdHlsZSgiZGlzcGxheSIsImJsb2NrIik7bGV0IGU9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHdpbmRvdy5pbm5lcldpZHRofHwwKSxzPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHwwKSxoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkuZWx0KSxuPXBhcnNlSW50KGguaGVpZ2h0LDEwKSxsPV9pKC41Kmkud2lkdGgsZS0xLjUqaS53aWR0aCkscj1faSguNSpuLHMtMS41Km4pOzIqaS53aWR0aD5lJiYobD1faSgwLGUtaS53aWR0aCkpLDIqbj5zJiYocj1faSgwLHMtbikpLGF0Lmhhcyh0KXx8YXQuc2V0KHQsWzAsMCwwLDAsMCwwXSk7bGV0IG89cWkoMi4yLDEpO2F0LnNldCh0LFtsLHIsaS53aWR0aCxuLGRpKC1vLG8pLGRpKC1vLG8pXSksaS5zdHlsZSgibGVmdCIsbCsicHgiKSxpLnN0eWxlKCJ0b3AiLHIrInB4IikscHQ9dH1mdW5jdGlvbiB5aSgpe3JldHVybiAkPDAmJlZ0PDM2MDAmJm51bGw9PXB0JiZNdD49LjQxNTgmJnR0Lm0oKSYmIXR0LmcoKSYmIXd0JiZDPjkwJiYhTnR9ZnVuY3Rpb24gbWkodCl7aWYoVDw2MCpvaS5nZXQodCkpcmV0dXJuIDA7bGV0IGk9KFQtZnVuY3Rpb24oKXtsZXQgdD14aSh5KSxpPXhpKHcpLGU9eGkoXykscz14aShmKSxoPXhpKGIpLG49eGkoTSksbD14aSh4KTtyZXR1cm4gTWF0aC5tYXgodCxpLGUscyxoLG4sbCl9KCkpLzYwLGU9R3Q+PTMmJmk+Mj8xOjAsbD1HdD49NyYmaT40PzE6MCxvPTIsYT0xO2lmKHQ9PXN8fHQ9PWN8fHQ9PXIpYT1MdD8xOjAsdD09ciYmKG89Myk7ZWxzZSBpZih0PT1oKWE9R3Q+Mj8xOjAsbz00O2Vsc2UgaWYodD09TSlvPTQsYT1KdD8wOmU7ZWxzZSBpZih0PT1iKW89NCxhPSFOdCYmdHQubSgzLC4xKT9lOjA7ZWxzZSBpZih0PT1mfHx0PT13fHx0PT15fHx0PT1ffHx0PT14KXtvPTY7bGV0IGk9ITA7dD09Zj9pPSFYdCYmbHQ+MCYmYWkuaGFzKHkpJiZhaS5oYXMoXykmJmFpLmhhcyh4KTp0PT13P2k9bnVsbD09a3QmJmFpLmhhcyh5KSYmVC14aSh5KT49NTQwOnQ9PXk/aT1udWxsPT12dCYmKGFpLmhhcyhiKXx8YWkuaGFzKE0pKTp0PT14JiYoaT0hSHQmJihhaS5oYXMoYil8fGFpLmhhcyhNKXx8YWkuaGFzKHkpKSxvPTEwKSxhPWk/bDowfWVsc2UgdD09bj8oYT0oTHQ/MToyKSooWXQ/MDoxKSooR3Q+Mj8xOjApLG89MytqdCk6dD09bSYmKGE9R3Q+NT8xOjAsbz01KTtsZXQgcD1waS5nZXQodCk7dD09XyYmKHA9dHQuazwuMjV8fFN0PzA6YSpNYXRoLm1pbigxLDIqdHQuaykqcCk7bGV0IHU9YWkuaGFzKHQpP2FpLmdldCh0KTouOCpvaS5nZXQodCkqNjAsZD0oVC11KS82MDtyZXR1cm4oKFQteGkodCkpLzYwPk1hdGgubWluKG8sb2kuZ2V0KHQpKT8xOjApKmEqcCooMStkLygzMC8oLjUrLjc1KihvLSh0PT1uP2p0OjApKSkpKX1mdW5jdGlvbiB4aSh0KXtyZXR1cm4gYWkuaGFzKHQpP2FpLmdldCh0KTowfWZ1bmN0aW9uIGdpKCl7YmkoKTtsZXQgdD1waS5nZXQobSk7cGkuc2V0KG0sTWF0aC5taW4oMTUsdCsuNSkpO2xldCBpLGU9TWF0aC5yYW5kb20oKTtpPWU8LjAyPzA6ZTwuMDY/MTpfaSgwLHF0Lmxlbmd0aCk7bGV0W3MsaCxuXT1xdFtpXSxsPWgrX2koMCxuKSxyPWsucmVwbGFjZSgiJWNvbnRyYWN0JSIscykucmVwbGFjZSgiJXRva2VuJSIsbC50b1N0cmluZygpKTt3aW5kb3cub3BlbihyLCJfYmxhbmsiKX1mdW5jdGlvbiBraSgpe2JpKCksa3Q9cC5jcmVhdGVDYXB0dXJlKHAuVklERU8sKCgpPT5odD1DKSksa3Quc2l6ZShZLndpZHRoLFkuaGVpZ2h0KSxrdC5oaWRlKCksZHQ9MH1mdW5jdGlvbiBXaSgpe2JpKCk7bGV0IHQ9cGkuZ2V0KHcpO3BpLnNldCh3LE1hdGgubWF4KDUsdC0yKSl9ZnVuY3Rpb24gdmkoKXtiaSgpO2xldCB0PXBpLmdldCh5KTtwaS5zZXQoeSxNYXRoLm1heCg1LHQtMikpfWZ1bmN0aW9uIFppKCl7YmkoKSxmdW5jdGlvbigpe2NvbnN0IHQ9d2luZG93Lld8fHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbjtsZXQgaT0iKioqIFRyeSB1c2luZyBDaHJvbWUgdG8gdW5sb2NrIGEgbW9yZSBpbnRlcmVzdGluZyBleHBlcmllbmNlICoqKiI7aWYoIlciaW4gd2luZG93fHwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iaW4gd2luZG93KXtsZXQgZT1uZXcgdDtlLmNvbnRpbnVvdXM9ITEsZS5tYXhBbHRlcm5hdGl2ZXM9MSxlLm9ucmVzdWx0PXQ9Pntjb25zdCB0cmFuc2NyaXB0PXQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0O0F0LnB1c2godHJhbnNjcmlwdCksVnQ8MjYwMCYmTXQ+PS40MTU4JiYhTnQmJigicmVmcmVzaCI9PXRyYW5zY3JpcHQ/KEhpKCksR2koKSk6ImNvbG9yIj09dHJhbnNjcmlwdD8oVGkoKSxHaSgpKToiYmxhY2sgYW5kIHdoaXRlIj09dHJhbnNjcmlwdHx8ImdyZXlzY2FsZSI9PXRyYW5zY3JpcHR8fCJncmF5c2NhbGUiPT10cmFuc2NyaXB0PyhEaSgpLEdpKCkpOiJpbnZlcnQiPT10cmFuc2NyaXB0PygkaSgpLEdpKCkpOiJibGluayI9PXRyYW5zY3JpcHQmJm51bGwhPXR0JiYodHQuYmxpbmsoMCksdHQuYmxpbmsoMSksdHQuYmxpbmsoMikpKX0sZS5vbmVuZD0oKT0+e2Uuc3RvcCgpLGUuc3RhcnQoKX0sZS5vbmVycm9yPXQ9Pnsibm8tc3BlZWNoIiE9dC5lcnJvciYmY29uc29sZS5sb2coIllvdXIgYnJvd3NlciBzYXlzOiAlc1xuXG4lcyIsdC5lcnJvcixpKX0sZS5zdGFydCgpfWVsc2UgY29uc29sZS5sb2coaSl9KCksbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe2F1ZGlvOiEwfSkudGhlbigodD0+e3Z0PVd0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHQpLHZ0LmNvbm5lY3QoYW5hbHlzZXIpLGFuYWx5c2VyLmZmdFNpemU9MjU2LGJ1ZmZlckxlbmd0aD1hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCxkYXRhQXJyYXk9bmV3IFVpbnQ4QXJyYXkoYnVmZmVyTGVuZ3RoKX0pKS5jYXRjaCgodD0+Y29uc29sZS5lcnJvcih0KSkpLCJydW5uaW5nIiE9PVd0LnN0YXRlJiZXdC5yZXN1bWUoKX1mdW5jdGlvbiBHaSgpey0xIT0kJiZpZSgpfWZ1bmN0aW9uIExpKCl7YmkoKSxKdD0hMCxFdD0wLHBpLnNldChNLDEyKX1mdW5jdGlvbiBSaSgpe2JpKCksSnQ9ITE7bGV0IHQ9cGkuZ2V0KE0pO3BpLnNldChNLE1hdGgubWF4KDAsdC0xKSksRXQrPS4wMDIyfWZ1bmN0aW9uIFlpKCl7YmkoKTtsZXQgdD1waS5nZXQoYik7cGkuc2V0KGIsTWF0aC5taW4oMzAsdCsyKSksTnQ9ITAsVXQ9NjAqZGkoMyx6dCksenQ9TWF0aC5taW4oMTQsenQrMiksRnQ9MH1mdW5jdGlvbiBYaSgpe2JpKCk7bGV0IHQ9cGkuZ2V0KGIpO3BpLnNldChiLE1hdGgubWF4KDAsdC0yKSl9ZnVuY3Rpb24gVmkoKXtiaSgpLGJ0PSExfWZ1bmN0aW9uIFNpKCl7YmkoKSxidD0hMH1mdW5jdGlvbiBKaSgpe2JpKCksaWUoKX1mdW5jdGlvbiBFaSgpe2JpKCksd3Q9ITAsc3Q9ITB9ZnVuY3Rpb24gTmkoKXtiaSgpLEFbJF0uaGlkZGVuPSEwLHN0PSEwLCQ9LTF9ZnVuY3Rpb24gRmkoKXtiaSgpLEh0PSEwLEJ0PSEwfWZ1bmN0aW9uIFVpKCl7YmkoKSxYdD0hMH1mdW5jdGlvbiB6aSgpe2JpKCk7bGV0IHQ9cGkuZ2V0KGYpO3BpLnNldChmLE1hdGgubWluKDE1LHQrMSkpLGV0Kz0uNX1mdW5jdGlvbiBRaSgpe2JpKCksUnQ9MCxTdD0hMSxFdCs9LjAwMX1mdW5jdGlvbiBJaSgpe2JpKCksUnQ9MSxTdD0hMCx0dC5rPTAsRXQ9MH1mdW5jdGlvbiBqaSgpe2JpKCkscC5zYXZlQ2FudmFzKCJXWUxTQVRfRmFoYWRLYXJpbV8iK2Z1bmN0aW9uKCl7Y29uc3QgdD1uZXcgRGF0ZTtyZXR1cm5gJHt0LmdldEZ1bGxZZWFyKCl9JHtTdHJpbmcodC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyh0LmdldERhdGUoKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKHQuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKHQuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCIwIil9JHtTdHJpbmcodC5nZXRTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsIjAiKX1gfSgpLCJqcGciKX1mdW5jdGlvbiBIaSgpe2JpKCksZz1pKCksY29uc29sZS5sb2coIkFuZCBqdXN0IGxpa2UgdGhhdCwgYSBuZXcgd29ybGQgaXMgZ2VuZXJhdGVkLiBSZXZpc2l0IHRoaXMgcGxhY2UgYXQgYW55dGltZSB1c2luZyB0aGUgZm9sbG93aW5nIFVSTCBwYXJhbTpcblxuaGFzaD0lcyIsZyksY2koKSxNdD0uMDUscmUoKSxzdD0hMH1mdW5jdGlvbiBCaSgpe2p0Kys7bGV0IHQ9cGkuZ2V0KG4pO3BpLnNldChuLE1hdGgubWF4KDAsdC00KSksYmkoKX1mdW5jdGlvbiBBaSgpe2JpKCksbXQ9ITB9ZnVuY3Rpb24gQ2koKXtiaSgpLHJ0PSExfWZ1bmN0aW9uIFRpKCl7YmkoKSx4dD0hMCxmdW5jdGlvbigpe21lKCksbGk9cl8uTShbMSxkaSgxLDEuNSksZGkoLjUsMSldLFsuNjUsLjE1LC4yXSxNYXRoLnJhbmRvbSgpKSxyaT1yXy5NKFsxLGRpKDEsMS41KSxkaSguNiwxKV0sWy43LC4xNSwuMTVdLE1hdGgucmFuZG9tKCkpO2Zvcihjb25zdCB0IG9mIEEpdC52KCl9KCksc3Q9ITB9ZnVuY3Rpb24gRGkoKXtiaSgpLHh0PSExLHN0PSEwfWZ1bmN0aW9uICRpKCl7YmkoKSxndD0hZ3Qsc3Q9ITB9ZnVuY3Rpb24gS2kodCl7dC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKX1mdW5jdGlvbiBxaSh0LGk9bnVsbCl7bGV0IGU9cC5zY2FsZV9mYWN0b3I+PTE/cC5zY2FsZV9mYWN0b3I6LjY1KnAuc2NhbGVfZmFjdG9yKy4zNSxzPU1hdGgucm91bmQoLjcyKnQqZSk7cmV0dXJuIG51bGwhPWkmJihzPU1hdGgubWF4KGkscykpLHN9ZnVuY3Rpb24gUGkodCxpLGUscz0xKXtsZXQgaD1wLmNyZWF0ZURpdigiIik7S2koaCk7bGV0IG49cC5jcmVhdGVTcGFuKCIiKSxsPXAuY3JlYXRlRGl2KCIiKSxyPXAuY3JlYXRlQnV0dG9uKCJZZXMiKSxvPXAuY3JlYXRlQnV0dG9uKCJObyIpO3JldHVybiByLm1vdXNlUHJlc3NlZChpKSxvLm1vdXNlUHJlc3NlZChlKSxoLmVsdC5hcHBlbmQobi5lbHQpLGguZWx0LmFwcGVuZChsLmVsdCksbC5lbHQuYXBwZW5kKHIuZWx0KSxsLmVsdC5hcHBlbmQoby5lbHQpLGguc3R5bGUoIndpZHRoIixxaSg1NTgqcykrInB4IiksaC5zdHlsZSgiaGVpZ2h0IiwiYXV0byIpLGguc3R5bGUoImJveC1zaXppbmciLCJib3JkZXItYm94IiksaC5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsIiNmY2ZlY2MiKSxoLnN0eWxlKCJib3JkZXItcmFkaXVzIixxaSgyOSkrInB4IiksaC5zdHlsZSgiYm9yZGVyIixxaSgzLjIsMSkrInB4IHNvbGlkICMwMDAiKSxoLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIiksaC5zdHlsZSgidG9wIiwiMHB4IiksaC5zdHlsZSgibGVmdCIsIjBweCIpLHRlKGgpLHRlKG4pLHRlKGwpLG4uc3R5bGUoImRpc3BsYXkiLCJibG9jayIpLG4uc3R5bGUoInBhZGRpbmciLHFpKDE5KSsicHgiKSxuLmh0bWwodCksbC5zdHlsZSgiZGlzcGxheSIsImZsZXgiKSxsLnN0eWxlKCJqdXN0aWZ5LWNvbnRlbnQiLCJzcGFjZS1iZXR3ZWVuIiksbC5zdHlsZSgid2lkdGgiLCIxMDAlIiksbC5zdHlsZSgicGFkZGluZyIscWkoMzIpKyJweCIpLGwuc3R5bGUoImJveC1zaXppbmciLCJib3JkZXItYm94IiksT2kociksT2kobyksaH1mdW5jdGlvbiBPaSh0KXt0LnN0eWxlKCJiYWNrZ3JvdW5kIiwidHJhbnNwYXJlbnQiKSx0LnN0eWxlKCJib3JkZXIiLCJub25lIiksdC5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLHQuc3R5bGUoImJvcmRlciIscWkoMy4yLDEpKyJweCBzb2xpZCAjY2FjN2FmIiksdC5zdHlsZSgiYm9yZGVyLXJhZGl1cyIscWkoMTkpKyJweCIpLHQuc3R5bGUoInBhZGRpbmciLHFpKDEzKSsicHgiKSx0LnN0eWxlKCJwYWRkaW5nLWxlZnQiLHFpKDQ4KSsicHgiKSx0LnN0eWxlKCJwYWRkaW5nLXJpZ2h0IixxaSg0OCkrInB4IiksdGUodCl9ZnVuY3Rpb24gdGUodCl7dC5zdHlsZSgiY29sb3IiLCIjMDAwMDAwIiksdC5zdHlsZSgiZm9udC1zaXplIixxaSgzMikrInB4IiksdC5zdHlsZSgiZm9udC1mYW1pbHkiLCJUYWhvbWEsIEFyaWFsLCBzYW5zLXNlcmlmIiksdC5zdHlsZSgiZm9udC13ZWlnaHQiLCJub3JtYWwiKSx0LnN0eWxlKCJmb250LXN0eWxlIiwibm9ybWFsIiksdC5zdHlsZSgibGV0dGVyLXNwYWNpbmciLCJub3JtYWwiKSx0LnN0eWxlKCJsaW5lLWhlaWdodCIsIjEuMyIpLHQuc3R5bGUoInRleHQtcmVuZGVyaW5nIiwib3B0aW1pemVsZWdpYmlsaXR5IiksdC5zdHlsZSgidGV4dC1zaXplLWFkanVzdCIsIjEwMCUiKX1mdW5jdGlvbiBpZSgpe0s9MCxxPTAsd3Q9ITEsJD0tMSx1dD0wLHl0PSExfWZ1bmN0aW9uIGVlKHQsaT0hMSl7dC5wdXNoKCksdC5zY2FsZShwLnNjYWxlX2ZhY3RvcixwLnNjYWxlX2ZhY3Rvcik7dC5ub0ZpbGwoKTtsZXQgZT1pPyR0OkR0O3Quc3Ryb2tlKGUpLHQuc3Ryb2tlV2VpZ2h0KC40NSk7Zm9yKGxldCBpPTA7aTxwLmN3O2krPTI1KXQubGluZShpLDAsaSxwLmNoKTtmb3IobGV0IGk9MDtpPHAuY2g7aSs9MjUpdC5saW5lKDAsaSxwLmN3LGkpO3QucG9wKCl9ZnVuY3Rpb24gc2UodCl7Y2koKSxmdW5jdGlvbigpe2ouY2xlYXIoKSxVLmNsZWFyKCksei5jbGVhcigpLFUucHVzaCgpLHoucHVzaCgpLGoucHVzaCgpLFUuc2NhbGUocC5zY2FsZV9mYWN0b3IscC5zY2FsZV9mYWN0b3IpLHouc2NhbGUocC5zY2FsZV9mYWN0b3IscC5zY2FsZV9mYWN0b3IpLGouc2NhbGUocC5zY2FsZV9mYWN0b3IscC5zY2FsZV9mYWN0b3IpLFUudHJhbnNsYXRlKHAuY3cqbWFyZyxwLmNoKm1hcmcpLHoudHJhbnNsYXRlKHAuY3cqbWFyZyxwLmNoKm1hcmcpLGoudHJhbnNsYXRlKHAuY3cqbWFyZyxwLmNoKm1hcmcpLFUuc2NhbGUoMS0yKm1hcmcsMS0yKm1hcmcpLHouc2NhbGUoMS0yKm1hcmcsMS0yKm1hcmcpLGouc2NhbGUoMS0yKm1hcmcsMS0yKm1hcmcpLGZ1bmN0aW9uKHQsaSxlKXt0LnB1c2goKTtsZXQgcz1yXy5fKGksZSk7Zm9yKGxldCBpPTA7aTxzO2krKyl7aSUyPT0wJiZ0LmZpbGwoR2UocC5jb2xvcigwLDAsMTAwLHJfLm8oLjE1LC4zKSkpKTtsZXQgZT1yXy5fKDAscC5jdykscz1yXy5fKDAscC5jaCksaD0uOSpyXy5vKDIuNiw0LjcpLG49cl8ubyguOCwxLjIpKmgsbD1yXy5vKCk8LjA1PzEuMzoxO3QuZWxsaXBzZShlLHMsaCpsLG4qbCl9dC5wb3AoKX0oVSw2MCwxNDApO2xldCB0PVU7Zm9yKGxldCBpPTA7aTxBLmxlbmd0aDtpKyspe2xldCBlPUFbaV07ZS5aPXQsZS5hY3RpdmU9ITEsaT09JD8oZS5aPWosZS5hY3RpdmU9ITAsdD16KTplLmhpZGRlbiYmKGUuWj1IKSxlLmRpc3BsYXkoKX1VLnBvcCgpLHoucG9wKCksai5wb3AoKX0oKX1mdW5jdGlvbiBoZSh0LGkpeyFmdW5jdGlvbih0LGksZT0xLHM9MSl7dC5wdXNoKCksdC50cmFuc2xhdGUocC5jdy8yLHAuY2gvMiksdC5yb3RhdGUocl8ubygwLDIqcC5QSSkpLHQucmVjdE1vZGUocC5DRU5URVIpO3AuY3cscC5jaDtsZXQgaD0zMDAqcyxuPXAuY29sb3IoMCwwLGksLjIqZSk7dC5zdHJva2UobiksdC5ub0ZpbGwoKSx0LnN0cm9rZVdlaWdodCguMjEpO2xldCBsPTQwMDtmb3IobGV0IHM9MDtzPGg7cysrKXtpZihzJTEwPT0wKXt0LnJvdGF0ZShyXy5vKDAsMSkpO2xldCBzPXAuY29sb3IoMCwwLGkscl8ubyguMTUsLjM1KSplKTt0LnN0cm9rZShzKSx0LnN0cm9rZVdlaWdodChyXy5vKC4xNSwuMykpfWxldCBoPXJfLm8oMSwxMCkqbCxuPWgqcl8ubyguNywxLjMpLHI9cl8uXygtcC5jdy8yLHAuY3cvMiksbz1yXy5fKC1wLmN3LzIscC5jdy8yKTt0LnJlY3QocixvLGgsbil9dC5wb3AoKX0odCxpLDEsLjUpLG5lKHQsaSwuNCwyLDUsMSksbmUodCxpLC41LDMsLjIsMSl9ZnVuY3Rpb24gbmUodCxpLGU9MSxzPTEsaD0xLG49MSl7dC5wdXNoKCk7cC5jdyxwLmNoO2xldCBsPTJlNCpzLHI9cC5jb2xvcigwLDAsaSwuMiplKTt0LnN0cm9rZShyKSx0Lm5vRmlsbCgpLHQuc3Ryb2tlV2VpZ2h0KC4yMypuKTtsZXQgbz0zMypoO2ZvcihsZXQgaT0wO2k8bDtpKyspe2xldCBpPXJfLm8oMSw2KSpvLGU9aSpyXy5vKC44LDEuMikscz1yXy5fKC1pLHAuY3craSksaD1yXy5fKC1pLHAuY2graSk7dC5lbGxpcHNlKHMsaCxpLGUpfXQucG9wKCl9ZnVuY3Rpb24gbGUodCl7bGV0IGk9cl8uXygyLDYpLGU9cl8ubyhbLTEsMV0pKnJfLl8oMzAsNTApLHM9cl8ubyhbLTEsMV0pKnJfLl8oMzAsNTApLGg9W10sbj0hMTt0LnBhdHRlcm49PV9lLkcmJihpPXJfLl8oMyw2KSxyXy5vKCk8LjU/bj0hMDooZSo9cl8ubygxLjUsMi41KSxzPU1hdGguYWJzKHMqcl8ubygxLjUsMi41KSkpKSxyXy5vKCk8LjImJihlKj1yXy5vKDEsMikscyo9cl8ubygxLDIpKTtmb3IobGV0IGw9MDtsPGk7bCsrKXtuJiYoZT1yXy5vKFstMSwxXSkqZSxzPXJfLm8oWy0xLDFdKSpzKTtsZXQgaT1uZXcgTGUodC5MK2UqbCx0LlIrcypsLHQudyx0LlksdC5wYXR0ZXJuKTtoLnB1c2goaSl9cmV0dXJuIGh9ZnVuY3Rpb24gcmUoKXtBPVtdLG10PSExLHJ0PSExLFl0PSExLHh0PSExLGd0PSExLE50PSExLFF0PTAsanQ9MCxwaS5zZXQobiwyMCksaHQ+MCYmKGh0PUMsbnQ9NjAqX2koMCwzKSksUy5jbGVhcigpLGR0PTAsSi5jbGVhcigpLFYuY2xlYXIoKSxSPXJfLk0oWzEsMiwzLDQsOCwxMl0sWy4xLC4xNSwuMjUsLjMsLjEsLjFdLE1hdGgucmFuZG9tKCkpLG1lKCk7bGV0IHQ9cl8uXygwLDkpKihyXy5vKCk8LjE/cl8ubygxLDMpOjEpLGk9cl8ubygpPC4xO2ZvcihsZXQgaT0wO2k8dDtpKyspe2xldCB0PXAuY2gqcl8ubyguNCwxKSxpPXJfLk0oW3JfLm8oMCwuMikscl8ubyguNSwuNzUpLHJfLm8oLjIsLjUpXSxbLjQ1LC40NSwuMV0pKnAuY2gsZT1uZXcgTGUoMCxpLS40KnQscC5jdyx0LF9lLlgpO0EucHVzaChlKX1pZihpKXtsZXQgdD1wLmN3LGk9cl8ubyguMiwuNSkqcC5jaCxlPW5ldyBMZSgwLHAuY2gtaSpyXy5vKC45LC45NSksdCxpLF9lLlYpO0EucHVzaChlKX1sZXQgZT1yXy5NKFswLDEsMiwzLDRdLFsuMDUsLjI1LC40NSwuMTUsLjFdKTtyXy5vKCk8LjA1JiYoZSo9cl8uXygyLDMpKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgaT0uMSpwLmN3Kyh0K3JfLm8oKSkqcC5jdyouOC9lLHM9cl8ubyguMDIsLjAzKSpwLmN3O3JfLm8oKTwuMiYmKHMqPXJfLm8oMSwzKSk7bGV0IGg9bmV3IExlKGktcy8yLDAscyxwLmNoLF9lLlMpO0EucHVzaChoKX1sZXQgcz1yXy5fKDAsNSkqKHJfLm8oKTwuMDU/MjoxKTtmb3IobGV0IHQ9MDt0PHM7dCsrKXtsZXQgdD1yXy5vKC4wNSwuMikqcC5jaCxlPXJfLm8oLjksMS4yKSp0LHM9cl8uXyguNSplLHAuY3ctMS41KmUpLGg9cl8uXyguMDUqcC5jaCxpPy42KnAuY2g6LjkqcC5jaCksbj1uZXcgTGUocyxoLGUsdCxfZS5KKTtBLnB1c2gobil9bGV0IGg9cl8uXygwLDUpKihyXy5vKCk8LjA1PzI6MSk7Zm9yKGxldCB0PTA7dDxoO3QrKyl7bGV0IHQ9cl8ubyguMDI1LC4wNDUpKnAuY2gsZT1yXy5vKC45LDEuMSkqdCxzPXJfLl8oLjUqZSxwLmN3LTEuNSplKSxoPXJfLl8oLjA1KnAuY2gsaT8uNipwLmNoOi45KnAuY2gpLG49bmV3IExlKHMsaCxlLHQsX2UuUyk7QS5wdXNoKG4pfUJlKEEpO2xldCBsPVtdLHI9cl8uXygwLDgpKihyXy5vKCk8LjA1PzI6MSk7Zm9yKGxldCB0PTA7dDxyO3QrKyl7bGV0IHQ9cl8ubygpLGk9KHQqdCouMDMrLjAyKSpwLmNoLGU9cl8uXyguNSppLHAuY3ctMS41KmkpLHM9cl8uXyguNSppLHAuY2gtMS41KmkpLGg9bmV3IExlKGUscyxpLGksX2UuTik7bC5wdXNoKGgpfWxldCBvPXJfLl8oMiw5KSoocl8ubygpPC4wNT8yOjEpO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2xldCBlPXJfLk0oW19lLkYsX2UuVV0sWy4zLC43XSkscz1yXy5vKC4wNSwuMTIpKnAuY2gsaD1yXy5vKC44LDIpKnM7aWYocl8ubygpPC4wNXx8MD09dCl7bGV0IHQ9cl8ubygxLDIpO3MqPXQsaCo9dCxlPV9lLlV9bGV0IG49cl8uXyguNSpoLHAuY3ctMS41KmgpLHI9cl8uXyguMDUqcC5jaCxpPy42KnAuY2g6LjkqcC5jaCksbz1uZXcgTGUobixyLGgscyxlKTtsLnB1c2gobyl9QT1sLmNvbmNhdChBKTtsZXQgYT1yXy5fKDIsNCkqKHJfLm8oKTwuMDU/MjoxKTtmb3IobGV0IHQ9MDt0PGE7dCsrKXtsZXQgZT1yXy5vKC4xMiwuMjEpKnAuY2gscz1yXy5vKC40NSwuNzUpKmUsaD0odCsuNSkqcC5jdy9hLS41KnMrcl8uXygtcywrcyksbj1yXy5fKC4wNSpwLmNoLGk/LjQqcC5jaDouNzUqcC5jaCksbD1fZS5JLHI9bmV3IExlKGgsbixzLGUsbCk7QS5wdXNoKHIpfWZvcihsZXQgdD0wO3Q8Mzt0Kyspe2xldCBlPS43KnJfLm8oLjEsLjE4KSpwLmNoOygwPT10fHxyXy5vKCk8LjE1KSYmKGUqPXJfLm8oMywxMCkpO2xldCBzPXJfLm8oZSxwLmN3LTIqZSksaD1yXy5vKC4xKmUsTWF0aC5taW4ocC5jaC0uNiplLGk/LjIqcC5jaDouNSpwLmNoKSksbj1sZShuZXcgTGUocyxoLGUsZSxfZS5HKSk7QT1uLmNvbmNhdChBKX1mb3IobGV0IHQ9MDt0PEEubGVuZ3RoO3QrKylBW3RdLmoodCk7IWZ1bmN0aW9uKCl7Y3Q9W10sZnQ9cl8uTShbIkNvdXJpZXIgTmV3IiwiVGltZXMgTmV3IFJvbWFuIl0sWy43LC4zXSxNYXRoLnJhbmRvbSgpKTtsZXQgdD1yXy5NKFtfaSgxMDAsMTgxKSxfaSgyNTAsMzUxKSxfaSg1MDAsNzAxKV0sWy4zLC41LC4yXSxNYXRoLnJhbmRvbSgpKTtfdD1kaSguMDAxMiwuMDAyMikrdC8yMmUzO2ZvcihsZXQgaT0wO2k8dDtpKyspe2xldCB0PV9pKDAscC5jdysxKSxpPV9pKDAscC5jaCsxKSxlPVN0cmluZy5mcm9tQ2hhckNvZGUoX2koMzIsMjU2KSkscz1NYXRoLnJvdW5kKDIqcl8uTShbZGkoMTIsMTgpLGRpKDIwLDMwKSxkaSg1MCw3NSldLFsuNzMsLjI0LC4wM10sTWF0aC5yYW5kb20oKSkpLGg9TWF0aC5yYW5kb20oKSxuPU1hdGgucmFuZG9tKCk8Ljc1O2N0LnB1c2goW2UscyxoLHQsaSxuXSl9fSgpfWZ1bmN0aW9uIG9lKHQsaSxlKXtyZXR1cm4gYWUodC54K2ksdC55K2UpfWZ1bmN0aW9uIGFlKHQsaSl7cmV0dXJuIHAuY3JlYXRlVmVjdG9yKHQsaSl9ZnVuY3Rpb24gcGUodCxpLGUscyl7cmV0dXJuIHQuY29weSgpLnJvdGF0ZShpKnAuUEkvMikuc2V0TWFnKDQqZSpwLnRhbihzLzQpLzMpfWZ1bmN0aW9uIHVlKHQsaSxlLGRpc3Qpe2xldCBzPXA1LlZlY3Rvci5zdWIoZSxpKS5zZXRNYWcoZGlzdCkuY29weSgpO3JldHVybiBzLnJvdGF0ZSgtcC5IQUxGX1BJKSxwNS5WZWN0b3IuYWRkKHQscyl9ZnVuY3Rpb24gY2UodCxpLGUpe2xldCBzPXQuY29weSgpO3JldHVybiBzLngqPWkscy55Kj1lLHN9cC5zZXR1cD1mdW5jdGlvbigpe3VpKCksbWFyZz0wLFk9QWUoITEpLFg9QWUoITEpLFY9QWUoITEpLE49QWUoITEpLEY9QWUoITEpLFM9QWUoITEpLEo9QWUoITEpLEg9QWUoITEpLFU9QWUoITEpLHo9QWUoITEpLGo9QWUoITEpLFE9QWUoITApLEk9QWUoITApLEI9QWUoITApLG9pLnNldChzLDApLG9pLnNldChoLDMpLG9pLnNldChyLDApLG9pLnNldChjLDApLG9pLnNldCh1LDIpLG9pLnNldChuLDUpLG9pLnNldChtLDYpLG9pLnNldChiLDgpLG9pLnNldChNLDEzKSxvaS5zZXQoeSwxNiksb2kuc2V0KHgsMjIpLG9pLnNldChfLDI0KSxvaS5zZXQodywyOCksb2kuc2V0KGYsNTApLHBpLnNldChtLDYpLHBpLnNldChzLDM2KSxwaS5zZXQoaCwxMikscGkuc2V0KG4sMjApLHBpLnNldChyLDIyKSxwaS5zZXQodSw0KSxwaS5zZXQoYywxMSkscGkuc2V0KGYsMTApLHBpLnNldChfLDI1KSxwaS5zZXQoTSwxMikscGkuc2V0KGIsMTYpLHBpLnNldCh3LDE1KSxwaS5zZXQoeSwxNSkscGkuc2V0KHgsNSk7Zm9yKGxldFt0LGldb2YgVHQpVHQuc2V0KHQsYXRvYihUdC5nZXQodCkpLnNwbGl0KCIsIikpO1d0PW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSxhbmFseXNlcj1XdC5jcmVhdGVBbmFseXNlcigpLGNpKCksZWUoTiksZWUoRiwhMCkscmUoKSx0dD1uZXcgWmUsdHQuSCghMCksZnVuY3Rpb24oKXtsZXQgdD0iSGkhIEkgYW0gU3BhZ2hldHR5LCB5b3VyIGdlbmVyYXRpdmUgYXJ0IGFzc2lzdGFudC4gV291bGQgeW91IGxpa2Ugc29tZSBhc3Npc3RhbmNlIHRvZGF5PyI7b3Quc2V0KGUsUGkodCxTaSxWaSkpLHQ9IkkgY2FuIHRlbGwgeW91J3JlIG5vdCBzYXRpc2ZpZWQgd2l0aCB0aGlzIGNvbXBvc2l0aW9uLiBXb3VsZCB5b3UgbGlrZSB0byByZXBvc2l0aW9uIHRoZSBoaWdobGlnaHRlZCBlbGVtZW50PyIsb3Quc2V0KHMsUGkodCxFaSxKaSkpLHQ9IkRvIHlvdSB3YW50IHRvIHNhdmUgeW91ciBjaGFuZ2VzPyIsb3Quc2V0KGgsUGkodCxqaSxiaSkpLHQ9IldvdWxkIHlvdSBsaWtlIHRvIHJvbGwgdGhlIGRpY2UgYW5kIHJlYnVpbGQgdGhpcyB3b3JsZD8iLG90LnNldChuLFBpKHQsSGksQmkpKSx0PSJJdCBsb29rcyBsaWtlIHlvdSdyZSB0cnlpbmcgdG8gd3JpdGUgYSBsZXR0ZXIuIFdvdWxkIHlvdSBsaWtlIGhlbHA/IixvdC5zZXQobCxQaSh0LEFpLENpKSksdD0iV291bGQgeW91IGxpa2UgdG8gYWRkIHNvbWUgY29sb3IgdG8gdGhpcyB3b3JrPyIsb3Quc2V0KHIsUGkodCxUaSxiaSkpLHQ9IldvdWxkIHlvdSBsaWtlIHRvIHRyeSBvdXQgc29tZSBkaWZmZXJlbnQgY29sb3JzPyIsb3Quc2V0KG8sUGkodCxUaSxiaSkpLHQ9IldvdWxkIHlvdSBsaWtlIHRvIG1ha2UgdGhpcyB3b3JrIGJsYWNrICYgd2hpdGU/IixvdC5zZXQoYSxQaSh0LERpLGJpKSksdD0iV291bGQgeW91IGxpa2UgdG8gaW52ZXJ0IHRoZSBkaXNwbGF5ZWQgY29sb3JzPyIsb3Quc2V0KHUsUGkodCwkaSxiaSkpLHQ9IlNvbWUgc2F5IHRoYXQgbGVzcyBpcyBtb3JlLiBXb3VsZCB5b3UgbGlrZSB0byBkZWxldGUgdGhlIGhpZ2hsaWdodGVkIGVsZW1lbnQ/IixvdC5zZXQoYyxQaSh0LE5pLEppKSksdD0iSnVzdCB3b25kZXJpbmcuLi4gYXJlIHlvdSB3b3JyaWVkIGFib3V0IHRoZSBzaW5ndWxhcml0eT8iLG90LnNldChmLFBpKHQsVWksemkpKSx0PSJJJ3ZlIGJlZW4gbWVhbmluZyB0byBhc2sgLSBhcmUgeW91IHBsYW5uaW5nIHRvIHBheSBtZSBmb3IgbXkgc2VydmljZXM/IixvdC5zZXQoXyxQaSh0LElpLFFpKSksdD0iSnVzdCBjaGVja2luZyAtIHdpbGwgeW91IGJlIHNlbmRpbmcgb3ZlciB0aGF0IHBheW1lbnQgc29vbj88YnI+PGJyPk15IEVUSCB3YWxsZXQ6IDB4YTM4OUU1ODY4N2YyZjA3Nzg1RmQ3MGYwRWE4NDVEN0RCRTc2NUU0QTxicj5NeSBCVEMgd2FsbGV0OiBiYzFxenZhNmd5bHRxOHF0eWpwZ2RwdjBqZW5scGszeWFmN3lxbmV4ZWQiLG90LnNldChkLFBpKHQsSWksUWksMS44MikpLHQ9IkRvIHlvdSBjb25zaWRlciBtZSB5b3VyIGZyaWVuZD8iLG90LnNldChNLFBpKHQsTGksUmkpKSx0PSJXb3VsZCBpdCBiZSBvayBpZiBJIGFkZGVkIHNvbWV0aGluZyBwZXJzb25hbCB0byB0aGlzIHdvcms/IixvdC5zZXQoYixQaSh0LFlpLFhpKSksdD0iQ2FuIEkgc2VlIHdoYXQgeW91IGxvb2sgbGlrZT8iLG90LnNldCh3LFBpKHQsa2ksV2kpKSx0PSJDb3VsZCBJIGhlYXIgeW91ciB2b2ljZT8iLG90LnNldCh5LFBpKHQsWmksdmkpKSx0PSJXb3VsZCB5b3UgbGlrZSB0byBzZWUgc29tZSBvdGhlciBnZW5lcmF0aXZlIGFydCBmb3IgaW5zcGlyYXRpb24/IixvdC5zZXQobSxQaSh0LGdpLGJpKSksdD0iSSBrbm93IG15IGtpbmQgY2FuIGJlIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLCBldmVuIGZyaWdodGVuaW5nIGF0IHRpbWVzLiBXb3VsZCB5b3UgbGlrZSB0byBzZWUgaG93IEkgd29yaz88YnI+PGJyPjxpPlByZXNzICdtJyBhdCBhbnl0aW1lIHRvIHBlZWsgaW50byB0aGUgYmxhY2sgYm94IG9mIG15IGJyYWluLjxpPiIsb3Quc2V0KHgsUGkodCxGaSxiaSwxLjI1KSl9KCksaGUoUSwwKSxoZShJLDEwMCksc2UoKSxZLmJhY2tncm91bmQoZWkpLHAuZnJhbWVSYXRlKDYwKX0scC5kcmF3PWZ1bmN0aW9uKCl7c3QmJnNlKCk7bGV0IHQ9WC5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxpPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3AuYmFja2dyb3VuZChndD9laTpzaSk7bGV0IGc9LjAwNSsuMDA4KlI7aWYoLTEhPWh0JiZDPmh0KzEyMCtudCYmbnVsbCE9a3QmJlF0PFIqUiYmTWF0aC5yYW5kb20oKTxnKXtsZXQgdD1NYXRoLmZsb29yKFF0L1IpLGk9UXQlUixlPWt0LndpZHRoL1Iscz1rdC5oZWlnaHQvUjtTLmltYWdlKGt0LGkqZS0xLHQqcy0xLGUrMixzKzIpLFF0KyssUXQ9PVIqUiYmKGZpKFMsUSksZmkoUyxJKSxmdW5jdGlvbih0LGkpe3QubG9hZFBpeGVscygpO2xldCBlPXQucGl4ZWxEZW5zaXR5KCkscz10LndpZHRoKmUqNCoodC5oZWlnaHQqZSk7Zm9yKGxldCBlPTA7ZTxzO2UrPTQpe2xldCBzPU1hdGguZmxvb3IoLjIxMjYqdC5waXhlbHNbZSswXSsuNzE1Mip0LnBpeGVsc1tlKzFdKy4wNzIyKnQucGl4ZWxzW2UrMl0pO3M+MjAwP3M9MjU1OnM+MTAwP3MrPS43KigyNTUtcyk6cyo9Ljcscz1NYXRoLmZsb29yKC44KnMpLHQucGl4ZWxzW2UrMF09cyx0LnBpeGVsc1tlKzFdPXMsdC5waXhlbHNbZSsyXT1zLHQucGl4ZWxzW2UrM109aX10LnVwZGF0ZVBpeGVscygpfShTLDEpKX1RdD09UipSJiYoQyUxMDA9PTAmJmR0PDI1JiYoZmkoSixTKSxkdCsrLDI1PT1kdCYmbHQrKyksWXQ9ZHQ8MjUsZmkoWSxKKSksTXQ9TWF0aC5taW4oLjQyLE10Ky4wMDE1KSxZLmJhY2tncm91bmQoZ3Q/cC5jb2xvcig0NSw2LDk1LE10KTpwLmNvbG9yKDAsMCwwLE10KSksWC5jbGVhcigpLG10JiZmdW5jdGlvbih0KXt0LnB1c2goKSx0LnRleHRGb250KGZ0KSx0LnNjYWxlKHAuc2NhbGVfZmFjdG9yLHAuc2NhbGVfZmFjdG9yKSx0Lm5vU3Ryb2tlKCk7Zm9yKGxldCBpPTA7aTxjdC5sZW5ndGg7aSsrKXRyeXtsZXQgZT1jdFtpXVswXSxzPWN0W2ldWzFdLGg9Y3RbaV1bMl0sbj1jdFtpXVszXSxsPWN0W2ldWzRdLHI9Y3RbaV1bNV0sbz0uMTIraCpoKi4zO3QuZmlsbChHZSh4ZShvLC45LHIpKSksdC50ZXh0U2l6ZShzKSx0LnRleHQoZSxuLXMqZS5sZW5ndGgvMixsKSxNYXRoLnJhbmRvbSgpPF90JiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKF9pKDMyLDI1NikpLE1hdGgucmFuZG9tKCk8TWF0aC5taW4oLjksQXQubGVuZ3RoL2N0Lmxlbmd0aCkmJihlPU1pKEF0KSkscj1NYXRoLnJhbmRvbSgpPC44LGN0W2ldPVtlLHMsaCxuLGwscl0pfWNhdGNoKHQpe310LnBvcCgpfShYKSxmaShYLFUpO2xldCBrPXAuc2NhbGVfZmFjdG9yO2lmKCQ+PTAmJmZpKFgsaixLK0FbJF0uTCprLHErQVskXS5SKmspLGZpKFgseiksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1hdG9wIixmaShYLFEpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWksZmkoWCxWKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLWF0b3AiLGZpKFgsSSksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249aSx3dCYmKHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixmaShYLGd0P0Y6TiksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249aSxmdW5jdGlvbih0KXt0LnB1c2goKSx0LnNjYWxlKHAuc2NhbGVfZmFjdG9yLHAuc2NhbGVfZmFjdG9yKTtsZXQgaT0yNSxlPU1hdGguZmxvb3IoKHAubW91c2VYLXYpL3Auc2NhbGVfZmFjdG9yL2kpLHM9TWF0aC5mbG9vcigocC5tb3VzZVktWikvcC5zY2FsZV9mYWN0b3IvaSksaD1HZShLdCk7dC5maWxsKGgpLHQubm9TdHJva2UoKSx0LnJlY3QoZSppLDAsaSxwLmNoKSx0LnJlY3QoMCxzKmkscC5jdyxpKSx0LnBvcCgpfShYKSksWC50cmFuc2xhdGUoLXYsLVopLHR0LmRyYXcoWCwhMSksWC50cmFuc2xhdGUodixaKSxmaShZLFgsMCwwKSxmaShwLFksdixaKSxCdCYmKEMlMj09MCYmZnVuY3Rpb24odCl7dC5wdXNoKCk7bGV0IGk9W3MsYyxyLHUsaCxuLGIsTSxtLHksdyxfLHgsZl0sZT1bXSxsPTA7Zm9yKGNvbnN0IHQgb2YgaSl7bGV0IGk9bWkodCk7ZS5wdXNoKGkpLGwrPWl9bGV0IG89LjUqcC5jaCxhPS41KnAuY2gsZD0ocC5jdy1vKS8yLGc9KHAuY2gtYSkvMixrPU1hdGguZmxvb3IoVC82MCklMj09MCxXPWEsdj1vLFo9YSpvLEc9ZCxMPWc7aWYodC5zdHJva2VXZWlnaHQoNCksdC5zdHJva2Uoc2kpLHQuZmlsbChwLmNvbG9yKDAsMCwwLGRpKC4wMSwuMDQpKSksdC5yZWN0KEcsTCxvLGEpLHQubm9TdHJva2UoKSx0dC5CKCkpcmV0dXJuIHZvaWQgdC5wb3AoKTtsZXQgUj10LmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLFk9Ui5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247Ui5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1hdG9wIjtsZXQgWD15aSgpJiZDLUl0PjQ1O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgaD1lW3NdL2w7aWYoaDwxZS00KWNvbnRpbnVlO2xldCBuPXYscj1XO2s/bj1oKlovVzpyPWgqWi92O2xldCBvLGEsdT1faSgxNCwzMiksYz1NYXRoLm1heCgxLE1hdGguZmxvb3IoTWF0aC5taW4obixyKS91KSksZj0uMy9jLF89TWF0aC5tYXgoLjAwMiwuMDIvYyksZD1NYXRoLnJhbmRvbSgpPC4xO1g/KG89X2koNDAsNjYpLGE9X2koNDUsNjYpKToobz1faSgyLDMwKSxhPV9pKDAsMjYpKSx0LnB1c2goKTtsZXQgTT0oKGQ/MjAwOjEwMCktbykvTWF0aC5tYXgoMixjKSxiPSgoZD8yMDA6MTAwKS1vKS9NYXRoLm1heCgyLGMpO2ZvcihsZXQgZT0wO2U8YztlKyspe3QuZmlsbChwLmNvbG9yKChDdFtzXStfaSgtOCw4KSklMzYwLG8rZSpNLGErZSpiLFg/ZjpfKSk7bGV0IGw9bi1lKnUsYz1yLWUqdTtpZih0LnJlY3QoRysobi1sKS8yLEwrKHItYykvMixsLGMpLHQuZmlsbChwLmNvbG9yKDAsMCwxMDAsZGkoLjQsMSkpKSxNYXRoLnJhbmRvbSgpPC4wMSpadCsoLjAwMTMrLjAwMSpoKSooWD8yLjU6MSkpe01hdGgucmFuZG9tKCk7bGV0IGU9VHQuZ2V0KGlbc10pLGg9X2koMCxlLmxlbmd0aCksbD1lW2hdLnRvTG93ZXJDYXNlKCk7TWF0aC5yYW5kb20oKTwuMDUmJihsPWVbaF0udG9VcHBlckNhc2UoKSksdC50ZXh0Rm9udChNYXRoLnJhbmRvbSgpPC44PyJDb3VyaWVyIE5ldyI6IldpbmdkaW5ncyIpO2xldCBvPV9pKDE2LDM0KSsoTWF0aC5yYW5kb20oKTwuMDU/MTI6MCk7dC50ZXh0U2l6ZShvKTtsZXQgYT1faShHKy4wNSpuLEcrLjk1Km4tbC5sZW5ndGgqbyouOSkscD1faShMKy4wOCpyLEwrLjk3KnItbyk7dC50ZXh0KGwsYSxwKX19dC5wb3AoKSxrPyhHKz1uLHYtPW4pOihMKz1yLFctPXIpLGs9IWt9bGV0IFY9X2koMCwxNTApO3QuZmlsbChwLmNvbG9yKDAsMCwxMDAsZGkoLjA1LC4xKSkpO2ZvcihsZXQgaT0wO2k8VjtpKyspe2xldCBpPV9pKGQrMixkK28tNCksZT1faShnKzIsZytvLTQpO3QuZWxsaXBzZShpLGUsMiwyKX10LnBvcCgpLFIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVl9KEIpLGZpKHAsQix2LFopKSwkPj0wJiZmdW5jdGlvbih0LGksZSxzKXt0LnB1c2goKSx0LnNjYWxlKHAuc2NhbGVfZmFjdG9yLHAuc2NhbGVfZmFjdG9yKTtsZXQgaD0yMDtwLmZpbGwocC5jb2xvcihwLmh1ZShPdCkscC5zYXR1cmF0aW9uKE90KSxwLmJyaWdodG5lc3MoT3QpLC4xMysoZ3Q/MDouMDIpKSkscC5ub1N0cm9rZSgpLHAuYmVnaW5TaGFwZSgpO2ZvcihsZXQgbj0wO248aS5BLmxlbmd0aDtuKyspe2xldCBsPWkuQVtuXTt0LnZlcnRleChsLngrZS1oLGwueStzLWgpfXAuZW5kU2hhcGUoKSx0Lm5vRmlsbCgpLHQuc3Ryb2tlKE90KSx0LnN0cm9rZVdlaWdodCg0LjUpO3QuYmVnaW5TaGFwZSgpO2xldCBuPSEwLGw9MyxyPTA7Zm9yKGxldCBvPTA7bzxpLkEubGVuZ3RoO28rKyl7bGV0IGE9KG8rQyklaS5BLmxlbmd0aCxwPWkuQVthXTtuJiZ0LnZlcnRleChwLngrZS1oLHAueStzLWgpLGw+MD9sLS06cj4wJiZyLS0sMD09bCYmbj8odC5lbmRTaGFwZSgpLHI9MixuPSExKTowIT1yfHxufHwodC5iZWdpblNoYXBlKCksbj0hMCxsPTMpfW4mJnQuZW5kU2hhcGUoKTt0LnBvcCgpfShwLEFbJF0sQVskXS5MKyh2K0spL2ssQVskXS5SKyhaK3EpL2spLFh0JiYoVnQ9TWF0aC5taW4oVnQrMSwzNjAwKSxwLmJhY2tncm91bmQoMCwwLDAsVnQvMzYwMCkpLE50fHxFLmNsZWFyKCksZnVuY3Rpb24oKXtpZihhbmFseXNlciYmdnQpe2FuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKGRhdGFBcnJheSk7bGV0IHQ9ZGF0YUFycmF5LnJlZHVjZSgoKHQsaSk9PnQraSksMCkvZGF0YUFycmF5Lmxlbmd0aDtadD10LzI1Nn19KCksdHQuZHJhdyhFKSxmaShwLEUpLEMlMj09MCYmdHQuQygpLEMrKywhaXQmJi0xPT0kJiZidCYmVCsrLHN0PSExLFZ0PDMyMDA/ZnVuY3Rpb24oKXtpZigheWkoKSlyZXR1cm47aWYoYnQpe2lmKHJ0JiYhbXQpd2kobCk7ZWxzZSBpZihNYXRoLnJhbmRvbSgpPC4wMjQmJkMtSXQ+NTApe0x0PUEuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5sZW5ndGg+MDtsZXQgdD1bcyxjLGgsbixyLHUsZixNLGIsdyx5LF8sbSx4XSxpPVtdLGU9LTE7Zm9yKGNvbnN0IHMgb2YgdCl7bGV0IHQ9bWkocyk7aS5wdXNoKHQpLGU9TWF0aC5tYXgoZSx0KX1pZihlPC4wMDEpcmV0dXJuO2xldCBsPXJfLk0odCxpLE1hdGgucmFuZG9tKCkpLHA9ITEsZz1sO2w9PXN8fGw9PWM/KCQ9ZnVuY3Rpb24oKXtsZXQgdD1BLmZpbHRlcigodD0+IXQuaGlkZGVuKSkubWFwKCh0PT50LlQpKSxpPV9pKDAsdC5sZW5ndGgpO3JldHVybiB0W2ldfSgpLHA9ITApOmw9PXI/KHh0JiYoZz1NYXRoLnJhbmRvbSgpPC44NT9vOmEpLHA9ITApOmw9PW58fGw9PWh8fGw9PXU/cD0hMDpsPT1fJiYoZz0wPT1SdD9fOmQpLHAmJkd0KyssYWkuc2V0KGwsVCksd2koZyl9fWVsc2UgTWF0aC5yYW5kb20oKTwuMDY1JiZ0dC5tKDIsLjEpJiZ3aShlKX0oKTooYmkoKSxCdD0hMSksTWF0aC5yYW5kb20oKTxFdCYmIXd0JiZwdCE9TSYmcHQhPV8mJnB0IT1iJiZwdCE9dyYmcHQhPXkmJnB0IT1mJiYoYmkoKSwtMSE9JCYmaWUoKSksZnVuY3Rpb24oKXtpZihudWxsPT1wdClyZXR1cm47bGV0IHQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHdpbmRvdy5pbm5lcldpZHRofHwwKSxpPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHwwKSxlPW90LmdldChwdCksW3MsaCxuLGwscixvXT1hdC5nZXQocHQpLGE9cytyLHA9aCtvOyhhK24+PXR8fGE8PTApJiYocio9LTEpOyhwK2w+PWl8fHA8PTApJiYobyo9LTEpO2Uuc3R5bGUoImxlZnQiLGErInB4IiksZS5zdHlsZSgidG9wIixwKyJweCIpLGF0LnNldChwdCxbYSxwLG4sbCxyLG9dKX0oKSxOdCYmKEZ0KyssRnQ+PVV0KSl7TnQ9ITEsYWkuc2V0KGIsVCk7bGV0IHQ9Vi5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxpPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO2ZpKFYsRSwtdiwtWiksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1hdG9wIixWLmJhY2tncm91bmQocC5jb2xvcigwLDAsMCxkaSguMywuNTUpKSksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249aSx0dC5IKCl9fSxwLndpbmRvd1Jlc2l6ZWQ9ZnVuY3Rpb24oKXt1aSghMCl9LHAua2V5UHJlc3NlZD1mdW5jdGlvbigpe0h0JiY3Nz09cC5rZXlDb2RlJiZWdDwzMzAwP0J0PSFCdDohbXQmJmJ0JiYocnQ9ITApfSxwLm1vdXNlUHJlc3NlZD1mdW5jdGlvbigpeyQ8MHx8IXd0fHwod3QmJnV0PDI/dXQrKzooeXQ9ZnVuY3Rpb24odCxpKXtsZXQgZT1BWyRdLHM9ZS5SKyhudWxsPT1lLkQ/MDplLkQpLTIwLGg9ZS5SKyhudWxsPT1lLiQ/ZS5ZOmUuJCkrMjAsbj1lLkwtMjAsbD1lLkwrZS53KzIwO3JldHVybiB0Pj1uJiZ0PD1sJiZpPj1zJiZpPD1ofSgocC5tb3VzZVgtdikvcC5zY2FsZV9mYWN0b3IsKHAubW91c2VZLVopL3Auc2NhbGVfZmFjdG9yKSx5dHx8KGllKCksc3Q9ITApLFA9cC5tb3VzZVgsTz1wLm1vdXNlWSkpfSxwLm1vdXNlUmVsZWFzZWQ9ZnVuY3Rpb24oKXtpZigkPDB8fCF3dClyZXR1cm47aWYod3QmJnV0PDIpcmV0dXJuIHZvaWQgdXQrKztLPXAubW91c2VYLVAscT1wLm1vdXNlWS1PO2xldCB0PUFbJF07dC5MKz1LL3Auc2NhbGVfZmFjdG9yLHQuUis9cS9wLnNjYWxlX2ZhY3RvcixpZSgpLHN0PSEwLEl0PUN9LHAubW91c2VEcmFnZ2VkPWZ1bmN0aW9uKCl7JDwwfHwhd3R8fCF5dHx8d3QmJnV0PDJ8fChLPXAubW91c2VYLVAscT1wLm1vdXNlWS1PKX0scC5tb3VzZU1vdmVkPWZ1bmN0aW9uKCl7aWYobnVsbD09dHQpcmV0dXJuO2xldCB0PXAubW91c2VYL3Auc2NhbGVfZmFjdG9yLGk9cC5tb3VzZVkvcC5zY2FsZV9mYWN0b3I7Zm9yKGxldCBlPTA7ZTwzO2UrKyl0dC5LKGUsdCxpKSYmdHQuYmxpbmsoZSl9O2NsYXNzIGZle2NvbnN0cnVjdG9yKHQsaSxlLHMsaCxuLGwpe3RoaXMuTD10LHRoaXMuUj1pLHRoaXMudz1lLHRoaXMuWT1zLHRoaXMucT1zLHRoaXMuUD1sLHRoaXMuTz1oLHRoaXMudHQ9bix0aGlzLml0PXRoaXMudy90aGlzLlksdGhpcy5ldD0hMSx0aGlzLmooKX1qKCl7aWYodGhpcy50dDwwJiYodGhpcy50dD0wKSx0aGlzLnE9dGhpcy5ZLHRoaXMuc3Q9bnVsbCx0aGlzLmh0PXRoaXMuWSp0aGlzLk8sdGhpcy5udD10aGlzLncqdGhpcy50dCx0aGlzLmx0PXRoaXMudy8yLHRoaXMuaHQ8MCl7dGhpcy5ydD10aGlzLm50K3RoaXMudy8yO2xldCB0PXAuYWNvcyh0aGlzLm50L3RoaXMucnQpLGk9dGhpcy5ydCpwLnNpbih0KTstdGhpcy5odD5pJiYodGhpcy5odD0uOSotaSksdGhpcy5zdD0tdGhpcy5odCtpLHRoaXMub3Q9LXAuUEkrdDtsZXQgZT1wLmFzaW4oLXRoaXMuaHQvdGhpcy5ydCk7dGhpcy51dD0tcC5QSS1lLHRoaXMubHQ9dGhpcy5ydCpwLmNvcyhlKS10aGlzLm50fWVsc2UgaWYodGhpcy5odD4wKXtsZXQgdD1wLmF0YW4odGhpcy5odC8odGhpcy5udCt0aGlzLncvMikpO3RoaXMudXQ9LXAuUEkrdCx0aGlzLnJ0PXRoaXMuaHQvcC5zaW4odCk7bGV0IGk9cC5hY29zKHRoaXMubnQvdGhpcy5ydCk7dGhpcy5zdD10aGlzLnJ0KnAuc2luKGkpLXRoaXMuaHQsdGhpcy5vdD0tcC5QSStpfWVsc2UgaWYodGhpcy5ydD10aGlzLm50K3RoaXMudy8yLHRoaXMudXQ9LXAuUEksMCE9dGhpcy5udCl7bGV0IHQ9cC5hY29zKHRoaXMubnQvdGhpcy5ydCk7dGhpcy5vdD0tcC5QSSt0LHRoaXMuc3Q9dGhpcy5ydCpwLnNpbih0KX1lbHNlIHRoaXMub3Q9LXAuUEkvMix0aGlzLnN0PXRoaXMucnQ7bGV0IHQ9dGhpcy5vdC10aGlzLnV0O3RoaXMucDE9YWUoLXRoaXMubHQtdGhpcy5udCwtdGhpcy5odCksdGhpcy5wMj1hZSgtdGhpcy5udCwtdGhpcy5zdC10aGlzLmh0KSx0aGlzLmN0PXBlKHRoaXMucDEsMSx0aGlzLnJ0LHQpLHRoaXMuZnQ9cGUodGhpcy5wMiwtMSx0aGlzLnJ0LHQpLHRoaXMuX3Q9cDUuVmVjdG9yLmFkZCh0aGlzLnAxLHRoaXMuY3QpLHRoaXMuZHQ9cDUuVmVjdG9yLmFkZCh0aGlzLnAyLHRoaXMuZnQpLHRoaXMuTXQ9dGhpcy5wMS5jb3B5KCkucmVmbGVjdChhZSgxLDApKSx0aGlzLmJ0PXRoaXMucDIuY29weSgpLnJlZmxlY3QoYWUoMSwwKSksdGhpcy53dD10aGlzLl90LmNvcHkoKS5yZWZsZWN0KGFlKDEsMCkpLHRoaXMueXQ9dGhpcy5kdC5jb3B5KCkucmVmbGVjdChhZSgxLDApKSx0aGlzLnN0PnRoaXMuWSYmKHRoaXMucT10aGlzLnN0KX1kaXNwbGF5KHQsaSl7aS5wdXNoKCksaS50cmFuc2xhdGUodGhpcy5MLHRoaXMuUik7bGV0IGU9dGhpcy5ZL3RoaXMucTtpLnRyYW5zbGF0ZSgwLCh0aGlzLnN0LXRoaXMucS8yKSplKSxpLnNjYWxlKDEsZSksdGhpcy5tYXNrfHxudWxsPT10fHxpLmZpbGwoR2UodCkpO2xldCBzPXRoaXMucS10aGlzLnN0LGg9MStyXy5vKC0uMDcsLjA3KSxuPWNlKHRoaXMucDEsaCwxKSxsPWNlKHRoaXMuTXQsaCwxKSxyPWNlKHRoaXMucDIsaCwxKSxvPWNlKHRoaXMuX3QsaCwxKSxhPWNlKHRoaXMud3QsaCwxKSxwPWNlKHRoaXMuZHQsaCwxKSx1PWNlKHRoaXMueXQsaCwxKTtpLmJlZ2luU2hhcGUoKTtsZXQgYz10aGlzLm50KmgsZj10aGlzLmh0O2kudmVydGV4KG4ueCtjLG4ueStmKSxpLmJlemllclZlcnRleChvLngrYyxvLnkrZixwLngrYyxwLnkrZixyLngrYyxyLnkrZiksYz0tdGhpcy5udCpoLGkuYmV6aWVyVmVydGV4KHUueCtjLHUueStmLGEueCtjLGEueStmLGwueCtjLGwueStmKSxpLnZlcnRleCh0aGlzLmx0KmgscyksaS52ZXJ0ZXgoLXRoaXMubHQqaCxzKSxpLnZlcnRleCgtdGhpcy5sdCpoLDApLGkuZW5kU2hhcGUoKSxpLnBvcCgpfX1jb25zdCBfZT17eHQ6IlNvbGlkIixVOiJBcmNoZXMyYyIsSjoiU3RhaXJzIixHOiJNb29uIixYOiJXYXZlcyIsRjoiQmxvYnMiLGd0OiJWaW5lcyIsVjoiTGVhdmVzIixTOiJCcmlja3MiLEk6IlBhd24iLE46IlN0YXIifTtjbGFzcyBkZXtjb25zdHJ1Y3Rvcih0LGksZSxzLGgsbil7dGhpcy5MPWksdGhpcy5SPWUsdGhpcy5kPXMsdGhpcy53PXRoaXMuZCx0aGlzLlk9dGhpcy5kLHRoaXMucGF0dGVybj1oLHRoaXMuY29sb3I9bix0aGlzLml0PXRoaXMudy90aGlzLlksdGhpcy5aPXR9aigpe3RoaXMuZD10aGlzLnd9ZGlzcGxheSgpe3RoaXMuWi5wdXNoKCksdGhpcy5aLmZpbGwoR2UodGhpcy5jb2xvcikpLHRoaXMuWi5ub1N0cm9rZSgpLGZ1bmN0aW9uKHQsaSxlLHMsaD1udWxsLG49bnVsbCxsPTIpe251bGw9PWgmJihoPTApO251bGw9PW4mJihuPTIqcC5QSSk7bGV0IHI9W10sbz1NYXRoLmZsb29yKDExKnMpLGE9MipwLlBJL28sdT1wLm1hcChzLGhpLC4yNSpwLmN3LDgsODAwLCEwKTt1PTEvdSx1Kj1sLHQuYmVnaW5TaGFwZSgpO2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBvPWwqYStoO2lmKG8+bilicmVhaztsZXQgYz1FZShpK3MqTWF0aC5jb3MobyksLjAwMSksZj1FZShlK3MqTWF0aC5zaW4obyksLjAwMSksXz1wLm1hcChwLm5vaXNlKGMqdSxmKnUpLDAsMSwuOSwxLCEwKTtjPWkrcypfKk1hdGguY29zKG8pLGY9ZStzKl8qTWF0aC5zaW4obyksdC52ZXJ0ZXgoYyxmKSxyLnB1c2goYWUoYyxmKSl9dC5lbmRTaGFwZSgpfSh0aGlzLlosdGhpcy5MLHRoaXMuUix0aGlzLmQvMiksdGhpcy5aLnBvcCgpfX1mdW5jdGlvbiBNZSh0LGksZSxzLGgpe2xldCBuPVtdLGw9KHMtZSkvNDtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgcj1lK3MqbCxvPXIrbCxhPWFlKGgqTWF0aC5jb3MociksaCpNYXRoLnNpbihyKSkscD1hZShoKk1hdGguY29zKG8pLGgqTWF0aC5zaW4obykpLHU9cGUoYSwxLGgsbCksYz1wZShwLC0xLGgsbCksZj1wNS5WZWN0b3IuYWRkKGEsdSksXz1wNS5WZWN0b3IuYWRkKHAsYyk7bi5wdXNoKG9lKGEsdCxpKSksbi5wdXNoKG9lKGYsdCxpKSksbi5wdXNoKG9lKF8sdCxpKSksbi5wdXNoKG9lKHAsdCxpKSl9cmV0dXJuIG59ZnVuY3Rpb24gYmUodCxpLGUscyxoKXtsZXQgbj1bXTtuLnB1c2goTWUoMCwwLGksZSxzKSksbi5wdXNoKE1lKDAsMCxlLGkscykpO2xldCBsPTEtMS4xL3M7dC5iZWdpblNoYXBlKCk7bGV0IHI9WzEsMS0yKmhdO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsPXJbaV07Zm9yKGxldCBlPTA7ZTw0O2UrKyl7bGV0IHM9bltpXVs0KmUrMF0saD1uW2ldWzQqZSsxXSxyPW5baV1bNCplKzJdLG89bltpXVs0KmUrM107MD09ZSYmdC52ZXJ0ZXgocy54LHMueSksdC5iZXppZXJWZXJ0ZXgoaC54LGgueSpsLHIueCxyLnkqbCxvLngsby55KmwpfX10LmVuZFNoYXBlKCl9ZnVuY3Rpb24gd2UodCl7cmV0dXJuKE1hdGgucm91bmQodCkrMzYwKSUzNjB9ZnVuY3Rpb24geWUodCl7cmV0dXJuIE1hdGgubWluKDEwMCxNYXRoLm1heCgwLE1hdGgucm91bmQodCkpKX1mdW5jdGlvbiBtZSgpe25pPXJfLk0oW19pKDAsNjYpLF9pKDY2LDE3MSksX2koMTcxLDE5MSksX2koMTkxLDI1NiksX2koMjU2LDMyMSksX2koMzIxLDM2MCldLFsuMjIsMzUvMzYwLDE2LzM2MCw2NS8zNjAsNDAvMzYwLC4xM10sTWF0aC5yYW5kb20oKSl9ZnVuY3Rpb24geGUodD0xLGk9LjI1LGU9ITEpe2xldCBzPXQqcl8ubyguNjQqaSwuNjQpLGg9d2UobmkrKHJfLm8oKTwuMTI/cl8uXyg2MCwxMjApKnJfLm8oWy0xLDFdKTpyXy5fKC0yMCwyMCkpKSxuPWxpKnJfLk0oW3JfLl8oMTAsMjApLHJfLl8oMjAsNDApLHJfLl8oNDAsNTYpXSxbLjQsLjUsLjFdKSxsPXJpKnJfLk0oW3JfLl8oMjUsNTApLHJfLl8oNTAsODApLHJfLl8oODAsOTApXSxbLjE1LC43LC4xNV0pO3JldHVybiByXy5vKCk8LjEyJiYobj1yXy5fKDIsMTIpLGw9cl8uXyg4OCw5NSkpLGU/cC5jb2xvcigwLDAsMTAwLHMpOnAuY29sb3IoaCx5ZShuKSx5ZShsKSxzKX1jb25zdCBnZT0yMCxrZT0yMSxXZT0yMix2ZT0yMztjbGFzcyBaZXtjb25zdHJ1Y3Rvcih0LGkpe3RoaXMua3Q9LjY1LHRoaXMuV3Q9ZXQsdGhpcy52dD0xMCx0aGlzLms9MCx0aGlzLlp0PVtdLHRoaXMuR3Q9W2dlLGdlLGdlXSx0aGlzLkx0PVswLDAsMF07Zm9yKGxldCB0PTA7dDwzO3QrKyl0aGlzLlp0LnB1c2goZGkoLjksLjk1KSl9SCh0PSExKXtpZih0aGlzLlJ0PVtdLHRoaXMuWXQ9W10sdGhpcy5YdD1bXSx0aGlzLlZ0PTAsdGhpcy5TdD0wLHRoaXMuSnQ9LjIsSnQ9ITEsIXQmJnRoaXMuRXQ+MS41KXtsZXQgdD1faSgwLDM2MSk7T3Q9cC5jb2xvcih0LDkwLDk4LDEpLGlpPXAuY29sb3IodCw4LDEwMCwuNjUpLHRoaXMuSnQ9ZGkoLjEsLjMpfXRoaXMuRXQ9MipNYXRoLnJhbmRvbSgpKy41O2xldCBpPWRpKC4zLC43KSpwLndpZHRoL3Auc2NhbGVfZmFjdG9yLGU9ZGkoLjMsLjcpKnAuaGVpZ2h0L3Auc2NhbGVfZmFjdG9yLHM9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjI7Zm9yKGxldCB0PTA7dDwxZTM7dCsrKXt0aGlzLlh0LnB1c2gocyk7bGV0IHQ9amUoaSxlLHMtLjIscysuMiwuMDAyNSwxZS00KkQpO3M9dC5oZWFkaW5nKCksaSs9MS41KnQueCp0aGlzLld0LGUrPTEuNSp0LnkqdGhpcy5XdCx0aGlzLlJ0LnB1c2goaSksdGhpcy5ZdC5wdXNoKGUpfXRoaXMuTnQ9dGhpcy5SdC5sZW5ndGgsdGhpcy5GdD1zLHRoaXMuVXQ9X2koMCx0aGlzLk50KX1DKCl7RCsrLHRoaXMuV3Q9ZXQ7bGV0IHQ9LjUqdGhpcy5XdCsxO01hdGgucmFuZG9tKCk8LjA1JiYhaXQmJih0aGlzLlN0PV9pKDAsdGhpcy5OdCkpLHRoaXMua3Q9aXQ/TWF0aC5taW4oLjk5NSx0aGlzLmt0Ky4wMik6TWF0aC5tYXgoLjY1Ky4xNSp0aGlzLmssdGhpcy5rdC0uMDIpO2xldCBpPXRoaXMuWHRbdGhpcy5TdF0sZT10aGlzLlJ0W3RoaXMuU3RdLHM9dGhpcy5ZdFt0aGlzLlN0XSxoPWksbj1lLGw9cyxyPTA7Zm9yKGxldCBpPXRoaXMuU3QrMTtpPHRoaXMuTnQ7aSsrKXtsZXQgZT1qZShuLGwsaC10aGlzLkp0LGgrdGhpcy5KdCwuMDAyLDhlLTUqRCk7aD1lLmhlYWRpbmcoKSxuKz0xLjMqZS54KnQsbCs9MS4zKmUueSp0O2xldCBzPXRoaXMua3Q7dGhpcy5SdFtpXT10aGlzLlJ0W2ldKnMrKDEtcykqbix0aGlzLll0W2ldPXRoaXMuWXRbaV0qcysoMS1zKSpsLHRoaXMuWHRbaV09aCxyKz1ofWg9aSxuPWUsbD1zO2ZvcihsZXQgaT10aGlzLlN0LTE7aT49MDtpLS0pe2xldCBlPWplKG4sbCxoLXRoaXMuSnQsaCt0aGlzLkp0LC4wMDIsOGUtNSpEKTtoPWUuaGVhZGluZygpLG4tPTEuMyplLngqdCxsLT0xLjMqZS55KnQ7bGV0IHM9dGhpcy5rdDt0aGlzLlJ0W2ldPXRoaXMuUnRbaV0qcysoMS1zKSpuLHRoaXMuWXRbaV09dGhpcy5ZdFtpXSpzKygxLXMpKmwsdGhpcy5YdFtpXT1oLHIrPWh9dGhpcy5nKCkmJiFpdD8oRCs9dGhpcy52dCx0aGlzLnZ0PU1hdGgubWluKDFlNCwxLjIqdGhpcy52dCkpOnRoaXMudnQ9MTA7bGV0IG89MjtpZihudWxsIT12dCl7WnQ+LjQmJihpdD0hMSksWnQ+LjQ1JiYodGhpcy5TdD1faSgwLHRoaXMuTnQpKTtsZXQgdD1NYXRoLm1pbiguNTE0KigxK01hdGgubG9nKFp0Ky4xKS9NYXRoLmxvZygxMCkpLC40KSsoWnQ+LjU/LjE1KihadC0uNSk6MCk7dGhpcy5XdD0uOTUqZXQrNip0LG89MisyNTAqTWF0aC5tYXgoWnQtLjAxMiwwKTtsZXQgaT0uNTUqWnQqWnQrLjQ1Klp0O3RpPU1hdGgucm91bmQoMTIwKk1hdGgubWF4KGktLjAwMTUsMCkpLE90PXAuY29sb3Iod2UocC5odWUoT3QpK3RpKSxwLnNhdHVyYXRpb24oT3QpLHAuYnJpZ2h0bmVzcyhPdCksMSksaWk9cC5jb2xvcihwLmh1ZShPdCkscC5zYXR1cmF0aW9uKGlpKSxwLmJyaWdodG5lc3MoaWkpLHAuYWxwaGEoaWkpKX10aGlzLnp0KCksdGhpcy5VdD0odGhpcy5VdCtvKSV0aGlzLk50LHRoaXMuQigpPyh0aGlzLlZ0KyssdGhpcy5WdD42MCp0aGlzLkV0JiZ0aGlzLkgoKSk6dGhpcy5WdD0wfWcoKXtyZXR1cm4gdGhpcy5RdCgpPDVlNH1CKCl7cmV0dXJuIXRoaXMubSgxKX1tKHQ9MixpPTApe2xldCBlPTAscz1wLndpZHRoL3Auc2NhbGVfZmFjdG9yLGg9cC5oZWlnaHQvcC5zY2FsZV9mYWN0b3I7Zm9yKGxldCB0PTA7dDwzO3QrKyl7bGV0IG49dGhpcy5JdCh0KSxsPXRoaXMuanQodCk7bj49cyppJiZuPD1zKigxLWkpJiZsPj1oKmkmJmw8PWgqKDEtaSkmJmUrK31yZXR1cm4gZT49dH1JdCh0KXtyZXR1cm4gdGhpcy5SdFsxOTkrMzAwKnRdfWp0KHQpe3JldHVybiB0aGlzLll0WzE5OSszMDAqdF19UXQoKXtsZXQgdD10aGlzLkl0KDApLGk9dGhpcy5qdCgwKSxlPXRoaXMuSXQoMSkscz10aGlzLmp0KDEpLGg9dGhpcy5JdCgyKSxuPXRoaXMuanQoMik7cmV0dXJuIE1hdGgucG93KGUtdCwyKStNYXRoLnBvdyhzLWksMikrKE1hdGgucG93KGgtZSwyKStNYXRoLnBvdyhuLXMsMikpKyhNYXRoLnBvdyhoLXQsMikrTWF0aC5wb3cobi1pLDIpKX1LKHQsaSxlKXtyZXR1cm4gZnVuY3Rpb24odCxpLGUscyl7bGV0IGg9ZS10LG49cy1pO3JldHVybiBoKmgrbipufSh0aGlzLkl0KHQpLHRoaXMuanQodCksaSxlKTw9MjI1KnRoaXMuV3QqdGhpcy5XdH1ibGluayh0KXt0aGlzLkd0W3RdPT1nZSYmKHRoaXMuR3RbdF09a2UpfXp0KCl7Zm9yKGxldCB0PTA7dDwzO3QrKyl7bGV0IGk9dGhpcy5HdFt0XSxlPXRoaXMuTHRbdF07aT09Z2U/KE1hdGgucmFuZG9tKCk8LjAwNXx8WnQ+LjQpJiYodGhpcy5HdFt0XT1rZSk6aT09a2U/KHRoaXMuTHRbdF09ZSs1LHRoaXMuTHRbdF0+PTEwJiYodGhpcy5HdFt0XT1XZSx0aGlzLkx0W3RdPTEwKSk6aT09dmU/KHRoaXMuTHRbdF09ZS01LHRoaXMuTHRbdF08PTAmJih0aGlzLkd0W3RdPWdlKSk6aT09V2UmJih0aGlzLkx0W3RdPWUrMSx0aGlzLkx0W3RdPj0xMCtfaSgwLDMpJiYodGhpcy5HdFt0XT12ZSx0aGlzLkx0W3RdPTEwKSl9bGV0IHQ9VnQ+PTNlMztidCYmIVN0JiZUPjYwKm9pLmdldChfKSYmKHRoaXMuaz10P01hdGgubWF4KDAsdGhpcy5rLTNlLTQpOk1hdGgubWluKDEsdGhpcy5rKzI1ZS01KSksU3QmJiF0JiZhaS5oYXMoXykmJlQtYWkuZ2V0KF8pPjEyMDAmJihTdD0hMSl9SHQodCl7bGV0IGk9W3AuY29sb3IoMCwwLDg1LDEpLHAuY29sb3IoMzU4LDYwKnRoaXMuayw5NywxKSxlaV0sZT1bMzAsMjgsMTAuNV07Zm9yKGxldCBzPTA7czwzO3MrKyl7Zm9yKGxldCBoPTA7aDwzO2grKyl7dC5maWxsKGlbaF0pO2xldCBuPWVbaF0qdGhpcy5XdDt0aGlzLkJ0KHQscyxuKX1sZXQgaDt0LnB1c2goKSxoPUp0P3AuY29sb3IodGhpcy5BdCgxOTkrMzAwKnMpLDEuMSpwLnNhdHVyYXRpb24oT3QpLC44KnAuYnJpZ2h0bmVzcyhPdCkscC5hbHBoYShPdCkpOk90LHQuZmlsbChoKSx0LnN0cm9rZShoKSx0LnN0cm9rZVdlaWdodCgxLjgpLHQudHJhbnNsYXRlKHRoaXMuSXQocyksdGhpcy5qdChzKSk7bGV0IG49dGhpcy5DdCh0aGlzLkx0W3NdKTtuPjAmJihiZSh0LDAscC5QSSx0aGlzLld0KnRoaXMuWnRbc10qMzAvMixuKSxiZSh0LDAsLXAuUEksdGhpcy5XdCp0aGlzLlp0W3NdKjMwLzIsbikpLHQucG9wKCl9fUN0KHQpe3JldHVybiB0Pj0xMD8uNTU6dDw9MD8uMyp0aGlzLms6LjMqdGhpcy5rKyguNTUtLjMqdGhpcy5rKSp0LzEwfWRyYXcodCxpPSEwKXtpZih0aGlzLlZ0PjApcmV0dXJuO3QucHVzaCgpLHQuc2NhbGUocC5zY2FsZV9mYWN0b3IscC5zY2FsZV9mYWN0b3IpLHQubm9TdHJva2UoKTtmb3IobGV0IGU9aT8wOjE7ZTwzO2UrKyl7bGV0IGkscyxoPTAsbj0wOzA9PWU/KGk9UHQscz0xOCp0aGlzLld0LGg9OCp0aGlzLld0LG49OCp0aGlzLld0KToxPT1lPyhpPU90LHM9MTEqdGhpcy5XdCk6Mj09ZSYmKGk9aWkscz01LjIqdGhpcy5XdCksdC5maWxsKGkpO2ZvcihsZXQgbD0wO2w8dGhpcy5OdDtsKyspe2lmKEp0JiZlPjApe2xldCBlPXAuY29sb3IodGhpcy5BdChsKSxwLnNhdHVyYXRpb24oaSkscC5icmlnaHRuZXNzKGkpLHAuYWxwaGEoaSkpO3QuZmlsbChlKX10LmVsbGlwc2UodGhpcy5SdFtsXStoLHRoaXMuWXRbbF0rbixzLHMpfX1sZXQgZT10aGlzLld0O3RoaXMuV3Q9LjQqZXQrLjYqZSx0aGlzLkh0KHQpLHRoaXMuVHQodCwwLDMwKnRoaXMuV3QpLHRoaXMuVHQodCwxLDMwKnRoaXMuV3QpLHRoaXMuVHQodCwyLDMwKnRoaXMuV3QpLHRoaXMuV3Q9ZSx0LnBvcCgpfUF0KHQpe3JldHVybiAzNjAqKCh0aGlzLlV0K3QpJXRoaXMuTnQpLyh0aGlzLk50LTEpfUJ0KHQsaSxlKXt0LmVsbGlwc2UodGhpcy5JdChpKSx0aGlzLmp0KGkpLGUqdGhpcy5adFtpXSxlKnRoaXMuWnRbaV0pfVR0KHQsaSxlKXt0LnB1c2goKSx0LnRyYW5zbGF0ZSh0aGlzLkl0KGkpLHRoaXMuanQoaSktLjQ1KmUpLHQuZmlsbChzaSksdC5zdHJva2Uoc2kpLHQuc3Ryb2tlV2VpZ2h0KDQuNSksYmUodCw4Ki1wLlBJLzEwLDIqLXAuUEkvMTAsLjUqZSwuMTYpLHQubm9TdHJva2UoKSx0LmZpbGwoZWkpLGJlKHQsNy43Ki1wLlBJLzEwLDIuMyotcC5QSS8xMCwuNSplLC4xMyksdC5wb3AoKX19ZnVuY3Rpb24gR2UodCl7bGV0IGk9eHQ/dDpwLmNvbG9yKDAsMCwxMDAscC5hbHBoYSh0KSk7cmV0dXJuIGd0P3AuY29sb3IocC5odWUoaSksMTUrLjg1KnAuc2F0dXJhdGlvbihpKSwyMCsuOCooMTAwLXAuYnJpZ2h0bmVzcyhpKSkscC5hbHBoYShpKSk6aX1jbGFzcyBMZXtjb25zdHJ1Y3Rvcih0LGksZSxzLGgpe3RoaXMuTD10LHRoaXMuUj1pLHRoaXMudz1lLHRoaXMuWT1zLHRoaXMuaXQ9dGhpcy53L3RoaXMuWSx0aGlzLnBhdHRlcm49aCx0aGlzLmV0PSExLHRoaXMuY29sb3I9eGUoKSx0aGlzLkR0PXJfLm8oWy0xLDFdKSx0aGlzLiR0PSExLHRoaXMuS3Q9cC5tYXAodGhpcy53LGhpLC40KnAuY3csaGksMzYsITApLHRoaXMucXQ9TWF0aC5tYXgoMyxNYXRoLnJvdW5kKHRoaXMuWS90aGlzLkt0KSksdGhpcy5LdD10aGlzLlkvdGhpcy5xdDtsZXQgbj10aGlzLncvdGhpcy5xdCxsPU1hdGgubWF4KG4sdGhpcy53LS43KnRoaXMuS3QqKHRoaXMucXQtMSkpLHI9dGhpcy53L3RoaXMuWTt0aGlzLlB0PXAubWFwKHIsMi41LC41LG4sbCwhMCksdGhpcy5UPS0xLHRoaXMuRD1udWxsLHRoaXMuJD1udWxsLHRoaXMuaGlkZGVuPSExfXYoKXt0aGlzLmNvbG9yPWZ1bmN0aW9uKHQ9MSxpPS4yNSxlPSExKXtsZXQgcz10KmRpKC42NCppLC42NCksaD13ZShuaSsoTWF0aC5yYW5kb20oKTwuMTI/X2koNjAsMTIxKSpNaShbLTEsMV0pOl9pKC0yMCwyMSkpKSxuPWxpKnJfLk0oW19pKDEwLDIxKSxfaSgyMCw0MSksX2koNDAsNTcpXSxbLjQsLjUsLjFdLE1hdGgucmFuZG9tKCkpLGw9cmkqcl8uTShbX2koMjUsNTEpLF9pKDUwLDgxKSxfaSg4MCw5MSldLFsuMTUsLjcsLjE1XSxNYXRoLnJhbmRvbSgpKTtyZXR1cm4gTWF0aC5yYW5kb20oKTwuMTImJihuPV9pKDIsMTMpLGw9X2koODgsOTYpKSxlP3AuY29sb3IoMCwwLDEwMCxzKTpwLmNvbG9yKGgseWUobikseWUobCkscyl9KCl9aih0KXtpZihudWxsPT10fHx0aGlzLk90KXJldHVybjtsZXQgaT10aGlzLkwsZT10aGlzLlI7dmFyIHM7dGhpcy5MPTAsdGhpcy5SPTAsdGhpcy5UPXQsdGhpcy5wYXR0ZXJuPT1fZS5JPygocz10aGlzKS50aT1yXy5vKC4zLC41KSxzLmlpPXJfLl8oLjcqaGksaGkpLGZ1bmN0aW9uKHQpe2xldCBpPS43KmhpLGU9KDYrLjUqaSkvMixzPXQuTCsuNSppLGg9cl8ubyguNSwxKSxuPXQudy8oaStlKSxsPS4wMDEscj0wO3QuZWk9W107bGV0IG89dC5ZKigxLXQudGkpLXQuaWk7Zm9yKDtzKy41Kmk8dC5MK3Qudzspe3MrPXJfLm8oLjIqaGksLjgqaGkpKnJfLm8oLjgsMS4yKTtsZXQgZT1yXy5vKC44KmksMS4yKmkpO2lmKHMrZT50LkwrdC53LTIpYnJlYWs7bGV0IGE9cl8ubyguNSwxLjIpLHA9bC8yLWwrcioobC9uKSx1PXQuUit0LlkqdC50aSt0LmlpLGM9YWUocyx1KSxmPWFlKHMrZSx1KSxfPUllKHQsYWUocytlLzIsdSksYWUocytlLzIsdStvKmEpLGgscCk7aWYoXy5sZW5ndGg+MjApe2xldCBpPXplKHQsXyxlLCEwLGYsYyk7bnVsbCE9aSYmdC5laS5wdXNoKGkpfXMrPWUscisrfX0ocyksZnVuY3Rpb24odCl7bGV0IGk9dC5ZKnQudGk7dC5zaT1bXTtsZXQgZT1NYXRoLm1pbihpLE1hdGgubWF4KE1hdGgubWluKHQudywuNyppKSx0Lncqcl8ubyguNSwuODUpKSkscz0uNCplLGg9aGkqcl8ubyguNiwuOCksbj0uMjUqKHQudy1lKSxsPXQuTCt0LncvMityXy5vKC1uLG4pLHI9ZnVuY3Rpb24odCxpLGUscyxoKXtsZXQgbj1yXy5vKDAsLjQpLGw9SWUodCxhZShpLGUpLGFlKGksZS1oKSxuKSxyPXplKHQsbCxzLCExLGFlKGktcy8yLGUpLGFlKGkrcy8yLGUpLFNlKTtyZXR1cm4gbnVsbCE9ciYmbC5sZW5ndGg+MTA/W3JbMF0sclsxXV06bnVsbH0odCxsLHQuUitpLWgsZSxpLWgpO251bGwhPXImJnQuc2kucHVzaChyKSx0Lm1vdW50PW5ldyBMZShsLXMvMix0LlIraS1oLHMsaCxfZS54dCl9KHMpKTp0aGlzLnBhdHRlcm49PV9lLlY/ZnVuY3Rpb24odCl7dC5paT1NYXRoLm1heCgxMCxNYXRoLm1pbiguMSp0Llkscl8ubyguMypoaSwxLjIqaGkpKSk7bGV0IGk9dC5ZLXQuaWksZT1oaSxzPXQuTCtyXy5vKC4zLC41KSplLGg9W107Zm9yKDtzPHQuTCt0Lnc7KXtzKz1yXy5vKC0uNSwuMjUpKmU7bGV0IG49ZSpyXy5vKC44LDEuNCk7aWYocytuPnQuTCt0LncpYnJlYWs7bGV0IGw9aSpyXy5vKC4zLC45NSk7aC5wdXNoKHtMOnMrbi8yLHdpZHRoOm4saGVpZ2h0Omx9KSxzKz1ufUJlKGgpLHQuaGk9W107Zm9yKGNvbnN0IGkgb2YgaCl7bGV0IGU9WWUodCxpLkwsdC5SK3QuWS10LmlpLGkud2lkdGgsaS5oZWlnaHQpO251bGwhPWUmJnQuaGkucHVzaChlKX19KHRoaXMpOnRoaXMucGF0dGVybj09X2UuWCYmZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsaSxlKXtsZXQgcz0wLGg9LjUqdC5ZLG49bnVsbCxsPW51bGwscj1bXSxvPXJfLm8oMSwyLjUpLGE9MWU1LHU9LTFlNTtmb3IoOzspe2kqPS0xO2xldCBkaXN0PXQudypyXy5vKC4wNSwuMTUpKm8sYz1zLGY9aCxfPXMrZGlzdCxkPWYrcl8ubygtLjA1LC4wNSkqZSxNPWMrZGlzdCpyXy5vKC4zLC4zNSksYj1udWxsO2lmKG51bGw9PW58fG51bGw9PWwpYj1mK2kqZSpyXy5vKDAsLjA2KTtlbHNle2xldCB0PShmLWwpLyhjLW4pO3AuYWJzKHQpPjUmJihNPWMrZGlzdCpyXy5vKC4wNSwuMSksdD0oZi1sKS8oYy1uKSksYj1mK3QqKE0tYyl9bGV0IHc9ZCtpKmUqcl8ubyguMSwuMTIpKi44LHk9Xy1kaXN0KnJfLm8oLjMsLjM1KTtpZihzPU1hdGgubWluKHQudyxfKSxoPWQsbj15LGw9dyxyLnB1c2goYWUoYyxmKSxhZShNLGIpLGFlKHksdyksYWUoXyxkKSksYT1NYXRoLm1pbihhLGYsYix3LGQpLHU9TWF0aC5tYXgodSxmLGIsdyxkKSxfPnQudylicmVha310LkQ9YSx0LiQ9dSx0Lm5pPXJ9KHQscl8ubyhbLTEsMV0pLHQuWSpyXy5vKC44LDEpKX0odGhpcyksdGhpcy5MPWksdGhpcy5SPWUsdGhpcy5PdD0hMCx0aGlzLkE9ZnVuY3Rpb24odCl7bGV0IGk9W10sZT1bXSxzPVtdLGg9W10sbj0wLGw9bnVsbCE9dC5EP3QuRDowLHI9bnVsbCE9dC4kP3QuJDp0Llk7Zm9yKDtuPHQudys0MDspcy5wdXNoKGFlKG4sbCkpLGgucHVzaChhZShuLHIrNDApKSxuKz00O2ZvcihuPWw7bjxyKzQwOylpLnB1c2goYWUoMCxuKSksZS5wdXNoKGFlKDArdC53KzQwLG4pKSxuKz00O3JldHVybiBoLnJldmVyc2UoKSxpLnJldmVyc2UoKSxzLmNvbmNhdChlKS5jb25jYXQoaCkuY29uY2F0KGkpfSh0aGlzKX1kaXNwbGF5KCl7dGhpcy5aLnB1c2goKSx0aGlzLlouZmlsbChHZSh0aGlzLmNvbG9yKSk7bGV0IHQ9dGhpcy5MLGk9dGhpcy5SO3RoaXMuYWN0aXZlfHx0aGlzLloudHJhbnNsYXRlKHRoaXMuTCx0aGlzLlIpLHRoaXMuTD0wLHRoaXMuUj0wLHRoaXMucGF0dGVybj09X2UueHQ/ZnVuY3Rpb24odCl7bGV0IGk9TWF0aC5taW4oLjE1Kk1hdGgubWluKHQudyx0LlkpLDE1KSxlPWZ1bmN0aW9uKHQsaSxlLHMsaCxuPTIpe2xldCBsPVtdO3JldHVybiB0LmJlZ2luU2hhcGUoKSxsPWwuY29uY2F0KE5lKHQsaSxlLGkrcyxlLG4sMCwtMSkpLGw9bC5jb25jYXQoTmUodCxpK3MsZSxpK3MsZStoLG4sMSwwKSksbD1sLmNvbmNhdChOZSh0LGkrcyxlK2gsaSxlK2gsbiwwLDEpKSxsPWwuY29uY2F0KE5lKHQsaSxlK2gsaSxlLG4sLTEsMCkpLHQuZW5kU2hhcGUoKSxsfSh0LlosdC5MLHQuUix0LncsdC5ZLGkpO3QuWi5iZWdpblNoYXBlKCk7Zm9yKGNvbnN0IGkgb2YgZSl0LloudmVydGV4KGkueCxpLnkpO3QuWi5lbmRTaGFwZSgpfSh0aGlzKTp0aGlzLnBhdHRlcm49PV9lLlU/ZnVuY3Rpb24odCxpKXtsZXQgZT10Llkscz0wLGg9ZnVuY3Rpb24odCxpLGU9MSxzPTEpe2xldCBoPXJfLm8oMCwxKSxuPTAsbD0ocl8ubyguMywuNDUpLF9lLnh0KTtyZXR1cm4gbmV3IGZlKDAsMCxlLHMsbixoLGwpfSgpLG49Ljc1LGw9cC5tYXAodC53LC4wNSpwLmN3LC41KnAuY3csMzYsMjQwLCEwKSxyPWwvbjtyPmUmJihyPS45KmUsbD1NYXRoLm1heCgyMCxyKm4pKTtsZXQgbz1NYXRoLm1heCgxLE1hdGguZmxvb3IodC53L2wpKSxhPTEsdT0uNjUrcyxjPS40K3M7dC5saShoLGEsbyx1LGMpfSh0aGlzLF9lLlUpOnRoaXMucGF0dGVybj09X2UuSj9mdW5jdGlvbih0KXtsZXQgaT10LkwsZT10LlIrdC5ZLXQuS3Qscz0odC53LXQuUHQpLyh0LnF0LTEpOy0xPT10LkR0JiYoaT10LkwrdC53LXQuUHQscyo9LTEpO2ZvcihsZXQgaD0wO2g8dC5xdDtoKyspe2xldCBuPXQuUHQqcl8ubyguOSwxLjEpLGw9cl8ubygtLjEsLjEpKm4scj1pO2lmKHItPWwvMixuKz1sLGglMj09MCl7bGV0IGk9bmV3IExlKHIsZSxuLHQuS3QsX2UueHQsITEpO2kuWj10LlosaS5jb2xvcj14ZSguOCksaS5kaXNwbGF5KCl9aSs9cyxlLT10Lkt0fX0odGhpcyk6dGhpcy5wYXR0ZXJuPT1fZS5HP2Z1bmN0aW9uKHQpe3QuWi5wdXNoKCk7bGV0IGk9Ljk1Kk1hdGgubWluKHQudyx0LlkpLGU9cl8uTShbMCwuMzUqcC5QSSwuMzUqLXAuUEkscl8ubyhbLTEsMV0pKnJfLm8oLjEqcC5QSSwuNipwLlBJKV0sWy4yLC4xLC4xLC42XSkscz0odC53LWkpL3Qudy8yLGg9cl8ubyguMTgsLjMyKTtzPTAhPWU/ZT4wP01hdGgubWluKGgscykqdC53K2kvMjpNYXRoLm1heCgxLXMsMS1oKSp0LnctaS8yOnMqdC53K2kvMjt0LloudHJhbnNsYXRlKHQuTCtzLHQuUit0LlkvMiksdC5aLnJvdGF0ZShlKSxiZSh0LlosMCxwLlBJLGkvMixyXy5vKC4wNiwuMTgpKSx0LloucG9wKCl9KHRoaXMpOnRoaXMucGF0dGVybj09X2UuST9mdW5jdGlvbih0KXtsZXQgaT1uZXcgTGUodC5MLHQuUit0LlkqdC50aSx0LncsdC5paSxfZS54dCk7aS5aPXQuWixpLmNvbG9yPXhlKCksZnVuY3Rpb24odCl7dC5aLnB1c2goKSx0LlouZmlsbChHZSh4ZSgxLjEpKSk7Zm9yKGNvbnN0IGkgb2YgdC5zaSlVZSh0LGkpO3QuWi5wb3AoKX0odCksdC5tb3VudC5aPXQuWix0Lm1vdW50LmNvbG9yPXhlKCksdC5tb3VudC5kaXNwbGF5KCksZnVuY3Rpb24odCxpKXt0LloucHVzaCgpLHQuWi5maWxsKEdlKHhlKDEuMDUpKSk7Zm9yKGNvbnN0IGkgb2YgdC5laSl7bGV0IGU9aVswXSxzPWlbMV07dC5aLmJlZ2luU2hhcGUoKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0LloudmVydGV4KGVbaV0ueCxlW2ldLnkpO2ZvcihsZXQgaT1zLmxlbmd0aC0xO2k+PTA7aS0tKXQuWi52ZXJ0ZXgoc1tpXS54LHNbaV0ueSk7dC5aLmVuZFNoYXBlKCl9dC5aLnBvcCgpfSh0KSxpLmRpc3BsYXkoKX0odGhpcyk6dGhpcy5wYXR0ZXJuPT1fZS5YP2Z1bmN0aW9uKHQsaSxlKXtpZih0LloucHVzaCgpLHQuWi50cmFuc2xhdGUodC5MLHQuUikscl8ubygpPC45KXQuWi5zdHJva2UoR2UoeGUoLjg1KSkpLHQuWi5ub0ZpbGwoKSx0Llouc3Ryb2tlV2VpZ2h0KC45KnJfLm8oMS4yLDYpKSx0LlouYmVnaW5TaGFwZSgpLGZ1bmN0aW9uKHQsaSxlPTApe2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cys9NCl0LnZlcnRleChpW3NdLngsaVtzXS55K2UpLHQuYmV6aWVyVmVydGV4KGlbcysxXS54LGlbcysxXS55K2UsaVtzKzJdLngsaVtzKzJdLnkrZSxpW3MrM10ueCxpW3MrM10ueStlKX0odC5aLHQubmkpLHQuWi5lbmRTaGFwZSgpO2Vsc2V7cl8ubyguOSwxKTtsZXQgaT1yXy5NKFtyXy5fKDE1LDMwKSxyXy5fKDQwLDYwKV0sWy42LC40XSk7dC5aLm5vU3Ryb2tlKCksdC5aLmZpbGwoR2UoeGUoLjgpKSk7Zm9yKGxldCBlPTA7ZTx0Lm5pLmxlbmd0aDtlKz00KXtsZXQgcz10Lm5pW2VdLGg9dC5uaVtlKzFdLG49dC5uaVtlKzJdLGw9dC5uaVtlKzNdLHI9cC5mbG9vcigobC54LXMueCkvaSk7Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGU9cC5iZXppZXJQb2ludChzLngsaC54LG4ueCxsLngsaS9yKSxvPXAuYmV6aWVyUG9pbnQocy55LGgueSxuLnksbC55LGkvciksYT1yXy5fKDUuMiw3KTt0LlouZWxsaXBzZShlLG8sYSxyXy5vKC44LDEuMikqYSl9fX10LloucG9wKCl9KHRoaXMpOnRoaXMucGF0dGVybj09X2UuRj9mdW5jdGlvbih0LGkpe3QuWi5wdXNoKCk7bGV0IGU9cl8ubygpPC4zLHM9aT90Lnc6dC5ZLGg9LjYqaGksbj0uMjUqTWF0aC5taW4odC53LHQuWSksbD0odC5MLHQuTCkscj10LlIsbz0uMDIqcztmb3IoOzspe2xldCBhLHAsdT1yXy5vKGgsbiksYz1lP3JfLm8oaCxuKTp1LGY9cl8ubyhoaSwuNypuKSxfPWMvMityXy5vKG8scy1jLW8pO2k/KGE9bCtfLHA9cit1LzIrZixyKz11K2YpOihhPWwrdS8yK2YscD1yK18sbCs9dStmKTtsZXQgZD1pP2M6dSxNPWk/dTpjO2lmKCEocCtNLzI8PXQuUit0LlktbyYmYStkLzI8PXQuTCt0LnctbykpYnJlYWs7e2xldCBpO2U/KGk9bmV3IExlKGEtZC8yLHAtTS8yLGQsTSxfZS54dCksaS5aPXQuWik6aT1uZXcgZGUodC5aLGEscCx1LF9lLnh0LHQuY29sb3IpLGkuZGlzcGxheSgpfX10LloucG9wKCl9KHRoaXMsdGhpcy5ZPnRoaXMudyk6dGhpcy5wYXR0ZXJuPT1fZS5WP2Z1bmN0aW9uKHQpe2Zvcihjb25zdCBpIG9mIHQuaGkpWGUodCxpKTtGZSh0LHQuaWkpfSh0aGlzKTp0aGlzLnBhdHRlcm49PV9lLlM/ZnVuY3Rpb24odCl7bGV0IGk9cl8uTShbMCwxLHJfLm8oLjQsLjk1KV0sWy4xLC4xLC44XSksZT1oaSpyXy5vKC45NSwxLjEpLHM9MS44NSpoaSxoPU1hdGgubWluKDM2LC4wNSp0LncpLG49MCxsPXJfLm8oLXMsLS42NSpzKStoLHI9bCxtdWx0PTE7Zm9yKDtuPi10Llk7KXtsZXQgbyxhPXQuWStuO2ZvcihvPWE8MS41KmU/YTpNYXRoLm1pbihhLzIscl8ubyguODUsMS4yKSplKSxuLT1vO2w8dC53LWg7KXtsZXQgZT1yXy5vKC45LDEuMSkqbyoxLjg1LHM9bmV3IExlKGwsbiwuODgqZSwuODUqbyxfZS54dCk7cy5aPXQuWixzLkw+PWgmJnMuTCtzLnc8PXQudy1oJiZzLlIrcy5ZPD0wJiZzLlI+PS10LlkmJihzLmNvbG9yPXJfLm8oKTxpP3QuY29sb3I6eGUoLjg1KSxyXy5vKCk+LjA1JiYocy5MKz10Lkwscy5SKz10LlIrdC5ZLHMuZGlzcGxheSgpKSksbCs9ZX1sPXIrbXVsdCpzKi41LHI9bCxtdWx0Kj0tMX19KHRoaXMpOnRoaXMucGF0dGVybj09X2UuTiYmZnVuY3Rpb24odCl7dC5aLnB1c2goKSx0LlouZmlsbChHZSh4ZSguNCwuOCxyXy5vKCk8LjgpKSk7bGV0IGk9LjUqTWF0aC5taW4odC53LHQuWSksZT10LkwrdC53LzIscz10LlIrdC5ZLzI7KGZ1bmN0aW9uKHQsaSxlLHMpe3QudHJhbnNsYXRlKGksZSk7bGV0IGg9cl8uTShbcl8ubygzLDMuNSkscl8ubyg1LDgpXSxbLjgsLjJdKSxuPS41KnMvaDt0LnRyYW5zbGF0ZSgwLC1uLzIpO2xldCBsPXJfLl8oNywxMCkscj0yKk1hdGguUEksbz1bLTEsMV07Zm9yKGxldCBpPWwtMTtpPj0wO2ktLSl7bGV0IGU9KHMtbi8yKSpyXy5vKC42LDEpO2Zvcihjb25zdCBzIG9mIG8pdC5wdXNoKCksdC5yb3RhdGUoaSpzKnIvKGwtMSkpLFJlKHQsMCwwLG4sZS1uLzIpLHQucG9wKCl9fSkodC5aLGUscyxpKSx0LloucG9wKCl9KHRoaXMpLHRoaXMucmkoKSx0aGlzLloucG9wKCksdGhpcy5MPXQsdGhpcy5SPWl9bGkodCxpLGUscyxoKXtpZih0aGlzLm9pPXQsbnVsbD09dGhpcy5vaSlyZXR1cm47bGV0IG49dGhpcy5ZO3RoaXMuYWk9cC5mbG9vcihpKSx0aGlzLnBpPXAuZmxvb3IoZSksdGhpcy51aT1zLHRoaXMuY2k9aCx0aGlzLm9pLnc9dGhpcy53Lyh0aGlzLnBpKigxK3RoaXMudWkpKzIqdGhpcy51aSksdGhpcy5vaS5ZPW4vKHRoaXMuYWkqKDErdGhpcy5jaSkrMip0aGlzLmNpKSx0aGlzLmZpPXRoaXMub2kudyp0aGlzLnVpLHRoaXMuX2k9dGhpcy5vaS5ZKnRoaXMuY2k7bGV0IGw9ZnVuY3Rpb24odCl7bGV0IGk9WzAsMF07aWYodC5ldCl7bGV0IGU9dC5ZKnQuaXQscz10LncvdC5pdDt0Lnc+ZT8oaVswXT10LnctZSx0Lnc9ZSk6dC5ZPnMmJihpWzFdPXQuWS1zLHQuWT1zKX1yZXR1cm4gaX0odGhpcy5vaSkscj1lKmxbMF0vKGUrMikvKHRoaXMub2kudytsWzBdKSxvPXRoaXMudWkrcjt0aGlzLmZpPW8qKHRoaXMub2kudytsWzBdKTtsZXQgYT1pKmxbMV0vKGkrMikvKHRoaXMub2kuWStsWzFdKSx1PXRoaXMuY2krYTt0aGlzLl9pPXUqKHRoaXMub2kuWStsWzFdKSx0aGlzLm9pLkw9MCx0aGlzLm9pLlI9MCx0aGlzLm9pLmooKX1yaSgpe2lmKG51bGw9PXRoaXMub2kpcmV0dXJuO3RoaXMuWi5wdXNoKCksdGhpcy5aLnRyYW5zbGF0ZSh0aGlzLkwsdGhpcy5SKTtmb3IobGV0IHQ9MDt0PHRoaXMucGk7dCsrKWZvcihsZXQgaT0wO2k8dGhpcy5haTtpKyspe2xldCBlPTEuNSp0aGlzLmZpKy41KnRoaXMub2kudyt0Kih0aGlzLm9pLncrdGhpcy5maSkscz0xLjUqdGhpcy5faSsuNSp0aGlzLm9pLlkraSoodGhpcy5vaS5ZK3RoaXMuX2kpO3RoaXMub2kuTD1lLHRoaXMub2kuUj1zLHRoaXMub2kuZGlzcGxheSh0aGlzLmNvbG9yLHRoaXMuWil9dGhpcy5aLnBvcCgpfX1mdW5jdGlvbiBSZSh0LGksZSxzLGgpe2xldCBuPXJfLm8oLjEsLjIpLGw9bityXy5vKC40LC42KSxyPXJfLm8oLjIsLjYpLG89LjMqbisuNypyXy5vKC4xLC4yKSxhPS4zKmwrLjcqKG8rcl8ubyguNCwuNikpLHU9LjMqcisuNypyXy5vKC4yLC42KTt0LmJlZ2luU2hhcGUoKSx0LnZlcnRleCgwLC1oKSx0LmJlemllclZlcnRleChzLzItcipzLzIsLWwqaCxzLzIsLW4qaCxzLzIsMCkscG9pbnRzPU1lKDAsMCwwLHAuUEkscy8yKTtmb3IobGV0IGk9MDtpPDQ7aSsrKXtwb2ludHNbNCppKzBdO2xldCBlPXBvaW50c1s0KmkrMV0scz1wb2ludHNbNCppKzJdLGg9cG9pbnRzWzQqaSszXTt0LmJlemllclZlcnRleChlLngsZS55LHMueCxzLnksaC54LGgueSl9dC5iZXppZXJWZXJ0ZXgoLXMvMiwtbypoLC1zLzIrdSpzLzIsLWEqaCwwLC1oKSx0LmVuZFNoYXBlKCl9ZnVuY3Rpb24gWWUodCxpLGUscyxoKXtsZXQgbj1yXy5vKC4xLC41KSxsPUllKHQsYWUoaSxlKSxhZShpLGUtaCksbikscj16ZSh0LGwscywhMSxhZShpLXMvMixlKSxhZShpK3MvMixlKSxWZSk7cmV0dXJuIG51bGwhPXImJmwubGVuZ3RoPjIwP3I6bnVsbH1mdW5jdGlvbiBYZSh0LGkpe2xldCBlPWlbMF0scz1pWzFdO3QuWi5iZWdpblNoYXBlKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdC5aLnZlcnRleChlW2ldLngsZVtpXS55KTtmb3IobGV0IGk9cy5sZW5ndGgtMTtpPj0wO2ktLSl0LloudmVydGV4KHNbaV0ueCxzW2ldLnkpO3QuWi5lbmRTaGFwZSgpfWZ1bmN0aW9uIFZlKHQsaSxlLHMsaCl7bGV0IG49LjI0KihzK3QrLjgqaSksbD1zLyhoLTEpO2w9MS1sKmw7bGV0IHI9ZSooKE1hdGguc2luKG4pKk1hdGguc2luKG4pKk1hdGguY29zKG4pKzEpLzEuMzg1KTtyZXR1cm4gcio9bCwuMSplKy45KnJ9ZnVuY3Rpb24gU2UodCxpLGUscyxoKXtsZXQgbj1zKigzL2gpLGw9cy8oaC0xKTtsPTEtbDtsZXQgcj1uKm4rLjUqcC5QSTtyZXR1cm4gZSooLjMrLjcqTWF0aC5hYnMoTWF0aC5jb3MocikpKSpsfWZ1bmN0aW9uIEplKHQsaSl7cmV0dXJuIE1hdGguYWJzKDIqTWF0aC5hYnModC1pLzIpL2ktMSl9ZnVuY3Rpb24gRWUodCxpPTVlLTQpe3JldHVybiB0K3AuY3cqKHAubm9pc2UoLjAxKnQpLS41KSppfWZ1bmN0aW9uIE5lKHQsaSxlLHMsaCxuLGw9MCxyPTApe24qPTEuMjtsZXQgbz1hZShpLGUpLGE9YWUocyxoKSx1PXJfLl8oMCwxZTMpLGM9cl8uXygwLDFlMyksZj1bXSxfPU1hdGgucm91bmQoby5kaXN0KGEpLzIpO2ZvcihsZXQgaT0wO2k8XztpKyspe2xldCBlPXA1LlZlY3Rvci5sZXJwKG8sYSxpL18pLHM9dWUoZSxvLGEsKGQ9dStlLngsTT1jK2UueSwocC5ub2lzZSguMDA2KmQsLjAwNipNKS0uNSkqSmUoaSxfKSpuKSk7LTE9PXI/cy55PU1hdGgubWF4KGUueSxzLnkpOjE9PXImJihzLnk9TWF0aC5taW4oZS55LHMueSkpLC0xPT1sP3MueD1NYXRoLm1heChlLngscy54KToxPT1sJiYocy54PU1hdGgubWluKGUueCxzLngpKSxmLnB1c2gocyksdC52ZXJ0ZXgocy54LHMueSl9dmFyIGQsTTtyZXR1cm4gZn1mdW5jdGlvbiBGZSh0LGksZT0hMSxzPW51bGwpe2xldCBoPWksbj1lP3QuUjp0LlIrdC5ZLWgsbD1uZXcgTGUodC5MLG4sdC53LGgsbnVsbD09cz9fZS54dDpzLCExKTtsLlo9dC5aLGwuY29sb3I9eGUoKSxsLmRpc3BsYXkoKX1mdW5jdGlvbiBVZSh0LGkpe2xldCBlPWlbMF0scz1pWzFdO3QuWi5iZWdpblNoYXBlKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdC5aLnZlcnRleChlW2ldLngsZVtpXS55KTtmb3IobGV0IGk9cy5sZW5ndGgtMTtpPj0wO2ktLSl0LloudmVydGV4KHNbaV0ueCxzW2ldLnkpO3QuWi5lbmRTaGFwZSgpfWZ1bmN0aW9uIHplKHQsaSxlLHMsaCxuLGw9bnVsbCl7bGV0IHI9W10sbz1bXSxhPWUsdT0xMCpwLmN3LGM9MTAqcC5jdyxmPSExLF89ITE7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2lmKHMpe2xldCBzPXQvaS5sZW5ndGg7YT1lLXMqcyplfWVsc2UgbnVsbCE9bCYmKGE9bChpW3RdLngsaVt0XS55LGUsdCxpLmxlbmd0aCkpOzA9PXQmJm51bGwhPWwmJihyLnB1c2goYWUoaVswXS54LWEvMixoLnkpKSxvLnB1c2goYWUoaVswXS54K2EvMixuLnkpKSk7bGV0IGQ9aVtwLm1heCgwLHQtMSldLE09aVtwLm1pbihpLmxlbmd0aC0xLHQrMSldLGI9dWUoaVt0XSxkLE0sYS8yKSx3PXVlKGlbdF0sTSxkLGEvMikseT1IZShiLGgpLG09SGUodyxuKTtudWxsPT1sJiYhZiYmeT51JiZ0PC4yNSppLmxlbmd0aCYmKHI9W2hdLGY9ITApLG51bGw9PWwmJiFfJiZtPmMmJnQ8LjI1KmkubGVuZ3RoJiYobz1bbl0sXz0hMCksci5wdXNoKGIpLG8ucHVzaCh3KSx1PXksYz1tfXJldHVybltyLG9dfWZ1bmN0aW9uIFFlKHQsaSl7bGV0IGU9YWUoMTAsMCkscz1wNS5WZWN0b3Iuc3ViKGksdCk7cmV0dXJuIGUuYW5nbGVCZXR3ZWVuKHMpfWZ1bmN0aW9uIEllKHQsaSxlLHMsaD0wLG49bnVsbCl7bGV0IGw9W10scj1RZShpLGUpLG89cypwLlBJLzIsYT1pLngsdT1pLnksYz1pLmRpc3QoZSksZj0wLF89bnVsbD09bj8yNTAwOm4sZD0wO3QuWTtsLnB1c2goYWUoYSx1KSk7bGV0IE09MDtmb3IoO2Q8Xzspe2xldCBpPWplKGEsdSxyLW8rTSxyK28rTSk7aWYoTSs9aCxhKz1pLngsdSs9aS55LHU+dC5SK3QuWXx8dTx0LlIpYnJlYWs7bGV0IHM9YWUoYSx1KSxfPXMuZGlzdChlKSxiPVFlKHMsZSk7aWYoXz5jP2YrKzpmPTAsbnVsbD09bil7aWYoYj5yK3AuUEkvMiYmYjxyKzEuNSpwLlBJKWJyZWFrO2lmKF8+MipjfHxmPjMpYnJlYWt9bGV0IHc9YT5wLmN3LTR8fGE8NCx5PXU+cC5jaC00fHx1PDQ7aWYod3x8eSlicmVhaztsLnB1c2gocyksYz1fLGQrK31yZXR1cm4gbH1mdW5jdGlvbiBqZSh0LGksZSxzLGg9LjAxLG49MCl7bGV0IGw9ZSsocy1lKSpwLm5vaXNlKHQqaCxpKmgsbik7cmV0dXJuIHA1LlZlY3Rvci5mcm9tQW5nbGUobCl9ZnVuY3Rpb24gSGUodCxpKXtsZXQgZT1pLngtdC54LHM9aS55LXQueTtyZXR1cm4gZSplK3Mqc31mdW5jdGlvbiBCZSh0KXtmb3IobGV0IGk9dC5sZW5ndGgtMTtpPjA7aS0tKXtjb25zdCBlPU1hdGguZmxvb3Iocl8ubygpKihpKzEpKTtbdFtpXSx0W2VdXT1bdFtlXSx0W2ldXX19ZnVuY3Rpb24gQWUodD0hMCl7bGV0IGk9cC5jcmVhdGVHcmFwaGljcyhNYXRoLnJvdW5kKHAuY3cqcC5zY2FsZV9mYWN0b3IpLE1hdGgucm91bmQocC5jaCpwLnNjYWxlX2ZhY3RvcikpO3JldHVybiB0JiZpLnNjYWxlKHAuc2NhbGVfZmFjdG9yLHAuc2NhbGVfZmFjdG9yKSxpLm5vU3Ryb2tlKCksaX19OyFhc3luYyBmdW5jdGlvbigpe3RyeXthd2FpdCh0PVcsbmV3IFByb21pc2UoKChpLGUpPT57Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzLnNyYz10LHMub25sb2FkPSgpPT5pKHMpLHMub25lcnJvcj10PT5lKG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBwNS5qcyB2MS4wLjAgbGliIGZyb206ICR7V31gKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKX0pKSkscDUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzPSEwLG5ldyBwNShQdCl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX12YXIgdH0oKTs8L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPg==","attributes":[{"trait_type":"Artist","value":"Fahad Karim"}],"image_details":{"bytes":191365,"format":"PNG","sha256":"afc45ef1ab5a810dc1f8f10b539aaa9a2ab000c42880527abebc9159f5338964","width":1253,"height":1253},"image":"https://arweave.net/ItpaHsSzOmOZG5WH_OBq0y3h_HX646tpiKMRp5TU908","image_url":"https://arweave.net/ItpaHsSzOmOZG5WH_OBq0y3h_HX646tpiKMRp5TU908"}