Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Encoded textures
- local b64_background = [["iVBORw0KGgoAAAANSUhEUgAAAwAAAAOACAIAAAACU4MBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eH
- BhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgM
- jAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6
- eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXN
- vdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFQzY4N0U2OTg5MTAxMUUzQkM4MUMwODVFQjk3NkM0MyIgeG1wTU06RG9jdW
- 1lbnRJRD0ieG1wLmRpZDpFQzY4N0U2QTg5MTAxMUUzQkM4MUMwODVFQjk3NkM0MyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkVDNjg3RTY3ODkxMDExRTNCQzgxQzA4NUVCOTc2QzQzIiBzd
- FJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkVDNjg3RTY4ODkxMDExRTNCQzgxQzA4NUVCOTc2QzQzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+pI+BBgAAOThJ
- REFUeNrs3etv5Gp+J3Y+JOsiqS+nT/e5zYxnPAuPL+uxY88ixi4COMnCAXYR/wGL/BV5kb9g3wXIH+L3cQK/CBZxEiObrL1rjD2e8dw843Pv0zdJLaluJJdSdatYJRVLpaqSqlSfDxozRxKrRD58+NO3yIcPw//4F/8xAgDYGq+ffhl
- rBQBg2whAAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQACAAAQAIAABAAhAAA
- ACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAg
- AAEACAAAQAIQAAAAhAAgAAEACAAAQAIQACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAg
- AAEACEAAAAIQACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEAAgAAEACEAAAAI
- QAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAIABpAgBAAAIAEIAAAAQgAAABCABAAAIAEIAAAA
- QgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAA
- QgAQAACABCAAAAEIABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAQAACABCA
- AAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCAAQgAAABCAAAAEIAEAAAgAQgAAABCA
- AAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCA
- BAAAIAEIAAAAQgAAABCAAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACA
- AQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAEIAAAAQgAQAACABCAAAAEIAAA
- AQgAQAACABCAAAAEIAAAAQgAQAACABCAAAAEIAAAAQgAQAACAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIAEIAAAAQgAAABCABAAAIABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEA
- AAgAQgAAABCAAAAEIAEAAAgAEIE0AAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAI
- AABAAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQACEAAAAIQAIAABAAgAAEAC
- EAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAAC
- EACAAAQAIAABAAhAAAACEACAAAQAIAABAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAA
- EACAAAQACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEAAhAAgAAEACAAAQAIQA
- AAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQACAAAQAIAABAAhAAAACEACAAAQAIAABsJmCJkAAAmDrAlA4/Qd3T6oJAJgmL7QBd5MzQACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAI
- AABAAhAAAACEACAAAQAIAABAAhAAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAAAIQAIAABAAgAAEACEAAgAAEALAdUk0AsKV/AOLoV+6nzeEH4bD89x/k0ceHWT8rCm2NAATAmthJwx99q/WoFZfhJ6wg
- AB32ij/50fHL/DT/CEGsG5fAAICt4wwQwPYanvtZ0Rmg0/cM2hgBCIA1DEBv/63izUEAAuCmNZOQTI8h7TSEVYaUcPYrdtJQTBkDlBVRLzM4CAEIgKX6gw+bv/7otM5fGnTKbPSwGccry0C7jfDH324PE86lMefnrwZ//kk3OotHchA
- CEADLca8Rnuyc3uwyLeXEqzwDVL75o3bdrTZfHbtKhgAEwAqEyv/e1m8HAQiAG8wf4c3FrxBubQWu/VNYKfMAAQBbZ7VngHbS8M8+aOykq4pZ3az4yy97x32D52ArtJPwvQ8bu+mqBq6UJeWvypIy2JiZiz/cS777pBFNv9L0jfvJOp
- 9lKdf/j77VPv2vKYOgf/ii/+nrLDKRNBsXgJpJ+O3HjfpBcIs47BV/86wvAMGWaCTRaUlZ5aMbfvCsfzLYmL+277bj771/FoDC5Rlo2vfXZ/3LvVmzwFcn2WfDAKT3s2wugQEAW2flg6DLT2qru80yNoAOtu9DW7yyRzfEm/bohvC2D
- K75mZ6a9Z8xSlqPZ5XFBABguyx6BuijveRBa2pG303jZrLCBJ/G0T95mL7ezactcNAtPj/K7GbYFB/uJQ+bYdpn/500NFc5qLcsKd9+mL6/kxdXG3QyyKOPD7N+dnNjhiba52t7Sbjr/aFzNiZ9WOUP35Z0Q4K4/QD0vQ8av3N2D8I0
- K71KVVbD/+5brZoFfvC8/7/+TACCjfF77zV+971GdEszF5cl5Y++2br68oe94k9+dPwyv7m7xibaJ9z1qXTK7f0v3hv9ifm75/0//flZSffoDBbmEhgAsHUWPQN0658/DKCDu2TNZy6+ZOFwm+0TtqA/XHvvwGoD0K0fgQ4HuGt/827
- 10A4rW/hutI8iz7YEoDSOGrWX3NP1voaWxKcX9WsW6OfFINcNNkYzCSsd86k/rPyQDFH9jRHpRl2WL7eknYayyBRTxgBlRdTLikXev5WOnfVIDVvYnJKinmx2APr2w/QPv1E3JPBBc63Tebn+/8NvJTUL/MWn3R+/HJT/kRtQtwn+4M
- Pmrz867bQrOhOuP6zarz5M/+uzkjJtD5YlZYPm99pthD/+dnuYcC7tMj9/NfjzT7rRWTwqrvX+//rb7QfNsyYJm9c+W15S1JPNDkDtJLy3U/eJY82vyLZO179uFdupWrJJ7jXCk7MOuaK/AfrDDRySwz1Y8+iGDVL2w/pH/Xx1HBZ//
- +qjPwyC2aCSop5sdgCKNv/6qw54xwS79a7swXCHNmel7x/uUHMpKWxMADq/42CDe7bbxO5SqVrxLUL6ww0ckmGTH91waZ+89k+v3mLBuZ8NLCn22JozoA4A2DqTZ4B++0nja3ujUcNPdu54Qvqnjxvv7Z5u7/AOji+Osr993j/9L9OM
- 3oYP95Lvnk0sPu2T0zfuJyv9HDzRHyZ0s+KvvuwdD25u2t8baNIFzTxkyib92r3kfAUet+MtmcDmvP3/6Fvtmvb54Yv+p6+z8x41sb+aSbTXCHfmbNnS23PmIXm7JeWO1ZNbLybLXf/nzdZkAPrVB0n10RZ3/qj75v3kV+6PAt/fPT9
- 9ekbkQTO35N12/L33zzro9BGy4Qb7w4TDXvGDZ/2TQVHcoSZd0MxDpmzSyUc3bFmXftSqHSV9kn32evRwq4v7yz1fNe0585C83ZJyx+rJrReT5a7/54OGS2AAwNaZPAMUtuwDx0SSNczwlnfH+XmCWzrnX/974w08fbHqJp15yJQLDF
- dgO89khDkf13Prh8BmtefMQ/J22/OO1ZNbLybLXf9gEDQAsIXS33h37CTQw9ZWR6IHzfg3zmYFLc7+DfLo48OsnxWGBC2nt8XRr9xPm/Fln3zPfG0vCeu9/t9+mL6/kxdTrlIfdovPj0bjObahSScOmYveaRnEUufDvaRzNgw234RDY
- OMOyXVuz3WrJ+tfTL48yve7+dUbpDy4HjZH91xcXP/wRf8nY19v93nXiQf6HPaKP/nR8ctuXmzOXT/r7H4z/Jvf3K1Oazth/Sc7qZ/S/u+e9//0553ous892MQmnXlouJQzowHHu4r5fpZ7SK55e65VPVn/YvJnv+h8/6t+dOVHi/yr
- X21P3oFRWf/PPvnCJTAAYOukE4Fuyz97TMwcHcw/v4IWrpnWdv0be9XT/m5ck5psfbk9SnMt+ZBUT7a4mExM8x0uCUAOoOlNrHFWcoBt8mQwQZOKOBpQ693Rlb97xaT+QW+p46e+7ZpJaCXhbKrO0+/08yIzGOjKkhClb4fAhrMngd/
- t8Q3l9rbOhtkNr2SX/9PLiwVHjzXiEE+fOvnONylsc/1cbj3Z9GJSrn+1Qa7SgDP+xD8d/EQ/myYvouedPMtH3/mLz7o/eTmIrjwIa8v9k4fpH36jFb09rVoee++24/TuDjw7GRT73VHPOOoXf/aLzmFvoUH0/9XXWt85uzPi0pup7n
- yTwtZaej3Z9GJy0C2GTw65ogetsDv9Ktdnn3zhDFCdskM8bo91hx3XDOfRTsP7u3G0NfP6l9vbqnzoOOwVi/eX+803bTit6dxlDurJNhSTcv3vNedYxZkntASgWS2oCZbRgNszmnwVY8iCrghb/wcoLO8Nw51okMUJQPNFSH+E5u2sY
- Zvm9V/FXYQTNzIAW5R+llpPNr2YLH21jR0AALaOM0As02+92/joXnyerB/vJGH6TQd3XisJ/+KjZid7ewtHFP3wxeCz4dz2xeXLf++Dxs7bybmG//v1e4lzP8Ai9UQxEYBYuW89SCanHt/i1mgm0XefNKrfedbJax7uM1z+0duHZwVP
- BQeWUU8Uk0u5BAYAbB1ngFim8hPG8PSFe7PffMKYcxB9fPaS6hkggAXriWIyrX0AALaLM0Dz+WA3+c6jswdjnF10PegVX06/BHu993/QmvlIuOv78jg/6ObLWuE0jr5xL2kkoxV+2HLqZ47+M6GdhqZBioB6ciM8CmM+ZT+r9rS/e97
- /0593Ln7/2v7Vr7arg4iX7s9+0fn+V/1oSY/yuN8M/+Y3dw2yu3b/uUh+BNSTG/DZJ1+4BAYAbB2XwOYzOTF0WP77r3SmzrCCNwyVQXY+b8zVfwDUEwFoc/rcjbx/2JzWCFs/389a9R9APUEAWjtJiNK3V2XDlAVWqhG/ebzwpYPmyu
- /18qIo7CgABCCW51sP0j/8RiuaPlj4QSusdNjaH3zYnJhLtOqoX/zZLzqHvdMR0mIQAAIQy9FOw/u7cU0AWvU13fvNcK859Xcc9orUGVUABCCW7nyIT7jVFZj3RwAgAHH98HG78+XUn2EKBjMDsB3MAwQAbB1ngBby4V7yL795Oqj5i
- vNAP95J1nm+nFYS/sVHzU5WXHGLGknYawSzPwOwcTwKYyHz3i21/k/lnfcRGaZaB2DjeBQGALCNXAJbSLhzk5E7owPANnAGCAAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIAEAAAgAQgAAABCAAAAEIABCA
- AAC2QKoJNkhRFEf9QV4UV10+inpZI4/CslagnUQPW/bD+uoMBr0sv/ry/TwdFEv7FJSE6J1WlPpUpZ6oJ+rJJtQTAWiTDIrik8PDXpYNi9FMWRE/PX5nkCfLWoGv34t+7/3T/wjB3lhHz05OXpx0rtg9Si8694/67aX9PUujf/5RtNf
- QQ9QT9UQ92YB64sMaALB1nAHaPEXlf2csWbz5t9xfzTr3jWKePbXk7qF/qCfqiXqyOfXEGSAAYOs4A7TZQu3F0Yuj1+JQvmSOXJ0Xwae0u9o9hgtMfBnPs8OLsx6indUT9UT32MR6IgBttofNeDeZ2mO6Wfy8E4aj+Ifd8Ot7ncft3s
- WeOs0/vm6/6DQjJ6s3004S3mnWneU97oWj/qh7PGr1v3n/5Ord40W38Y+HO7qHeqKeqCebWE8EoM2WhqgZT+1dRTGZ19tJfq+RXb1HNmKVaoPFtd0jOrvRdKw7xcVc3eN4kGhk9UQ9UU82tJ4YAwQAbF/i1wR3Q5jyzTBlybDA23I3u
- keke6CesMX1xBkgAGDrbNcZoKIoskEW5Uu7Dh2SOElXeNlyvxt99vpszc++zIvwqrOb5fn5d3qD0Di7Ln9pdh4UoZ/XjcLv5cXRYPTz8p3upyGe/oZ3Xtk9inmmfp/VP0LSSMLKprkd5NEvD6JeNuohh91W5+w6+vDL4zgcduv25kE/
- reke5YFyOMirh8tuGoaDAHyUV0/UE/Vk0+vJ1l0Cy/qDYnkFKymSlRas1/3o5/vDUvvmCCiKsYnGX/dm1ejan/bzssuOyl8Sor0kibf4j1ue5WUPWV69CqfdY2XtWRasjw+jN7ddFMP/bUZRc2wdFuge5U9fD4rB2fEyXDKN42Ys/Kg
- n6ol6chfqiUtgAMDWMQh6vRXnSfw6iftqv2E578PtdBA9BPUE9eRanAECALbOXTsDVORFked12XOTP5vEobjfyJIFZpNvJWONk4RoOPFr8eb9o3CnL9gXp8NW8/oFNnoD99JsYhfPZThr2blwOtNdaITRJ7Y0bNeADvVEPVFP7nA9uW
- sBaNAfLHHQ2bppxMV3Hh610zy67rD5CxO5hnaSVMv43f77lmd5v9O7wxv4tb3uB7vdRfZjGPsDGT1+O/N9sQXdQz1RT9STraonLoEBAFvHIOjNM9fcmtf7JIfuoYfoMHoLd7ueOAMEAGyddDDPCKcQJh/3uhZWOc4smzW1U8iX+euSO
- YcNTg7DDJPJun6BmS+f/HVFNOwwV1zJOES3Pw3aKrtHXtS9fTibW2yJDTBvey7YPa7RQ7J5ekg425ygnqgn6ol6chv1JP1/P5tj6XYS/e77USuJ1kRRFP1uvzoV/XJH3ffy8KP9RjcPU7t9CGGpJ9G+8yj6YHeOinDQy48rNbWdhHfO
- RpmFt4fTs16eVdrnYTPsJKMFOlnxqpdXj4fHzTiZPjf5VyfRv/98js15fzf69UdzbM7SDXqDfJBVDr8lV69fHqXPuklNVQxL/cQwb3vO3L8L9p/J4yWL/vrpHCW1rCTffRLtpLfZQ9QT9UQ92dp6ku5352ivfrrE594sqWblebGydSq
- r3+tBfJKFuty/1EOxl815QBanz9+JRjOLT8btfj429XhWhIkPHNWXlwfXjKnus2h/nk+o9xq3/yctz/PVvX8nCwf9uK57LPUWonnbc+b+XbD/XPx1h/PcE9NWT9QT9UQ9ub16YgwQALB10rlO8RZbOcf5jKm7l9oi1zjjPnNm8foF5p
- 2YfN4Oo3ss/XfdZPeYt4fM1z228okJ6ol6op6sST1xBggA2DrpO+2j6td7SWhWhlm97idfnTTXZ3XzUr86Bu2m5xp/0u7fb17/MmwvK44qY8TyIrzutfNiY2JoIxnsNbrV+Hy/EeLKeLNnJ43X/fS2PqudTkw/yKrXgfMsv8kVuNfI3
- tvpLbD+0eEgr94odNxv9bKNmawrDsW95klcebTCbhJa4/Xk2Vk9KdQT9UQ9UU9uu56k95vHYwdkK7mXjn7BlyfNtQpARV4MbnVm+ket/iJTgx8Nimfd7HyHZXlc9sh8c07sNuJBtcOUXfHDdpJW7gI4GcTDgnVbsv6guL0G3U2zr+91
- rt09ylL1RSerDhLsZ8kGFawQir1GJ41HkeJxK76Xju7yeHrSfKaeqCfqiXqyHvXEJTAAYOtMhsEwHjbNaH5JLF2gZcKda4ow3iA6zILd4072EN1DPVFP1JM1rCfOAAEAWyc9GYxdQtsPcS8b5aqj/tisz1kRPTtZaCboB803EzXeDdn
- beZ/OteNwk7OUNuOwm4zmVWuOz5oZzubibJx9783MVOMrV760+vJ41sT5WRFXO0z50pfdsZlAu9lYpO4MoqfH18/q5fu/05qcTWuDFKcNMjaqthFP7oKVmrl/F+w/k9tbhO6g0Y9HBeLgbT0Zvuz1eD0pD53nJ2WRuX4PUU/UE/VEPb
- lePSnDTPrs+GH1W89rX9AdRN9/ulAL/u570Tcf3J2C1cnGBiG+GcQXQnRT5x7vN8L9xtjU6dXfO5yq/PzgubhWZXdsJ1NfflkHaHbHE/PTC4foWHc6iV50rr917TT65x9Fe2fTlYYNPJl7ekD28uogxLNBfDfXPWbu3wX7z4XtDS869
- +vrSbWH9LLob54tWk9+5f6mdg/1RD1RT26xnrx86hIYALB90qg2cV+0nZO31jXI1dpt1cJiC4TFNn9FHeZudLZ16CFh9QvcfPe4k+VIPVFP1JOb6R7lws4AAQBbJw2hmMhlS7yaWJxdxps7xS3lo8QUWTHfwhOL58WbB9iGt18WxWjM
- V372eNtQTL0oO7F8UYTFW3hsFcPk761fYObLL9khlQ6z9Nss5+4wy+4eeTFf9ywufFntHmX/KTdn+KHkTQ8pQja9e1xcvrjV7nGNHrLSehJd+vho9UQ9UU/Uk/kloUjf392vfuthI95Nl/Yruln4+cFudST/oD/odbI5AlojjdNkWev
- Tz8OPDhqd7KobWBagTj62Bz47alenxs5P33O0T8v3fXFSN7puYvnyFVm+0Em4g35+Mhi94U4ayj1YrafPe3lW+Y0Pm2EnGS3QyYr9Xh5VRvU/bo7dhTGhnfYetkYzt85cfl4vuunHhzuVgl70u/3e2QZe2qzl706bjSUWrH88Sp91k6
- tXiuNsrHu86jb+9vm96gK94s3TFYaLveqE+v09sfwgX6jzz9y/C/afyd0R5++2XidxXqknYSeNl9U9eln42cFu76yeFOP15IpjWldRT7pZuGKHUU/UE/VkferJl92jtJn0q9/aa4w9CmNBjTgevw/udO75uR6nUqTLvNZZtvxhPz7O5
- tjAYrIHxJ3xOzOLyRo93xsuaJBH3Up/SvPJ39XLi+pdAxMfoMufVF+ehBmrF4e82mHK5e81xqauX9DJYPJwPn1a01lNCJd/PljyR7aTLOz346vvpuLCX8RBntYtcLPdY+b+XbD/XPz83EgG1anrdxtjU9cv+oHqYj0pirKDXP39V1FP
- Tq4cgNQT9UQ9WZ96ctTIjAECALbOjEdhLGjdploo3v5b5B1uMnFffZWK6y6wyLXhi1PX34EOs+DF8uJudY+l9JAldo81nL1lkfZRT9QT9eQW64kzQADA1km3fPuftPv3GoPVvf9xVvSyYlrgLYrwut/OCzF0Td1rZE/avdW9fz8vjgZ
- Fzeehk0Grl6V2hHqinqgn6okAtGSPWv0PdrvRyk6WPu/mrwf5tB6Z5fHxoJWbW3Jd7abZN+51Vtc9ympVffTBRYM8UbDUE/VEPVFPVsFnBQBg6wiDyxxUNe3N0T10Dx1Gh0H3WCvOAAEAW2fGGaCsOJ25qBowW8nYXFHlT6uTwSchas
- abFEP7eXGSjebFmlj/4nQy67HHqzXi06eH1LVPvNBkWucTRQ7fpMhn3KnXiMNOMpqHbaLxyy/aSRhObPlmZqrxlStfWn15+Z8LzgRWtudgen+Y2Z7rplzZave4uH9veHtP5/2rdI88C1HtiNeZ+3fB/jN/e844XurbUz1RT9QT9WSJ9
- WRGACr31nBQVfR2dT/cSaozRR/0i+GgvKF7afyktUkF62CQ55VHc+yl4Ukrican7q7OXPm4FQ9nyj6f+r066Kxs3w/byXCnXq8VBoNBrzM4f/mgl0RFs2b5B43woDE21Xr19w6nKj8/eC6uVdkd28nUl1+nPd/2h+Ja7bluyv37tNI9
- Lu7fG97eslr1Or3zl/ezUOStaPpsqjP374L95xrtWX+81LeneqKeqCfqyRLriUtgAMDWmT0Iupjy3+ffqV9g/V1xMtZVzHy6RGGxBcKy23NFM4HefN8o7sT2htUvsIXdQz1RT9STja4nzgABAFvHbfBr/RHBlGZc+oFG90A9QT0RgO6
- Ul/1eHkYzyR70W0XU1CwMHWeDjzsn591jkId+0SiiRMugnqCeCECbrV/knXx0m0CvyLUJ57KiqHaPLI/1D9QT1JPrMQYIANg6zgCtHdfpqekbhnSgnqCeLIUzQADA1plxBqgZh0fNuBKXwsTE9HtpaMRxdfnN2v7dJK5uYLn+EzNXPm
- jEeTGaebM1vsB5+7yZbKAInx/v5JWZNI8HRa+YGqzLJfPxqceP+61BPhqD1s9m7KDT969MDFquy256+obnM4e+HuTDucKHC+ymYbiPhguUrz0ejF5e/uReGuIFZp4t3z+N48r6zNee6+ZC/4+S8ScTzLu9h73m85PG+QK9PDrO6i679
- 8Y7QNkf9rt7Nf1n8uWz9u+C/efa7Vlcqz3VE/VEPVFPllhPZgagqJpvLq7oTvLm2R8bqlz5h42pu7zcsPunE42PHm4ysanlSx9W2reXxT87aXUGlRI25/p0Bs3y39WXP8kmp/rerezS8puHg6I6dXrZG6ohtZ9H+/3Ry8s9uZski4TY
- 8/5QXKs917BgTXSPsNj2fnXc/PK4VV1+rh7Sz9N+N51n+Rn7d8H+M6+J42Xe9lRP1BP1RD1ZYj1xCQwA2Dqz09+NTXl+u5Y49fsNT1W+4FzgK1rbG5sKfSO6R3WBzeoeK1rhO9Y91BP1RD3ZxHriDBAAsHVmnAHKimg4puk8RrWSsWF
- E5U+zSpZLwoaNg+7nxcnZBoTL1r/8QTcbG3PYiKO00gAT7dPLinw82e6mWSvJ51mfaFD5hVkRzxy3uG7tOZjeH2a257opV7baPcJwlGW4/vYOxrtHM8n30mye9Rnrb0URenlaFBtzxF1ST+ZpT/VEPVFP1JMl1pMZB0O5t551Rw1a9q
- 0Pd5K08g4H/TeDnobupfGT1iYVrINBnndGG7iXhietJKqMWn/ey6uDth634nvpaNR65237DH+anTb3WAf9+l73g93RVPQzPe/m1UFkx/3285P7m9Se/clBcHO157op9+/TSvcoj58P20laueth3u09GYx1j3eag19/5+jqm380mOhv8
- dPjdwbFxkxdP3G8zNue6ol6op6oJ0usJy6BAQBbZ/bp0PqZIu/AVJLF1Ra4yqC/afcuXj2S34FB5bcyCG5121IsdXsL3eMOdQ/1RIdRTza6ezgDBABsHc8Cu+UPiAtm8DD+DmHWAvUfAoLdc7e6RzRn97hG/0E9UU/Ukw2tJ+segAb9
- QTYYjRoris1+XttJVuz3RmOy4hA9bsbJAnOBP2jEe43RTJfJ+PuUb/ykFVfPATbGZwrfSU5HtUeVeVTTjXr4QJ7lvZNu9XCfvG1mowwHOWaVQY4Pm2Enia/dPWbu3wX7z8ZRT9QT9UQ92ZgAVJw++OTuPKS27IrdSndMwqLblsblLqy
- bOv38rr9Lp4ovf9gKYy/frD9v5R+wsWkYNv/jWi8fmyo+W+yW1Jn7d8H+s3ktrJ6oJ+qJenK+RREAwJYxBugWUnm0flPFu1p/t3tIWP0CqCd6i3qyWfXEGSAAYOvMOAPUjMOjZlyJS2FiYvq9NDTiuLr8Zm3/bhJXN7A5PqSr3JoHjT
- gvRtdQW+MLnLfP8Kf9LH4eQraaz2SXOh4Uvcol3nJddtPRGLfyJ68H+XAY33CB3TQ0K2Mky9ceD0YvL39yLw1xuP4gyvL90ziurM987bluLvT/KBkftTfv9h71wnH/5rrHzP27YP+5dnsW12pP9UQ9UU/UkyXWk5kBKKrmm4srupOE8
- t/mBsBy5R82pp4GKzfsfvrmxr1LB22VL31Yad9uHN9wAjzJJqf63q3s0vKbh4OxQXBlb6iG1H4e7fdHLy/35G6SLLIJ5/2huFZ7rmHBmugeYbHtfXqzp1xn7t8F+8+8Jo6XedtTPVFP1BP1ZIn1xCUwAGDrzB4EvSWD3ZYy6O9WZnla
- cC7w9RxEece6RzTnFPXr0z2idR1EqZ6oJ+qJerJgezoDBABsnbQzaFa/zppjz2vrZfHRIBnFpVDcb2Tl/55/p/xpucz5l80k30uza69NVuRfnrzqF9d/h8et+/fS9tWXPx4kL7uN84Q4sf55EQ77SV6ZPGo3zVpJPq19+nmon2kqCdH
- 4Jclye/eLaPSGB738pHKJtDtovh4cj35dXnx2fNxKRu3fze71i9H2tsLY7iuK0M0avWyUuLPG2AJZEXcGo5k9G3ExMTduNzs4OrumO1zFQdErwsloc8p3yOKai/y7afPd1r3z5i1O33DsFzTiKF2nYYtn29s/3960O/jkqHP1l8/c3k
- HtB5+8yF9297tZVoyGwb6ZuXWokxXVa/B5XvbPXrkTR++fp+v8qabcsF5lat0wHLVa2f/9vKg2UXmsLDJE4LSedPYHeXbWYsX16sneWT254kqU639yNpNeuGz9Z/b/ifYpd239RMRLryd5tFNEjRUfX+rJNevJxb9H3Sze5npy8Xj/6
- uRwUGRXPMP01fGr9Kvjh9Vvvds8etjonX/5spf++NXe+ZftJP+dx4ftygHz6ev2lyejCPXBTu/X3zm69gacZL3/44u/2e8fX/sd/uWH3/3th79y9eU/O2qV/86/fP/t+oe3geYn+3udwWiY1XceHn+w2z1f4NXb9ikqNa5GOwntZBQ4
- jgaD//2zvz/onxRvZ+WfOTX/zw/Hvvxw5/cfNt8/W5+zsfQ7vY92jyodIrw4uX9SWf93GscPm6O53juDxlfHo/Uvs93Xdg4blQL6ovezj48+PzuWLl+z+mrzaw8++G8++q3hcuHt1OzVQXCPW/G99Pp3ASzd2fZ+cr69H0fR376c4+U
- zt/dkULeHe3n/By9+ctAb9YeLzVvfQ7597zeK4qO3v3/tlAX3WXdUnsq/3R+2k7RyF8lBf3IQ5ZNWcu3uUdaTf3dWT4rrPvXiv/3gu//04Teu3p4HgzzvjD5BTaz/zP4/0T7ZaRysW++l15Pfevc7X9/74LyerOb4Uk+uWU8u/j2q37
- 13vp5cKC/9/+uLH1X7f73Dp/sugQEAW2f2IOhiyn+ff6d+gXkVUbHQEwqLhRYvpi9TTG+Ba2z4+RC24faOPrHNucarv1v4zbOTpl5BKOpfXERLarEbM7m9xVyNVczbfy7p/2efyt6sQDFfB1//u8dveIxkUYwdX9frDMutQFcfRFzce
- D2JVv50WPVkmfUk2vp6cml+uOLxXi6TruU2bJGi8m8TG6fYgh2kebfn+FJP1BP1ZEv6f3HzzwIrhs9jXt7nrbnePy+i29recOWAf71PVJf+uvL9Z95J+/YDyig+16zwNZy/2/CafTH6CHhLh0dtmxcr3t5i1v5abv8/+zBU1H9q3Ogb
- jGccX+rJNT5Aj91FEY33z9m9YqK/5cWbcdzqyeLbOzyca7b3zteTpff/mw5A//HFP/x/2WdTd3ac5/f7e3Fy7ff//vEv/v5g6vuH0NpLfz8OOze2vd9/8XHvzfYWl21vkd/r747PZTmX/eOf7r/++LxDfH5c/GR/NAazlTR/993fbCe
- t8HYU206aV7vO0eDpPx59fN51yh99cTx2l1+n1dl9cv3V+2qw/799/NdR5a6NXj52cv6/fPKtvfuPo5saZPfJ0bP/8OJnNYfKcetkpds7yJO8cpPFxP5avD/88PiTnx58eb4CWXF6X9L5u+0mzUcffWev0TobJnr6Pw8bbwaNns9tPz
- H1/nutuKicO2+s2aMG/tOLf/j/s8+nH195dn+h9vzb41/++ODzaQV3WE9CGN4mFu5APfm089nnX351/mUSQuXJDVE7af6z937t3WbzfHsn+sPzzsu//OoXb/9Snt3ll4wtoJ4ssr15FI5O7wKbuvydryfff/7xi87LZfX/fJDcdADa7
- x296k0dBx+SaHcvSdPr992D4+P+ydTb0NJ455t7WfMGS/hB72S/tz/tw+hwe5MFtvfk+Kg/eD32G/uj/95LW+2096CRnAegid+UFd2TwfPzgnV6xI5PQdBuxY0F2quX9Q9OuhMnrKq6We8mu99J1vv85GV1eyesensv6SH9ZfaHw+OT
- /snxtBXop62syMePiPIzUN3U++d3ca/nowb2e8f7Z/VkRcfXVepJ407Vk06/ezIe8sbqSRLy1vDhTZfVk17ef9U9qB5fE3/f1BP1ZJF6Uvb/L0+W1v+TZrj5S2B10Sws6VeslUXOFi64+cUatN7a7o5ile9/veXvZP/f9OOrWLOmVk/
- Uk62tJ8Wy+/+NB6Ci7iavt+cyw0INVPf+xW1t76WJdfHtveSdi7HfHoo314/D1P70ZvWKy/r72zPZC6zciq+RX697TOuFq97e+iZYef+f3t4bOhJo1cfXzHpS3GwXvvV6Er0d0KOeqCc3X08qtzcup/+bBwgA2DozzgDda2Tfuj+6JJ
- yGIo3HkteTdq9deXZEJ9v/D199ev5lVoQvT1qDyrjbrLHfbk9NXSFEIV7o40ujHeJk+vsX2cv+T+OiOW2BdrJTFA+HqxJOr2gWX9vrDNd/uNnPu198evzqbbQ/fZLGs06zZn1OspfVrJo0QmMn3Nj2xlH+g/1PGmHqRdH9/Lh1P67J8
- sliA6bK7W0/qAvZn3SfvX7WOf9AMNGejTj9h9ffaCfDZ5WcLvJeK7vfyM+Xf9Y9/NnhF9GV7/d51n1dHTIZ4qi5G4f45ra33ymy3go/pi7YHx6373373nvn/b/s+RPH72H/8042GnNzYX/F7+68k5x9rLp0UHAzDo+aoyGK4WyYbXW5
- 3TSklTGMh72jvzp8dv5RuqwnT09a/cr6DBr7rTf1pLiVevKq/9NQjAYFvx50G8moHn64c+/x2UTtw/Ys1+VBI84rPfDz4+cHvdfn9aSfR0dZ5cEURTjut6qj5tUT9WRz60lelAdIXh3E/fTkbf+/rJ6EULwedKo35Rz0Dpfb/2cEoL0
- 0272X1Zy5erfdfzcaDbv68f7L//T8lxfOSo3svBO39lZ42ilth/LftJ/mWf7q2c/zwdSXv9P8IIpGzwZJQvHR7tgYtP/ni6d/vz82lXv9GcqJAyluRMMCcTPbW2TFD59/WrO9Ze9pP4ov27HLcbq9jbrt/fTVi18cP5/WYdJ4Zzf9Wj
- NOzwtWOymGBWvoRffwL9/ehXHFiR+K8T+Qzb0Qp+HGtrfsgSstWAv2h1978MGvnhWstzd9hM+PW9Wp9784efWq98tqx662eztpZcXvlP8/tb/F0cPxezQm1nUnCdWHW311cvzXZ/XkfP9eVk9W+GDsK9STf6hpz7j44Lffeb9aPO+nb
- y4fDbfjb56/UE/Uky2pJ+WKHg6K6qNLfnrw7NOjL6fVk7MKsNr+7xIYALB1Zg+CDvP9tG7esLcJ7jbHUxYzTm8W9Rt4PhFTXmzA3TZnE5HVrWq+FmtYN8iuGP9IUEx5eVEUJk1evD/MnHo/fztP5uWDEK98N8zVx0jW79+NqycTG6ie
- qCdbXU/OG/yW7jZzBggA2Drp0eBp9euvOp3B9Gt6SRy/176fVEZ5veweHQ9Gc0/tD47TVt0HsjhZ54n1o3JbPj1+efb57PIZKjtR72xe5Si+VmANcRh0614Zp8tsonIbkmaomVh7Yn3K5ePGHHOons6U31/os1L5u2o6TByKTvainx9
- Hb6/ZP+1keZGdf4B+OXg93B3X+wRRduSsX+RZ3QLJUue5i9NQs70X12fB/lA2VTaozGSfzxhiMtH/+3k46Hd62WjMSp50hut/+TwccbHfO+gMuufnOAZZ2EniaMpZmrKSPGnfSypb+Kp3fDR8+dkveNU/qt+/t1tPZh5f3dBXT9QT9W
- TY//MoetHLq2OA+qFXU09uoP+H/+nf/88THajG/Ub7j7/5++X/nn/n//z8hz/e/+L8y8ZuaL+zvmeVyq5w9CzLB3XnpeuP13Lrym289gr0j4vjl1nNAjvvxM29m2vAifUpS9vek+Tqg/hmtudM9dtbvv/x6ftP7Z+VQZcr6Q/lvt59l
- Nxi/1ywP8zsbzP7/8VBx429cO39NWEvbf333/y9B2c3cgx/7//9xd9XBwUvuH9vXf+k6LzM1RP1RD25Rj1Zdf8/+HzfJTAAYOukNfN+XnTx7GQxPlXl2dPHN1gRzbgPddGZPZl/j4x10Tl6K0vo/xdGic7o//X765KjaXKHFudT696F
- /Ttz5mL1RD1RT24xAF2yxvXbc7VvbvY+Y0P2jp215v3/2vWkuCv7VxdVT7Tw2krn356xG931GGCB+nhaT0JlqjSAGwpAe+/NMyaryP7dFz+I89HIoVe94zvVHO1QP7NkstgtFeX71zf44KQ4+mrqqK6QRO2H8U3e+dJ9nZerNHV94tP
- 1CQsMJJuxvbPeP15sDFv58t1345prFHkvqlm9UvN+aLRvbSBdnkedV3mRTd2AuBnNd4DPUt//Z7bn5PJ5/udPfxjy0fT1+73jfHNmYFm8/dUT9WRz60mRRZ39PJ++/Jr/PT16kaXpPA8rKTf1WeewelvdHZsvqjw20ma4xffvHxeD6V
- Obn96AerPtnQ+i+vVpp9EiU7/P3N4F33/W/phxV2p/ULd6pUZ2qwM4irPbXGvuOknDSvvzvO154fNU8ezgsHpXzobVk9tuf/VEPbnF/nyaBMIG/z3NesU1LoE5TQ0sq+SqJ8DtmD8AFZFZwoHlpB/1BLgl5gECALbOfGeAQhy17sW1n
- 9hC56Bu5tNGOyTTL9oVeXQ6CHKBR+pNvH/WL/rjY+6au6HmumXcuOU5Ocr1j5O6VNo7HrtoUN+eF/U7RVa5Jpr3i4n2777OQ1xpwPELqEkjnE3b+3Znh6i68OxP/Bf27+lV+QdTt3fe91+6cntrVi86uwpe7fBJI2rsLPNDRbm/8mzq
- 8VCc3UNV0/9vvT9fqZ7kdWeA1BP1RD1Zk3py8Xjc6P7fO47nDEAhat6r2+DycKqf+r1cm7qCVUS9o2KRqdAn3j/vR93DvHp4zDU1+y0E0nYo/9UcHhNTm9e350WDTtE7yuvbv2ZURtyI6kf1zyhYF/bvDU/VP3d3Kre3Ubd6J6/yans
- 2dsuCvswVKPdX+W+u/rPO7XlJPdmrqyczp7pXT9QT9eTG6smCjzpZt/7feh27BAYAbB0BCAAQgAAA7rp0uW8XJ1Haqn1WYhENulOvQRb56TCxeIGpayfeP+tv1x22RRZltSMeQpixg+qFONTsvtMOkEY3ObHsxskHRT59TMvS+//FvR
- 83Qtic/RPUE/VEPVmbenL3+v+SA1B5MKStuvY+eZV39rOa/HQ2qOr656Xq3//OKztr/aDRnXfi9sPrHxD94+Lo2Yz3PxvWyuW6r+sGja66/w/fP6Qbs4PUE/VEPVnbenIHuAQGAGwdAQgAEIAAAAQgAIA7Jvzbj/+XJb5dv1P0Dutmg
- k536qZaD2eThUcLDHrLB1Ge190V0j+qmxo/aYf2/fUNhZfM3JpGcWVy97g5Y+r0JAlhkZsC8hl3hQxOionZ7sf2bxw19uIQL219bn+PjPe3vBf1T/T/pRl0iq56op6oJ/r/Chx8vr/ku8DKthj06jp0YzekzRWO6j89gKO6qd87g6hm
- avyQbuABU32UT7ra5i1rTf3794+Lmg5w+qSecgeld+e2jon+1h8U+r96op6oJ+rJRvR/l8AAgK0jAAEAAhAAwF236DW6/kkxMT12+0HtoLnmbV6vDXHUuhcXed1V1c5BXl2+uRtCfGvrXLZt2cLV75TrE02/KBs3bvlyeKMd4iSurP+
- MQXx321n/GR+kqf/X15PO5KBX9UQ9UU/Uk1X0/+7rfNEANOgUveO8cjjF7Ufre1YphOhsYvWpO6B/PDb1e5yUR2ASbm+D8n5UvQvm7dTm6zvoL22H8l+1Pfsn2/vxYtjf1md/rX//P60nlan9G7th91Ginqgn6ol6svT+XwYgl8AAgK
- 0jAAEAAhAAwF236BigOA1pK1S/3OjmCElU3ZwQn17mtD5bu/721w2v/0Q9SdQT/VM9sb9Wsz5pMyz5URgAAGvu4PN9l8AAgK0jAAEAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAAQAIQAAAAhAAgAAEACAAA
- QACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAhAAAACEACAAAQAIAABAAIQAIAABAAgAAEACEAAABvoPwswAMH/hoGcYu5QAAAAAElFTkSuQmCC"]]
- local b64_bird1 = [["iVBORw0KGgoAAAANSUhEUgAAAFoAAABACAYAAACa5WD/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGl
- kPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyIC
- AgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZ
- S5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6c3RF
- dnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5
- jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDktMjFUMTY6MDU6MDUrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMD
- E5LTA5LTIxVDE2OjIwOjEwKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA5LTIxVDE2OjIwOjEwKzAyOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjgzYmUwYzU4LWZjMmEtNmE0Mi1hM2JlLWVlZDVlNmI5NjVmY
- yIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjI3NDIyNDY1LWNiYjEtNWM0MC1iNmRiLTM5YjlkMjU1OWUyOSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkQ1RTc4NEY5ODkxNzExRTNC
- QzgxQzA4NUVCOTc2QzQzIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOml
- uc3RhbmNlSUQ9InhtcC5paWQ6RDVFNzg0RjY4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDVFNzg0Rjc4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiLz4gPHhtcE1NOkhpc3Rvcnk+ID
- xyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDBjOWE3NWUtNmQ1Mi1lNjQ1LTlkNjgtZmFhNjU0MTJkM2Q2IiBzdEV2dDp3aGVuPSIyMDE5LTA5LTIxVDE2OjIwO
- jEwKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlE
- PSJ4bXAuaWlkOjgzYmUwYzU4LWZjMmEtNmE0Mi1hM2JlLWVlZDVlNmI5NjVmYyIgc3RFdnQ6d2hlbj0iMjAxOS0wOS0yMVQxNjoyMDoxMCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTk
- gKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pns4xHIAAAH7SU
- RBVHic7ZoxSgNBFIazIgFvYCMW6awsDaQ2pDZ4hiwWVga1CTYq6VJIPINY2YitBCzNBSJIGm8gpIkHmPdghtl8i/B/5Utmd/Mx8L83m2K9XjfqpN/u1vkAhVV8/nir/EZblV9RmEg0hERDSDREsYkwTAm48dNZ1r2Gpw9B7XE2jVo76
- JTeR0FI5gakdjSERENINIREQ0g0RHbXYXUYKZ3E72IY9b3R1b5Zj+0wUnC6kaxORDsaQqIhJBpCoiG2Y7/ojdVW8MUGXBUsZsug1ursRa31RnArYAedMvj9/XY3+jxbOxpCoiEkGkKiIcwwtILv5u7bvAAZfP8Z7WgIiYaQaAiJhpBo
- iOgRvG68rmd0eRvULu6vg5o1lm/iLNtDOxpCoiEkGkKiIcyXs+R/lr2Qy8F7kQsSnFNrR0NINIREQ0g0RHFydBx19rzTGmfdyDu3toIrJSCt9dPdVfyDbYDypxnUtKMhJBpCoiEkGkKiIczz6NwOw8Ibiye9eVh8D0vnr4fmeqvDsFK
- fZLq70gheFxINIdEQEg2R/XLWGq2t4DNDLwFvfWmEJDWCp4SudjSERENINIREQ2AvZ3PDMAVviqwaawJsNHQeXSsSDSHREBINIdEQZtfxtXzJuqgzlmN/M5v05kE30Pw8oG6vrqNOJBpCoiEkGuIPZW6FF2MT/AwAAAAASUVORK5CYI
- I="]]
- local b64_bird2 = [["iVBORw0KGgoAAAANSUhEUgAAAFoAAABACAYAAACa5WD/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGl
- kPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyIC
- AgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZ
- S5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6c3RF
- dnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5
- jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDktMjFUMTY6MDU6MDUrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMD
- E5LTA5LTIxVDE2OjIxOjQzKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA5LTIxVDE2OjIxOjQzKzAyOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBiOWE3MjgzLWRlNmYtZWY0YS1iZjRjLWQ1N2E2MWM5ZGNiY
- yIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjY2NGVhNDViLWI1YmEtYWQ0MC04NGQ3LWZkYjM0OGRkMDc1NSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkQ1RTc4NEY5ODkxNzExRTNC
- QzgxQzA4NUVCOTc2QzQzIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOml
- uc3RhbmNlSUQ9InhtcC5paWQ6RDVFNzg0RjY4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDVFNzg0Rjc4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiLz4gPHhtcE1NOkhpc3Rvcnk+ID
- xyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWFjNmExMmQtOWRkMC1kYzRhLTg1MGEtODEyNDQ4Y2M3MmFiIiBzdEV2dDp3aGVuPSIyMDE5LTA5LTIxVDE2OjIxO
- jQzKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlE
- PSJ4bXAuaWlkOjBiOWE3MjgzLWRlNmYtZWY0YS1iZjRjLWQ1N2E2MWM5ZGNiYyIgc3RFdnQ6d2hlbj0iMjAxOS0wOS0yMVQxNjoyMTo0MyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTk
- gKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp/HYgsAAAIGSU
- RBVHic7ZwxSgNBFIZnRQLeII2kSGdlmUDqBOsEz5DFwspAbEKqSDoLWc8g9mIfsNQLpAg2uYGQJh5g3sAMs36L8H/luNlJPgb/916WFMfj0TXJpD9q8g0U1uLrx3vtG53UfkdhItEQEg0h0RDFX4RhSsCtX26y9ppdP3lrz5sq6rXTQ
- Rn6kxeSuQGpEw0h0RASDSHREBINkV11WBVGSiXxs51FXbeYd8z12AojhUA1klWJ6ERDSDSERENINMRp7IWhttoKvtiAq4Pt5ttb6w7Oo14basGtgJ0OSu/zT/qj6Hm2TjSERENINIREQ5hhaAXfcrUzb0AG339GJxpCoiEkGkKiISQa
- wpxHN/yYVrDCsbDm1HcP995abFseInZG7Zxa8EaRaAiJhpBoiGLcG2Z9uZqL9UhXShhahL7IBfFCUicaQqIhJBpCoiHMebQ1Yz7rrrM2Cs+t84LLCr6qfci6Zy7lvuUVGDrREBINIdEQEg0h0RDFuDe01rF59OPVV9R1t2+X5rpVYZT
- 7VsY7yqdqH9SCN4VEQ0g0hERDmC34crXz/pkv5h0zIGPDLJfQPqURklQLnhK6OtEQEg0h0RASDRF6UinlHlFdJBWazoW7yLqxOkDn7JDUiYaQaAiJhpBoCImGiP69jlAlkjBPJmfcXjXQ+rygtlfV0SQSDSHREBIN8QufpoVUBslzbQ
- AAAABJRU5ErkJggg=="]]
- local b64_bird3 = [["iVBORw0KGgoAAAANSUhEUgAAAFoAAABACAYAAACa5WD/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGl
- kPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyIC
- AgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZ
- S5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6c3RF
- dnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5
- jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDktMjFUMTY6MDU6MDUrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMD
- E5LTA5LTIxVDE2OjIxOjA3KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA5LTIxVDE2OjIxOjA3KzAyOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUyOTc1OWNkLTM4YmUtMjY0OC1hODc0LTBkMjZmYzA5ZTUyM
- iIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjA3YTFkZjNlLTRiYWMtOGY0OS05OTAyLTE3ZjZiOTZiNzQzZSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkQ1RTc4NEY5ODkxNzExRTNC
- QzgxQzA4NUVCOTc2QzQzIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOml
- uc3RhbmNlSUQ9InhtcC5paWQ6RDVFNzg0RjY4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDVFNzg0Rjc4OTE3MTFFM0JDODFDMDg1RUI5NzZDNDMiLz4gPHhtcE1NOkhpc3Rvcnk+ID
- xyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWIyMDNlNDMtY2JjNy03MzQ2LTgyZTAtNDhhNjM1NjI3NWY3IiBzdEV2dDp3aGVuPSIyMDE5LTA5LTIxVDE2OjIxO
- jA3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlE
- PSJ4bXAuaWlkOjUyOTc1OWNkLTM4YmUtMjY0OC1hODc0LTBkMjZmYzA5ZTUyMiIgc3RFdnQ6d2hlbj0iMjAxOS0wOS0yMVQxNjoyMTowNyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTk
- gKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl0KsJwAAAIISU
- RBVHic7ZyxagJBFEXHIEL+IE2wsEtlGcE6Yh3JN0RSWEViGrGJwc4imG8I6SVtCKSMP5DCLn8QsDG98x6MjHuWwD3luLuzHB7eN7Orle12G8qk1+qUeQMVa/D18+3gEx0d/IrCRKIhJBpCoiEqRYThPgE3e7nJmmt49RSNPX8sks69b
- ve9j6KQzA1IVTSERENINIREQ0g0RHbXYXUY+3QSv9/DpOPGo7o5ntph7IPTjWR1IqpoCImGkGgIiYYww7CIPeLJdJ11vheGt4/30VijfZp0TW8JbgVsakCGYIekKhpCoiEkGkKiIaq5K7tUrH3jEPJD8r+gioaQaAiJhpBoCImGqFIT
- eZ2M1Y1YnYjXnYzvHqKx1GV5EXvZHqpoCImGkGgIiYYww9B6YHrcmGVN5D+EtfeZU7FC0grIgjD37XutTrRPrYqGkGgIiYaQaIjK5fmFNR59yRf1cLWI6y5ONlnXzKX/U4vGVNEQEg0h0RASDSHREOYSfDJdR0vI8aie9ZrYvLuyP3h
- PO3+wbJrjVodhpT7J4mSjJXhZSDSERENINIT3frR1rBmGbshBWCFJLcG90FUYlohEQ0g0hERDJP9y1gnIEJyQ3IUMTW8VeWis0AtB+9GlItEQEg0h0RASDZH9fvS8uzKTd5fBson9NaZ1T7WvM2p6E1U0hERDSDSEREP8AXwJhj3TQT
- MFAAAAAElFTkSuQmCC"]]
- local b64_scoreboard = [["iVBORw0KGgoAAAANSUhEUgAAAKwAAADkCAYAAAAFOs/ZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eH
- BhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgM
- jAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6
- eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXN
- vdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozREU4MjY1RThDNEIxMUUzOEVFQUEwMjc3MzYxQjhGNSIgeG1wTU06RG9jdW
- 1lbnRJRD0ieG1wLmRpZDozREU4MjY1RjhDNEIxMUUzOEVFQUEwMjc3MzYxQjhGNSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjNERTgyNjVDOEM0QjExRTM4RUVBQTAyNzczNjFCOEY1IiBzd
- FJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNERTgyNjVEOEM0QjExRTM4RUVBQTAyNzczNjFCOEY1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+tJ0MTQAABBtJ
- REFUeNrs3b9qU2EYwOGTmqpIQOmgkwFXryBLcQxdMmVy6uAVVOhFFOwVOGRy6tSldJQuvQJXoZsOASGIFqq2dEnehPPlM6f51+cBh5PkHOLhx8fL56mtFUVRK0aljjeGD7qt9mUBUzo6P30YXvoTjv+WHW+4hawSwSJYuCv1CTPqg5w
- Z9ePxW3eR6XWKy8wZ98oKi5EABAvBzfy6WTazpmbUfn/gLjK1ra1G6fvvOp9KZ1orLEYCECwUt/uwm2ZU5uU/etq0wmIkAMFCUOu22iPPG8Z9VzMs8xT3aeO+rBUWIwEIForbfVgzK0sj1Z8VFiMBCBYEi2BBsCBYBAuCBcEiWBAsCB
- bBgmAhqK/aF272zrI+f7G7PdP1Fn3+oq9nhQXBIlgww84+sw72dvIuEH5GKPt6M57fPDzJmhnnfb1ixX6GzwqLYEGwsAozbJzBGmGGi3L3FWf9fxhS5zcWfL3U/erbhwXBgmAxw1ZubKareJ9y2aSeBRjbV03MvPZhQbAgWMywyzfT5
- c548f1m5r5u7vlVz5xxXzW1j2ofFgQLgmUNjf2eroNeZ6m+YPy9TSm5zwakrp+6XtXnz/r5u75f87a/e2yFxUgAgoVo9Z4lWLLrz/v81OfX/fesWWERLAgWBItgQbAgWAQLggXBIlgQLAgWwYJgQbAIFgQLgkWwIFgQLIIFwYJgESwI
- FgSLYEGwIFgEC4IFwSJYECwIFsGCYEGwCBYEC4JFsCBYECyCBcGCYBEsCBYEi2BBsCBYBAuCBcEiWFg69fv2F272zrI+f7G7vVLXq/r7WGFBsAgWzLDLZ7C3Uz5THp5kzXyp6xX9QenMmTw/cb14fiN8/7Hrh/OtsCBYBAtm2OUXZ7z
- kTJqY+VLX64cZODVzRqkZuh++XyPxvhUWBAuCxQy7elL7nnGm7Fe8Dzs2U1a8L2yFBcGCYDHDrp9F78PmPr+66s8CWGERLAgWzLD5cp83Tf3be9XPr876fdZ95rXCIlgQLNzHGbbq50Fnvd5dP5/aX7N9WissggXBgmARLAgWBItgQb
- AgWAQLggXBIlgQLAgWwYJgQbAIFgQLgkWwIFgQLIIFwYJgESwIFgSLYEGwIFgEC4IFwSJYECwIFsGCYEGwCBYEC4JFsCBYECyCBcGCYBEsCBYEi2BBsCBYBAuCBcEiWBAszKgeX/j2/cfI8YvnT90l5ib2Z4XFSACChQlq139eDr/Qb
- bUvho8Peh13ibnZ3z0eOT46P21aYTESgGAhuNmHvSr7QGpfzD4tOVI9TXBlhcVIAIKF4GYf9nl47cnwQbfV/lp2gfcHb9xFpvZh/3Pp+0fnp6/CSz+tsBgJQLAwYYZ9VjbDXnscjh+FGfeL28i0rmfU1+Gl3+H4lxkWIwEIFhL+CTAA
- KkE/3rhUwTsAAAAASUVORK5CYII="]]
- local b64_ground = [["iVBORw0KGgoAAAANSUhEUgAAAfQAAAAwCAMAAADQBniuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEjUExURd7YlXO/LlKEIU94HsWgQt/cnN3SjE07RlY1RuOtUdfnhu3/jn/FN3K9LlJ6I
- ZbkVXXDL1J7IaPoXu7/j+//kO//j9rpiJ3nWnTAL2q6JtrpidvqiXK/LXC9K9/cm5zmWaDpXVaJJprjV5XiUZbgVN3XlN3XldzWk2a2InvCM2/ALXXBMITKPafsYtrqie7/jpnnWKXqYNnpiJroWX3IOOb3jKDlWtjnhlY2Rn7FN6br
- YWy8KZLgUXPCMKDqXpvlWJnjVpfhVGy4Jmy7KGq6J3TCLuv8jZrkV57oW3bEMHK8LWu2Jn3LON7WklGEIVF6IJ7qWqPvX1KFIpfgVZ3mWlKBJFaIJaDsXJ7pW3PBLd7VkHTDLnK/LnC7K3K9LVWIJVKCJK1/U88AAAECSURBVHja7dx
- VVsNgFADhG4K0tCFJ3R13d4q7t1Ac9r8Kfnjg5LADuPO9zSZG+qCOrISCKA0lqdRy/5e5qVwun6c0lCxG4olkMhGfjhiHlIaS1ejSWiw2OTsxGjUoDSWb6xvzrjvjjo1ks/t7lIaS7Z1meiu9MJ4pWFaxSGkoqVTK5eOjzK5lvBQoDS
- UPnZvr8xPvwPMen+t1SkNJrdZuOWenjuO8vjUalIaSu2r1/vay69v7B6WhxDau/AHD922b0lDSDXUkDHVELnp/PFEqSnoCSiVKQwkAAAD+gyFKSQEAAAD4g4YpJRUwSCkpAAAAAAAAAAAAAADwWwjqCCNsfT4B4gpeiH8hxtQAAAAAS
- UVORK5CYII="]]
- local b64_pipe = [["iVBORw0KGgoAAAANSUhEUgAAAIAAAAEgCAYAAAB8VXuRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF7GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlk
- PSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICA
- gICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2
- JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb
- 3VyY2VFdmVudCMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5j
- b20vcGhvdG9zaG9wLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODE0NUY0MkQ5OEE1OTg3NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3Mzg1MThFNjg5NDgxMUUzOTk
- zRkJDMEM4MDJDNEY2OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0ZjM0NjNhYy04ZmIwLWU5NGUtYjgyMy02YjdjMTYxOTU0MWMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG
- 1wOkNyZWF0ZURhdGU9IjIwMTktMDktMjFUMTY6MDY6MDMrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTA5LTIxVDE2OjE5OjA5KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA5LTIxVDE2OjE5OjA5KzAyOjAwIiBkY
- zpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6
- MDQ4MDExNzQwNzIwNjgxMTgxNDVGNDJEOThBNTk4NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTgxNDVGNDJEOThBNTk4NzYiLz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN
- 0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGYzNDYzYWMtOGZiMC1lOTRlLWI4MjMtNmI3YzE2MTk1NDFjIiBzdEV2dDp3aGVuPSIyMDE5LTA5LTIxVDE2OjE5OjA5KzAyOjAwIiBzdEV2dDpzb2
- Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4b
- XBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+etF3rQAABB9JREFUeJzt3L9rE2Ecx/HPk8vg4CLi7CgUN0fBWcHZ/9PBvaN/QEGwLkJnfyBqEnL3dbg2TZumNCKt5P1+wS3hucvlyfseQi6kvXn+8kuqPUgqw1DpZ5VXbx+mu9eSSlqX
- 9DXk9aNnmabLui6THH47yvfl7yRJpbKLybTl0/HHzBfzcf+qVFUODp4mQ0uStNbSWsuH46NUX6tx+6qG5PPhj7TJxcdb1/L4xf3UkGScmix/DTl5/3Nj7JWWk9S7J8l0OD9ma1+nqbPDnetnpxO8CqAy7/v0l0Z2rbKcVfrl6RuzYwA
- 1TYZFSy3GA1eNWz+rZDg7yXGrRUv1WY3bVzUk6SfZnMpxntYDqEXbMvYK/WYlVXWjdrTHDADOAOAMAM4A4AwAzgDgDADOAOAMAM4A4AwAzgDgDADOAOAMAG6SjD+4EJMrAJwBwBkAnAHAGQCcAcAZAJwBwBkAnAHAGQCcAcAZAJwBwB
- kAnAHAGQCcAcBN7/oE0pLNfym6Zuy+u+41tlycr38wH64AcNtXgJtWtssVvIv15ydc+XfEFQDOAOAMAM4A4AwAzgDgDADOAOD8IgjOFQDOAOC8G/i/8W6gbtPWFeAmn8Hq0ti/sW1fPwPeDlcAOAOA83sAOFcAOAOAMwA4A4AzADgDg
- DMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4Az
- ADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA
- 4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOA
- OAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDg
- DMAOAOAMwA4A4AzADgDgDMAOAOAMwA4A4AzADgDgDMAOAOAMwC4PznyeNSc74iDAAAAAElFTkSuQmCC"]]
- local b64_pipetop = [["iVBORw0KGgoAAAANSUhEUgAAAIoAAABACAYAAADF9O+2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGzmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iI
- GlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIy
- ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmF
- kb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUm
- Vzb3VyY2VFdmVudCMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZ
- S5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODE0NUY0MkQ5OEE1OTg3NiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmRh
- YmQwZTg1LWRjNzEtZDY0YS1iZjA1LTczY2M3ZjMzMjkxYyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxYzA1ZTIyOC04NmUyLTM3NGItOTI0NS0zZDRjNzgyNzEzMjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9
- wIENTNiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDktMjFUMTY6MDY6MDMrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTA5LTIxVDE2OjE2OjQ5KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA5LT
- IxVDE2OjE2OjQ5KzAyOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmO
- mluc3RhbmNlSUQ9InhtcC5paWQ6MDQ4MDExNzQwNzIwNjgxMTgxNDVGNDJEOThBNTk4NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTgxNDVGNDJEOThBNTk4NzYiLz4gPHhtcE1NOkhpc3Rvcnk+
- IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjA5MjZkNDItYWMzOS1jODQ5LWI5MjgtZjdhOTFjYjAwMmY5IiBzdEV2dDp3aGVuPSIyMDE5LTA5LTIxVDE2OjE
- 2OjQ5KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZU
- lEPSJ4bXAuaWlkOjFjMDVlMjI4LTg2ZTItMzc0Yi05MjQ1LTNkNGM3ODI3MTMyMyIgc3RFdnQ6d2hlbj0iMjAxOS0wOS0yMVQxNjoxNjo0OSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwM
- TkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqU/ApgAAARn
- SURBVHic7Z1LbxxFFIXPre7x5IEUFpFAAjaRggUsIjYoEgt2IPZI/Br+F7BgQbZIJIsgJVnx2FhiAZIje8x0HRZd3dPVXe1cY8eMPeeT7H7d7q6+debWnZqZKvvq4ReEEK8g/N8FEFcDCUW4kFCEi7q413wnO82uLaXkbs4nW5kInqF
- QtYU2qJAESMCI9745QFimqxgQY8T+/Q8Rkq2ZoWHE5289QG1VMtst2RDEdwdP+qdm8vrNag+f3f2o3zYYCOLbg58RUgDnJcsmxohnL37p648kYkP8/uNLpOrbsA7gD/eAmNdnHlEIWCcQ5vv7v8E+cktfKZcA+3/TA2O/zNpeFuP669
- cttwGAowWw1wBHdXZYOYpwMc1RbLA0ZKqyJCszwJICQ7BkvmtNT/vfQv7cnY+GfuHo2GXTl7C7PwHEtDKuNiuHvnIyOzh787gGs7Rl1re9nLnwhCuf+eUwxW/acLtdkpyxZWZ7zgLMYjZq+owzTY+fqVAI3L+3j/p2EkVAm7i+/QC1t
- eYGQ2UB3x88wZpNOi2eUvAKz188RYytDdk6c//9D2C2SZDbZcCz5097Z4+dvk2Y2cTfBPCYj0vGF3pvNsSvjw43USoVpL4V8O4nt8GuOgyIDfHbo0NYZZmt1XALZiKUqhqnwZtrD18JBEct07wjDCkKjZyV4lS/PrS9qsyV/3XIvfXp
- dF/ZGOfqz1AyK1wUc5Thq99s9xLVneEMYU4RRbiQUIQLCUW4kFCECwlFuJBQhAsJRbio+468Hf7KgHg14Zw9u2JHUNMjXEgowoWEIlxIKMKFhCJcSCjChYQiXEgowoWEIlxIKMKFhCLKGLMfg0kowoWEIlxIKMKFhCJcSCjChYQiXEg
- owoWEIlxIKMLFzIhLZSwffwlAPtLQPJsBdLplvz46r7/uFRhIB/D/cuGin6JzS+8f5geGfpvanP1+iijChYQiXEgowoWEIlxIKMKFhCJcSCjChYQiXEgowsWkZ3Z90mB90gCLfIjz49UJGmt7WLshztcnzWCI8/nuPjNDXLdzxACpZx
- Zs7zMYXx8AgrG1jVe3Z7Y0jMiF98zOjShPZP4DkK3/V+zrT79kdzGSwCKCH/8B3Fkli/YmkaOR9glUFvpJA06FAGzsQENknA7JTQKmIZA9WGVFBXIiDPPP7HG4B/70DnBctRWWKrj4WU+1CEDdzbnCZFiuOu9MEaXIUCGUx43f8iiy7
- fSTIww5p0uLQmEk0KnyIqcOKd1Lorh4XoNLy58eE/C1KeLaMSOy4nw9+PMm8HKv3fZO3CSuB8d1O/HkKE5MhbIO4Iu7l1QqsZUUGpNy0xMURXaaQtoxk6MoPxE59XACpw69E9ltSl0W9Y03bvwFbDrcSGJ1tLrDZhBWCCzfDLBlfvLS
- alSjnhwCWMU1uu/Jzk9JOVNIAv80683b85SGV4tF9gAGoGkaxCZmdteV5mTwhF3PRQCqxdR2vcImzzj1q8wGrPI5JC0Yl7eWf4/F8i9JPpgeVr2TrQAAAABJRU5ErkJggg=="]]
- local b64_pipebot = [[iVBORw0KGgoAAAANSUhEUgAAAIoAAABACAIAAABKlnjhAAAEH0lEQVR4nO2czWsTQRTA35udJEZBWmkFb4IgBasevHgR1IP+AXr06sH/UE8eBPGkF8GP0iJKEYu0CFbbJDNPdmaymZ1NNo1tk5f2/Wibp
- t3d+fjt290ZMg+fPXoCAGTJATs/t8kQeAhaCwpbUNBCnaEq3hLAvu0BWPDf40CCrumBpf7ekDUaiOh3QwBjjDW2+C9/TKdfUfeCCrJGqdK9fdewUQ2yCPtZ8Q4VLi5f6PdHjt75sZ1v5vTkB6HoMAj7v0rdvgedQ/eYit/08lrHFUeA
- rLrPvEB5i/4fsrSztR3vrgsrJTHCjEgs6LQWKJJmCmFcekWPRRa1PLWUu7+sR1u8vA1tAxJGM2FP05dF6Lrbswujsh4EWPoL5939X/RMn98N+LqQP2D0Y6h67+mLET3Tp3JjSfWgQlBuq/Aj3YNqRyTVxz9ErN/gpJG0L+m/CVuf6jF
- dCz031nHRYykalxBkqKjm0YESn2jJlvQQpbpOFphVzmZTGtWhmqy9kR4n4u7TVX0O/QDYkL13cbWB2odRhurl1vsu9UbFECKub3w2xoSBFNDVKyvgdHgpCtXa+kdr7QzD6EhP7vK+Fjbf/AFFxYEabXXp1lkbZknysf/m6130F6eDlV
- SKHt3M3FfQg4RnWs1Yj25mYRg7Qo/SSM5ELofyAyZ6lEb/7D6ri9wx6jGVPyHk7TX9kqobjGPCYBOmi+hhjehhjehhjehhjehhjehhjehhjehhTWXGugINPuxAQydJC9DJTibV/PbxXqxm3Y6yKm6WstS6aMYk7wKsFDlulkKihzWih
- zWihzWihzWihzWihzWihzWihzWihzXjZw2EaRN9GEqihzWihzWihzWihzWihzWihzWihzWihzWihzWihzValihyRtNgtZDADrm4sUb0sEb0sEb0sEb0sEb0sEb0sCb9rMEg7R6dggQrMwfHDDklelhTih6fbyUGowU66BawFKE1tFVF
- 0ksKv6WpQuMNpt8vaf6lanaSw609Ci3uT8MMaWPUg3CA5UVpPre1jU+qRd6GsRZ7mDXCoipD9v7S9abWNYuwHizfSA5Y2eDmuDYeFwT04vs7n5XI92JbNe8sXsPM1xQJ6Pn3typTYxNvDYdgZSX9B+LgQHkyIftBaeXN2R59e7WL3sC
- I0qqfcwt+g34YpIAlotwapavd6mvMjFD/0Hf5WVesWQuvWJdza3Jo0FP5kTE6ZQ9QTllPEXc+IZ9LHEY2HMtr8vmV5jHplwsI9M0JDXXNKFrkIybe4Igr4HuyyNPti42vdZUzQx4NWBNFDwJ1BnkQQxhi9NZdSTHaZP5I6o2DRwEsvR
- wPcX+GIqlUfLsLnayUsPDx7YdJjWuY90SG9cncZnCvHFde5dGgdocTNkzl3xy597BG9LBG9PAFAP4B/yl7rE8EjuEAAAAASUVORK5CYII=]]
- local b64_restart = [["iVBORw0KGgoAAAANSUhEUgAAANYAAABLCAIAAACDee7kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY
- 2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAx
- Mi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1
- wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdX
- JjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNTc1RDdFODg5Q0IxMUUzOTkzRkJDMEM4MDJDNEY2OCIgeG1wTU06RG9jdW1lb
- nRJRD0ieG1wLmRpZDoyNTc1RDdFOTg5Q0IxMUUzOTkzRkJDMEM4MDJDNEY2OCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI1NzVEN0U2ODlDQjExRTM5OTNGQkMwQzgwMkM0RjY4IiBzdFJl
- Zjpkb2N1bWVudElEPSJ4bXAuZGlkOjI1NzVEN0U3ODlDQjExRTM5OTNGQkMwQzgwMkM0RjY4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+jkUoGQAACkVJREF
- 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
- AvUzdK5D3AAMAAAAASUVORK5CYII="]]
- local b64_logo = [[iVBORw0KGgoAAAANSUhEUgAAAGQAAAAbCAYAAACKlipAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i
- 77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo
- 1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbn
- MuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtc
- DpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NzU4N0YwNjk3N0IxMUUzOTQ2MUFEMjgxODNENDFCNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRp
- ZDo1NzU4N0YwNzk3N0IxMUUzOTQ2MUFEMjgxODNENDFCNiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjVBMDUwRUY1OTc0NzExRTM5NDYxQUQyODE4M0Q0MUI2IiBzdFJlZjpkb2N1bWVudEl
- EPSJ4bXAuZGlkOjVBMDUwRUY2OTc0NzExRTM5NDYxQUQyODE4M0Q0MUI2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ZXtWvQAADZVJREFUeNrkWgd0FOUWvj
- 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]]
- --Decode base64 textures
- local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- local function dec(data)
- data = string.gsub(data, '[^'..b..'=]', '')
- return (data:gsub('.', function(x)
- if (x == '=') then return '' end
- local r,f='',(b:find(x)-1)
- for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
- return r;
- end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
- if (#x ~= 8) then return '' end
- local c=0
- for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
- return string.char(c)
- end))
- end
- local defaulttexture = nil
- local backgrounddat = dec(b64_background)
- local backgroundrgba, backgroundw, backgroundh = common.DecodePNG(backgrounddat)
- local backgroundtexture = draw.CreateTexture(backgroundrgba, backgroundw, backgroundh)
- local bird1dat = dec(b64_bird1)
- local bird1rgba, bird1w, bird1h = common.DecodePNG(bird1dat)
- local bird1texture = draw.CreateTexture(bird1rgba, bird1w, bird1h)
- local bird2dat = dec(b64_bird2)
- local bird2rgba, bird2w, bird2h = common.DecodePNG(bird2dat)
- local bird2texture = draw.CreateTexture(bird2rgba, bird2w, bird2h)
- local bird3dat = dec(b64_bird3)
- local bird3rgba, bird3w, bird3h = common.DecodePNG(bird3dat)
- local bird3texture = draw.CreateTexture(bird3rgba, bird3w, bird3h)
- local pipedat = dec(b64_pipe)
- local pipergba, pipew, pipeh = common.DecodePNG(pipedat)
- local pipetexture = draw.CreateTexture(pipergba, pipew, pipeh)
- local pipetopdat = dec(b64_pipetop)
- local pipetoprgba, pipetopw, pipetoph = common.DecodePNG(pipetopdat)
- local pipetoptexture = draw.CreateTexture(pipetoprgba, pipetopw, pipetoph)
- local restartdat = dec(b64_restart)
- local restartrgba, restartw, restarth = common.DecodePNG(restartdat)
- local restarttexture = draw.CreateTexture(restartrgba, restartw, restarth)
- local grounddat = dec(b64_ground)
- local groundrgba, groundw, groundh = common.DecodePNG(grounddat)
- local groundtexture = draw.CreateTexture(groundrgba, groundw, groundh)
- local scoreboarddat = dec(b64_scoreboard)
- local scoreboardrgba, scoreboardw, scoreboardh = common.DecodePNG(scoreboarddat)
- local scoreboardtexture = draw.CreateTexture(scoreboardrgba, scoreboardw, scoreboardh)
- local pipebotdat = dec(b64_pipebot)
- local pipebotrgba, pipebotw, pipeboth = common.DecodePNG(pipebotdat)
- local pipebottexture = draw.CreateTexture(pipebotrgba, pipebotw, pipeboth)
- local logodat = dec(b64_logo)
- local logorgba, logow, logoh = common.DecodePNG(logodat)
- local logotexture = draw.CreateTexture(logorgba, logow, logoh)
- local windowx, windowy, windowsizex, windowsizey = 200,200,384,448
- local bird = {}
- local pipes = {}
- local basevel = -750
- local jumpcheck, lost, started, is_dragging = false, false, false, false
- local starttextpos = 300
- local birdstep, groundanim, score, newscore, starttime, highscore = 0, 0, 0, 0, 0, 0
- local dragging_offset_x, dragging_offset_x, prevmousex, prevmousey, mx, my = 0, 0, 0, 0, 0, 0
- local active = gui.Checkbox(gui.Reference("MISC", "General", "Extra"), "active", "FlappyBird", 1)
- local font1 = draw.CreateFont("Bahnschrift Bold", 35)
- local font2 = draw.CreateFont("Bahnschrift Bold", 25)
- local font3 = draw.CreateFont("Bahnschrift Bold", 45)
- local font4 = draw.CreateFont("Arial", 15)
- local icons = draw.CreateFont("Webdings", 30)
- local function inRect(x,y,x1,y1,x2,y2)
- if x >= x1 and x <= x2 then
- if y >= y1 and y <= y2 then
- return true
- else
- return false
- end
- else
- return false
- end
- end
- function dragHandler()
- local mouse_x, mouse_y = input.GetMousePos();
- if (is_dragging == true) then
- windowx = mouse_x - dragging_offset_x;
- windowy = mouse_y - dragging_offset_y;
- if prevmousex ~= mouse_x then
- bird.posx = bird.posx + (mouse_x - prevmousex)
- for i, v in ipairs(pipes) do
- v.x = v.x + (mouse_x - prevmousex)
- end
- prevmousex = mouse_x
- end
- if prevmousey ~= mouse_y then
- bird.posy = bird.posy + (mouse_y - prevmousey)
- for i, v in ipairs(pipes) do
- v.y = v.y + (mouse_y - prevmousey)
- end
- prevmousey = mouse_y
- end
- return;
- end
- if inRect(mouse_x, mouse_y, windowx - 100, windowy - 48, windowx + windowsizex + 100, windowy) and not inRect(mx, my, windowx + windowsizex + 41, windowy - 35, windowx + windowsizex + 41 + 20, windowy - 35 + 20) then
- is_dragging = true;
- dragging_offset_x = mouse_x - windowx;
- dragging_offset_y = mouse_y - windowy;
- prevmousex = mouse_x
- prevmousey = mouse_y
- return;
- end
- end
- local function setupbird()
- bird.posx = windowx + (windowsizex/6)
- bird.posy = windowy + (windowsizey/2)
- bird.vel = 0
- end
- setupbird()
- local function reset()
- bird = {}
- pipes = {}
- jumpcheck, lost, started = false, false, false
- starttextpos = 300
- score, newscore = 0, 0
- setupbird()
- end
- local function readscore()
- local f = file.Open("LUA_FlappyBird_HighScore.dat", "r")
- if f ~= nil then
- local savedscore = f:Read()
- f:Close()
- if tonumber(savedscore) ~= nil then
- highscore = tonumber(savedscore)
- end
- elseif f == nil then
- local newfile = file.Open("LUA_FlappyBird_HighScore.dat", "w")
- newfile:Close()
- end
- end
- readscore()
- local function writescore()
- local f = file.Open("LUA_FlappyBird_HighScore.dat", "w")
- local tempscore = ""
- tempscore = tempscore .. highscore
- f:Write(tempscore)
- f:Close()
- end
- local function collision(cx, cy, cr, px, py)
- if pipes[1] == nil or bird.posx == nil or bird.posy == nil then
- return false
- else
- local rxt, ryt, rxb, ryb = px - 35 , py - 48, px - 35, py + 48
- local rwt, rht, rwb, rhb = 70, py - 48 - windowy, 70, windowy + windowsizey - py - 48
- if ryt - cy > cy - ryb then
- local testx, testy = rxt, ryt
- local distancefront = math.sqrt((cx - rxt)^2 + (cy - ryt)^2)
- local distanceback = math.sqrt((cx - (rxt + rwt))^2 + (cy - ryt)^2)
- if distancefront <= cr then
- return true
- elseif cy < ryt and cx + cr >= rxt and cx - cr < rxt + rwt then
- return true
- elseif cx > rxt and cy - cr <= ryt and cx < rxt + rwt then
- return true
- elseif distanceback <= cr then
- return true
- end
- elseif ryt - cy < cy - ryb then
- local testx, testy = rxb, ryb
- local distancefront = math.sqrt((cx - rxb)^2 + (cy - ryb)^2)
- local distanceback = math.sqrt((cx - (rxb + rwb))^2 + (cy - ryb)^2)
- if distancefront <= cr then
- return true
- elseif cy > ryb and cx + cr >= rxb and cx - cr < rxb + rwb then
- return true
- elseif cx > rxb and cy + cr >= ryb and cx < rxb + rwb then
- return true
- elseif distanceback <= cr then
- return true
- end
- else
- return false
- end
- end
- end
- local function frame()
- if active:GetValue() then
- mx, my = input.GetMousePos()
- local dt = globals.AbsoluteFrameTime()
- if not lost then
- if birdstep >= 4 then
- birdstep = 0
- end
- birdstep = birdstep + (dt*7)
- end
- if started and not lost then
- if input.IsButtonPressed(32) and not jumpcheck then
- bird.vel = 440
- jumpcheck = true
- end
- if input.IsButtonReleased(32) and jumpcheck then
- jumpcheck = false
- end
- if bird.vel <= basevel then
- bird.vel = basevel
- else
- bird.vel = bird.vel - (1750 * dt)
- end
- bird.posy = bird.posy - (bird.vel * dt)
- if bird.posy > windowy + windowsizey - 16 then
- if pipes[1] == nil then
- local pos = {}
- pos.x = windowx + windowsizex + 35
- pos.y = math.random(windowy + 100, windowy + windowsizey - 100)
- table.insert(pipes, pos)
- end
- lost = true
- bird.posy = windowy + windowsizey - 16
- end
- if bird.posy < windowy + 16 then
- bird.posy = windowy + 16
- end
- if groundanim >= 70 then
- groundanim = 0
- end
- if #pipes == 0 and globals.CurTime() >= starttime + 1 then
- local pos = {}
- pos.x = windowx + windowsizex + 35
- pos.y = math.random(windowy + 100, windowy + windowsizey - 100)
- table.insert(pipes, pos)
- end
- for i, v in ipairs(pipes) do
- v.x = v.x - (dt*175)
- if i == #pipes and v.x <= windowx + windowsizex + 35 - 275 then
- local pos = {}
- pos.x = windowx + windowsizex + 35
- ::retry::
- pos.y = math.random(windowy + 100, windowy + windowsizey - 100)
- if math.abs(pos.y - v.y) >= 175 then
- goto retry
- elseif math.abs(pos.y - v.y) <= 75 then
- goto retry
- end
- table.insert(pipes, pos)
- end
- if v.x <= bird.posx - 35 and newscore == 0 then
- score = score + 1
- newscore = 1
- end
- if v.x <= windowx - 34 then
- table.remove(pipes, i)
- newscore = 0
- end
- end
- groundanim = groundanim + (dt*175)
- if pipes[1] ~= nil then
- if collision(bird.posx, bird.posy, 16, pipes[1].x, pipes[1].y) then
- lost = true
- end
- end
- if starttextpos > 0 then
- starttextpos = starttextpos - (dt*175)
- end
- elseif not started and not lost then
- if bird.posy >= windowy + (windowsizey / 2) - 7 then
- bird.vel = bird.vel + (100 * dt)
- elseif bird.posy <= windowy + (windowsizey / 2) + 7 then
- bird.vel = bird.vel - (100 * dt)
- end
- bird.posy = bird.posy - (bird.vel * dt)
- if input.IsButtonPressed(32) then
- started = true
- starttime = globals.CurTime()
- bird.vel = 440
- jumpcheck = true
- end
- end
- if lost then
- if score > highscore then
- highscore = score
- writescore()
- end
- if bird.vel <= basevel then
- bird.vel = basevel
- else
- bird.vel = bird.vel - (1750 * dt)
- end
- bird.posy = bird.posy - (bird.vel * dt)
- if bird.posx + 12 > pipes[1].x - 35 and bird.posx - 12 < pipes[1].x + 35 then
- if bird.posy + 16 > pipes[1].y + 48 then
- bird.posy = pipes[1].y + 48 - 16
- end
- if bird.posy - 16 < pipes[1].y - 48 then
- bird.posy = pipes[1].y - 48 + 16
- end
- else
- if bird.posy > windowy + windowsizey - 16 then
- bird.posy = windowy + windowsizey - 16
- end
- if bird.posy < windowy + 16 then
- bird.posy = windowy + 16
- end
- end
- if inRect(mx, my, windowx + windowsizex / 2 - 71, windowy + windowsizey / 2 + 114, windowx + windowsizex / 2 + 71, windowy + windowsizey / 2 + 114 + 50) then
- if input.IsButtonReleased(1) then
- reset()
- end
- end
- if input.IsButtonPressed(8) then
- reset()
- end
- end
- end
- end
- callbacks.Register("Draw", frame)
- local function drawing()
- if active:GetValue() then
- local mousedown = input.IsButtonDown(1);
- if (is_dragging == true and mousedown == false) then
- is_dragging = false;
- dragging_offset_x = 0;
- dragging_offset_y = 0;
- end
- if (mousedown) then
- dragHandler();
- end
- draw.Color(255,255,255,255)
- draw.SetTexture(backgroundtexture)
- draw.FilledRect(windowx, windowy, windowx + windowsizex, windowy + windowsizey)
- for i,v in ipairs(pipes) do
- draw.SetTexture(pipetoptexture)
- draw.FilledRect(v.x - 35, v.y + 48, v.x + 35, v.y + 80)
- draw.SetTexture(pipebottexture)
- draw.FilledRect(v.x - 35, v.y - 80, v.x + 35, v.y - 48)
- draw.SetTexture(pipetexture)
- draw.FilledRect(v.x - 32, v.y + 80, v.x + 32, windowy + windowsizey)
- draw.FilledRect(v.x - 32, windowy, v.x + 32, v.y - 80)
- end
- if birdstep < 1 then
- draw.SetTexture(bird1texture)
- elseif birdstep >= 1 and birdstep < 2 then
- draw.SetTexture(bird2texture)
- elseif birdstep >= 2 and birdstep < 3 then
- draw.SetTexture(bird3texture)
- elseif birdstep >= 3 then
- draw.SetTexture(bird2texture)
- end
- draw.FilledRect(bird.posx - 23, bird.posy - 16, bird.posx + 22, bird.posy + 16)
- draw.Color(255,255,255,255)
- draw.SetTexture(pipetexture)
- draw.FilledRect(windowx - 96, windowy, windowx, windowy + windowsizey)
- draw.FilledRect(windowx + windowsizex, windowy, windowx + windowsizex + 96, windowy + windowsizey)
- draw.SetTexture(pipetoptexture)
- draw.FilledRect(windowx - 100, windowy - 48, windowx + 4, windowy )
- draw.FilledRect(windowx + windowsizex - 4, windowy - 48, windowx + windowsizex + 100, windowy)
- if inRect(mx, my, windowx + windowsizex + 41, windowy - 35, windowx + windowsizex + 41 + 20, windowy - 35 + 20) then
- if input.IsButtonDown(1) then
- draw.Color(0,0,0,150)
- else
- draw.Color(0,0,0,75)
- end
- if input.IsButtonReleased(1) then
- active:SetValue(false)
- end
- else
- draw.Color(0,0,0,25)
- end
- draw.SetFont(icons)
- draw.TextShadow(windowx + windowsizex + 38, windowy - 37 , "r")
- draw.Color(255,255,255,255)
- draw.SetTexture(groundtexture)
- draw.FilledRect(windowx - 20 - groundanim ,windowy + windowsizey, windowx + 480 - groundanim ,windowy + windowsizey + 48)
- draw.SetTexture()
- if lost then
- draw.Color(0,0,0,100)
- draw.FilledRect(windowx, windowy, windowx + windowsizex, windowy + windowsizey + 48)
- end
- draw.Color(85,58,73,255)
- draw.FilledRect(windowx - 50 ,windowy + windowsizey + 44, windowx + 450 ,windowy + windowsizey + 48)
- if starttextpos > 0 then
- if starttextpos > 250 then
- draw.Color(0,0,0,75)
- draw.SetFont(font4)
- draw.Text(windowx + 9 + starttextpos - 300, windowy + windowsizey + 15, "Made by")
- draw.Text(windowx + 5 + starttextpos - 300, windowy + windowsizey + 27, "Cheeseot")
- end
- draw.Color(255,255,255,255)
- draw.SetFont(font2)
- if starttextpos > 150 then
- draw.TextShadow(windowx + (windowsizex / 2) - draw.GetTextSize("Press SPACE to start") / 2 - 300 + starttextpos, windowy + windowsizey + 15, "Press " )
- end
- if starttextpos > 75 then
- draw.TextShadow(windowx + (windowsizex / 2) - draw.GetTextSize("SPACE to start") / 2 + draw.GetTextSize("Press ") / 2 - 300 + starttextpos, windowy + windowsizey + 15, "SPACE " )
- end
- draw.TextShadow(windowx + (windowsizex / 2) - draw.GetTextSize("to start") / 2 + draw.GetTextSize("Press SPACE ") / 2 - 300 + starttextpos, windowy + windowsizey + 15, "to " )
- draw.TextShadow(windowx + (windowsizex / 2) - draw.GetTextSize("start") / 2 + draw.GetTextSize("Press SPACE to ") / 2 - 300 + starttextpos, windowy + windowsizey + 15, "start" )
- end
- draw.Color(255,255,255,255)
- draw.SetTexture(pipebottexture)
- draw.FilledRect(windowx - 100, windowy + windowsizey, windowx + 4, windowy + windowsizey + 48)
- draw.FilledRect(windowx + windowsizex - 4, windowy + windowsizey, windowx + windowsizex + 100, windowy + windowsizey + 48)
- if not lost then
- draw.SetFont(font1)
- draw.TextShadow(windowx + (windowsizex / 2) - draw.GetTextSize(score), windowy + 5, score)
- else
- draw.SetTexture(scoreboardtexture)
- draw.FilledRect(windowx + windowsizex / 2 - 86, windowy + windowsizey / 2 - 114 - 50, windowx + windowsizex / 2 + 86, windowy + windowsizey / 2 + 114 - 50 )
- draw.SetTexture(restarttexture)
- draw.FilledRect(windowx + windowsizex / 2 - 71, windowy + windowsizey / 2 + 114, windowx + windowsizex / 2 + 71, windowy + windowsizey / 2 + 114 + 50)
- draw.SetFont(font3)
- draw.TextShadow(windowx + windowsizex / 2 - draw.GetTextSize(score) / 2, windowy + 125, score)
- draw.TextShadow(windowx + windowsizex / 2 - draw.GetTextSize(highscore) / 2, windowy + 210, highscore)
- end
- draw.SetTexture(defaulttexture)
- draw.Color(0,0,0,75)
- draw.FilledRect(windowx + 4, windowy - 48, windowx + windowsizex - 4, windowy)
- draw.Color(85,58,73,255)
- draw.FilledRect(windowx - 50 ,windowy - 48, windowx + 450 ,windowy - 44)
- draw.FilledRect(windowx - 50 ,windowy - 2, windowx + 450 ,windowy)
- draw.SetTexture(logotexture)
- draw.Color(255,255,255,255)
- draw.FilledRect(windowx + windowsizex / 2 - 50, windowy - 34, windowx + windowsizex / 2 + 50, windowy - 10)
Add Comment
Please, Sign In to add comment