pacman-contribution-graph 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -2
- package/dist/pacman-contribution-graph.min.js +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# 👻 Pac-Man Contribution Graph Game
|
|
2
2
|
|
|
3
|
+
![Active users count][active-users-shield]
|
|
4
|
+
[![Forks][forks-shield]][forks-url]
|
|
5
|
+
[![Stargazers][stars-shield]][stars-url]
|
|
6
|
+
[![Contributors][contributors-shield]][contributors-url]
|
|
7
|
+
[![Stand with Palestine][stand-with-palestine-shield]][stand-with-palestine-url]
|
|
8
|
+
[![Buy Me a Coffee][buy-me-a-coffee-shield]][buy-me-a-coffee-url]
|
|
9
|
+
|
|
3
10
|
Transform your GitHub or GitLab contribution graph into an interactive Pac-Man game! This JavaScript library offers a unique and engaging way to visualize your coding activity over the past year.
|
|
4
11
|
|
|
5
12
|
<picture>
|
|
@@ -140,8 +147,8 @@ To showcase the Pac-Man game on your GitLab profile, follow these steps:
|
|
|
140
147
|
|
|
141
148
|
1. **Create a Special Repository**:
|
|
142
149
|
|
|
143
|
-
- Name a new repository exactly as your
|
|
144
|
-
- This repository powers your
|
|
150
|
+
- Name a new repository exactly as your GitLab username (e.g., `username/username`).
|
|
151
|
+
- This repository powers your GitLab profile page.
|
|
145
152
|
|
|
146
153
|
2. **Generate & Setup Push Token**:
|
|
147
154
|
|
|
@@ -295,3 +302,17 @@ Inspired by the [snk](https://github.com/Platane/snk) project, which turns your
|
|
|
295
302
|
These ghosts work hard! Leave a cuddle before you leave.<br>
|
|
296
303
|
<img src="assets/gifs/pink_pet_cafune.gif" alt="Ghost being petted" height="80">
|
|
297
304
|
</p>
|
|
305
|
+
|
|
306
|
+
<!-- MARKDOWN LINKS & IMAGES -->
|
|
307
|
+
|
|
308
|
+
[active-users-shield]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Felec.abozanona.me%2Fpacman-users-count-shield.php&query=%24.active_users&style=for-the-badge&label=Active%20Users
|
|
309
|
+
[contributors-shield]: https://img.shields.io/github/contributors/abozanona/pacman-contribution-graph.svg?style=for-the-badge
|
|
310
|
+
[contributors-url]: https://github.com/abozanona/pacman-contribution-graph/graphs/contributors
|
|
311
|
+
[forks-shield]: https://img.shields.io/github/forks/abozanona/pacman-contribution-graph.svg?style=for-the-badge
|
|
312
|
+
[forks-url]: https://github.com/abozanona/pacman-contribution-graph/network/members
|
|
313
|
+
[stars-shield]: https://img.shields.io/github/stars/abozanona/pacman-contribution-graph.svg?style=for-the-badge
|
|
314
|
+
[stars-url]: https://github.com/abozanona/pacman-contribution-graph/stargazers
|
|
315
|
+
[stand-with-palestine-shield]: https://img.shields.io/badge/🇵🇸%20%20Stand%20With%20Palestine-007A3D?style=for-the-badge&logo=liberapay&logoColor=white&labelColor=007A3D
|
|
316
|
+
[stand-with-palestine-url]: https://www.islamic-relief.org.uk/giving/appeals/palestine
|
|
317
|
+
[buy-me-a-coffee-shield]: https://img.shields.io/badge/Buy%20Me%20a%20Coffee-orange?logo=buy-me-a-coffee&style=for-the-badge
|
|
318
|
+
[buy-me-a-coffee-url]: https://www.buymeacoffee.com/abozanona
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t={d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{C:()=>At});const n=53,a="yellow",i={github:{textColor:"#57606a",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ebedf0","#9be9a8","#40c463","#30a14e","#216e39"]},"github-dark":{textColor:"#8b949e",gridBackground:"#0d1117",wallColor:"#ffffff",intensityColors:["#161b22","#0e4429","#006d32","#26a641","#39d353"]},gitlab:{textColor:"#626167",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ececef","#d2dcff","#7992f5","#4e65cd","#303470"]},"gitlab-dark":{textColor:"#999999",gridBackground:"#1f1f1f",wallColor:"#ffffff",intensityColors:["#2a2a3d","#4a5bdc","#2e3dbf","#1b2e8a","#0f1a4e"]}},o={blinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABiklEQVR4nIXSO2sVURQF4G8mMwa8QU2KxFcjCoIgacR/oCBYCP4fsTEIBkWwEK21UAQLIdjYaKEiJIXBXhNBCFaSeDP3zLa4mdyj5rHgwNmPtffZ62z+Q4miKHlWs3yALwUvKYphbC8UjDN3nIUB/SCCSDRnWKiZVxTFrvxp5kMRHbEltaTODuIED3YkT3FnUy+uS815qQkzMSJOxAWpuSo1A72Y4f5f5DFuBpE+vmsmZ9ukF9Eu/xwV+Pw1TEYcOtum9GmxCaLmdl7jeRDp968mcnQFMqS02bSkMV5tS36UBL6t7ixO6o/uK6sKymM0Q9l5NKC/Ldb3lWGrqenRCw73hr61H9viDujjKbztnLnae50uF4sl1nf91/2xvt9q7YuyEwKCNg+2DFoGue/fnHLoGwbyZQ/akqqkykkFZW6XmNy6VJdYyhPP8eE07/PCl1kqqbbMI3BrjY1rvMH4SW4kmou86Eac5UmiOcUcxq/wep2NirugYh4TXfOah6izUauax5leB2vuwR+e2vAshd8i9AAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABmUlEQVR4nHXTT0tUYRQG8N97/TOloSYpYv/BNlLYqqJli1Z9gz5SOwkKgpDaRBS5CKJ2fYFWrsyNZWKSOYliw8y9p8XMHa+Tc+ByOec8z/M+7z3nJidHwhtc7ORreIjog29H1iYunmc5iPIpyGd5h0cd8ZNPvcLzXmJBXq1N8/g/kSSlyywFkdPMaVZJvfVZnkhHImmSZyWol9jrqMSMsti5tmhwJyhSO+8bZT8ogrulQDbDQZe8/ZPt38eZA9jbZ2OjKzTFPpJxPrdoBFFsruVRxq+tI/v1nW45vn2NIFo0TvMxTdLcYRBt+DHPne/Up36GvaygDn+p17+srp+d59S1KHyvXOPHgaFLTC9gfUtQdDp/TLAbRJPDQ2O7cyIuiAgzlQlcjSkR8yLCWJS7McJGV6Df2HoXqZqPsJmVdk56J7JEVrGsmida2TATZeM+q+U4E9kcKzdYqe7Hg+OYcdN8atG41f5Zagu8KMhv8rbck9u8L8iv8xS1e3xo0TjHMgyM8BJDnUMGa7xWjrYdQ8O8cuSkNsoSsn/EzgO2a6zxyAAAAABJRU5ErkJggg==",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nIWSy2tTURCHvzNnzk0TS21sQluhq4Kb+sAH4qrgyoV/oNuCUIogEUGKf4DoolBFfCC4sYKgDVXig/Tec8ZF7k1uo9GBWczvnN8H84DpcM6h6ruw14VBBwZdeIX3inPuj//18FkmS/jtDdgvYGhgBhYhvwwv2khPs8z/3R2CnIcHlWlWXsXvMleDOEBVZaM0R8gTxGljghghN7BLyK4PwY/6UeUsbNuZlsVvn3JLyWz+1MTc8mbHP8x+HpmpWgVZhh5OKsbc0/6bgxhjzM3MbDicAN4f2jj6fUsQE8R52McBrcz7VbpPaJmxWALMxoBOMPMrE0bV3hXYC42grMCziOY3SJG18lf+fQxYx6y1XupfP1t9M6vwkjZ8GQ3JR3t3YHY8MGvWZsBpsw99s8GhmZwcbBd+sQQf/7e6WdmBIynKdRqkf17ZjBCrFdMQg5SgmNbqNySuFAySGwFP1AI6rVW1g0KANoCA3oK3DqR8lIvw/Bzs17Xb8LqqBTosI70ChjfhEVnWuIC/EyHfhIc4L2jmrqH3IuTX0S2azcYmcr+A4RrymCwEafuwJaoNAB+CLKjuiGoY9+q9XxDdcSF4AFEJiyJ3QwjyGx0DPZpbZTAYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABp0lEQVR4nI3TO2tUQRQH8N+9e9eg0YBBlwR8gNHKRqz8Amph4zcSBCWgEBALQbAU0U4EUewsfDQJNuIDiaAkSNhCY3Rz79xjsdndaxKDB6aYM//HzDln2DayrMXDgrct3hXcR7Y9dhMT14/wNFEGEURFb5onuLKjzDQ3B6QgalJNauamuLYt+SA3gkiUTffBauYPbBbJmB2AalJ8+Ryx2o1oN0Qm9kSdeim9Xyh/FFm0uNzUeFSTEmUsfoxhLC6NBNbXIyIipVR+fTGf8AAKZB2qjDyoHZ0B+04wvjJleWDRbisTuzponcon5Om7OoN7Fb1hsVY+RUTE2PGIw2J0g6jjd0TYG3FBnSp6uAPzg4oPwd1vEUvdCJ2RwNRk/1mvPwyxeF5gbUtLJjtb27TcJdsyBGs58n+Mxf9E6y9yUDf3NVVNtQOmzm0Agjpr3Cb6h0VO0SQNu9WPlGNS/x3FWRaawBlenuRVU/g8b/J++2G/grlVfp3jMcaOMZsoT3O3ryM/w4OK3iEuYewiz9b4iasDtznsHpi3uG3kAu2CW0Zfery98R/+AA8N/U/uOBf2AAAAAElFTkSuQmCC"},pinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4nG2TT2hcVRTGf/fc+2bey4xJk9hoXGlMES0uCoVoF4IWW1BEkWBB6lKwEPBPLXUlhYIYEiouRDdSsGDalJYmrtIuhECLC0MQIaWmgo2RJo0WMmn+zMy997h4aScTenbn+8453+E798L2EECMFHDjCWbRwoLDTmBEcrI5TFNiDWVjhtJgX549fGV3W+nplKisV+dqu344+NuKrP1SMeZDfNSHDsgonprq//njZ7v2QpJAYZOoAhswW5lm37mXvvlX7w00rZEkiSlRHLz5/mXd1xbqEOr6kaoeq6l+qqqfqEKoP1/21bkPJrWMG7bW5uLGGIDj1/svqq/4as+LqjjVym1V/TKqnlBdW1ClRfWJPap+xVf/endcgc+NMThVBejY6UrQAn9e27JazUCA7DHQ1RwKAbq0FaBTVRFxTtpNKU1dEe5us7gG1IGwBVuGLEnoIMuMtWKAL268ef5Y73NvI8E7jhagCxhSmN/0uLsOx5Nc4NQaUVN/64+f6Lnw1rcOKJVc0WHwrCYwCFiFumncaDGBzzxEB7UClKHVpA4oOSCEGPNCFyFY8Kb5wApsuM3D50RdPECQBgSEmDc2gIYBFhAFzcVMFADbeJsKMbVeVSOqoEpIqYUitTwPqBJjwXoCaN4aBfAh+BjT6OXO786YuqgQY6rezk0VZP7XQiyqRyxGosidaRez6GMIEfACdO7IOsUt/Zc+dfbA2MTMdzVTNrJy+6orjPSdcT++cHr5n0lHBpMz3/snR1+95Jb+TtvTRwR4FOCNM6+cXOorPTMKOIF3xl77er3btn8FgMDjbufQ+OvDVYH3ALen3Ds6sv/EMtB/34FDQEtusgE4wpa/K4IAAyIPoIx8GP8DW7gOkh3Y7ZsAAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZ0lEQVR4nHWRy4vNYRjHP8/ze885c+GIuTSZxriMS6KkKeQSK0lRDAsbthaTzSyUqYlhxYIsJkTNiGYh+RMYKRFTM5Fxq8ll3BriMOac3+95LM45GYOn3sX79n2/l+cL/58e4CkwAtwFwr9A8tfNOQJsernr2toFtauyFPIgORp7tw68TT6PAgcA+zcBdD7be6O7pXYDVNbgkVsRJEruPR6/puH85hsfyO0uk0gJgOOdT3b1d7csbctLQVRjDXhZxrHgMQH041Cov7jx+kdye0TERERw90PDOy6fXr5yXyxfRcVRomnmzADHqiTWT4Mhc7H1ch72q7sDNC+qnI/FFkslyhwB8d+f3SBL8RTAq5otDysA11IMicSQClE6BI4CS7yYUoB6h2MKxyOYC1JItEGyeSAC6B7c2Tdhhy3xN/7nnHD3jrz7xJQ3c7cuS5L99wsKdxRoakrXVzhu1JTilt1nAI+gYlrVATQ1NxgsUyA/GSfgwBdYvB4ihVfPgRQgCuOgjSDV4O9AIlFsEmBCAfEIUOBsQsNIUajpFPCmALHDSWgag+wPkFPANyAogAbABcDBc2q396HFtYJZFBMc/S5htL0UL7ZYEBUxBUyBxA085Sb510rKIICn3fTHWNBvo4FM0aFn3PTnWPCUW0k2VmDWjFSGKCHdemXL0IMXvUYFyM9Xurh39aCcWziQez8AlWDjD3VZ3+pBHX8USGcB6gDab23r+by9dt09oErg4HDb1ck1M5feLK2RaqIzI3v7JxeEuj4gPU9nX3rc1j+RRq6Wy+kCaqeUdQaYMa28C2XCYpH0iKC/AKR7DJ4ZSbreAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVR4nG2TTYiVZRTHf+c8z/vee+emNVycYBocHAqGEN3IgEgg7bIZBir72CW2aNEERZiK6Ci4sNrooi9q02KaZhYubNGuhVEkLcqmLkhpwgwqRGBzZ+6d+77POS7uxUw8yz+HP/+Pc+C+EREIIsAc8AdwBVhEEOT+bf4PxTySinQid9+z8vKFpxoDT1RB+KdzrTM69+zFDuknsni0LMoHEAhkzuzV/V+fGNmyC2qP4sENQLqirK9wa+0XHv9q+kzL7DBm9xCoImbHf33x/Mnx8amurIlqVyOSIAnUFcus9MLtxl/f5FsXJk+6yCzufc/wxqVXvvC0lgozS3624z6T3Gfc/T1zd3dvuduxjVQeKjeaz8078I6IoO4OMMaBHXjFTUSUNyswBNQcXu27rIO8nSsK45VRgG3ujoYsyAC5TDyzkxhh5UY/k0zgtlAZhXxrHxsEHNCe/xijaCrS4e9e+Pz1fQ+7Qcgl7y+XBgapfU9N6xDakvtju+3n5+deK8vytAIjw9aoXjjo5k0YbgAfJripUIXyXeg2gQ7wfgHJ8MxtRBs5MBKBdpE2oArMlUCA1dDrR7yn5IMAXevhwcGgSwGwHgHtSQb+TSCxh4iDOxQKfwOiEB3KBATUBSBEQFx64XiWmxgKBg6WU4KjySMGJMFDNMzvxqJAwhzP3WT9poJDVDyKaet61Nb16CoGCkGQ9rJ65ma9I00K1DfHOqFb5hOLey83l+eNKsja7zr82Y4ft3z65PfSWlIG4M/lBXYuPH05dDv55vwhgE0AB7+d+vj29NDEJaD2SNj01tJLX7a317adBxRBx+tji7/tX9gYjLUjQG3f0MQPFyc/WQVmCCGg6DGgAaBRBfQcSOU/n5oBH/XfHGBQ4JRq5A5IWx73SeLhogAAAABJRU5ErkJggg==",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACmUlEQVR4nGWTT4iWVRTGf+fce9/vj6Nf4/hnRlEERVcuAsFw0SKRRAhSiBJXgiQiqNRCwc1AC6FsihYVtrKYWShRkkSudBNFCPkVrSSmwj/ziVoa8c3Me99zXLzfTJTP6p57D8957nnOgf9DAUECXCxgJsGdAvmWIAF9Khv5TxAChcWJpsuO6QOXtw4v29wmOzZ3P2+Y3Nm9XT3qWvRDZPxpAkWWWXp/ev/lY8uXbwfpQGvw5sDsn/jjXxn7dOf5Ho8PDm5rgpSSpOzvTL/21Zsja3bNS1tURSL3ARWIjuGZlfD37e/jxg93n38U+wdzzo6IAJz+7dVLnk/mOR8391mvcc7dT7j78dL93Xl3d6+qqnxw6ppH+EBVUXcHWDXGSN3A4wINyEB/HzAELBV4IwFQAX+8vMUyjJkZKkG0Q7MoUgIDnqm/3VoN7RXAPaAIAPT79fHZ50Z1tFiXUiCoV/7e9b2Th2zdthz6FMzUBBs2wfBCyVwBEFvAKo27Om4/7596qaz4XIHO0tCICLWCCaAHN6/Cw3FqJ/5SOFOSSvAuXDkCK6qmAsMRKDNWmxIc5oG3HaJBqRCkNquX4HQeWB4G0igVcF0YB/fa2EpgNoDZQmKNuQh9Bwev3bN/h9PAipDd3RBAK6whuWowj/giubVCxsEGRRWwbJVZy7Le60aRSgGskKx3f4x+64fCE4YKBNBeN1rLsrlZrR5WjjQ7Gh/2musv7P7ym18+nqUNVe+7OPTZ9qk0teOTmd+vKEvgxs1J1k4+fzHc+alIjSEFRgH2Tr3w1oNtnU0XgAi8cmnPRH99Y/VHSK1ziDj+9YtnyzbFUSBsbKw998Wes/8Ahxc6cABZXB2AIyISFvdMVYATMcZBTAJeB3gCWn4PpFt1S94AAAAASUVORK5CYII="},inky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nJWTzWtTURDFf3fyXtqSCKa1GsWPTRG6UdSVa/8pV+JK6kYh4EoIIrgRuhAMgitdWGqhdtFWq0IoIsVqQUSSZ/Jy73HxkvBin6ADA3fOnXOGmbkXCqwEBrSATWAbeGhFiYeIpdgBDY7OtfiUpHgJSbz7kjBVfQrciO3vUo7aqQe0BxlJEiF4QvDZWeLNZzF15JYrJB+bb7KZiMuDHhd8OhYZ+Vmfcs2nbOyK8vRt54YyBlCqNPja1bL3KRY8Jj3JkVu/JJCO14N/5H3K1q6Amy4rDWCvCMH/8D4NA6kfJJ8TkKQkSApS2/uUrgQsA1jknDFbH+CcfQRcCWIHO7n+vgHTLqu2A+CBciWNsz7Kz9nv90bDakv68Gf/kg4kreSH+3YvAe4Dtj8GC4iFHoLnpwSsGdD5lzdyyPoC6NpoEf9v2Q5stAcAQhhM5IQwKMRyZhACAFLALEKajPMYMI6VZRnY/PAmYuHiaw76WUvfMWZmX3LizApyGba9B4tX1jGLqABQg3K1yepWh3MLTYOIk6fvst7uMVe/5xj+zPOLj1l7n1CtXY8h5tLVZ7zY6ABLWGQOuOMgAnDOGdBgcrjxEBsNbAZYMov4DRt5NkCBfZ1GAAAAAElFTkSuQmCC",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB10lEQVR4nIWT3WsTURDFfzP37hrTD1QM9hPTYlP7ov6hvgcsvhSUUpD+EfUpRKEi+CRUkYgFrTakabK5d3zYTbLRiAcG7s6eM3vmsBfmQMCRpi1uLFyQVi+oVE8UdB53Bk5EcZWXrNbbXIUMM8PMuBwNqN1/C5XnDmSu2IOyvnXMsBDNq64ZtbUjnRkigogoK5u5OISMGMNf4hAyQuFqe+/QqU6GCEn1BYOC9K+vlwf1zPDJviMPxsiudkks/jekMW5aZJQ9jIA65xwbOxERRUR/AudzNFZUsbay3YhevYPqcpss37ljU8SS7R+l/kczI8ZAP2SIPxFIuthwEeDaLOpodO2cS1XVj1OKZjGEMDSzOPS+sjh2IXKuOOmOnb0GFm6DW4J3JfttIEkt1moWW2b5ugFAekDybSblTTM25qS/YsZucY4xMDIDd+Yp/6Jmkc8yfY5xBICq52uJM4UqECcvRHRCMIuoelT9jKjMyRvpILdlRuPJKd8Lmz0zlm61uHOvRVb0OmbsPD6drAW/YGH5Fe1PPbYaBykkrNWbvO8MWK8fOBABpb53yIfLPndXnzpIePDomDdf+qSLR4hzCtJU8OSBKOizP66vR/y+Ux33EnBN71P5DQllVXyQma9lAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB4ElEQVR4nH2SvWtUURDFf3Pf24+siYkYFLRRizSaSiVi7V9g7b9hpSgogmIhipVbC0IwQrTQRgQ/CiMxCbsgxi9iIMHGENndrG/vPRZv3+atbDIwMHM4Z+65946xc1SByW791cwuSNIufIiiCOASFB8z/71FU2JTor7miSpPgKtdzgAxgCtdZ2lVSGmG4AnB9/r6uijsuRlh/WLnHLjyFea+CO8TOp12T5Rlp9PG+4TlX6JYuuGcS8VmBnCRd3VNe5/U8id284Okl5kj7xNq6wIu501Mz/xck/c+kaRaTvxc2/FUSh2G4IFnABQKDtzehzYksc8nG5spuefgqDRyJMUa2YBEwsrTUeqeO7z/1uBk8CBtbXSJWQ5LVNIBH/OPu7jSAB4AvOZ3Cs5sSZv/P56kuSDV81gInqYEzMdAky0Po47zpcFffNoGgH8BaDnAMLfDau0S6m5ArwSQQj9JYSCWC9ebJgUsZyXrzVyfqL/vOGCUYQPnYianPrP8J2M6Dh5eYv+BBXx38GoTTkx9wrmYIQDGAG7zttbgzLlXDsqMjV9j4UebieOzBpGBcWziEYsrLcYP3SpCiVNnX/BmqQHcJ45jKJTvAiMAzswwqwLF7XtaDK5q2ZWhgovvRVHMP7z+WsD4PpRYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB1klEQVR4nI2Tu4tTURDGf2fOvUlMcAXjigpZFfGBlaAI+h/4T9nYCClslFiJLlhZbJXCJmyxrs91bdyXYLFE8UGURaImN3PG4t6blxH8YIr5+OabOXPOcUzBpeECPAAuZnRb4FqAMK2fgPce4Aa+2GTjY5dgRt+M9m9lbv4xcDuOvZtdDEixXOf9F8MsjRCUEHSYf1KjWrvv00GnEJdusvPNUE1QTYZFeagmDAY92j+NucP3GJo4l4799msqCkFbZrY7bWBmr0LQF6oJux3Dx3dlrP8SGhTVpGkjPBsrXs84VU2e7CUKPAVAxDl86RH9dMxOJtx/0ozKyCAHhzQBM/yJ5ShCABbZ+NDLl7WcCavHzCiNDLYzXiIzjgdlM+lRLLYAXrOXbTwTr5rZ1owd7JjZio1pkU4EdOlPXsjVf7yTM9OEoyuAzLrV/4KJyAQRwuCvfBY3BgECBpgFRKKRe5aLRJiFCS7P0YEAB6kAIhHnLq+z+TkzcMKR2nP2lVf47tJJOwPh7IU1yBtZFaBO680PLl1pFqBA5cB1Xm73OH1+qQBeAOaPNlh794vawp0CxCycWmR1q0up8pBsDXVwZUi/MtAACvlpXHrUhkTiMyoCbvk4dn8AgDJfwO8SCRMAAAAASUVORK5CYII="},clyde:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACj0lEQVR4nG2TT2hUVxSHv3PunZfJm5CMiSGSaigxUDSIFv9sutBNQSiuCl1YpO2iUdAiFURKRSUBiyC6EFEsLrJQEHHdlXShiwYpVVBQpJuaVkZDdDI248x7954u5llH8MCFy3fO+fG799wrvCfUJxLz9mXgwwL97rw/HPL8feVvw3sPcLwPrv8z1W92ELPvscdfpS2Fq8BBEXmnR7q3vdjJh1OjP4wNLmMjLyOlItNGWRjk7t8pH8/OHxKRs2bWZVk9Kcw8+Ha97RgN2eRA3rKZCbPTmJ3B7Og2+6Anb32+NmR3vh4JwHfOuUJdBAc//rV/2MLS7YxqDGBmTx+anfdms8O28OcTA7OBiRhC45fszu4+A/aKCN7MCLB1zaARKxt4VRPVAPR+BNEgKzM0vpqXDXAV0RjWtTetaHpg0szwmnjSdv6aDOAplaS/ONhzMMCaQGCgr2M5SE1DVJQQxDk0tvOLj6Yqu2xkIerspx5qQBOubIdmgPoCXPuko5k/wl3amZTWZfHu7upUCOGYBzaMVpZTKxGpPYEL46AlqNc7MwrA/Bz8XIXMYGkJW0EcqzRSYNwD/xIUYgAFGssd69o16AgsFoIFb0UFQlMB/3/CigZfNFuxKNgbMQMRA3CFnoMAMaHzVouiWCaPZXKsYHTVFFYUyLCA9RB1UTyuQ80Ttea8PhdvJSLa4foCHxPymLsIZAoMURa0lvrJs/63xccJpCDzFU1PhptjP9ltedarpPDgj0q+5Vwy5+tpub/8WoEqwIm5L4cbmwfcDSAZ8kzf/2ZVa1S5WNyi29jvbtzbs7qZIgeA8merSrd+/WJlHdiHcw6PnwZ6O/9CRXFnQN/MARHpcXCqC1UVPSIi/AeSmwjoBKJbfAAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACbElEQVR4nHWSu2tUYRDFfzP37t27DzbZyOrGRyISBIPaaKNNChsbKxEEKx9EEEUUUkgKEaKCRAVfUUNasU7tH5BCQaIiEl/EmEgIebnZzd29+41FEl2DDkwz35wz35wzwv/jOrAHqAHTwDnABLCGJr8RIQJmXAJ2vz2ROt65YTmNMyajLDsGS5kqfAKu/YVZN/XK2KncjY6NFWit4ZLEABKj8l31x3yK7QNLdyO4/C+C3s+n833t++diczivTICtdgjUU1QRiN7kgpaBxXsRXGwk6Jk41XSrdd9CLCVUQPHW/c2BGc4yuPKHrJ+7X+o36FnToGvzlrIzAUl6itZXpFtTS4BQEUMtdi5TjB1wCEBX30tSFSURwtmXcGEaCh3gVsG5FrjwaSWbNyHVuqZhcW2DxxPdmSX3IFG3yoj9iWmzJ3mze56ZfWioj5l7lKtXzjdVgGEFDmxpKqcJahB2NixdgIQPosDOhnoHBEbYshACXQosEgs4hegLbXtBUlCerYBfBa8O5Sn8Ngi2AqVxRGOlqgA/FfBRD5yDwaMkPwPLkH5yBOYWIHIweJjMNwi/A0+PQVQBLwBQ/7fKMdjyRzfWW1AsC/IVBzEKWhv1F/raQWLMTToikBUDnA/EmMNCnM4GPvkZYAYDp3PqYx7WVHOSHVc8kPlAXbYaC3UViBVoIanofMbfd9tGZ95nIQCZzWt7n3vVfK02IlN5JQC+ZOm8yWudSvqEYFAAuPPuZHHpYDMvgDAHV8e7i9GuFMOAB0hRGJo4U6xtUx4DQUeCZ+9PFys+PF/zph/INNzdABA0eKfA0CohQAJ4CMgv7wr9rCokR+cAAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACk0lEQVR4nGWTT4jVVRTHP+fcM783b97TpzNqjDMaZTCFZBJCbqRN62jbRhGrhWW4axM0BrNIEJpwCoUGghZtbOWmbWoUEU0Jok8xCMU/U6O+p7557917T4vf82V54HsvF77nfr/33HPg/yECqgp8BzQHWEQVEXmCbv85mEmM8dhG9x3XDjVeLcbuGaos/92YnD55Z6qPnDOzj2OM/+o9rt1Qjt9+t3Kw2NCFBriQEZAeShv+vLme50+0jnTUZ8kZAH20roP5y4emDtqLxLyWSA+ki8oqSmHkp0Kc3n4nNg/UPgpZPhw+R0QQmLv+wYyn9Fs/5+XkX25zP0qJb15w97Z793fPx4uUFuhf3DfuwOHHa3Lq6vmfU0qp7+7uvuy+YO6fr3Hv3PJh3P3B+1/Q8fdxYB5ArQhSlyrP7tylYS087AJsgELhxiTS2MTGmYFMYxsSUVxQEDMTjb301aV31r++o+aZh2rBAFqQUpnUg/TIafcaoUPhz3n+dd/42zHGIwo8s3n0pi3NzpBuXaUS2vD1bmglqDfxT/ewcqENqQmLr4GDV8hbK3dHga0GdHCgehn9djskg/v3y/8RQM7C4iT0EjxYLZ1k6PcN6HUMUEShl0tCoIQPsAqsPhhcBqRyF8kAQQFFHQTyGHGYDOQKMVeIQzeAG2UHBYaNFMmOF2RdKUuIlkS9LaYrZj5CxgbKbdQD2aMDJAXWURj6V2EvzY/80vqjBjWQ63VdM8f3W47qT7JSU6pw6UI9v7IwuhRa1aJWcYA6wNzS3on27gk5DVSmRmTuylubO09XWQQVsPDyhJxu7p/o1k0Og1bfmLYfz7y5qQ28h5kRkE9AxgBCCAosgIbhlAmjAp+VUw6g4wKzqso/UZISjmIm/qIAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkUlEQVR4nG2Sz4uVZRTHP+c8z33vfe+90zg/dEaZULlUEgQa1NZ/wIXQtl8bN2HRJlq4CwRhxDEZBYtpF9QiaSHtWgiioBthwCjMizk23hrTxmruve/7nNPivd7IOnB4OHCew/mezxeeDhEQkRpczODnGqzV4RohBET+2/6vQlXqxnIT27/23tT+fPL3Jm54f8L2Lv157W6yLrXa61YU9j8DVKZFz99/d/JIbfYR5Anq4I6Jo2xmsAm7Tw2//sl4DTAABYgxyjR2vnc0PxI6D0qboySfgj7IAGUI1h6Wtk/LO8f2HH4WLsQQVMaaYal/dNrTMoV/Muvut9y97/7lPvdF3E/ivtJx94ee0kaRFg/4BHyO6nj/r+xDUjpL4eX3Po4/NtzPTbkvB3fvubt7SqnodbsJ9GolPIjOoCqeKSiEDgCNXSDtGbg/A5kDOwAI22Bu7x6dknmyKFE9+YU77zxzyHcNTYcWsZsAtCchA3CHZMA9HCDX2Mlg7f1tr2alX1dgodV8FAlACXx6EMrv2Fh9wODMy9D+ER4DK68g3MW7t7m1+BzN/KYOYCECA0wABwc2H8K5lyBTsGLECfhtHc52KvJhCASMNIgVSq+afAR2kKCf/nHKk/yrgBI8x4SKQTXfq8cyyvEnBWtQWp1ybDcBa45qDzwxkgF4humvWt1CwCOmPaKuS/SAEcADpr+ESI3RwTAFZmmArtfji6fl8r3VFrRAehO64wTfZif8G++2lTps3Z7Q50/rJek2lNxIsB3g+JU35h8fmA4XQbM2fLD65sLWC634BQQFYQ7O/PDWzmJnXZZA4+4GKzfent9qwWeoKlD7CDSvRCkCp5Rq0crtQSK1jzWOvKsaFT0ZY5S/AWqkD0QparkoAAAAAElFTkSuQmCC"},eyes:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAj0lEQVR4nO2RsQ7CMAxE79K6aQCJbuztb8Af8P8rX8HaYzCChgbanZ5kyYqezjkb2MR3K02eOUdzJiBwhBCsgPWE7RcmD9YfBsCgp9zdS5Kul/Mpn50z95tzdSkAAKSYZp/7ZDzKF6XYxIUUvw12bbvKAF1VMQCvXUhSydXIjDk2kcDkjL4kF1k+4xrmH/UA3stP0Iur7f8AAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVR4nO2Ryw3CQAxE35jdEBFRAycEpUAJ9A81EBIlcMjPgazEHUbyxX47I3vhLwBiDDydUpxnQt8zgG2+kQeD1A2cTJo3JIqVzV29jod9NrCX82m3xLRt27wHTYlmY+SjquslRpJ9ZVAmDKC/wf0K0lQAuFtWddn0a88ZgAwoKKx7MdRnShxdF5hAHIc5t+Q3rp2BoRT2c3oBFX9xUA7hwq8AAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuUlEQVR4nO2PvRIBQRCEu+fOIaD8RkoRKCGZwNt4fwKFcutnW2LP1tWdF6CjmdmveruBvxgGSSqOJKvgmEnM6CWYxS7hkYSVbuWdABIC9pTkI2cAeHiv3WazDPsiazWeFczDS0buQQLl0CfnrmHOb10LDHkoJxtV1cXZubyohCyyH36tVuji8vvHwJI6DltMhzNM2jqpUJqmaEdMD8YV5h3l0vHNrAf9zrjV/ARQpLrPYmYBZrWpfkwv2KllZq2VZYMAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAArklEQVR4nO2RsQrCMBCGv0vaUq2gIlJxEBEX6eLi5jv4/g8h0qViIpxT27S0i3M/COTCx5/cBSYAiIxBA8a8IcfEIhiRjmh7tQHi3pkAVnqpIfs4sbX8KIrdmGc6qfJCBETA+XlzZeWc73r1etIJgHXw7KjZV957Btn0A8K+26bf7vMd88izmbnl+UpVtVRVrVSvnJeLICAFkiRu51WqHjlkd05bAC7Gpv9+4wT8AASmiluJhbS5AAAAAElFTkSuQmCC"},scared:{imgDate:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADCklEQVR4nFWSX2hbZRjGf993vnN60qSNXWva6JpR7f5km7qrWrVUXYt2HdOCk2FBoQiDsivxRmU3XggiKIIIuxgOpxeyKsL8A8IoaJVNrMy4Mant2qZbMxKX5k/TmJ6cfJ8Xyao+8PK8F89z8bzPK7gDIcHo+t42GGbwmzk8vwJCIi2HH4d7KfxcAgFCbGkFANIB7cH2l3exc+IVCHfRtn8Mzb/IJ6YQpSxzp94h9enSHY9CyLq5Z3If8ddO0xrrpwr4/B/tDz2PDbj37EW5x1k5PYeQSIyBHcfjxN84QzDWz0a1jNY+1n/MFqC1z0a1TKhnkH0nP2L7xE6MQSAkPH7lPJG9R6j4FXzlstkwBQADlBscAKiWabGbWZ39hJm+lxRGg59PgdFUpdrWDf1xWCvBpV8AG548CIEAXEiAl5aKmtF42RsYgyK4x8EKtSOFZMPo8SfggxfqJ7CPgAjA9Ov1JIffh2/PC0lYSJy2KKHdjmLw0gJN4W48o1FS3S7UxVfSdTYa0lXotKFQAiyp8IxmW98EAz88LBgtpnBaovU6G9kdoAZ4jaKdBnuAbgxAJTuvMEajgHXts1nzcJWLKyQ1YN2vANCqXCRQ1j5ezaNJKlosB6NrEltIbsKJ5zLXrp8rrr44ml1gyWiaSunfPs4tz54p3MAq32bZ6MljxdXr59ZvTR7NJ0kBtrQEQ7nlN09IVS7mkn/mOnp778olH3nw7t1/ZQs3f5q3bNuynIE4tIbc8MU/iqnFW8GOAztKmU3jht869XdOIYRMZyuFzy/H+jO/Ctl1wN+MdRZTiRU7cPbLth4UNDnF1T1dpczZ75vbM4lgZPaxYGSkN30VI6TgUH4FK9xNevpd2iL307J/jIzRmHySyldvo4HmZ08iWu8lIiTFxBS57ArRg6/ip6/C4VKapy9/Rug+m8gzXYzOX2DcGIYSU1uvPHTta8aN4dDcd3Q81U5wl8PI718wkl2A4eRFQg+4W+LosRhH1xZ5dPo9hAJhw8DMh4ytLdI5Ft3ShfuCDC/N/AMdtzXsl7IlxgAAAABJRU5ErkJggg=="}},r={horizontal:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""}))),vertical:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""})))},s=(t,e,n,a,i)=>{"horizontal"===n?t>=0&&t<r.horizontal.length&&e>=0&&e<r.horizontal[0].length&&(r.horizontal[t][e]={active:!0,id:a,color:i}):t>=0&&t<r.vertical.length&&e>=0&&e<r.vertical[0].length&&(r.vertical[t][e]={active:!0,id:a,color:i})},c=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([a,i])=>{const o=t+a,s=e+i;return!(o<0||o>=n||s<0||s>=7||(-1===a?r.vertical[t][e].active:1===a?r.vertical[t+1][e].active:-1===i?r.horizontal[t][e].active:1===i&&r.horizontal[t][e+1].active))})),l={getValidMoves:c,calculateDistance:(t,e,n,a)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(a-e,2)),findNextStepDijkstra(t,e){var n;if(t.x===e.x&&t.y===e.y)return null;const a=[Object.assign(Object.assign({},t),{cost:0,path:[]})],i=new Set([`${t.x},${t.y}`]);for(;a.length;){a.sort(((t,e)=>t.cost-e.cost));const{x:t,y:o,cost:r,path:s}=a.shift();for(const[l,A]of c(t,o)){const c=t+l,u=o+A,d=`${c},${u}`;if(i.has(d))continue;i.add(d);const h=r+1,g=[...s,{x:c,y:u}];if(c===e.x&&u===e.y)return null!==(n=g[0])&&void 0!==n?n:null;a.push({x:c,y:u,cost:h,path:g})}}return null}},A={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let u="scatter",d=0,h=0;const g=t=>{switch(t.direction){case"up":t.direction="down";break;case"down":t.direction="up";break;case"left":t.direction="right";break;case"right":t.direction="left"}},m=(t,e)=>{if(!t.justReleasedFromHouse)return t.respawnCounter&&t.respawnCounter>0?(t.respawnCounter--,void(0===t.respawnCounter&&t.originalName&&(t.name=t.originalName,t.inHouse=!1,t.scared=e.pacman.powerupRemainingDuration>0))):("up"===t.direction&&t.y<=3?(t.direction="down",t.y=3):"down"===t.direction&&t.y>=3&&(t.direction="up",t.y=3),"up"===t.direction?t.y-=1:t.y+=1,void((t.y<3||t.y>=4)&&(t.y=(t.direction,3),t.direction="up"===t.direction?"down":"up")));26===t.x?(t.y=2,t.direction="up",t.inHouse=!1,t.justReleasedFromHouse=!1):t.x<26?(t.x+=1,t.direction="right"):t.x>26&&(t.x-=1,t.direction="left")},f=(t,e)=>{const n=A[t.name]||A.blinky;t.target=n;const a=C(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},p=(t,e)=>{(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=R(t.x,t.y));const n=y(t);if(0===n.length)return;const a=t.target.x-t.x,i=t.target.y-t.y;let o=n;if(Math.random()<.5);else{const t=n.filter((t=>{const e=t[0],n=t[1];return a>0&&e>0||a<0&&e<0||i>0&&n>0||i<0&&n<0}));t.length>0&&(o=t)}const[r,s]=o[Math.floor(Math.random()*o.length)];e.pacman.powerupRemainingDuration&&Math.random()<.6||(r>0?t.direction="right":r<0?t.direction="left":s>0?t.direction="down":s<0&&(t.direction="up"),t.x+=r,t.y+=s)},y=t=>l.getValidMoves(t.x,t.y).filter((e=>{const[n,a]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&a>0||"down"===t.direction&&a<0)})),v=(t,e)=>{const n={x:26,y:3};if(Math.abs(t.x-n.x)<=1&&Math.abs(t.y-n.y)<=1)return t.x=n.x,t.y=n.y,t.inHouse=!0,void(t.respawnCounter=1);const a=l.findNextStepDijkstra({x:t.x,y:t.y},n);if(a){const e=a.x-t.x,n=a.y-t.y;e>0?t.direction="right":e<0?t.direction="left":n>0?t.direction="down":n<0&&(t.direction="up"),t.x=a.x,t.y=a.y}else{const e=C(t.x,t.y,n.x,n.y,t.direction);e&&(t.x=e.x,t.y=e.y,e.direction&&(t.direction=e.direction))}},x=(t,e)=>{if("eyes"===t.name)return void v(t);const n=w(t,e);t.target=n;const a=C(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},C=(t,e,n,a,i)=>{if(t===n&&e===a)return null;const o=[{x:t,y:e,path:[],direction:i||"right"}],r=new Set;for(r.add(`${t},${e}`);o.length>0;){const t=o.shift(),{x:e,y:i,path:s,direction:c}=t,A=l.getValidMoves(e,i),u=A.filter((t=>{const[e,n]=t;return!c||!("right"===c&&e<0||"left"===c&&e>0||"up"===c&&n>0||"down"===c&&n<0)||1===A.length}));for(const[t,l]of u){const A=e+t,u=i+l,d=`${A},${u}`;if(r.has(d))continue;let h;r.add(d),h=t>0?"right":t<0?"left":l>0?"down":l<0?"up":c;const g=[...s,{x:A,y:u,pathDirection:h}];if(A===n&&u===a)return g.length>0?{x:g[0].x,y:g[0].y,direction:g[0].pathDirection}:null;o.push({x:A,y:u,path:g,direction:h})}}const s=l.getValidMoves(t,e);if(s.length>0){const[n,a]=s[Math.floor(Math.random()*s.length)];let o=i;return n>0?o="right":n<0?o="left":a>0?o="down":a<0&&(o="up"),{x:t+n,y:e+a,direction:o}}return null},w=(t,e)=>{const{pacman:n}=e;let a=S(e),i=1;if("blinky"===t.name){const t=371,e=(t-h)/t;if(e>.7&&(i=1.2),e>.9&&(i=1.4),Math.random()<.8*i)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const i=4;let o=n.x,r=n.y;return"up"===n.direction?(o=n.x-4,r=n.y-4):(o=n.x+a[0]*i,r=n.y+a[1]*i),o=Math.min(Math.max(o,0),52),r=Math.min(Math.max(r,0),6),{x:o,y:r};case"inky":const s=e.ghosts.find((t=>"blinky"===t.name));let c={x:n.x+2*a[0],y:n.y+2*a[1]};if("up"===n.direction&&(c.x=n.x-2,c.y=n.y-2),s){const t=c.x-s.x,e=c.y-s.y;c={x:c.x+t,y:c.y+e}}return c.x=Math.min(Math.max(c.x,0),52),c.y=Math.min(Math.max(c.y,0),6),c;case"clyde":return l.calculateDistance(t.x,t.y,n.x,n.y)<8?A.clyde:{x:n.x,y:n.y}}},S=t=>{switch(t.pacman.direction){case"right":return[1,0];case"left":return[-1,0];case"up":return[0,-1];case"down":return[0,1];default:return[0,0]}},R=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,a=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(a,6))}},b=t=>{h=(t=>{let e=0;for(let a=0;a<n;a++)for(let n=0;n<7;n++)"NONE"!==t.grid[a][n].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(d++,d>=5*("scatter"===u?7:20)&&(u="scatter"===u?"chase":"scatter",d=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||g(t)}))))})(t);for(const e of t.ghosts)e.inHouse?m(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?p(e,t):"eyes"===e.name?v(e):"scatter"===u?f(e):x(e,t))};var B;!function(t){t.CONSERVATIVE="conservador",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(B||(B={}));const E=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),D=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),I=t=>{var e;return null!==(e=i[t.config.gameTheme])&&void 0!==e?e:i.github},M=t=>{switch(t){case"NONE":default:return 0;case"FIRST_QUARTILE":return 1;case"SECOND_QUARTILE":return 2;case"THIRD_QUARTILE":return 3;case"FOURTH_QUARTILE":return 4}},T=(t,e)=>{const n=e/4;return 0===t?"NONE":t<n?"FIRST_QUARTILE":t<2*n?"SECOND_QUARTILE":t<3*n?"THIRD_QUARTILE":"FOURTH_QUARTILE"},k=t=>{const e=D(new Date),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const a=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:I(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((i=>{const o=D(new Date(i.date));if(o<n||o>e)return;const r=o.getUTCDay(),s=E(n,o);if(s>=0&&s<53){const e=I(t);a[s][r]={commitsCount:i.count,color:e.intensityColors[M(i.level)],level:i.level}}})),t.grid=a},U=I,z=k,O=t=>{const e=[];for(let a=0;a<n;a++)for(let n=0;n<7;n++){const i=t.grid[a][n];if("NONE"!==i.level){const o=l.calculateDistance(a,n,t.pacman.x,t.pacman.y),r=i.commitsCount/(o+1);e.push({x:a,y:n,value:r})}}return e.sort(((t,e)=>e.value-t.value)),0===e.length?{x:t.pacman.x,y:t.pacman.y,value:0}:e[0]},N=t=>{const e=new Map,a=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let a=-5;a<=5;a++)for(let i=-5;i<=5;i++){const o=t.x+a,r=t.y+i;if(o>=0&&o<n&&r>=0&&r<7){const t=`${o},${r}`,n=15-(Math.abs(a)+Math.abs(i));if(n>0){const a=e.get(t)||0;e.set(t,Math.max(a,n))}}}})),a)for(const[t,n]of e.entries())e.set(t,n/5);return e},P=(t,e)=>{var n;(n=t.pacman).recentPositions||(n.recentPositions=[]),t.pacman.recentPositions.push(`${e.x},${e.y}`),t.pacman.recentPositions.length>5&&t.pacman.recentPositions.shift();const a=e.x-t.pacman.x,i=e.y-t.pacman.y;t.pacman.direction=a>0?"right":a<0?"left":i>0?"down":i<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},Q=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>t.scared=!0))},V=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let a;try{if(e&&n.length>0){const e=(t=>{const e=t.ghosts.filter((t=>t.scared));return 0===e.length?null:e.reduce(((e,n)=>{const a=l.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return a<e.distance?{x:n.x,y:n.y,distance:a}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);a=null!=e?e:O(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(a=O(t),t.pacman.target=a):a=t.pacman.target:(a=O(t),t.pacman.target=a);a||(a={x:t.pacman.x,y:t.pacman.y});const i=((t,e)=>{var n;const a=[{x:t.pacman.x,y:t.pacman.y,path:[],score:0}],i=new Set([`${t.pacman.x},${t.pacman.y}`]),o=N(t);let r=.5,s=.5;switch(t.config.playerStyle){case B.CONSERVATIVE:r=3,s=.1;break;case B.AGGRESSIVE:r=.3,s=2;break;case B.OPPORTUNISTIC:default:r=.8,s=.8}let c=1/0;t.ghosts.forEach((e=>{if(!e.scared){const n=l.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);c=Math.min(c,n)}}));const A=t.config.playerStyle===B.CONSERVATIVE?5:7,u=c<A;for(t.config.playerStyle===B.CONSERVATIVE&&u&&(r*=5);a.length>0;){a.sort(((t,e)=>e.score-t.score));const c=a.shift(),{x:A,y:u,path:d}=c;if(A===e.x&&u===e.y){if(d.length>0){let e=0,n=0;return d.forEach((a=>{const i=`${a.x},${a.y}`,c=o.get(i)||0,l=t.grid[a.x][a.y].commitsCount;e-=c*r,n+=l*s})),d[0]}return null}for(const[c,h]of l.getValidMoves(A,u)){const g=A+c,m=u+h,f=`${g},${m}`;if(!i.has(f)){const c=[...d,{x:g,y:m}],A=o.get(f)||0,u=t.grid[g][m].commitsCount,h=l.calculateDistance(g,m,e.x,e.y),p=(null===(n=t.pacman.recentPositions)||void 0===n?void 0:n.includes(f))?100:0;let y,v,x;t.config.playerStyle===B.CONSERVATIVE?(y=(15-A)*r,A>=5?y-=100:y+=50,v=u*s,x=5*y+v+-h/10-p):(y=(15-A)*r,v=u*s,x=y+v+-h/10-p),a.push({x:g,y:m,path:c,score:x}),i.add(f)}}}return null})(t,a);i?P(t,i):(t=>{const e=l.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,a])=>{const i=t.pacman.x+n,o=t.pacman.y+a;let r=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=l.calculateDistance(t.x,t.y,i,o);r=Math.min(r,e)}})),r>e.distance?{dx:n,dy:a,distance:r}:e}),{dx:0,dy:0,distance:-1/0});P(t,{x:t.pacman.x+n.dx,y:t.pacman.y+n.dy})})(t),(t=>{const e=t.grid[t.pacman.x][t.pacman.y];if("NONE"!==e.level){t.pacman.totalPoints+=e.commitsCount,t.pacman.points++,t.config.pointsIncreasedCallback(t.pacman.totalPoints);const n=U(t);"FOURTH_QUARTILE"===e.level&&Q(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0}})(t)}catch(t){console.error("Error in movePacman:",t)}};var H,L=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};!function(t){t.DEFAULT="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav",t.BEGINNING="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav",t.GAME_OVER="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav",t.EAT_GHOST="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav"}(H||(H={}));class F{constructor(){this.sounds=new Map,this.currentSource=null,this.defaultSource=null,this.isMuted=!1,this.audioContext=new AudioContext}static getInstance(){return F.instance||(F.instance=new F),F.instance}preloadSounds(){return L(this,void 0,void 0,(function*(){for(const t of Object.values(H)){const e=yield fetch(t),n=yield e.arrayBuffer(),a=yield this.audioContext.decodeAudioData(n);this.sounds.set(t,a)}}))}play(t){return L(this,void 0,void 0,(function*(){if(this.isMuted)return;if(this.currentSource)try{this.currentSource.stop()}catch(t){}const e=this.sounds.get(t);if(e)return this.currentSource=this.audioContext.createBufferSource(),this.currentSource.buffer=e,this.currentSource.connect(this.audioContext.destination),this.isMuted||this.currentSource.start(),new Promise((t=>{this.currentSource.onended=()=>{this.currentSource=null,t()}}));console.error(`Sound ${t} not found`)}))}startDefaultSound(){if(this.defaultSource)try{this.defaultSource.stop()}catch(t){}const t=this.sounds.get(H.DEFAULT);t?(this.defaultSource=this.audioContext.createBufferSource(),this.defaultSource.buffer=t,this.defaultSource.loop=!0,this.defaultSource.connect(this.audioContext.destination),this.isMuted||this.defaultSource.start()):console.error("Default sound not found")}stopDefaultSound(){if(this.defaultSource){try{this.defaultSource.stop()}catch(t){}this.defaultSource=null}}mute(){this.isMuted=!0,this.currentSource&&this.currentSource.disconnect(),this.defaultSource&&this.defaultSource.disconnect()}unmute(){this.isMuted=!1,this.currentSource&&this.currentSource.connect(this.audioContext.destination),this.defaultSource&&this.defaultSource.connect(this.audioContext.destination)}}const Y=t=>t.deadRemainingDuration?"#80808064":t.powerupRemainingDuration?"red":a,j={},G=(t,e)=>{if(!j[t]){const n=new Image;n.src=e,j[t]=n}return j[t]},K=t=>{const e=t.config.canvas.getContext("2d");e.fillStyle=U(t).gridBackground,e.fillRect(0,0,t.config.canvas.width,t.config.canvas.height);for(let a=0;a<n;a++)for(let n=0;n<7;n++){if("NONE"!==t.grid[a][n].level){const i=t.grid[a][n].color;e.fillStyle=i}else e.fillStyle=U(t).intensityColors[0];e.beginPath(),t.config.canvas.getContext("2d").roundRect(22*a,22*n+15,20,20,5),e.fill()}e.fillStyle=U(t).wallColor;for(let t=0;t<=n;t++)for(let n=0;n<=7;n++)r.horizontal[t][n].active&&e.fillRect(22*t-2,22*n-2+15,22,2),r.vertical[t][n].active&&e.fillRect(22*t-2,22*n-2+15,2,22);e.fillStyle=U(t).textColor,e.font="10px Arial",e.textAlign="center";let a="";for(let i=0;i<n;i++)if(t.monthLabels[i]!==a){const n=22*i+10;e.fillText(t.monthLabels[i],n,10),a=t.monthLabels[i]}},J=t=>{t.config.enableSounds&&t.config.canvas.addEventListener("click",(function(e){const n=t.config.canvas.getBoundingClientRect(),a=e.clientX-n.left,i=e.clientY-n.top,o=t.config.canvas.width-30-10;a>=o&&a<=o+this.width&&i>=10&&i<=10+this.height&&(F.getInstance().isMuted?F.getInstance().unmute():F.getInstance().mute())}))},q=t=>{const e=10,n=t,a=2*Math.PI-t;return`M 10,10\n L ${e+e*Math.cos(n)},${e+e*Math.sin(n)}\n A 10,10 0 1,1 ${e+e*Math.cos(a)},${e+e*Math.sin(a)}\n Z`},W=(t,e,n)=>t.gameHistory.map((t=>t.grid[e][n].color)),X=(t,e)=>{if(t.gameHistory.length!==e.length)throw new Error(`The amount of values (${e.length}) does not match the size of the game history (${t.gameHistory.length})`);const n=t.gameHistory.length;if(0===n)return{keyTimes:"0;1",values:e[0]||"#000;#000"};let a=[],i=[],o=null,r=null;return e.forEach(((t,e)=>{t!==o&&(null!==o&&null!==r&&e-1!==r&&(a.push(Number(((e-1e-6)/(n-1)).toFixed(6))),i.push(o)),a.push(Number((e/(n-1)).toFixed(6))),i.push(t),o=t,r=e)})),0!==a.length&&1===a[a.length-1]||(0===a.length?(a.push(0,1),i.push(e[0]||"#000",e[e.length-1]||"#000")):(a.push(1),i.push(o||e[e.length-1]||"#000"))),{keyTimes:a.join(";"),values:i.join(";")}},Z=t=>{const e=200*t.gameHistory.length;let i='<svg width="1166" height="184" xmlns="http://www.w3.org/2000/svg">';i+=`<desc>Generated with pacman-contribution-graph on ${new Date}</desc>`,i+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,i+=`<rect width="100%" height="100%" fill="${U(t).gridBackground}"/>`,i+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const a=o[e];n in a&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${a[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${o.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{o.eyes&&e in o.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${o.eyes[e]}" width="20" height="20"/>\n </symbol>\n `:(console.warn(`Imagem para eyes-${e} não encontrada, usando placeholder`),t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <circle cx="10" cy="10" r="${20/3}" fill="white"/>\n </symbol>\n `)})),t+="</defs>",t})();let s="";for(let e=0;e<n;e++)t.monthLabels[e]!==s&&(i+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${U(t).textColor}">${t.monthLabels[e]}</text>`,s=t.monthLabels[e]);for(let a=0;a<n;a++)for(let n=0;n<7;n++){const o=22*a,r=22*n+15,s=X(t,W(t,a,n));i+=`<rect id="c-${a}-${n}" x="${o}" y="${r}" width="20" height="20" rx="5" fill="${U(t).intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite" \n\t\t\t\t\tvalues="${s.values}" \n\t\t\t\t\tkeyTimes="${s.keyTimes}"/>\n\t\t\t</rect>`}for(let e=0;e<n;e++)for(let n=0;n<7;n++)r.horizontal[e][n].active&&(i+=`<rect id="wh-${e}-${n}" x="${22*e-2}" y="${22*n-2+15}" width="22" height="2" rx="5" fill="${U(t).wallColor}"></rect>`),r.vertical[e][n].active&&(i+=`<rect id="wv-${e}-${n}" x="${22*e-2}" y="${22*n-2+15}" width="2" height="22" rx="5" fill="${U(t).wallColor}"></rect>`);const c=X(t,t.gameHistory.map((t=>Y(t.pacman)))),l=X(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),A=X(t,(t=>t.gameHistory.map((t=>{switch(t.pacman.direction){case"right":default:return"0 10 10";case"left":return"180 10 10";case"up":return"270 10 10";case"down":return"90 10 10"}})))(t));return i+=`<path id="pacman" d="${q(.55)}" fill="${a}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${c.keyTimes}"\n\t\t\tvalues="${c.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${l.keyTimes}"\n\t\t\tvalues="${l.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${A.keyTimes}"\n\t\t\tvalues="${A.values}"\n\t\t\tadditive="sum"/>\n\t\t<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${q(.55)};${q(.05)};${q(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,a)=>{const o=X(t,((t,e)=>t.gameHistory.map((t=>{if(e>=t.ghosts.length)return"0,0";const n=t.ghosts[e];return`${22*n.x},${22*n.y+15}`})))(t,a));i+=`<g id="ghost${a}" transform="translate(0,0)">\n\t\t\t<animateTransform attributeName="transform" type="translate" \n\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\t\tvalues="${o.values}"\n\t\t\t\tadditive="replace"/>`;const r=function(t,e){const n={};["blinky-up","blinky-down","blinky-left","blinky-right","inky-up","inky-down","inky-left","inky-right","pinky-up","pinky-down","pinky-left","pinky-right","clyde-up","clyde-down","clyde-left","clyde-right","eyes-up","eyes-down","eyes-left","eyes-right","scared"].forEach((t=>{n[t]=[{time:0,visible:!1}]}));const a=t.ghosts[e];if(!a)return n;const i=a.scared?"scared":"eyes"===a.name?`eyes-${a.direction||"right"}`:`${a.name}-${a.direction||"right"}`;n[i]=[{time:0,visible:!0}];let o=i;return t.gameHistory.forEach(((a,i)=>{if(e>=a.ghosts.length)return;const r=a.ghosts[e],s=i/(t.gameHistory.length-1),c=r.scared?"scared":"eyes"===r.name?`eyes-${r.direction||"right"}`:`${r.name}-${r.direction||"right"}`;c!==o&&(n[o].push({time:s,visible:!1}),n[c]||(n[c]=[{time:0,visible:!1}]),n[c].push({time:s,visible:!0}),o=c)})),n[o].push({time:1,visible:!0}),Object.keys(n).forEach((t=>{t!==o&&n[t].length>0&&n[t][n[t].length-1].time<1&&n[t].push({time:1,visible:!1})})),n}(t,a);for(const[t,n]of Object.entries(r)){if(0===n.length)continue;const a=`#ghost-${t}`,o=n.map((t=>t.time)).join(";"),r=n.map((t=>t.visible?"visible":"hidden")).join(";"),s=n[0].visible?"visible":"hidden";i+=`<use href="${a}" width="20" height="20" visibility="${s}">\n\t\t\t\t<animate attributeName="visibility" \n\t\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${o}"\n\t\t\t\t\tvalues="${r}" />\n\t\t\t</use>`}i+="</g>"})),i+="</svg>",i};var $=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const _=t=>{t.ghosts=[{x:26,y:2,name:"blinky",direction:"left",scared:!1,target:void 0,inHouse:!1,respawnCounter:0,freezeCounter:0,justReleasedFromHouse:!1},{x:25,y:3,name:"inky",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:10,justReleasedFromHouse:!1},{x:26,y:3,name:"pinky",direction:"down",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:20,justReleasedFromHouse:!1},{x:27,y:3,name:"clyde",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:30,justReleasedFromHouse:!1}],t.ghosts.forEach((t=>{t.justReleasedFromHouse=!1,t.respawnCounter=0,t.inHouse&&("inky"===t.name?t.direction="up":"pinky"===t.name?t.direction="down":"clyde"===t.name&&(t.direction="up"))}))},tt=t=>$(void 0,void 0,void 0,(function*(){var e;if(t.frameCount++,t.frameCount%t.config.gameSpeed!=0)return void et(t);if(t.pacman.deadRemainingDuration>0&&(t.pacman.deadRemainingDuration--,0===t.pacman.deadRemainingDuration&&((t=>{t.pacman.x=27,t.pacman.y=7,t.pacman.direction="right",t.pacman.recentPositions=[]})(t),_(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!1)})),t.pacman.points=0)),t.ghosts.forEach((e=>{e.inHouse&&e.respawnCounter&&e.respawnCounter>0&&(e.respawnCounter--,0===e.respawnCounter&&(e.name=e.originalName||(t=>{const e=["blinky","inky","pinky","clyde"];return e[t%e.length]})(t.ghosts.indexOf(e)),e.inHouse=!1,e.scared=t.pacman.powerupRemainingDuration>0,e.justReleasedFromHouse=!0)),e.freezeCounter&&(e.freezeCounter--,0===e.freezeCounter&&at(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){if("svg"===t.config.outputFormat){const e=Z(t);t.config.svgCallback(e)}return"canvas"==t.config.outputFormat&&((t=>{const e=t.config.canvas.getContext("2d");e.fillStyle=U(t).textColor,e.font="20px Arial",e.textAlign="center",e.fillText("Game Over",t.config.canvas.width/2,t.config.canvas.height/2)})(t),F.getInstance().play(H.BEGINNING).then((()=>F.getInstance().stopDefaultSound()))),void t.config.gameOverCallback()}V(t);const n=null===(e=t.grid[t.pacman.x])||void 0===e?void 0:e[t.pacman.y];n&&"FOURTH_QUARTILE"===n.level&&0===t.pacman.powerupRemainingDuration&&(t.pacman.powerupRemainingDuration=30,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))),nt(t),0===t.pacman.deadRemainingDuration&&(b(t),nt(t)),t.pacmanMouthOpen=!t.pacmanMouthOpen,et(t),"canvas"==t.config.outputFormat&&K(t),"canvas"==t.config.outputFormat&&(t=>{const e=t.config.canvas.getContext("2d"),n=22*t.pacman.x+10,a=22*t.pacman.y+10+15;e.fillStyle=Y(t.pacman);const i=t.pacmanMouthOpen?.35*Math.PI:.1*Math.PI;let o,r;switch(t.pacman.direction){case"up":o=1.5*Math.PI+i,r=1.5*Math.PI-i;break;case"down":o=.5*Math.PI+i,r=.5*Math.PI-i;break;case"left":o=Math.PI+i,r=Math.PI-i;break;default:o=0+i,r=2*Math.PI-i}e.beginPath(),e.arc(n,a,10,o,r),e.lineTo(n,a),e.fill()})(t),"canvas"==t.config.outputFormat&&(t=>{t.ghosts.forEach((e=>{const n=22*e.x,a=22*e.y+15,i=t.config.canvas.getContext("2d");if(e.scared)"imgDate"in o.scared&&i.drawImage(G("scared",o.scared.imgDate),n,a,20,20);else{const t=o[e.name][e.direction];i.drawImage(G(e.name+"-"+e.direction,t),n,a,20,20)}}))})(t),"canvas"==t.config.outputFormat&&(t=>{if(!t.config.enableSounds)return;const e=t.config.canvas.getContext("2d"),n=t.config.canvas.width-30-10;e.fillStyle=`rgba(0, 0, 0, ${F.getInstance().isMuted?.3:.5})`,e.beginPath(),e.moveTo(n+10,20),e.lineTo(n+20,15),e.lineTo(n+20,35),e.lineTo(n+10,30),e.closePath(),e.fill(),F.getInstance().isMuted?(e.strokeStyle="rgba(255, 0, 0, 0.6)",e.lineWidth=3,e.beginPath(),e.moveTo(n+25,15),e.lineTo(n+5,35),e.stroke()):(e.strokeStyle="rgba(0, 0, 0, 0.4)",e.lineWidth=2,e.beginPath(),e.arc(n+25,25,5,0,2*Math.PI),e.stroke(),e.beginPath(),e.arc(n+25,25,8,0,2*Math.PI),e.stroke())})(t)})),et=t=>{t.gameHistory.push({pacman:Object.assign({},t.pacman),ghosts:t.ghosts.map((t=>Object.assign({},t))),grid:t.grid.map((t=>t.map((t=>Object.assign({},t)))))})},nt=t=>{t.pacman.deadRemainingDuration||t.ghosts.forEach((e=>{"eyes"!==e.name&&e.x===t.pacman.x&&e.y===t.pacman.y&&(t.pacman.powerupRemainingDuration&&e.scared?(e.originalName=e.name,e.name="eyes",e.scared=!1,e.target={x:26,y:3},t.pacman.points+=10):(t.pacman.points=0,t.pacman.powerupRemainingDuration=0,0===t.pacman.deadRemainingDuration&&(t.pacman.deadRemainingDuration=10)))}))},at=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},it=t=>$(void 0,void 0,void 0,(function*(){"canvas"==t.config.outputFormat&&(t.config.canvas=t.config.canvas,(t=>{t.config.canvas.width=1166,t.config.canvas.height=174})(t),J(t)),t.frameCount=0,t.gameHistory=[],t.ghosts.forEach((t=>t.scared=!1)),t.grid=(t=>(k(t),t.grid))(t);const e=()=>t.grid.some((t=>t.some((t=>t.commitsCount>0))));if(e()&&((t=>{t.pacman={x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[]}})(t),_(t)),"canvas"==t.config.outputFormat&&K(t),"canvas"==t.config.outputFormat&&(t.config.enableSounds||F.getInstance().mute(),yield F.getInstance().preloadSounds(),F.getInstance().startDefaultSound(),yield F.getInstance().play(H.BEGINNING)),"svg"===t.config.outputFormat){for(;e();)yield tt(t);yield tt(t)}else clearInterval(t.gameInterval),t.gameInterval=setInterval((()=>tt(t)),200)})),ot={frameCount:0,contributions:[],pacman:{x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[]},ghosts:[],grid:[],monthLabels:[],pacmanMouthOpen:!0,gameInterval:0,gameHistory:[],config:void 0,useGithubThemeColor:!0};var rt=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const st=t=>rt(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield(t=>rt(void 0,void 0,void 0,(function*(){var e;const n=yield fetch("https://api.github.com/graphql",{method:"POST",headers:{Authorization:`Bearer ${null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify({query:"\n\t\tquery ($login: String!) {\n\t\t\tuser(login: $login) {\n\t\t\t\tcontributionsCollection {\n\t\t\t\t\tcontributionCalendar {\n\t\t\t\t\t\tweeks {\n\t\t\t\t\t\t\tcontributionDays {\n\t\t\t\t\t\t\t\tdate\n\t\t\t\t\t\t\t\tcontributionCount\n\t\t\t\t\t\t\t\tcolor\n\t\t\t\t\t\t\t\tcontributionLevel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t",variables:{login:t.config.username}})});if(!n.ok)throw new Error(`GitHub GraphQL request failed: ${n.status} ${n.statusText}`);return(yield n.json()).data.user.contributionsCollection.contributionCalendar.weeks.map((t=>t.contributionDays)).reduce(((t,e)=>t.concat(e)),[]).map((e=>{const n=e.contributionLevel,a=I(t);return{date:new Date(e.date),count:e.contributionCount,color:a.intensityColors[M(n)],level:n}}))})))(t):yield(t=>rt(void 0,void 0,void 0,(function*(){var e,n;const a=[];let i=!1,o=1;do{try{const r={};(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)&&(r.Authorization="Bearer "+t.config.githubSettings.accessToken);const s=yield fetch(`https://api.github.com/search/commits?q=author:${t.config.username}&sort=author-date&order=desc&page=${o}&per_page=100`,{headers:r}),c=yield s.json();i=!c.items||0===c.items.length,a.push(...null!==(n=c.items)&&void 0!==n?n:[]),o++}catch(t){i=!0}}while(!i);const r=Array.from(a.reduce(((t,e)=>{var n,a,i,o;const r=null===(a=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===a?void 0:a.split("T")[0],s=(null===(o=null===(i=e.commit.committer)||void 0===i?void 0:i.date)||void 0===o?void 0:o.split("T")[0])||r,c=(t.get(s)||{count:0}).count+1;return t.set(s,{date:new Date(s),count:c,color:"",level:"NONE"})}),new Map).values()),s=Math.max(...r.map((t=>t.count)).filter((t=>t>0)));return r.map((e=>{const n=T(e.count,s),a=I(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[M(n)],level:n}}))})))(t)})),ct=t=>{return e=void 0,n=void 0,i=function*(){const e=yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${t.config.username}`),n=yield e.json(),a=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),i=Math.max(...a.map((t=>t.count)).filter((t=>t>0)));return a.map((e=>{const n=T(e.count,i),a=I(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[M(n)],level:n}}))},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}c((i=i.apply(e,n||[])).next())}));var e,n,a,i},lt=(t,e,a,i,o)=>{"horizontal"==a?(s(t,e,"horizontal",o),"x"==i?s(n-t-1,e,"horizontal",o):"y"==i?s(t,7-e,"horizontal",o):"xy"==i&&(s(n-t-1,e,"horizontal",o),s(t,7-e,"horizontal",o),s(n-t-1,7-e,"horizontal",o))):(s(t,e,"vertical",o),"x"==i?s(n-t,e,"vertical",o):"y"==i?s(t,7-e-1,"vertical",o):"xy"==i&&(s(n-t,e,"vertical",o),s(t,7-e-1,"vertical",o),s(n-t,7-e-1,"vertical",o)))};class At{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){const t={platform:"github",username:"",canvas:void 0,outputFormat:"svg",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",gameSpeed:1,enableSounds:!1,pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:B.OPPORTUNISTIC};switch(this.store=JSON.parse(JSON.stringify(ot)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield ct(this.store);break;case"github":this.store.contributions=yield st(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return lt(0,2,"horizontal","xy","L1"),lt(1,2,"horizontal","xy","L1"),lt(4,1,"vertical","x","L2"),lt(4,2,"vertical","x","L2"),lt(4,3,"vertical","x","L2"),lt(4,4,"vertical","x","L2"),lt(3,3,"horizontal","x","L3"),lt(2,3,"horizontal","x","L3"),lt(4,5,"horizontal","x","L4"),lt(6,4,"vertical","x","L5"),lt(6,3,"vertical","x","L5"),lt(6,2,"vertical","x","L5"),lt(6,2,"horizontal","x","L6"),lt(7,2,"horizontal","x","L6"),lt(8,2,"horizontal","x","L6"),lt(9,2,"horizontal","x","L6"),lt(13,2,"horizontal","xy","L7"),lt(14,2,"horizontal","xy","L7"),lt(15,2,"horizontal","xy","L7"),lt(16,2,"horizontal","xy","L7"),lt(17,2,"horizontal","xy","L7"),lt(18,2,"horizontal","xy","L7"),lt(16,2,"vertical","xy","L8"),lt(8,1,"horizontal","x","L9"),lt(9,1,"horizontal","x","L9"),lt(10,1,"horizontal","x","L9"),lt(11,1,"horizontal","x","L9"),lt(12,1,"vertical","x","L10"),lt(12,3,"vertical","x","L10"),lt(11,4,"horizontal","x","L11"),lt(10,4,"horizontal","x","L11"),lt(9,4,"horizontal","x","L11"),lt(8,4,"horizontal","x","L11"),lt(8,4,"vertical","x","L12"),lt(8,5,"vertical","x","L12"),lt(23,1,"horizontal","x","L18"),lt(22,1,"horizontal","x","L18"),lt(21,1,"horizontal","x","L18"),lt(21,1,"vertical","x","L18"),lt(21,2,"vertical","x","L18"),lt(21,3,"vertical","x","L18"),lt(20,4,"horizontal","x","L18"),lt(19,4,"horizontal","x","L18"),lt(19,3,"vertical","x","L18"),lt(18,3,"horizontal","x","L18"),lt(22,5,"vertical","x","L19"),lt(21,5,"horizontal","x","L19"),lt(20,5,"horizontal","x","L19"),lt(20,5,"vertical","x","L19"),lt(1,6,"horizontal","x","L20"),lt(2,6,"horizontal","x","L20"),lt(3,4,"vertical","x","L20"),lt(5,6,"horizontal","x","L21"),lt(6,6,"horizontal","x","L21"),s(25,2,"horizontal","GH_TOP"),s(27,2,"horizontal","GH_TOP"),s(25,4,"horizontal","GH_BOTTOM"),s(26,4,"horizontal","GH_BOTTOM"),s(27,4,"horizontal","GH_BOTTOM"),s(25,3,"vertical","GH_LEFT"),s(28,3,"vertical","GH_RIGHT"),s(25,2,"vertical","GH_LEFT"),s(28,2,"vertical","GH_RIGHT"),z(this.store),(t=>{const e=D(new Date),a=new Date(e);a.setUTCDate(e.getUTCDate()-365),a.setUTCDate(a.getUTCDate()-a.getUTCDay());const i=E(a,e)+1,o=Array(i).fill("");let r="";for(let t=0;t<i;t++){const e=new Date(a);e.setUTCDate(e.getUTCDate()+7*t);const n=e.toLocaleString("default",{month:"short"});n!==r&&(o[t]=n,r=n)}t.monthLabels=i>n?o.slice(i-n):o})(this.store),yield it(this.store),this.store},new((a=void 0)||(a=Promise))((function(n,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof a?e:new a((function(t){t(e)}))).then(r,s)}c((i=i.apply(t,e||[])).next())}));var t,e,a,i}stop(){var t;t=this.store,$(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}var ut=e.C;export{ut as PacmanRenderer};
|
|
1
|
+
var t={d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{C:()=>At});const n=53,a="yellow",i={github:{textColor:"#57606a",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ebedf0","#9be9a8","#40c463","#30a14e","#216e39"]},"github-dark":{textColor:"#8b949e",gridBackground:"#0d1117",wallColor:"#ffffff",intensityColors:["#161b22","#0e4429","#006d32","#26a641","#39d353"]},gitlab:{textColor:"#626167",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ececef","#d2dcff","#7992f5","#4e65cd","#303470"]},"gitlab-dark":{textColor:"#999999",gridBackground:"#1f1f1f",wallColor:"#ffffff",intensityColors:["#2a2a3d","#4a5bdc","#2e3dbf","#1b2e8a","#0f1a4e"]}},o={blinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABiklEQVR4nIXSO2sVURQF4G8mMwa8QU2KxFcjCoIgacR/oCBYCP4fsTEIBkWwEK21UAQLIdjYaKEiJIXBXhNBCFaSeDP3zLa4mdyj5rHgwNmPtffZ62z+Q4miKHlWs3yALwUvKYphbC8UjDN3nIUB/SCCSDRnWKiZVxTFrvxp5kMRHbEltaTODuIED3YkT3FnUy+uS815qQkzMSJOxAWpuSo1A72Y4f5f5DFuBpE+vmsmZ9ukF9Eu/xwV+Pw1TEYcOtum9GmxCaLmdl7jeRDp968mcnQFMqS02bSkMV5tS36UBL6t7ixO6o/uK6sKymM0Q9l5NKC/Ldb3lWGrqenRCw73hr61H9viDujjKbztnLnae50uF4sl1nf91/2xvt9q7YuyEwKCNg+2DFoGue/fnHLoGwbyZQ/akqqkykkFZW6XmNy6VJdYyhPP8eE07/PCl1kqqbbMI3BrjY1rvMH4SW4kmou86Eac5UmiOcUcxq/wep2NirugYh4TXfOah6izUauax5leB2vuwR+e2vAshd8i9AAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABmUlEQVR4nHXTT0tUYRQG8N97/TOloSYpYv/BNlLYqqJli1Z9gz5SOwkKgpDaRBS5CKJ2fYFWrsyNZWKSOYliw8y9p8XMHa+Tc+ByOec8z/M+7z3nJidHwhtc7ORreIjog29H1iYunmc5iPIpyGd5h0cd8ZNPvcLzXmJBXq1N8/g/kSSlyywFkdPMaVZJvfVZnkhHImmSZyWol9jrqMSMsti5tmhwJyhSO+8bZT8ogrulQDbDQZe8/ZPt38eZA9jbZ2OjKzTFPpJxPrdoBFFsruVRxq+tI/v1nW45vn2NIFo0TvMxTdLcYRBt+DHPne/Up36GvaygDn+p17+srp+d59S1KHyvXOPHgaFLTC9gfUtQdDp/TLAbRJPDQ2O7cyIuiAgzlQlcjSkR8yLCWJS7McJGV6Df2HoXqZqPsJmVdk56J7JEVrGsmida2TATZeM+q+U4E9kcKzdYqe7Hg+OYcdN8atG41f5Zagu8KMhv8rbck9u8L8iv8xS1e3xo0TjHMgyM8BJDnUMGa7xWjrYdQ8O8cuSkNsoSsn/EzgO2a6zxyAAAAABJRU5ErkJggg==",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nIWSy2tTURCHvzNnzk0TS21sQluhq4Kb+sAH4qrgyoV/oNuCUIogEUGKf4DoolBFfCC4sYKgDVXig/Tec8ZF7k1uo9GBWczvnN8H84DpcM6h6ruw14VBBwZdeIX3inPuj//18FkmS/jtDdgvYGhgBhYhvwwv2khPs8z/3R2CnIcHlWlWXsXvMleDOEBVZaM0R8gTxGljghghN7BLyK4PwY/6UeUsbNuZlsVvn3JLyWz+1MTc8mbHP8x+HpmpWgVZhh5OKsbc0/6bgxhjzM3MbDicAN4f2jj6fUsQE8R52McBrcz7VbpPaJmxWALMxoBOMPMrE0bV3hXYC42grMCziOY3SJG18lf+fQxYx6y1XupfP1t9M6vwkjZ8GQ3JR3t3YHY8MGvWZsBpsw99s8GhmZwcbBd+sQQf/7e6WdmBIynKdRqkf17ZjBCrFdMQg5SgmNbqNySuFAySGwFP1AI6rVW1g0KANoCA3oK3DqR8lIvw/Bzs17Xb8LqqBTosI70ChjfhEVnWuIC/EyHfhIc4L2jmrqH3IuTX0S2azcYmcr+A4RrymCwEafuwJaoNAB+CLKjuiGoY9+q9XxDdcSF4AFEJiyJ3QwjyGx0DPZpbZTAYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABp0lEQVR4nI3TO2tUQRQH8N+9e9eg0YBBlwR8gNHKRqz8Amph4zcSBCWgEBALQbAU0U4EUewsfDQJNuIDiaAkSNhCY3Rz79xjsdndaxKDB6aYM//HzDln2DayrMXDgrct3hXcR7Y9dhMT14/wNFEGEURFb5onuLKjzDQ3B6QgalJNauamuLYt+SA3gkiUTffBauYPbBbJmB2AalJ8+Ryx2o1oN0Qm9kSdeim9Xyh/FFm0uNzUeFSTEmUsfoxhLC6NBNbXIyIipVR+fTGf8AAKZB2qjDyoHZ0B+04wvjJleWDRbisTuzponcon5Om7OoN7Fb1hsVY+RUTE2PGIw2J0g6jjd0TYG3FBnSp6uAPzg4oPwd1vEUvdCJ2RwNRk/1mvPwyxeF5gbUtLJjtb27TcJdsyBGs58n+Mxf9E6y9yUDf3NVVNtQOmzm0Agjpr3Cb6h0VO0SQNu9WPlGNS/x3FWRaawBlenuRVU/g8b/J++2G/grlVfp3jMcaOMZsoT3O3ryM/w4OK3iEuYewiz9b4iasDtznsHpi3uG3kAu2CW0Zfery98R/+AA8N/U/uOBf2AAAAAElFTkSuQmCC"},pinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4nG2TT2hcVRTGf/fc+2bey4xJk9hoXGlMES0uCoVoF4IWW1BEkWBB6lKwEPBPLXUlhYIYEiouRDdSsGDalJYmrtIuhECLC0MQIaWmgo2RJo0WMmn+zMy997h4aScTenbn+8453+E798L2EECMFHDjCWbRwoLDTmBEcrI5TFNiDWVjhtJgX549fGV3W+nplKisV+dqu344+NuKrP1SMeZDfNSHDsgonprq//njZ7v2QpJAYZOoAhswW5lm37mXvvlX7w00rZEkiSlRHLz5/mXd1xbqEOr6kaoeq6l+qqqfqEKoP1/21bkPJrWMG7bW5uLGGIDj1/svqq/4as+LqjjVym1V/TKqnlBdW1ClRfWJPap+xVf/endcgc+NMThVBejY6UrQAn9e27JazUCA7DHQ1RwKAbq0FaBTVRFxTtpNKU1dEe5us7gG1IGwBVuGLEnoIMuMtWKAL268ef5Y73NvI8E7jhagCxhSmN/0uLsOx5Nc4NQaUVN/64+f6Lnw1rcOKJVc0WHwrCYwCFiFumncaDGBzzxEB7UClKHVpA4oOSCEGPNCFyFY8Kb5wApsuM3D50RdPECQBgSEmDc2gIYBFhAFzcVMFADbeJsKMbVeVSOqoEpIqYUitTwPqBJjwXoCaN4aBfAh+BjT6OXO786YuqgQY6rezk0VZP7XQiyqRyxGosidaRez6GMIEfACdO7IOsUt/Zc+dfbA2MTMdzVTNrJy+6orjPSdcT++cHr5n0lHBpMz3/snR1+95Jb+TtvTRwR4FOCNM6+cXOorPTMKOIF3xl77er3btn8FgMDjbufQ+OvDVYH3ALen3Ds6sv/EMtB/34FDQEtusgE4wpa/K4IAAyIPoIx8GP8DW7gOkh3Y7ZsAAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZ0lEQVR4nHWRy4vNYRjHP8/ze885c+GIuTSZxriMS6KkKeQSK0lRDAsbthaTzSyUqYlhxYIsJkTNiGYh+RMYKRFTM5Fxq8ll3BriMOac3+95LM45GYOn3sX79n2/l+cL/58e4CkwAtwFwr9A8tfNOQJsernr2toFtauyFPIgORp7tw68TT6PAgcA+zcBdD7be6O7pXYDVNbgkVsRJEruPR6/puH85hsfyO0uk0gJgOOdT3b1d7csbctLQVRjDXhZxrHgMQH041Cov7jx+kdye0TERERw90PDOy6fXr5yXyxfRcVRomnmzADHqiTWT4Mhc7H1ch72q7sDNC+qnI/FFkslyhwB8d+f3SBL8RTAq5otDysA11IMicSQClE6BI4CS7yYUoB6h2MKxyOYC1JItEGyeSAC6B7c2Tdhhy3xN/7nnHD3jrz7xJQ3c7cuS5L99wsKdxRoakrXVzhu1JTilt1nAI+gYlrVATQ1NxgsUyA/GSfgwBdYvB4ihVfPgRQgCuOgjSDV4O9AIlFsEmBCAfEIUOBsQsNIUajpFPCmALHDSWgag+wPkFPANyAogAbABcDBc2q396HFtYJZFBMc/S5htL0UL7ZYEBUxBUyBxA085Sb510rKIICn3fTHWNBvo4FM0aFn3PTnWPCUW0k2VmDWjFSGKCHdemXL0IMXvUYFyM9Xurh39aCcWziQez8AlWDjD3VZ3+pBHX8USGcB6gDab23r+by9dt09oErg4HDb1ck1M5feLK2RaqIzI3v7JxeEuj4gPU9nX3rc1j+RRq6Wy+kCaqeUdQaYMa28C2XCYpH0iKC/AKR7DJ4ZSbreAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVR4nG2TTYiVZRTHf+c8z/vee+emNVycYBocHAqGEN3IgEgg7bIZBir72CW2aNEERZiK6Ci4sNrooi9q02KaZhYubNGuhVEkLcqmLkhpwgwqRGBzZ+6d+77POS7uxUw8yz+HP/+Pc+C+EREIIsAc8AdwBVhEEOT+bf4PxTySinQid9+z8vKFpxoDT1RB+KdzrTM69+zFDuknsni0LMoHEAhkzuzV/V+fGNmyC2qP4sENQLqirK9wa+0XHv9q+kzL7DBm9xCoImbHf33x/Mnx8amurIlqVyOSIAnUFcus9MLtxl/f5FsXJk+6yCzufc/wxqVXvvC0lgozS3624z6T3Gfc/T1zd3dvuduxjVQeKjeaz8078I6IoO4OMMaBHXjFTUSUNyswBNQcXu27rIO8nSsK45VRgG3ujoYsyAC5TDyzkxhh5UY/k0zgtlAZhXxrHxsEHNCe/xijaCrS4e9e+Pz1fQ+7Qcgl7y+XBgapfU9N6xDakvtju+3n5+deK8vytAIjw9aoXjjo5k0YbgAfJripUIXyXeg2gQ7wfgHJ8MxtRBs5MBKBdpE2oArMlUCA1dDrR7yn5IMAXevhwcGgSwGwHgHtSQb+TSCxh4iDOxQKfwOiEB3KBATUBSBEQFx64XiWmxgKBg6WU4KjySMGJMFDNMzvxqJAwhzP3WT9poJDVDyKaet61Nb16CoGCkGQ9rJ65ma9I00K1DfHOqFb5hOLey83l+eNKsja7zr82Y4ft3z65PfSWlIG4M/lBXYuPH05dDv55vwhgE0AB7+d+vj29NDEJaD2SNj01tJLX7a317adBxRBx+tji7/tX9gYjLUjQG3f0MQPFyc/WQVmCCGg6DGgAaBRBfQcSOU/n5oBH/XfHGBQ4JRq5A5IWx73SeLhogAAAABJRU5ErkJggg==",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACmUlEQVR4nGWTT4iWVRTGf+fce9/vj6Nf4/hnRlEERVcuAsFw0SKRRAhSiBJXgiQiqNRCwc1AC6FsihYVtrKYWShRkkSudBNFCPkVrSSmwj/ziVoa8c3Me99zXLzfTJTP6p57D8957nnOgf9DAUECXCxgJsGdAvmWIAF9Khv5TxAChcWJpsuO6QOXtw4v29wmOzZ3P2+Y3Nm9XT3qWvRDZPxpAkWWWXp/ev/lY8uXbwfpQGvw5sDsn/jjXxn7dOf5Ho8PDm5rgpSSpOzvTL/21Zsja3bNS1tURSL3ARWIjuGZlfD37e/jxg93n38U+wdzzo6IAJz+7dVLnk/mOR8391mvcc7dT7j78dL93Xl3d6+qqnxw6ppH+EBVUXcHWDXGSN3A4wINyEB/HzAELBV4IwFQAX+8vMUyjJkZKkG0Q7MoUgIDnqm/3VoN7RXAPaAIAPT79fHZ50Z1tFiXUiCoV/7e9b2Th2zdthz6FMzUBBs2wfBCyVwBEFvAKo27Om4/7596qaz4XIHO0tCICLWCCaAHN6/Cw3FqJ/5SOFOSSvAuXDkCK6qmAsMRKDNWmxIc5oG3HaJBqRCkNquX4HQeWB4G0igVcF0YB/fa2EpgNoDZQmKNuQh9Bwev3bN/h9PAipDd3RBAK6whuWowj/giubVCxsEGRRWwbJVZy7Le60aRSgGskKx3f4x+64fCE4YKBNBeN1rLsrlZrR5WjjQ7Gh/2musv7P7ym18+nqUNVe+7OPTZ9qk0teOTmd+vKEvgxs1J1k4+fzHc+alIjSEFRgH2Tr3w1oNtnU0XgAi8cmnPRH99Y/VHSK1ziDj+9YtnyzbFUSBsbKw998Wes/8Ahxc6cABZXB2AIyISFvdMVYATMcZBTAJeB3gCWn4PpFt1S94AAAAASUVORK5CYII="},inky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nJWTzWtTURDFf3fyXtqSCKa1GsWPTRG6UdSVa/8pV+JK6kYh4EoIIrgRuhAMgitdWGqhdtFWq0IoIsVqQUSSZ/Jy73HxkvBin6ADA3fOnXOGmbkXCqwEBrSATWAbeGhFiYeIpdgBDY7OtfiUpHgJSbz7kjBVfQrciO3vUo7aqQe0BxlJEiF4QvDZWeLNZzF15JYrJB+bb7KZiMuDHhd8OhYZ+Vmfcs2nbOyK8vRt54YyBlCqNPja1bL3KRY8Jj3JkVu/JJCO14N/5H3K1q6Amy4rDWCvCMH/8D4NA6kfJJ8TkKQkSApS2/uUrgQsA1jknDFbH+CcfQRcCWIHO7n+vgHTLqu2A+CBciWNsz7Kz9nv90bDakv68Gf/kg4kreSH+3YvAe4Dtj8GC4iFHoLnpwSsGdD5lzdyyPoC6NpoEf9v2Q5stAcAQhhM5IQwKMRyZhACAFLALEKajPMYMI6VZRnY/PAmYuHiaw76WUvfMWZmX3LizApyGba9B4tX1jGLqABQg3K1yepWh3MLTYOIk6fvst7uMVe/5xj+zPOLj1l7n1CtXY8h5tLVZ7zY6ABLWGQOuOMgAnDOGdBgcrjxEBsNbAZYMov4DRt5NkCBfZ1GAAAAAElFTkSuQmCC",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB10lEQVR4nIWT3WsTURDFfzP37hrTD1QM9hPTYlP7ov6hvgcsvhSUUpD+EfUpRKEi+CRUkYgFrTakabK5d3zYTbLRiAcG7s6eM3vmsBfmQMCRpi1uLFyQVi+oVE8UdB53Bk5EcZWXrNbbXIUMM8PMuBwNqN1/C5XnDmSu2IOyvnXMsBDNq64ZtbUjnRkigogoK5u5OISMGMNf4hAyQuFqe+/QqU6GCEn1BYOC9K+vlwf1zPDJviMPxsiudkks/jekMW5aZJQ9jIA65xwbOxERRUR/AudzNFZUsbay3YhevYPqcpss37ljU8SS7R+l/kczI8ZAP2SIPxFIuthwEeDaLOpodO2cS1XVj1OKZjGEMDSzOPS+sjh2IXKuOOmOnb0GFm6DW4J3JfttIEkt1moWW2b5ugFAekDybSblTTM25qS/YsZucY4xMDIDd+Yp/6Jmkc8yfY5xBICq52uJM4UqECcvRHRCMIuoelT9jKjMyRvpILdlRuPJKd8Lmz0zlm61uHOvRVb0OmbsPD6drAW/YGH5Fe1PPbYaBykkrNWbvO8MWK8fOBABpb53yIfLPndXnzpIePDomDdf+qSLR4hzCtJU8OSBKOizP66vR/y+Ux33EnBN71P5DQllVXyQma9lAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB4ElEQVR4nH2SvWtUURDFf3Pf24+siYkYFLRRizSaSiVi7V9g7b9hpSgogmIhipVbC0IwQrTQRgQ/CiMxCbsgxi9iIMHGENndrG/vPRZv3+atbDIwMHM4Z+65946xc1SByW791cwuSNIufIiiCOASFB8z/71FU2JTor7miSpPgKtdzgAxgCtdZ2lVSGmG4AnB9/r6uijsuRlh/WLnHLjyFea+CO8TOp12T5Rlp9PG+4TlX6JYuuGcS8VmBnCRd3VNe5/U8id284Okl5kj7xNq6wIu501Mz/xck/c+kaRaTvxc2/FUSh2G4IFnABQKDtzehzYksc8nG5spuefgqDRyJMUa2YBEwsrTUeqeO7z/1uBk8CBtbXSJWQ5LVNIBH/OPu7jSAB4AvOZ3Cs5sSZv/P56kuSDV81gInqYEzMdAky0Po47zpcFffNoGgH8BaDnAMLfDau0S6m5ArwSQQj9JYSCWC9ebJgUsZyXrzVyfqL/vOGCUYQPnYianPrP8J2M6Dh5eYv+BBXx38GoTTkx9wrmYIQDGAG7zttbgzLlXDsqMjV9j4UebieOzBpGBcWziEYsrLcYP3SpCiVNnX/BmqQHcJ45jKJTvAiMAzswwqwLF7XtaDK5q2ZWhgovvRVHMP7z+WsD4PpRYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB1klEQVR4nI2Tu4tTURDGf2fOvUlMcAXjigpZFfGBlaAI+h/4T9nYCClslFiJLlhZbJXCJmyxrs91bdyXYLFE8UGURaImN3PG4t6blxH8YIr5+OabOXPOcUzBpeECPAAuZnRb4FqAMK2fgPce4Aa+2GTjY5dgRt+M9m9lbv4xcDuOvZtdDEixXOf9F8MsjRCUEHSYf1KjWrvv00GnEJdusvPNUE1QTYZFeagmDAY92j+NucP3GJo4l4799msqCkFbZrY7bWBmr0LQF6oJux3Dx3dlrP8SGhTVpGkjPBsrXs84VU2e7CUKPAVAxDl86RH9dMxOJtx/0ozKyCAHhzQBM/yJ5ShCABbZ+NDLl7WcCavHzCiNDLYzXiIzjgdlM+lRLLYAXrOXbTwTr5rZ1owd7JjZio1pkU4EdOlPXsjVf7yTM9OEoyuAzLrV/4KJyAQRwuCvfBY3BgECBpgFRKKRe5aLRJiFCS7P0YEAB6kAIhHnLq+z+TkzcMKR2nP2lVf47tJJOwPh7IU1yBtZFaBO680PLl1pFqBA5cB1Xm73OH1+qQBeAOaPNlh794vawp0CxCycWmR1q0up8pBsDXVwZUi/MtAACvlpXHrUhkTiMyoCbvk4dn8AgDJfwO8SCRMAAAAASUVORK5CYII="},clyde:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACj0lEQVR4nG2TT2hUVxSHv3PunZfJm5CMiSGSaigxUDSIFv9sutBNQSiuCl1YpO2iUdAiFURKRSUBiyC6EFEsLrJQEHHdlXShiwYpVVBQpJuaVkZDdDI248x7954u5llH8MCFy3fO+fG799wrvCfUJxLz9mXgwwL97rw/HPL8feVvw3sPcLwPrv8z1W92ELPvscdfpS2Fq8BBEXmnR7q3vdjJh1OjP4wNLmMjLyOlItNGWRjk7t8pH8/OHxKRs2bWZVk9Kcw8+Ha97RgN2eRA3rKZCbPTmJ3B7Og2+6Anb32+NmR3vh4JwHfOuUJdBAc//rV/2MLS7YxqDGBmTx+anfdms8O28OcTA7OBiRhC45fszu4+A/aKCN7MCLB1zaARKxt4VRPVAPR+BNEgKzM0vpqXDXAV0RjWtTetaHpg0szwmnjSdv6aDOAplaS/ONhzMMCaQGCgr2M5SE1DVJQQxDk0tvOLj6Yqu2xkIerspx5qQBOubIdmgPoCXPuko5k/wl3amZTWZfHu7upUCOGYBzaMVpZTKxGpPYEL46AlqNc7MwrA/Bz8XIXMYGkJW0EcqzRSYNwD/xIUYgAFGssd69o16AgsFoIFb0UFQlMB/3/CigZfNFuxKNgbMQMRA3CFnoMAMaHzVouiWCaPZXKsYHTVFFYUyLCA9RB1UTyuQ80Ttea8PhdvJSLa4foCHxPymLsIZAoMURa0lvrJs/63xccJpCDzFU1PhptjP9ltedarpPDgj0q+5Vwy5+tpub/8WoEqwIm5L4cbmwfcDSAZ8kzf/2ZVa1S5WNyi29jvbtzbs7qZIgeA8merSrd+/WJlHdiHcw6PnwZ6O/9CRXFnQN/MARHpcXCqC1UVPSIi/AeSmwjoBKJbfAAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACbElEQVR4nHWSu2tUYRDFfzP37t27DzbZyOrGRyISBIPaaKNNChsbKxEEKx9EEEUUUkgKEaKCRAVfUUNasU7tH5BCQaIiEl/EmEgIebnZzd29+41FEl2DDkwz35wz35wzwv/jOrAHqAHTwDnABLCGJr8RIQJmXAJ2vz2ROt65YTmNMyajLDsGS5kqfAKu/YVZN/XK2KncjY6NFWit4ZLEABKj8l31x3yK7QNLdyO4/C+C3s+n833t++diczivTICtdgjUU1QRiN7kgpaBxXsRXGwk6Jk41XSrdd9CLCVUQPHW/c2BGc4yuPKHrJ+7X+o36FnToGvzlrIzAUl6itZXpFtTS4BQEUMtdi5TjB1wCEBX30tSFSURwtmXcGEaCh3gVsG5FrjwaSWbNyHVuqZhcW2DxxPdmSX3IFG3yoj9iWmzJ3mze56ZfWioj5l7lKtXzjdVgGEFDmxpKqcJahB2NixdgIQPosDOhnoHBEbYshACXQosEgs4hegLbXtBUlCerYBfBa8O5Sn8Ngi2AqVxRGOlqgA/FfBRD5yDwaMkPwPLkH5yBOYWIHIweJjMNwi/A0+PQVQBLwBQ/7fKMdjyRzfWW1AsC/IVBzEKWhv1F/raQWLMTToikBUDnA/EmMNCnM4GPvkZYAYDp3PqYx7WVHOSHVc8kPlAXbYaC3UViBVoIanofMbfd9tGZ95nIQCZzWt7n3vVfK02IlN5JQC+ZOm8yWudSvqEYFAAuPPuZHHpYDMvgDAHV8e7i9GuFMOAB0hRGJo4U6xtUx4DQUeCZ+9PFys+PF/zph/INNzdABA0eKfA0CohQAJ4CMgv7wr9rCokR+cAAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACk0lEQVR4nGWTT4jVVRTHP+fcM783b97TpzNqjDMaZTCFZBJCbqRN62jbRhGrhWW4axM0BrNIEJpwCoUGghZtbOWmbWoUEU0Jok8xCMU/U6O+p7557917T4vf82V54HsvF77nfr/33HPg/yECqgp8BzQHWEQVEXmCbv85mEmM8dhG9x3XDjVeLcbuGaos/92YnD55Z6qPnDOzj2OM/+o9rt1Qjt9+t3Kw2NCFBriQEZAeShv+vLme50+0jnTUZ8kZAH20roP5y4emDtqLxLyWSA+ki8oqSmHkp0Kc3n4nNg/UPgpZPhw+R0QQmLv+wYyn9Fs/5+XkX25zP0qJb15w97Z793fPx4uUFuhf3DfuwOHHa3Lq6vmfU0qp7+7uvuy+YO6fr3Hv3PJh3P3B+1/Q8fdxYB5ArQhSlyrP7tylYS087AJsgELhxiTS2MTGmYFMYxsSUVxQEDMTjb301aV31r++o+aZh2rBAFqQUpnUg/TIafcaoUPhz3n+dd/42zHGIwo8s3n0pi3NzpBuXaUS2vD1bmglqDfxT/ewcqENqQmLr4GDV8hbK3dHga0GdHCgehn9djskg/v3y/8RQM7C4iT0EjxYLZ1k6PcN6HUMUEShl0tCoIQPsAqsPhhcBqRyF8kAQQFFHQTyGHGYDOQKMVeIQzeAG2UHBYaNFMmOF2RdKUuIlkS9LaYrZj5CxgbKbdQD2aMDJAXWURj6V2EvzY/80vqjBjWQ63VdM8f3W47qT7JSU6pw6UI9v7IwuhRa1aJWcYA6wNzS3on27gk5DVSmRmTuylubO09XWQQVsPDyhJxu7p/o1k0Og1bfmLYfz7y5qQ28h5kRkE9AxgBCCAosgIbhlAmjAp+VUw6g4wKzqso/UZISjmIm/qIAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkUlEQVR4nG2Sz4uVZRTHP+c8z33vfe+90zg/dEaZULlUEgQa1NZ/wIXQtl8bN2HRJlq4CwRhxDEZBYtpF9QiaSHtWgiioBthwCjMizk23hrTxmruve/7nNPivd7IOnB4OHCew/mezxeeDhEQkRpczODnGqzV4RohBET+2/6vQlXqxnIT27/23tT+fPL3Jm54f8L2Lv157W6yLrXa61YU9j8DVKZFz99/d/JIbfYR5Anq4I6Jo2xmsAm7Tw2//sl4DTAABYgxyjR2vnc0PxI6D0qboySfgj7IAGUI1h6Wtk/LO8f2HH4WLsQQVMaaYal/dNrTMoV/Muvut9y97/7lPvdF3E/ivtJx94ee0kaRFg/4BHyO6nj/r+xDUjpL4eX3Po4/NtzPTbkvB3fvubt7SqnodbsJ9GolPIjOoCqeKSiEDgCNXSDtGbg/A5kDOwAI22Bu7x6dknmyKFE9+YU77zxzyHcNTYcWsZsAtCchA3CHZMA9HCDX2Mlg7f1tr2alX1dgodV8FAlACXx6EMrv2Fh9wODMy9D+ER4DK68g3MW7t7m1+BzN/KYOYCECA0wABwc2H8K5lyBTsGLECfhtHc52KvJhCASMNIgVSq+afAR2kKCf/nHKk/yrgBI8x4SKQTXfq8cyyvEnBWtQWp1ybDcBa45qDzwxkgF4humvWt1CwCOmPaKuS/SAEcADpr+ESI3RwTAFZmmArtfji6fl8r3VFrRAehO64wTfZif8G++2lTps3Z7Q50/rJek2lNxIsB3g+JU35h8fmA4XQbM2fLD65sLWC634BQQFYQ7O/PDWzmJnXZZA4+4GKzfent9qwWeoKlD7CDSvRCkCp5Rq0crtQSK1jzWOvKsaFT0ZY5S/AWqkD0QparkoAAAAAElFTkSuQmCC"},eyes:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAj0lEQVR4nO2RsQ7CMAxE79K6aQCJbuztb8Af8P8rX8HaYzCChgbanZ5kyYqezjkb2MR3K02eOUdzJiBwhBCsgPWE7RcmD9YfBsCgp9zdS5Kul/Mpn50z95tzdSkAAKSYZp/7ZDzKF6XYxIUUvw12bbvKAF1VMQCvXUhSydXIjDk2kcDkjL4kF1k+4xrmH/UA3stP0Iur7f8AAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVR4nO2Ryw3CQAxE35jdEBFRAycEpUAJ9A81EBIlcMjPgazEHUbyxX47I3vhLwBiDDydUpxnQt8zgG2+kQeD1A2cTJo3JIqVzV29jod9NrCX82m3xLRt27wHTYlmY+SjquslRpJ9ZVAmDKC/wf0K0lQAuFtWddn0a88ZgAwoKKx7MdRnShxdF5hAHIc5t+Q3rp2BoRT2c3oBFX9xUA7hwq8AAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuUlEQVR4nO2PvRIBQRCEu+fOIaD8RkoRKCGZwNt4fwKFcutnW2LP1tWdF6CjmdmveruBvxgGSSqOJKvgmEnM6CWYxS7hkYSVbuWdABIC9pTkI2cAeHiv3WazDPsiazWeFczDS0buQQLl0CfnrmHOb10LDHkoJxtV1cXZubyohCyyH36tVuji8vvHwJI6DltMhzNM2jqpUJqmaEdMD8YV5h3l0vHNrAf9zrjV/ARQpLrPYmYBZrWpfkwv2KllZq2VZYMAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAArklEQVR4nO2RsQrCMBCGv0vaUq2gIlJxEBEX6eLi5jv4/g8h0qViIpxT27S0i3M/COTCx5/cBSYAiIxBA8a8IcfEIhiRjmh7tQHi3pkAVnqpIfs4sbX8KIrdmGc6qfJCBETA+XlzZeWc73r1etIJgHXw7KjZV957Btn0A8K+26bf7vMd88izmbnl+UpVtVRVrVSvnJeLICAFkiRu51WqHjlkd05bAC7Gpv9+4wT8AASmiluJhbS5AAAAAElFTkSuQmCC"},scared:{imgDate:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADCklEQVR4nFWSX2hbZRjGf993vnN60qSNXWva6JpR7f5km7qrWrVUXYt2HdOCk2FBoQiDsivxRmU3XggiKIIIuxgOpxeyKsL8A8IoaJVNrMy4Mant2qZbMxKX5k/TmJ6cfJ8Xyao+8PK8F89z8bzPK7gDIcHo+t42GGbwmzk8vwJCIi2HH4d7KfxcAgFCbGkFANIB7cH2l3exc+IVCHfRtn8Mzb/IJ6YQpSxzp94h9enSHY9CyLq5Z3If8ddO0xrrpwr4/B/tDz2PDbj37EW5x1k5PYeQSIyBHcfjxN84QzDWz0a1jNY+1n/MFqC1z0a1TKhnkH0nP2L7xE6MQSAkPH7lPJG9R6j4FXzlstkwBQADlBscAKiWabGbWZ39hJm+lxRGg59PgdFUpdrWDf1xWCvBpV8AG548CIEAXEiAl5aKmtF42RsYgyK4x8EKtSOFZMPo8SfggxfqJ7CPgAjA9Ov1JIffh2/PC0lYSJy2KKHdjmLw0gJN4W48o1FS3S7UxVfSdTYa0lXotKFQAiyp8IxmW98EAz88LBgtpnBaovU6G9kdoAZ4jaKdBnuAbgxAJTuvMEajgHXts1nzcJWLKyQ1YN2vANCqXCRQ1j5ezaNJKlosB6NrEltIbsKJ5zLXrp8rrr44ml1gyWiaSunfPs4tz54p3MAq32bZ6MljxdXr59ZvTR7NJ0kBtrQEQ7nlN09IVS7mkn/mOnp778olH3nw7t1/ZQs3f5q3bNuynIE4tIbc8MU/iqnFW8GOAztKmU3jht869XdOIYRMZyuFzy/H+jO/Ctl1wN+MdRZTiRU7cPbLth4UNDnF1T1dpczZ75vbM4lgZPaxYGSkN30VI6TgUH4FK9xNevpd2iL307J/jIzRmHySyldvo4HmZ08iWu8lIiTFxBS57ArRg6/ip6/C4VKapy9/Rug+m8gzXYzOX2DcGIYSU1uvPHTta8aN4dDcd3Q81U5wl8PI718wkl2A4eRFQg+4W+LosRhH1xZ5dPo9hAJhw8DMh4ytLdI5Ft3ShfuCDC/N/AMdtzXsl7IlxgAAAABJRU5ErkJggg=="}},r={horizontal:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""}))),vertical:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""})))},s=(t,e,n,a,i)=>{"horizontal"===n?t>=0&&t<r.horizontal.length&&e>=0&&e<r.horizontal[0].length&&(r.horizontal[t][e]={active:!0,id:a,color:i}):t>=0&&t<r.vertical.length&&e>=0&&e<r.vertical[0].length&&(r.vertical[t][e]={active:!0,id:a,color:i})},c=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([a,i])=>{const o=t+a,s=e+i;return!(o<0||o>=n||s<0||s>=7||(-1===a?r.vertical[t][e].active:1===a?r.vertical[t+1][e].active:-1===i?r.horizontal[t][e].active:1===i&&r.horizontal[t][e+1].active))})),l={getValidMoves:c,calculateDistance:(t,e,n,a)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(a-e,2)),findNextStepDijkstra(t,e){var n;if(t.x===e.x&&t.y===e.y)return null;const a=[Object.assign(Object.assign({},t),{cost:0,path:[]})],i=new Set([`${t.x},${t.y}`]);for(;a.length;){a.sort(((t,e)=>t.cost-e.cost));const{x:t,y:o,cost:r,path:s}=a.shift();for(const[l,A]of c(t,o)){const c=t+l,u=o+A,d=`${c},${u}`;if(i.has(d))continue;i.add(d);const h=r+1,g=[...s,{x:c,y:u}];if(c===e.x&&u===e.y)return null!==(n=g[0])&&void 0!==n?n:null;a.push({x:c,y:u,cost:h,path:g})}}return null}},A={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let u="scatter",d=0,h=0;const g=t=>{switch(t.direction){case"up":t.direction="down";break;case"down":t.direction="up";break;case"left":t.direction="right";break;case"right":t.direction="left"}},m=(t,e)=>{if(!t.justReleasedFromHouse)return t.respawnCounter&&t.respawnCounter>0?(t.respawnCounter--,void(0===t.respawnCounter&&t.originalName&&(t.name=t.originalName,t.inHouse=!1,t.scared=e.pacman.powerupRemainingDuration>0))):("up"===t.direction&&t.y<=3?(t.direction="down",t.y=3):"down"===t.direction&&t.y>=3&&(t.direction="up",t.y=3),"up"===t.direction?t.y-=1:t.y+=1,void((t.y<3||t.y>=4)&&(t.y=(t.direction,3),t.direction="up"===t.direction?"down":"up")));26===t.x?(t.y=2,t.direction="up",t.inHouse=!1,t.justReleasedFromHouse=!1):t.x<26?(t.x+=1,t.direction="right"):t.x>26&&(t.x-=1,t.direction="left")},f=(t,e)=>{const n=A[t.name]||A.blinky;t.target=n;const a=C(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},p=(t,e)=>{(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=R(t.x,t.y));const n=y(t);if(0===n.length)return;const a=t.target.x-t.x,i=t.target.y-t.y;let o=n;if(Math.random()<.5);else{const t=n.filter((t=>{const e=t[0],n=t[1];return a>0&&e>0||a<0&&e<0||i>0&&n>0||i<0&&n<0}));t.length>0&&(o=t)}const[r,s]=o[Math.floor(Math.random()*o.length)];e.pacman.powerupRemainingDuration&&Math.random()<.6||(r>0?t.direction="right":r<0?t.direction="left":s>0?t.direction="down":s<0&&(t.direction="up"),t.x+=r,t.y+=s)},y=t=>l.getValidMoves(t.x,t.y).filter((e=>{const[n,a]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&a>0||"down"===t.direction&&a<0)})),v=(t,e)=>{const n={x:26,y:3};if(Math.abs(t.x-n.x)<=1&&Math.abs(t.y-n.y)<=1)return t.x=n.x,t.y=n.y,t.inHouse=!0,void(t.respawnCounter=1);const a=l.findNextStepDijkstra({x:t.x,y:t.y},n);if(a){const e=a.x-t.x,n=a.y-t.y;e>0?t.direction="right":e<0?t.direction="left":n>0?t.direction="down":n<0&&(t.direction="up"),t.x=a.x,t.y=a.y}else{const e=C(t.x,t.y,n.x,n.y,t.direction);e&&(t.x=e.x,t.y=e.y,e.direction&&(t.direction=e.direction))}},x=(t,e)=>{if("eyes"===t.name)return void v(t);const n=w(t,e);t.target=n;const a=C(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},C=(t,e,n,a,i)=>{if(t===n&&e===a)return null;const o=[{x:t,y:e,path:[],direction:i||"right"}],r=new Set;for(r.add(`${t},${e}`);o.length>0;){const t=o.shift(),{x:e,y:i,path:s,direction:c}=t,A=l.getValidMoves(e,i),u=A.filter((t=>{const[e,n]=t;return!c||!("right"===c&&e<0||"left"===c&&e>0||"up"===c&&n>0||"down"===c&&n<0)||1===A.length}));for(const[t,l]of u){const A=e+t,u=i+l,d=`${A},${u}`;if(r.has(d))continue;let h;r.add(d),h=t>0?"right":t<0?"left":l>0?"down":l<0?"up":c;const g=[...s,{x:A,y:u,pathDirection:h}];if(A===n&&u===a)return g.length>0?{x:g[0].x,y:g[0].y,direction:g[0].pathDirection}:null;o.push({x:A,y:u,path:g,direction:h})}}const s=l.getValidMoves(t,e);if(s.length>0){const[n,a]=s[Math.floor(Math.random()*s.length)];let o=i;return n>0?o="right":n<0?o="left":a>0?o="down":a<0&&(o="up"),{x:t+n,y:e+a,direction:o}}return null},w=(t,e)=>{const{pacman:n}=e;let a=S(e),i=1;if("blinky"===t.name){const t=371,e=(t-h)/t;if(e>.7&&(i=1.2),e>.9&&(i=1.4),Math.random()<.8*i)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const i=4;let o=n.x,r=n.y;return"up"===n.direction?(o=n.x-4,r=n.y-4):(o=n.x+a[0]*i,r=n.y+a[1]*i),o=Math.min(Math.max(o,0),52),r=Math.min(Math.max(r,0),6),{x:o,y:r};case"inky":const s=e.ghosts.find((t=>"blinky"===t.name));let c={x:n.x+2*a[0],y:n.y+2*a[1]};if("up"===n.direction&&(c.x=n.x-2,c.y=n.y-2),s){const t=c.x-s.x,e=c.y-s.y;c={x:c.x+t,y:c.y+e}}return c.x=Math.min(Math.max(c.x,0),52),c.y=Math.min(Math.max(c.y,0),6),c;case"clyde":return l.calculateDistance(t.x,t.y,n.x,n.y)<8?A.clyde:{x:n.x,y:n.y}}},S=t=>{switch(t.pacman.direction){case"right":return[1,0];case"left":return[-1,0];case"up":return[0,-1];case"down":return[0,1];default:return[0,0]}},R=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,a=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(a,6))}},b=t=>{h=(t=>{let e=0;for(let a=0;a<n;a++)for(let n=0;n<7;n++)"NONE"!==t.grid[a][n].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(d++,d>=5*("scatter"===u?7:20)&&(u="scatter"===u?"chase":"scatter",d=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||g(t)}))))})(t);for(const e of t.ghosts)e.inHouse?m(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?p(e,t):"eyes"===e.name?v(e):"scatter"===u?f(e):x(e,t))};var B;!function(t){t.CONSERVATIVE="conservative",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(B||(B={}));const E=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),D=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),I=t=>{var e;return null!==(e=i[t.config.gameTheme])&&void 0!==e?e:i.github},M=t=>{switch(t){case"NONE":default:return 0;case"FIRST_QUARTILE":return 1;case"SECOND_QUARTILE":return 2;case"THIRD_QUARTILE":return 3;case"FOURTH_QUARTILE":return 4}},T=(t,e)=>{const n=e/4;return 0===t?"NONE":t<n?"FIRST_QUARTILE":t<2*n?"SECOND_QUARTILE":t<3*n?"THIRD_QUARTILE":"FOURTH_QUARTILE"},k=t=>{const e=D(new Date),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const a=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:I(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((i=>{const o=D(new Date(i.date));if(o<n||o>e)return;const r=o.getUTCDay(),s=E(n,o);if(s>=0&&s<53){const e=I(t);a[s][r]={commitsCount:i.count,color:e.intensityColors[M(i.level)],level:i.level}}})),t.grid=a},U=I,z=k,O=t=>{const e=[];for(let a=0;a<n;a++)for(let n=0;n<7;n++){const i=t.grid[a][n];if("NONE"!==i.level){const o=l.calculateDistance(a,n,t.pacman.x,t.pacman.y),r=i.commitsCount/(o+1);e.push({x:a,y:n,value:r})}}return e.sort(((t,e)=>e.value-t.value)),0===e.length?{x:t.pacman.x,y:t.pacman.y,value:0}:e[0]},N=t=>{const e=new Map,a=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let a=-5;a<=5;a++)for(let i=-5;i<=5;i++){const o=t.x+a,r=t.y+i;if(o>=0&&o<n&&r>=0&&r<7){const t=`${o},${r}`,n=15-(Math.abs(a)+Math.abs(i));if(n>0){const a=e.get(t)||0;e.set(t,Math.max(a,n))}}}})),a)for(const[t,n]of e.entries())e.set(t,n/5);return e},P=(t,e)=>{var n;(n=t.pacman).recentPositions||(n.recentPositions=[]),t.pacman.recentPositions.push(`${e.x},${e.y}`),t.pacman.recentPositions.length>5&&t.pacman.recentPositions.shift();const a=e.x-t.pacman.x,i=e.y-t.pacman.y;t.pacman.direction=a>0?"right":a<0?"left":i>0?"down":i<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},Q=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>t.scared=!0))},V=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let a;try{if(e&&n.length>0){const e=(t=>{const e=t.ghosts.filter((t=>t.scared));return 0===e.length?null:e.reduce(((e,n)=>{const a=l.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return a<e.distance?{x:n.x,y:n.y,distance:a}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);a=null!=e?e:O(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(a=O(t),t.pacman.target=a):a=t.pacman.target:(a=O(t),t.pacman.target=a);a||(a={x:t.pacman.x,y:t.pacman.y});const i=((t,e)=>{var n;const a=[{x:t.pacman.x,y:t.pacman.y,path:[],score:0}],i=new Set([`${t.pacman.x},${t.pacman.y}`]),o=N(t);let r=.5,s=.5;switch(t.config.playerStyle){case B.CONSERVATIVE:r=3,s=.1;break;case B.AGGRESSIVE:r=.3,s=2;break;case B.OPPORTUNISTIC:default:r=.8,s=.8}let c=1/0;t.ghosts.forEach((e=>{if(!e.scared){const n=l.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);c=Math.min(c,n)}}));const A=t.config.playerStyle===B.CONSERVATIVE?5:7,u=c<A;for(t.config.playerStyle===B.CONSERVATIVE&&u&&(r*=5);a.length>0;){a.sort(((t,e)=>e.score-t.score));const c=a.shift(),{x:A,y:u,path:d}=c;if(A===e.x&&u===e.y){if(d.length>0){let e=0,n=0;return d.forEach((a=>{const i=`${a.x},${a.y}`,c=o.get(i)||0,l=t.grid[a.x][a.y].commitsCount;e-=c*r,n+=l*s})),d[0]}return null}for(const[c,h]of l.getValidMoves(A,u)){const g=A+c,m=u+h,f=`${g},${m}`;if(!i.has(f)){const c=[...d,{x:g,y:m}],A=o.get(f)||0,u=t.grid[g][m].commitsCount,h=l.calculateDistance(g,m,e.x,e.y),p=(null===(n=t.pacman.recentPositions)||void 0===n?void 0:n.includes(f))?100:0;let y,v,x;t.config.playerStyle===B.CONSERVATIVE?(y=(15-A)*r,A>=5?y-=100:y+=50,v=u*s,x=5*y+v+-h/10-p):(y=(15-A)*r,v=u*s,x=y+v+-h/10-p),a.push({x:g,y:m,path:c,score:x}),i.add(f)}}}return null})(t,a);i?P(t,i):(t=>{const e=l.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,a])=>{const i=t.pacman.x+n,o=t.pacman.y+a;let r=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=l.calculateDistance(t.x,t.y,i,o);r=Math.min(r,e)}})),r>e.distance?{dx:n,dy:a,distance:r}:e}),{dx:0,dy:0,distance:-1/0});P(t,{x:t.pacman.x+n.dx,y:t.pacman.y+n.dy})})(t),(t=>{const e=t.grid[t.pacman.x][t.pacman.y];if("NONE"!==e.level){t.pacman.totalPoints+=e.commitsCount,t.pacman.points++,t.config.pointsIncreasedCallback(t.pacman.totalPoints);const n=U(t);"FOURTH_QUARTILE"===e.level&&Q(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0}})(t)}catch(t){console.error("Error in movePacman:",t)}};var H,F=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};!function(t){t.DEFAULT="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav",t.BEGINNING="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav",t.GAME_OVER="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav",t.EAT_GHOST="https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav"}(H||(H={}));class L{constructor(){this.sounds=new Map,this.currentSource=null,this.defaultSource=null,this.isMuted=!1,this.audioContext=new AudioContext}static getInstance(){return L.instance||(L.instance=new L),L.instance}preloadSounds(){return F(this,void 0,void 0,(function*(){for(const t of Object.values(H)){const e=yield fetch(t),n=yield e.arrayBuffer(),a=yield this.audioContext.decodeAudioData(n);this.sounds.set(t,a)}}))}play(t){return F(this,void 0,void 0,(function*(){if(this.isMuted)return;if(this.currentSource)try{this.currentSource.stop()}catch(t){}const e=this.sounds.get(t);if(e)return this.currentSource=this.audioContext.createBufferSource(),this.currentSource.buffer=e,this.currentSource.connect(this.audioContext.destination),this.isMuted||this.currentSource.start(),new Promise((t=>{this.currentSource.onended=()=>{this.currentSource=null,t()}}));console.error(`Sound ${t} not found`)}))}startDefaultSound(){if(this.defaultSource)try{this.defaultSource.stop()}catch(t){}const t=this.sounds.get(H.DEFAULT);t?(this.defaultSource=this.audioContext.createBufferSource(),this.defaultSource.buffer=t,this.defaultSource.loop=!0,this.defaultSource.connect(this.audioContext.destination),this.isMuted||this.defaultSource.start()):console.error("Default sound not found")}stopDefaultSound(){if(this.defaultSource){try{this.defaultSource.stop()}catch(t){}this.defaultSource=null}}mute(){this.isMuted=!0,this.currentSource&&this.currentSource.disconnect(),this.defaultSource&&this.defaultSource.disconnect()}unmute(){this.isMuted=!1,this.currentSource&&this.currentSource.connect(this.audioContext.destination),this.defaultSource&&this.defaultSource.connect(this.audioContext.destination)}}const Y=t=>t.deadRemainingDuration?"#80808064":t.powerupRemainingDuration?"red":a,j={},G=(t,e)=>{if(!j[t]){const n=new Image;n.src=e,j[t]=n}return j[t]},K=t=>{const e=t.config.canvas.getContext("2d");e.fillStyle=U(t).gridBackground,e.fillRect(0,0,t.config.canvas.width,t.config.canvas.height);for(let a=0;a<n;a++)for(let n=0;n<7;n++){if("NONE"!==t.grid[a][n].level){const i=t.grid[a][n].color;e.fillStyle=i}else e.fillStyle=U(t).intensityColors[0];e.beginPath(),t.config.canvas.getContext("2d").roundRect(22*a,22*n+15,20,20,5),e.fill()}e.fillStyle=U(t).wallColor;for(let t=0;t<=n;t++)for(let n=0;n<=7;n++)r.horizontal[t][n].active&&e.fillRect(22*t-2,22*n-2+15,22,2),r.vertical[t][n].active&&e.fillRect(22*t-2,22*n-2+15,2,22);e.fillStyle=U(t).textColor,e.font="10px Arial",e.textAlign="center";let a="";for(let i=0;i<n;i++)if(t.monthLabels[i]!==a){const n=22*i+10;e.fillText(t.monthLabels[i],n,10),a=t.monthLabels[i]}},J=t=>{t.config.enableSounds&&t.config.canvas.addEventListener("click",(function(e){const n=t.config.canvas.getBoundingClientRect(),a=e.clientX-n.left,i=e.clientY-n.top,o=t.config.canvas.width-30-10;a>=o&&a<=o+this.width&&i>=10&&i<=10+this.height&&(L.getInstance().isMuted?L.getInstance().unmute():L.getInstance().mute())}))},q=t=>{const e=10,n=t,a=2*Math.PI-t;return`M 10,10\n L ${e+e*Math.cos(n)},${e+e*Math.sin(n)}\n A 10,10 0 1,1 ${e+e*Math.cos(a)},${e+e*Math.sin(a)}\n Z`},W=(t,e,n)=>t.gameHistory.map((t=>t.grid[e][n].color)),X=(t,e)=>{if(t.gameHistory.length!==e.length)throw new Error(`The amount of values (${e.length}) does not match the size of the game history (${t.gameHistory.length})`);const n=t.gameHistory.length;if(0===n)return{keyTimes:"0;1",values:e[0]||"#000;#000"};let a=[],i=[],o=null,r=null;return e.forEach(((t,e)=>{t!==o&&(null!==o&&null!==r&&e-1!==r&&(a.push(Number(((e-1/40)/(n-1)).toFixed(4))),i.push(o)),a.push(Number((e/(n-1)).toFixed(4))),i.push(t),o=t,r=e)})),0!==a.length&&1===a[a.length-1]||(0===a.length?(a.push(0,1),i.push(e[0]||"#000",e[e.length-1]||"#000")):(a.push(1),i.push(o||e[e.length-1]||"#000"))),{keyTimes:a.join(";"),values:i.join(";")}},Z=t=>{const e=200*t.gameHistory.length;let i='<svg width="1166" height="184" xmlns="http://www.w3.org/2000/svg">';i+=`<desc>Generated with pacman-contribution-graph on ${new Date}</desc>`,i+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,i+=`<rect width="100%" height="100%" fill="${U(t).gridBackground}"/>`,i+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const a=o[e];n in a&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${a[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${o.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{o.eyes&&e in o.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${o.eyes[e]}" width="20" height="20"/>\n </symbol>\n `:(console.warn(`Imagem para eyes-${e} não encontrada, usando placeholder`),t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <circle cx="10" cy="10" r="${20/3}" fill="white"/>\n </symbol>\n `)})),t+="</defs>",t})();let s="";for(let e=0;e<n;e++)t.monthLabels[e]!==s&&(i+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${U(t).textColor}">${t.monthLabels[e]}</text>`,s=t.monthLabels[e]);for(let a=0;a<n;a++)for(let n=0;n<7;n++){const o=22*a,r=22*n+15,s=X(t,W(t,a,n));i+=`<rect id="c-${a}-${n}" x="${o}" y="${r}" width="20" height="20" rx="5" fill="${U(t).intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite" \n\t\t\t\t\tvalues="${s.values}" \n\t\t\t\t\tkeyTimes="${s.keyTimes}"/>\n\t\t\t</rect>`}for(let e=0;e<7;e++){let a=null;for(let o=0;o<=n;o++){let s=o<n&&r.horizontal[o][e].active;s&&null===a&&(a=o),s&&o!==n||null===a||(i+=`<rect id="wh-${a}-${e}" x="${22*a-2}" y="${22*e-2+15}" width="${22*(o-a)}" height="2" fill="${U(t).wallColor}"></rect>`,a=null)}}for(let e=0;e<n;e++){let n=null;for(let a=0;a<=7;a++){let o=a<7&&r.vertical[e][a].active;o&&null===n&&(n=a),o&&7!==a||null===n||(i+=`<rect id="wv-${e}-${n}" x="${22*e-2}" y="${22*n-2+15}" width="2" height="${22*(a-n)}" fill="${U(t).wallColor}"></rect>`,n=null)}}const c=X(t,t.gameHistory.map((t=>Y(t.pacman)))),l=X(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),A=X(t,(t=>t.gameHistory.map((t=>{switch(t.pacman.direction){case"right":default:return"0 10 10";case"left":return"180 10 10";case"up":return"270 10 10";case"down":return"90 10 10"}})))(t));return i+=`<path id="pacman" d="${q(.55)}" fill="${a}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${c.keyTimes}"\n\t\t\tvalues="${c.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${l.keyTimes}"\n\t\t\tvalues="${l.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${A.keyTimes}"\n\t\t\tvalues="${A.values}"\n\t\t\tadditive="sum"/>\n\t\t<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${q(.55)};${q(.05)};${q(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,a)=>{const o=X(t,((t,e)=>t.gameHistory.map((t=>{if(e>=t.ghosts.length)return"0,0";const n=t.ghosts[e];return`${22*n.x},${22*n.y+15}`})))(t,a));i+=`<g id="ghost${a}" transform="translate(0,0)">\n\t\t\t<animateTransform attributeName="transform" type="translate" \n\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\t\tvalues="${o.values}"\n\t\t\t\tadditive="replace"/>`;const r=function(t,e){const n={};["blinky-up","blinky-down","blinky-left","blinky-right","inky-up","inky-down","inky-left","inky-right","pinky-up","pinky-down","pinky-left","pinky-right","clyde-up","clyde-down","clyde-left","clyde-right","eyes-up","eyes-down","eyes-left","eyes-right","scared"].forEach((t=>{n[t]=[{time:0,visible:!1}]}));const a=t.ghosts[e];if(!a)return n;const i=a.scared?"scared":"eyes"===a.name?`eyes-${a.direction||"right"}`:`${a.name}-${a.direction||"right"}`;n[i]=[{time:0,visible:!0}];let o=i;return t.gameHistory.forEach(((a,i)=>{if(e>=a.ghosts.length)return;const r=a.ghosts[e],s=i/(t.gameHistory.length-1),c=r.scared?"scared":"eyes"===r.name?`eyes-${r.direction||"right"}`:`${r.name}-${r.direction||"right"}`;c!==o&&(n[o].push({time:s,visible:!1}),n[c]||(n[c]=[{time:0,visible:!1}]),n[c].push({time:s,visible:!0}),o=c)})),n[o].push({time:1,visible:!0}),Object.keys(n).forEach((t=>{t!==o&&n[t].length>0&&n[t][n[t].length-1].time<1&&n[t].push({time:1,visible:!1})})),n}(t,a);for(const[t,n]of Object.entries(r)){if(0===n.length)continue;const a=`#ghost-${t}`,o=n.map((t=>t.time.toFixed(4))).join(";"),r=n.map((t=>t.visible?"visible":"hidden")).join(";"),s=n[0].visible?"visible":"hidden";i+=`<use href="${a}" width="20" height="20" visibility="${s}">\n\t\t\t\t<animate attributeName="visibility" \n\t\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${o}"\n\t\t\t\t\tvalues="${r}" />\n\t\t\t</use>`}i+="</g>"})),i+="</svg>",i};var $=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const _=t=>{t.ghosts=[{x:26,y:2,name:"blinky",direction:"left",scared:!1,target:void 0,inHouse:!1,respawnCounter:0,freezeCounter:0,justReleasedFromHouse:!1},{x:25,y:3,name:"inky",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:10,justReleasedFromHouse:!1},{x:26,y:3,name:"pinky",direction:"down",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:20,justReleasedFromHouse:!1},{x:27,y:3,name:"clyde",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:30,justReleasedFromHouse:!1}],t.ghosts.forEach((t=>{t.justReleasedFromHouse=!1,t.respawnCounter=0,t.inHouse&&("inky"===t.name?t.direction="up":"pinky"===t.name?t.direction="down":"clyde"===t.name&&(t.direction="up"))}))},tt=t=>$(void 0,void 0,void 0,(function*(){var e;if(t.frameCount++,t.frameCount%t.config.gameSpeed!=0)return void et(t);if(t.pacman.deadRemainingDuration>0&&(t.pacman.deadRemainingDuration--,0===t.pacman.deadRemainingDuration&&((t=>{t.pacman.x=27,t.pacman.y=7,t.pacman.direction="right",t.pacman.recentPositions=[]})(t),_(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!1)})),t.pacman.points=0)),t.ghosts.forEach((e=>{e.inHouse&&e.respawnCounter&&e.respawnCounter>0&&(e.respawnCounter--,0===e.respawnCounter&&(e.name=e.originalName||(t=>{const e=["blinky","inky","pinky","clyde"];return e[t%e.length]})(t.ghosts.indexOf(e)),e.inHouse=!1,e.scared=t.pacman.powerupRemainingDuration>0,e.justReleasedFromHouse=!0)),e.freezeCounter&&(e.freezeCounter--,0===e.freezeCounter&&at(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){if("svg"===t.config.outputFormat){const e=Z(t);t.config.svgCallback(e)}return"canvas"==t.config.outputFormat&&((t=>{const e=t.config.canvas.getContext("2d");e.fillStyle=U(t).textColor,e.font="20px Arial",e.textAlign="center",e.fillText("Game Over",t.config.canvas.width/2,t.config.canvas.height/2)})(t),L.getInstance().play(H.BEGINNING).then((()=>L.getInstance().stopDefaultSound()))),void t.config.gameOverCallback()}V(t);const n=null===(e=t.grid[t.pacman.x])||void 0===e?void 0:e[t.pacman.y];n&&"FOURTH_QUARTILE"===n.level&&0===t.pacman.powerupRemainingDuration&&(t.pacman.powerupRemainingDuration=30,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))),nt(t),0===t.pacman.deadRemainingDuration&&(b(t),nt(t)),t.pacmanMouthOpen=!t.pacmanMouthOpen,et(t),"canvas"==t.config.outputFormat&&K(t),"canvas"==t.config.outputFormat&&(t=>{const e=t.config.canvas.getContext("2d"),n=22*t.pacman.x+10,a=22*t.pacman.y+10+15;e.fillStyle=Y(t.pacman);const i=t.pacmanMouthOpen?.35*Math.PI:.1*Math.PI;let o,r;switch(t.pacman.direction){case"up":o=1.5*Math.PI+i,r=1.5*Math.PI-i;break;case"down":o=.5*Math.PI+i,r=.5*Math.PI-i;break;case"left":o=Math.PI+i,r=Math.PI-i;break;default:o=0+i,r=2*Math.PI-i}e.beginPath(),e.arc(n,a,10,o,r),e.lineTo(n,a),e.fill()})(t),"canvas"==t.config.outputFormat&&(t=>{t.ghosts.forEach((e=>{const n=22*e.x,a=22*e.y+15,i=t.config.canvas.getContext("2d");if(e.scared)"imgDate"in o.scared&&i.drawImage(G("scared",o.scared.imgDate),n,a,20,20);else{const t=o[e.name][e.direction];i.drawImage(G(e.name+"-"+e.direction,t),n,a,20,20)}}))})(t),"canvas"==t.config.outputFormat&&(t=>{if(!t.config.enableSounds)return;const e=t.config.canvas.getContext("2d"),n=t.config.canvas.width-30-10;e.fillStyle=`rgba(0, 0, 0, ${L.getInstance().isMuted?.3:.5})`,e.beginPath(),e.moveTo(n+10,20),e.lineTo(n+20,15),e.lineTo(n+20,35),e.lineTo(n+10,30),e.closePath(),e.fill(),L.getInstance().isMuted?(e.strokeStyle="rgba(255, 0, 0, 0.6)",e.lineWidth=3,e.beginPath(),e.moveTo(n+25,15),e.lineTo(n+5,35),e.stroke()):(e.strokeStyle="rgba(0, 0, 0, 0.4)",e.lineWidth=2,e.beginPath(),e.arc(n+25,25,5,0,2*Math.PI),e.stroke(),e.beginPath(),e.arc(n+25,25,8,0,2*Math.PI),e.stroke())})(t)})),et=t=>{t.gameHistory.push({pacman:Object.assign({},t.pacman),ghosts:t.ghosts.map((t=>Object.assign({},t))),grid:t.grid.map((t=>t.map((t=>Object.assign({},t)))))})},nt=t=>{t.pacman.deadRemainingDuration||t.ghosts.forEach((e=>{"eyes"!==e.name&&e.x===t.pacman.x&&e.y===t.pacman.y&&(t.pacman.powerupRemainingDuration&&e.scared?(e.originalName=e.name,e.name="eyes",e.scared=!1,e.target={x:26,y:3},t.pacman.points+=10):(t.pacman.points=0,t.pacman.powerupRemainingDuration=0,0===t.pacman.deadRemainingDuration&&(t.pacman.deadRemainingDuration=10)))}))},at=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},it=t=>$(void 0,void 0,void 0,(function*(){"canvas"==t.config.outputFormat&&(t.config.canvas=t.config.canvas,(t=>{t.config.canvas.width=1166,t.config.canvas.height=174})(t),J(t)),t.frameCount=0,t.gameHistory=[],t.ghosts.forEach((t=>t.scared=!1)),t.grid=(t=>(k(t),t.grid))(t);const e=()=>t.grid.some((t=>t.some((t=>t.commitsCount>0))));if(e()&&((t=>{t.pacman={x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[]}})(t),_(t)),"canvas"==t.config.outputFormat&&K(t),"canvas"==t.config.outputFormat&&(t.config.enableSounds||L.getInstance().mute(),yield L.getInstance().preloadSounds(),L.getInstance().startDefaultSound(),yield L.getInstance().play(H.BEGINNING)),"svg"===t.config.outputFormat){for(;e();)yield tt(t);yield tt(t)}else clearInterval(t.gameInterval),t.gameInterval=setInterval((()=>tt(t)),200*t.config.gameSpeed)})),ot={frameCount:0,contributions:[],pacman:{x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[]},ghosts:[],grid:[],monthLabels:[],pacmanMouthOpen:!0,gameInterval:0,gameHistory:[],config:void 0,useGithubThemeColor:!0};var rt=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const st=t=>rt(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield(t=>rt(void 0,void 0,void 0,(function*(){var e;const n=yield fetch("https://api.github.com/graphql",{method:"POST",headers:{Authorization:`Bearer ${null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify({query:"\n\t\tquery ($login: String!) {\n\t\t\tuser(login: $login) {\n\t\t\t\tcontributionsCollection {\n\t\t\t\t\tcontributionCalendar {\n\t\t\t\t\t\tweeks {\n\t\t\t\t\t\t\tcontributionDays {\n\t\t\t\t\t\t\t\tdate\n\t\t\t\t\t\t\t\tcontributionCount\n\t\t\t\t\t\t\t\tcolor\n\t\t\t\t\t\t\t\tcontributionLevel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t",variables:{login:t.config.username}})});if(!n.ok)throw new Error(`GitHub GraphQL request failed: ${n.status} ${n.statusText}`);return(yield n.json()).data.user.contributionsCollection.contributionCalendar.weeks.map((t=>t.contributionDays)).reduce(((t,e)=>t.concat(e)),[]).map((e=>{const n=e.contributionLevel,a=I(t);return{date:new Date(e.date),count:e.contributionCount,color:a.intensityColors[M(n)],level:n}}))})))(t):yield(t=>rt(void 0,void 0,void 0,(function*(){var e,n;const a=[];let i=!1,o=1;do{try{const r={};(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)&&(r.Authorization="Bearer "+t.config.githubSettings.accessToken);const s=yield fetch(`https://api.github.com/search/commits?q=author:${t.config.username}&sort=author-date&order=desc&page=${o}&per_page=100`,{headers:r}),c=yield s.json();i=!c.items||0===c.items.length,a.push(...null!==(n=c.items)&&void 0!==n?n:[]),o++}catch(t){i=!0}}while(!i);const r=Array.from(a.reduce(((t,e)=>{var n,a,i,o;const r=null===(a=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===a?void 0:a.split("T")[0],s=(null===(o=null===(i=e.commit.committer)||void 0===i?void 0:i.date)||void 0===o?void 0:o.split("T")[0])||r,c=(t.get(s)||{count:0}).count+1;return t.set(s,{date:new Date(s),count:c,color:"",level:"NONE"})}),new Map).values()),s=Math.max(...r.map((t=>t.count)).filter((t=>t>0)));return r.map((e=>{const n=T(e.count,s),a=I(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[M(n)],level:n}}))})))(t)})),ct=t=>{return e=void 0,n=void 0,i=function*(){const e=yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${t.config.username}`),n=yield e.json(),a=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),i=Math.max(...a.map((t=>t.count)).filter((t=>t>0)));return a.map((e=>{const n=T(e.count,i),a=I(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[M(n)],level:n}}))},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}c((i=i.apply(e,n||[])).next())}));var e,n,a,i},lt=(t,e,a,i,o)=>{"horizontal"==a?(s(t,e,"horizontal",o),"x"==i?s(n-t-1,e,"horizontal",o):"y"==i?s(t,7-e,"horizontal",o):"xy"==i&&(s(n-t-1,e,"horizontal",o),s(t,7-e,"horizontal",o),s(n-t-1,7-e,"horizontal",o))):(s(t,e,"vertical",o),"x"==i?s(n-t,e,"vertical",o):"y"==i?s(t,7-e-1,"vertical",o):"xy"==i&&(s(n-t,e,"vertical",o),s(t,7-e-1,"vertical",o),s(n-t,7-e-1,"vertical",o)))};class At{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){const t={platform:"github",username:"",canvas:void 0,outputFormat:"svg",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",gameSpeed:1,enableSounds:!1,pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:B.OPPORTUNISTIC};switch(this.store=JSON.parse(JSON.stringify(ot)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield ct(this.store);break;case"github":this.store.contributions=yield st(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return lt(0,2,"horizontal","xy","L1"),lt(1,2,"horizontal","xy","L1"),lt(4,1,"vertical","x","L2"),lt(4,2,"vertical","x","L2"),lt(4,3,"vertical","x","L2"),lt(4,4,"vertical","x","L2"),lt(3,3,"horizontal","x","L3"),lt(2,3,"horizontal","x","L3"),lt(4,5,"horizontal","x","L4"),lt(6,4,"vertical","x","L5"),lt(6,3,"vertical","x","L5"),lt(6,2,"vertical","x","L5"),lt(6,2,"horizontal","x","L6"),lt(7,2,"horizontal","x","L6"),lt(8,2,"horizontal","x","L6"),lt(9,2,"horizontal","x","L6"),lt(13,2,"horizontal","xy","L7"),lt(14,2,"horizontal","xy","L7"),lt(15,2,"horizontal","xy","L7"),lt(16,2,"horizontal","xy","L7"),lt(17,2,"horizontal","xy","L7"),lt(18,2,"horizontal","xy","L7"),lt(16,2,"vertical","xy","L8"),lt(8,1,"horizontal","x","L9"),lt(9,1,"horizontal","x","L9"),lt(10,1,"horizontal","x","L9"),lt(11,1,"horizontal","x","L9"),lt(12,1,"vertical","x","L10"),lt(12,3,"vertical","x","L10"),lt(11,4,"horizontal","x","L11"),lt(10,4,"horizontal","x","L11"),lt(9,4,"horizontal","x","L11"),lt(8,4,"horizontal","x","L11"),lt(8,4,"vertical","x","L12"),lt(8,5,"vertical","x","L12"),lt(23,1,"horizontal","x","L18"),lt(22,1,"horizontal","x","L18"),lt(21,1,"horizontal","x","L18"),lt(21,1,"vertical","x","L18"),lt(21,2,"vertical","x","L18"),lt(21,3,"vertical","x","L18"),lt(20,4,"horizontal","x","L18"),lt(19,4,"horizontal","x","L18"),lt(19,3,"vertical","x","L18"),lt(18,3,"horizontal","x","L18"),lt(22,5,"vertical","x","L19"),lt(21,5,"horizontal","x","L19"),lt(20,5,"horizontal","x","L19"),lt(20,5,"vertical","x","L19"),lt(1,6,"horizontal","x","L20"),lt(2,6,"horizontal","x","L20"),lt(3,4,"vertical","x","L20"),lt(5,6,"horizontal","x","L21"),lt(6,6,"horizontal","x","L21"),s(25,2,"horizontal","GH_TOP"),s(27,2,"horizontal","GH_TOP"),s(25,4,"horizontal","GH_BOTTOM"),s(26,4,"horizontal","GH_BOTTOM"),s(27,4,"horizontal","GH_BOTTOM"),s(25,3,"vertical","GH_LEFT"),s(28,3,"vertical","GH_RIGHT"),s(25,2,"vertical","GH_LEFT"),s(28,2,"vertical","GH_RIGHT"),z(this.store),(t=>{const e=D(new Date),a=new Date(e);a.setUTCDate(e.getUTCDate()-365),a.setUTCDate(a.getUTCDate()-a.getUTCDay());const i=E(a,e)+1,o=Array(i).fill("");let r="";for(let t=0;t<i;t++){const e=new Date(a);e.setUTCDate(e.getUTCDate()+7*t);const n=e.toLocaleString("default",{month:"short"});n!==r&&(o[t]=n,r=n)}t.monthLabels=i>n?o.slice(i-n):o})(this.store),yield it(this.store),this.store},new((a=void 0)||(a=Promise))((function(n,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof a?e:new a((function(t){t(e)}))).then(r,s)}c((i=i.apply(t,e||[])).next())}));var t,e,a,i}stop(){var t;t=this.store,$(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}var ut=e.C;export{ut as PacmanRenderer};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pacman-contribution-graph",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Generates a pacman game from a github or gitlab user contributions grid",
|
|
5
5
|
"repository": "github:abozanona/pacman-contribution-graph",
|
|
6
6
|
"homepage": "https://abozanona.github.io/pacman-contribution-graph/",
|
|
@@ -31,11 +31,15 @@
|
|
|
31
31
|
"build": "webpack --config webpack.prod.js",
|
|
32
32
|
"dev": "webpack --progress --config webpack.dev.js",
|
|
33
33
|
"prepublishOnly": "npm run build",
|
|
34
|
-
"build-action": "pnpm run --prefix ./github-action build"
|
|
34
|
+
"build-action": "pnpm run --prefix ./github-action build",
|
|
35
|
+
"test": "jest --coverage"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
38
|
+
"@types/jest": "^30.0.0",
|
|
39
|
+
"jest": "^30.1.3",
|
|
37
40
|
"prettier": "^3.4.2",
|
|
38
41
|
"terser": "^5.37.0",
|
|
42
|
+
"ts-jest": "^29.4.4",
|
|
39
43
|
"ts-loader": "^9.5.2",
|
|
40
44
|
"typescript": "^4.9.5",
|
|
41
45
|
"webpack": "^5.97.1",
|