diff --git a/src/constants/index.ts b/src/constants/index.ts index 0f38f70..e290800 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -48,6 +48,7 @@ export const emptyCharacter: Character = { name: "Ready to Fight", base64EncodedAudio: "//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAABBAABHIAAJDQ0QGRkdISEkKCgsMDAzNzc7Pz9CQkZKSk5SUlZaWl1gYGRpaW1xcXV1eHx8gISEiY2NkJSUmZycoKWlqKirr6+0uLi8v7/Dx8fKzs7S1tba2t7h4eXp6ezw8PP39/r+/v8AAAA8TEFNRTMuOTlyBK8AAAAAAAAAADUgJARAQQABzAAARyDqY0vrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uwxAAACFADQ6CAACGwGyc9hI2UBLmtltu+t1pBgHwOHygIAgCETvWD4YhjxPggcp1vcUiAzLvgh4PvlwQzmsH8MKOJB/h+cxB5C6U/KOD5Anl5cCLesFqJiVVFbkkZAEn1S2qtoGo3rJaua8nobg/TQprQTUEIyRpNpxdRkJjXrKimDLaDhnZCns/X6jnW1Zs/pXO0NSVkY8iz/DzuUQgaKKhYEkn2vMve9o8eKrXJ2oS2pK1j5A8xE8SYtFbCrqD5lRaIh3Q1SO2xkEBjUaugyNPQKIFCIaX5FqYh7QaypRNkdR00N6IWkqyJCVJEi63flZ3Nc0tMQXSvT9Sd9rysrMSPNwsRm2AB5M8Eywx4bIOWFQ6C1hdrNM/vcZzndOVaNhlye9CD16WvPCxhC3LrMkrQzshoMbkaIAAmHaBmDkBkFWDHJ6TkGMYrx6UxoIYkuEkSwoFAkH7UyJZE4PVk6KZQsBCrrqa9JqtPORRcakogggHLnDYDaXcDpnoRnzrWrFlVX0mVPLjlH6U9nuo3uD69iqSnNqGRGgV4aJhiKX6RIkeJEW+S1Bmo9xRBZsBxlsIePUxKthL8zqB2ktLw6DcxyKT/loE6jWXKEa49LKRNc0uWRNKIPb/GnP8+MUBgTJLjSIYSOSvWS1ERrQbcMIG7jwMgoeAw+9VyZFDTP3B1ZM688VWAqUHhKIrR9o5Uy1nGUUTEiyPydEpTDf8GpT7kaAhDSQQAuQsgjRBjO5e6aX6KbruguwGgVvr7OL2r2vSfpOUoW3ATKJYaOHKVDi6Lm9QjiABPliCgaAboMFBWF/UGLNqTz0gMsBLxxt7/+3DE1wAN3JMx7LzFQaMTZfzzDdhA+kfWlZAUeXHgMpHbbay5ovoKwJVqyvVqS/WEgLMSsqGAwCHDVA8wAAzQ8LOIhgz6BXyMzp8yShDLgPMNoQz4bDBw/MNFYAEQxgIhCGTAQxNIrk2abzF4qDhADTQbXKIwHA4WAgiGZhI5kEmHSKZBCpggIDwlMcnEyiARQEmDxYaYXBQ3DJ5rOBKQzYtjZQWNOocBMIzIeBwilBLMOhEwAAzV+wHPGDY8yZCDQKRZaY3bU0JNiTJzIDjBmU6oyyMCkwUCVypuy9ba/5euy3LIu/LMlUVvQDGnDXXKogwyHLM/bvfDcPxZhjsLocSAn8diWQ2/8bywm6OFILmmbijDx5Hs1lC9QKOnFHJGsgOgmaBBlHyAyKygkC7TEF99eE210c0a//tQxP0ADnCfM+w8w4Hbkue1hg5cUV1GP93fDzqq/3Kqa5v5U0ZPhE/57d3m3JZFCAf7rEAiYngq2MAYKLGjslMWmTlTEOQWCgBDCItGoRgQVAnln32eZTR8SqOmYAxpKOYyKsjMJDDDRMuPFzADM3xCMIEQUGmCJBuUEPbpoisb+FIimtYhsrwYv3nSIZgQ51iYt0OKKNtSETYxacBMTMrzBOjEzRrCXLn6KqtQswYIMoCWyEAohAhgQwIt2wAWFjDPAQEM0UaE6K13ijcw4P/7sMTlACT1oTeuaTrsIDSotb0nJSsLRrbdxUYwV5YQIBDqPZF4/Z5Vp73bkOVl0wxG84rNT0mqUvOzktq5+P91Pfl+aq71/8z7Xi+SNNwAwXWNKk5U+SJyuv6hU10sUgSShSf26QGJtp7cklMgv47SskFiRn5953Bgis6Zf2ZAKEu/fQTPC34LAigF6WDqzgZywbEGTCw0u6eMhAfrR4enIGYgHlhataLDBkrWNIpse8IFVQ2FELRIrJhpms//5pi9RzIBCF8ZbKGUs8Y6scJUbLIAFmJoTdZ6nPwICRGjXdKF5cL/i3929z+of9iKsoTlkMu9vfkoyZmiRhVUMPTHXF//a9rtSp/vrUhcIAYDd+1LhBUj9DsjKJCAHHORkbgEgiQ+1dZLV2IgYb937HzEpa5AlgsSCIfZvvTv+zrBgUoIJA2wLTomVm/9616jdMmM/b5/GY+5PaGr7v/pvdmBCc00pFM0LVjMv9+lEd/o3+ZNhKlr///96urwjFr9k0Wq/61lNyEEQzZah4ilrF2tJTjVGBmgjCU1hZm5msz0MfLnElLdctOgfWWpzP77Lj+zXJm3oJ/yQyKa+Ne0eKSitjPLZL5tHOpsbPrJ6bqMmmXNnxrf/zMOUTLQqrf+I2rhn8P2///5mmlc6KVqenmOV6mamiGlDxC4+R/+RrzZIMP/1iQVGFcApJrAyrenIisdVikmTCXeoe1HjpRhMlNCip5Hplj+SS/HWQo1xixQq2snv0WmjSz+PzrANn3QUjwzs2M/+br7OQT3n3ObuOtcxjqCQ11ePb+p3FBju++l7I9Tv/3IWpSizQxouZqk//qK//tgxPuAEcFFa+wxLSHhMO09gwp5WMmbIKytv36BQEBaQTJY0mJMJWVeoYJJNx0O8gBBkR9tB+mePuulU+VTbaS47QAchInSEE/KLaHOLGLj8Z171lfmCV8jX1wlctp2JvvM+pLpY2+Oz6G7g5ULBC3ajWv/+Zo0m7SvtvmoW23vj+v++2KN9mVv7+LvryLZHgKr7pOYdah36897k3RhKgFa6NKGUiwW6r6Dhu8BHvIhoBgXk8hoyTEPt4qF3Ei1a4iJFI3BdXDlnxqUmX//+pNUIfvFoSf3Qegs14wfWIkl0uyiERD7BEUFjRI7ZRSrfcIkViVyL6CbI2tFsLB/9ZAWHHbi//tgxPAAEAlDbewwz2HVo+19hYrY//QjnIkf+xXPbMGjZDqIV1lLj0Cvi/kTSCVjCqk+lhlh/Xk0Fu6s2WdWo7Nnty7LF28p6Ksh2nO6wmhw91k+egCDoWIA8u9Sz6DzyHzfQ+hOYfpKPzv+ohBsVLGERpjrzUOqdPtyiDNUqJ9/1Z6OXZzN39fK89ZzuqhCCFjGP7XHPnKQYtALSsleRIwSZNoxDdBQgdytABCWJ4XcDqTIiMoUehCmWtWNFGBuHWHIERWPbQRioVHpkNPALDCTVDO8dI31BXXvov/qp9xUwDqro5QwYhkR7eZyBgMMWR0fYlBQIP6epLTjB1Qd/4Nbvv9k//tgxO0AD+FHZew9C8HJHm09h5V4VrOqzmzTk5RHYLv8xYOS5k/XoLwlkCUwFIrhEJzHzQKaXxK6eLgwVVWSMpEsY2dQVwGTExjIP5l9IL119nKhgmMOGwP33+Q/woj8kH/l8GgcRxaffLnP+KfuoSeQU0qA0eEbEZpc6cEHwMBvBbk/dhMaz5wX+j/KpKSQxDQecaKEAZD6FyMyYYQ4YApiBDiOrai3H+JgUUHdbNzffMq8i3ebQT2FL3nVQGV/rUJjiQq2KIUV3tJFfTVA18YJ7CYefobQVEALLVMjB7K6/bOVakM+VCqoQkVrSilsazsi///9a4iPf6N7UWN//qreWtK0//tgxOwADu2La+woV0nMIuy89YrYUBCK32SD8W0BIypnpkAQhLyl7QZMQDYuPRj5fmMHvcRvUaK+epDBrW1rlivr4JgtemNzd3EyqhnZk1NpGPOJFM9LtMcSI6IoCrIwi2delNmV/8joMdRB3MzCzGAsqdV/8Tf4QKEFhhn0VARQQRkNYW38Yk1rL0NhkioS97XV7jy03GhM5WCQ/Z4326F+Za2uOdV8HC7lrRUCy6ipsqRuF/Sx5LriR8qrf9xEMYxgiXE2FmbQVVUjHJUwMPkm2R+UzSsff5VGCxgoXQx1xERYzo7s1v+v//y/9/JymMgspA8eiV0qC1XfGrCFN1iLltlO//tgxO6ADmkbaew8a8HVKev9h5V4IUzkngZOsRDA3i+iRhgWQaYwSiN8zi9X3TaOuh8FAHGXq1XpQiIRL/CteJirSB0G0OTUowVaU4s8rDm1GF0VyRwwBAZW2ar60GP0uX8hTLFhIVIcrCAlu4rQzu1f6+vzeTqcdbM2NiJknl13+3efusKoHWNgZCdkkH5QciaMIaKFCGgKAaTBRpVXVARmUkZSAUn5hurCIZfaQREQfhcgETLmj/zWaUIizdfAnGtUIRr0G/Qg6ONCBiBQBQ0zD0zELPSheJZ/6MSdhQ7XMJXdHZUfrm0+rM1yPptKjd0e6CH3D3g4zxhwUawXgJQ0NEox//tgxPIADaUFYew8rUHwMKt9hJbIts2hY8XcBK2eA7IshDiw4GqLKWlHaZfKSjU8MdymbxxtRAJAYnVxAyk+o89cl7qOFM+lsldRMDdRqTMT75P9SPnZ1NELeHCg2apuqZoNc7fX/O60UUQ7gxQS2f9EUeiSH7DLwqEGMMr+kGS7M0ZUNNTaO2XaQbOTXAIQALiQ0GNDIZYMjQ39wS8qoGiT2d2kyze0uA3avbEBzaYuemZx2ZtCSy1tH19e8vhnFP6Zo4NktFvRr+bi3GA+IMzY1kjeGnLJ5riO///VYmLevxm4wJg33/wK7a+j0Bkg1frLtJKtFxCkc3cSKtLMSlQl4zgJ//tgxPUADzFbXew8qanhLur9hQp0N8I8X7IoKkHCA8Py8GaCwFvefOjBNGu4AyC+Go/eJJWmpTMlx0LDjTU1EEyoHfwDqDbxq2b/Ne1/NfJZQtLaX+X/yrOqV3MdX1xEzX7h/UUYkwRV8U/+ln1pCJMCgUR2UrSRFhtScoEJULI5Ju4RtcCBiAQwVlioVGbLaETJApvToc2z510rEqyyREK3LnAa2hwuweQcEQPwd4MFVv8mIsIU+8gspSsRab5CvytqERxYueqb7M80QbU4mp0ITIjKcQDgoLNFFRkU60rbVv/9+RvyPvsTNIP30Iof7Cq1VXkoBTIhCRpOMMFRYMjyIWIf//tgxPQADokBVew0U6HNoOu9liH0lcHUMJKMgACgocItbERAGRd89EmVRS34psT/g5MmitKZVlMGqOyiqhs/wGQycu/bcmI3f//So+US/saJymcbFugvF3A47jSzdxcDBOQ82bfQdnwiSOf4eE3+93vT7//r///29S4uoYstBQzqoIsiXcdI1gbBAIwfCYgyxk57JRh1Vo6KgTQ1bn25QZCH0AQhQ2MoApwaoWyQgeSO86qgmFD1+faM1bOxfW25M9jJGeNBJCtCBMRlrF5bSlB2tU4lH9SJY+Z+JYTfJEzUyKykuc+hHVoMO6hJ2dbTmMjKCPzrcyr3/q3m///6aKcnN27E//tgxPgADp0LVew9B+HlMKt9gxZcN7TE7EwRA9XPLAMXeHbesmBUJZOLNZS0coLHx219RImTf/SbQOJSchlFN7N4ei7RRK7NCNMtyen37Ib8hWY3Gz+YSD5Ys6vev37I//ZztHnWg7f6l2PJz8g187ZZz6ADt7OrHxAdlDikqpDTnlspH1///9Z0Mjuj/nuPboYZpWLQhDibb4FGxGqHu7pOWj/gjE11ZbFViiCkNDywhL9fJDgODNHhA6cw9pMrmOA3DcD1vEC734mSSVno9gSUUBymY4Nago/FUyeduIWxB6oKtuORZNKeEwGZ6m0IzKHhxnQ5Son1Vl9v///fSxZq7qm5//tgxPiAEkWjU+wlEWHYsus9hAqpmtIHiKhw6p0MIoQz6JopBAE1T460okf+lfARKEqvhkQAKg7hAMOPNU6NRsWfJFb3ZEiwRVO3FuCeuyQUimr4gic39oLXv9Bn5Z3akzbljSHSo36b/AtL3VRNZViIAfkyWkIihZBRfxXUJPqtJzwgQOuCgYvqrF2f/FxKMhnWVJvRLmz4SOFguqJGQQTJTulsvTR9RKb4vKQBVeSmEC6pbgJFjlxaS4Idk/GSXtYNkBybzXLtC1LrnKDHAhAaETaki80p5smwF/8RneM3ng+/j9kC8eM9jgKLfY/+GtO6iVQ6OorbGRQr1TQo0dZ9j/2a//tgxOwAD42bXewYVanisqs9h5VwFJbif//+qk7/7oju6XqzQh6uOJ+luzsER0Rr75LXEYmVK0vnFVCm4gR20nh4F3C6rPB77K+spF27n5pZ34Ai8GqaXnZBxpUSSfYgJ2nhm6tLdxEk89Bt5v9B+jRIphBXxeQK5xqMRTBj0Qq3GPKQyvKxClQZ/qTRW/av/nQW6keZ1tSVHP6SpKORYMasxaAkdTX9zJIwylewOGu4UcTOVVCtri70gbVLWLcKIrTfOfDiq1RCxEBYk41+fgpOmwnZQT1BQFxzZ0IFuKTzHih+FKnKb0I9XqzmKfHGj0fI2QcFBjBcq5R0gTqN0xJEwZ9i//tgxOmAD2jhWew9a6HyMir9hAq5sue/aepxPAEklYLBW8WsehW+OARtJE3vaclR9aFMl9kpJdFUx6iL6V9rOohcYkFwiKvovVql6PFs4tKaaVo10YsXCnvB0s9BKGhjR5POQL9FmDFHyb3/1fnGWjM98/1PVyMQ57yh3Kv0P0EPE+Q6dpGcp3REJz//wUojQetZsaeoxsReRR3q5gtIa/3VyWgVLfJwtIQ7OZKEZ+KlY/y/VQ6kY67KKqN8tiUVvoMSyCZLHwYB+ClBoqW5KQcV8DRcSVU2aNVuFE6v09T6mJqOdTFCA6S/g6FQUDdBIXXGMioMUm+sQIQWMfR2GCgDsxhM//tgxOWADvGJYewoVOHPF2v9hJ6MzMpFnVKfzEIyES35r/qVzurOHAf9yurVv0gApDIJXkUlAOpj4tIFBYU1HQjb1ToiXqXxMiiRHnauaVL30EGStzmgZVs4CZoijcFfRNNgvO5I/RtzcyUMdy4fL4mBNI5TFkFP4xuhLjB98Oil59RMDurK3K65vN/dHo3mQSZ+Rnb//66mMjPv7b85KILOxhiAzNVI6Z9pUNFRGEohoEv5I4mFjpTNBX2VCzikh99G+SqxnEG/7LpMD4xLhGkSwTTyiKnE+cJjUa8fVd5IfElH4SnTUip8c3TcHGf/Xr+pNRzTtUCD/NXzYtJybVdjSC81//twxOeADo1XZewotaIHsW09hZaVbHl3NM4ospa7/UWAKfVrsD0T7Kv7Fa1nEnJSGwLq5woDUhpNFP5GuRoEoqlKATVWkYq2KNWMJA4ZdmvSSa0thmkMSDbGkg5igijMlv81Z6canIR619/7HZ+6v/y01gjSXrp2T3UofpHK4UR/8iRk5DPI5+ehGjojklsZoVIycwVGmf1BZwgE9LaupKZkmVCr3q3zdAcDclSqmyxZam5b9htZi+SafFHUucLODCnj7+N2Gs6zBl8v2JQmJ6u9CA/u8aj6IsKSGhRAlB4UfkJSPpR0eUfXyHgfxdk29dHyN4F/6D0+7zjOs4R7iIMTkWJv9bC9rhzCBNTvmlkj4fHg+DoT6mj+sLlGLWnOimDEUyRMhTMHjqgXs2R6wgUjEDJ1J1SXG//7YMT+AA+Bj2XsMLThxRvsfYehpKNmL1wY5+vrzl7+bdhDrDtrnqqa53XS3jfqDkuzwhF+aUVLlSr7kmdjjS60V9FTRwsM7K2qv4lvc4h6+p6Nu/8xfMv/890SMiu5t5P01T7ukIKpf1NZa/VpChYwJDtcTXcqNIkMNAAtyHRGNCYBYgrNG6rjiA6i09g4kEMDgnVBGVUirZl8nsXklmKWfv7HTxwJM7B8eyRwlqCc+6FEyVsYmmqbKVde7CemqlHS8G8WqLpdKLLempo7od3rvlciEBsoS2aizNarf/SrMjztqT//r90dEHaY0L9bccNXAqaxJIbI7rTEdWxKVogJkJhEKv/7YMT/AA9xIWXsGHbB4httfYMixBCqBASNgQiCsqX4YR6pSR/F9lSLrb7mG2jLh5j9U/30Pdv0APAY2ooIGfC0H8o11zd1K1JJ/Uzt8kVMoC0F8113xC3Wokeb97/vTw6Dzp1SvoyHCXF+DixR/FzH4m4qQCrqtse0QMiiAHLanIjDloQAjYDEsMi8jyCDglKrVJQLD71MX723m/esa0FqotTs62mAn9P1b8y35M7Glhbdv921ehUNLs/36meKfOPdTTgtu6fRtB4unf7PlBYr0P5xL7JmTfdezf71R0V+jX3R2ycbgJmFgXi6rydgslgAwdEpAxssU1RKxUIlKPsmKgxEef/7YMT9AA4Ri2/sHFdqBbFsvYaK4FjIF5t7UNK91SdJeEcpRHBPypA5x4ffjKp/25V/1bhdUfv8w4/xuBZtSv/alkRLrF3bRHucrXMifV62PyiiNUp6oJgQfW//ftbSwuihGyEd4CX0rKmZIcKnHhJQdI18ZhySKLEfymiccvb4VWWEBGwUUzFVQQfER0ugajOnJSSuepJFOqsLyfThvT7wiTiSsa2Pb/9IR80XL2mvWI1smJm/td/v4K17SzJUV//mfo60cJGcyjwMm//3iJUNnYRUqsoCnBOKrQd9Np4HBE+dcsFKjT+UphAU1bEnSh9ZN8VJPAawM6SdTCKjDIRRkSi/z//7YMT8AA9lDWvsLRZhza+s/YYekbppKKOtw8qvk1DydrxWW1bdVn5raTEh3Gdf8EyGSPRvczHo19PQgcGjJtMzmJelN/d25wxsyMj1AVGI+OdSorjVFDMS8oGQ048WNTIstj7zIdnCYydkECDFWkhLTzorhckpLWqBuVfaInNDbT+qPs8Iqssl9PVjCdh2HZJZ7BkAaqrVfxg2ncgQ5/4PMU0GjxaVSf/JUrAItWIgdhxMdVTrd5CqujmYsGxoRB8Ih8MeIBJ1jVMP2aO2/1rB/vrfQ5K1UjDb9vlEzoOFbUwMhwZMP3VQlN0Zw48OrRbApkxOr+5Nc7q9ErqZae0Or1/h2f/7UMT8gA7VNWPsPK2By6fsvYeVeD+pH6987gPgOh/A79vYpe79qW7pmZnLVetWrWZ2nP9+dMz9po5Tb5MzM1QjDjMtpjRWcHhyQFMaczn2dtIeRL8vusIYCQz7LEJjLwcB/IxDb1w3R2LbrK7R87+O/uw2//ZXg5bvw/hYv0meWeNTeWruPc//HX93lhK+6m84fdyclc/TWPtUdnfJunt5fjYv3hPa61IRAf0kmCm7RlAvScCDUbA4HeZgahkCM1qPOpKQRGedCtlvD8myv7v/+2DE5QAOEP9h7CxPobAd672ECizGOzTNJrf/qpbkmc+NlBiVXe//Y7vnLtDA8HhA9n6HwQKQyOtwszSsbkaX7LF8BbPYStEuLh1aJeJtjodxxcu6crVDT+NVvpSLx+ovuTe1CpQ8BN8SSQwvgr2WtMpr1p+fNJzv6L3LTp5AutC3RbmxVaHqqt4SpYZ1IUyUqMPwzBK44g0o0szNYi8VhWcNDnK8oiKpAriZH/T+Nm11quk9wCjDV1pEkS1Kks9VOz07CxGa0yG/ffKzP/MlaHM7iAwObjmUHf/9LKd1dlWpTymVVrbvy2fdiO0WiAuOGEskQO/PVkml09Weo0qI6ACHGk3/+4DE7oAYJaNj7DMVonyyLT2EMuSC4sHV6EJqIRkTNw2mUksXeXv3b7I9ADV8WwtnC37TCWK3mEJjDOn0phRqhjFJ6qLAQIOYtRd7rm/5tIu8VF1bmYolGHb90z/zV1/098w6WqqgipsnX9ydX3//qNuujhcYAPFXP8J617LKRb6qvWC1WHUq0lEJAzNMjOOOaKgRHg4DwxCBo0cQDY4m+VgmgAStwElDjkzg63iOdxEMjKepISYMvpNZFA23KG0sb03VXW/qk83zvKlVddfqTzHeVlFF8Ld6jBZSuhfqUneJCrSqJH5g8CfflMf/o+yK8eioJG+hhRFQQOO5MoFCEj04kV20ks6CxjRGPgofCCtOd8KkdM0BA15cjioMX3fUSWfxXSEkCjahvYwkKgXV9QkUPW5SPo7xu9N5gHIJc9uCt7saIgwxncVF6oSNtL7Tiz9hVG79CN26N/6p5x/YmKlvYfqFQF9jEgELv//7YMTqAA5dPWXsMK+B1qZsPYYhqK3DKtKnriq3dRX6Ue6juThlahIlWRc68k9h0KbgFaAjV2UTiBsVYxh8etSNbVnmW/9bsC7F7wCB3OEN1jumZw6H5ItzNOSOzTVA4SS60HgDPo3qQ9Dm9ifxf8f/9TS3nDjK5qki3UcEogxtSL//VTp46WJ/mY9lh5r/iDDnRlrav3HMSGaamoClCh0pRGWLXUAKEXi/bWi4paRv4O7Ep9/miQP27+PUD4LikKeFykPohTYP7j+bChNyAYIiaEdSZtH4Tvrcb29I9UpyYSrLVr+P8J8r//H+ZvR/hfr/+X4Qf617v1Z/OXTElBQuHvSqzv/7YMTtgBChYV/sPK3Bx6Fr+YepcFP7PJSMEmE1E+pIvlG6ZJQGUdMvlOoFPAK2E5+0iAFbWlIlZWPw9ekfxdm7FU62gvvaeazF/6YzQOpXQpHEHumwk6e4ISv8rr7eYEeLltPkf0FfjH/9R3wv6J8POvK3//xj9+w8/aTQlR8wCPeg7K1LGySQXIsdOujQjqJphArYGY2igKgggFa23Z5YVVaFVx16+G9Y5q5oGpxpqjTv94VlTaVPEgEE6+3qB4Xv7TH3+rfGGqcgf+hvu3//1XoGB5zqcBykU9n8hP9bJ+qdim6Kmuj/7j33gsbq3wCFJlEIAFc94EbgqECgdp2oW3mrvv/7YMTqAA6BVWXsMPLJuLAsvYaK2DTEASbd7uWTMFMv/UyTmP/Wy0dkW+VdnppQ5RM1UlsLEFCeO04kFvKfKdYSpnfLbY4dYk4QA5vQ1/Ycttaa8z1dCmQzjBpRY49Bt3NuZEuRv2X27fZnV2S37puYSLfdEnHN3o7lT4VoQWg7pJisTRXMBpYMQsL15Jow1aAKmBUfOUjXgU7TDDDtxh1kove3vLFUwqKm06lB8lUtNCDV/9ob46Yko0O5VKpLGICFwB/T22ajl6OztzspLWQHcpim/fR/UreqHcIljlanI9MxQ2Ghoc9F2yF7iIUWCpLFT5DzDE3STcHAEMprZ2mlxZHlpf/7YMTwgA2lP2XsLLbBtK8sfYWWYDUKtSYjIGixR7UdZN7qNPuzJj/mozbG1HcLc1dyziPE9Naq0jPqjoJ/zvxh4rdNg06W/Dbx8FxSbJUC2kZZxVhTpF//////9ytXjKc18/7TIhkHZo0DEW1jpdKykhjEEmVNMvov+6kYpmMCUKSJRNZgIxiJbPbumUNBgGHophYlyx0NjrPmmuU++bNOWRh8lwKdNCn46xGp4oWEoWHB8CIC6TE24Hir9UiKVXL29/6ulnoRTZ1Zyu53VtVPcqdNvne3t+59WSx1Ve2Q63CFAdeIDMm4N+2LVaiHcxKANbSCSMFYOhk36fChG1VVV3CaS//7YMT7AA8xjVnMsLFBwK+sPYQJ+Ojbv42KvDBEAph3sib4yoRS9qbq1t5aONOoVv5JRm33Zsh52cdiJyS7rdQLhcmWHWxiFDgwq2XEZRlJR+KtMUu5s4H3ggwHsHQDjoNhRl8NZUIiRGkCBIZAGTsifwPaToCSLd7IkjOTl2oeHz1/qkM3ry85+Cc5o6nTDkfjJDayCHt08rr78q/8q5t+PnnnpzaiYdIig0ihJPs0JCxhEcao5LDFBG5tRW/PVJLM8BqPIWbGiwqFTM9FKu7/4ul2qWM0eS5seJqOupLndMy6SecZXRk+lBt84e4JI5xKMQnJZlM+11ZqtoNKC+sUrUqijf/7YMT+AA6pjVftIG+B8y/qfYQKOKRB8+pFJIUrJlh0eK4taOFzcurspI268bp2dSK7TNs1U/et+bajFVsRZGeOmkJPBRRBO3yzE+3GFwr/339x1mGtl/uIcyoAABKUQTEQ1miACLFUtWoJLGytkmJiTUzguZe7WyOEEwiSbLF2i9tPzDZB8xzT7TVpO7B90yJ7wfreDECkOBsTK5zWTLSRTh2zudHxleTU7+XqIVHAI0ckoKyO2lW5YxBZjaXKmxQwfFCIE0ptov0DE2BRR8igS48Ydl49kv57Mn9+cspO7R45q0ll1tnmxr3OcIZJuEMrkfSSL5q9SIMY3rv+yKctSigCQf/7cMT9ABUJsVPsGS+KhjarfYQl+cpLyBC9jqBxyycuSeDlABhc1b7Y5TTxN33iub7j0LSAjbfzpM+FQ7f86WD+Tl82qyiQuyU3If+d/Ut8siQzME4VJ35CBR/Oecvg2MScMv//ZA5ZxmzyqFfMrrDmej4kEZ3mSaqmiiwkgiJF8bkNxF7LddrXcihKCJTIQbG2SqyRcKgx4PQCE6KtRIeCwIGPKgJgVl2Q4OuizbwfsLOCxV085Fx8//gs9NOn8Hi6UBljloxH5EKzaO5SEIxTlavOVHy+iOrVKVvLab/LpKysiP7+9bArWCJqLrWpkjDjCxVh2tZXflOWWkxiCTltDdsyYmm474LIRPqBVL8VBSQ+SV5apkVUkbOGfIIeOPSTCQbNdCS2qccg1NFIMdWicsirUv0c30//+3DE6gAUwb9ZzBkxween7P2EjihSrc4KEfv5UzPhfn9VtL5k5FDJLNmliuFT9SEhi0VYjawV2Pjk7mOU5uvI1b8wtFORZoMEkQXlLUJgHJkKWJh8boidKUKx5MWvdqJPB15/KW11V5PqWQ+09C+Dr31eH98nFhjBFbV5Xs7XnR947lFwYucwqP6L41L2AYVcpVYf5TP2t9L0m3clHMJ5ZkUqmEWd9VZn/yv0fWUnh0hFKrKjuws4oc5Rkjiamk954i/BNGDpWpMZhVKBvigwXB0SCDRYjMENbqbocN/pRunSXVgU1daok6YyM/c2GcnrTgk0Z7ECI7IdM4vOblmxwVw9nH8WMUwhbMVTPu1NnOlQ5DWhDf9jKt6KqGRiujghS6CBR+pTJQIpnaR3rb/MIDnT+aYokr6z//tgxOwADlk/Ze0YUQGxpG09g45wEKOCfM1VZR41J096jareBqQyoULOkYVB1lptwHA6QaHmS9tEXZGkQFvEtqgQgHAVh0bmJLfCq7IOmmdZkdeG6q2pqFemiyfR66y9xxvG4bqaqlyJ3NeiIc/YTBqxhJHU1FPOffv1Vjzn5ieNi+1Xu1qu08ya2r7Nq4ijBv//8Aj/R5AzDW4NqJX1O4PrfzWgUnE2TbIbFIcAgSi0ZSLHqt+kQy24QkQHSCVaxChS0jBZuxNtLjF9NYAwDmO1c0fy+mznuQWMy9SIo90bMn/vvs7o5MtCrWCFcKZbbv7638pvRvR/u3V2eUvnBNUUbOYw//tgxPQAECl/Y+wwtKoPsOy9hgqVcAKM0VK6ecUePe/RjwWSNEESFtaqwdKwEkBc5ClEAhlCFRDCHAX028esQ+ghOcWCUUBSfZfqk8xG+o/4VRALNvzqJZmekPLP78ht5CCEbaR+ets+ZLOnmspjguG7n2f/f+85lUI/8vJ3ptXchhL0E0KKWuXZE5cuGA/0Ad58u9d+LuBGwmkpYiyVoHgqxgEnocUeWuLGal7Y12Pf9BVfVpcWszNC2uXrA23sUUo1jioA4k21cksbSWrIXYo6tQvMQnY8PJWFCQVuxgqLk450pTh73cvMJaV/Zd91c6THfu93cj3e3GP+2a999ZjO3XZC//tgxOkAD+E/Y+w86+m7qCu9hIpgXPJIIRcZcbO9rtuz67vsYWtULY8AYchHv/H+FS0E6fcLFsCFlvQqv6XFWIOYpbomBoDqKhEaIcRVUnpCWmNUWy1eRasQE7Cak/TdpbOdDFWR1p18y35OuauGv4YPqcsNmbwMWascl6bw5O603yew957cZCJ23SR3xXcy5g/SbL4lOlm841VnRGm8iHKUKIIj1cpijRNGSiLP/qkhGzqtrPJ22fo9OIDii52zJP+66aaFfSXeRgD5ZC76KDOEQ1cU4MIIxSJW1L6XxrpCZo+QuSVxUGQSEZRfxnFOXzajC29jXo7B8ek8l+/ynBSu8qFw//twxOoADn1BXeegcUJZNys9hBp4nAQxuPBj9d4ZouatqpFkrU0+6uplxlgUAEAkKn3ZMQgwdOsLLhE9f1K1z139KnorVb9ruaeGPW66IgQ+GQkBGubIFkyUOHKh4QomzJBUCpPxzWXdaMRRlf3GBzrjKdmjLwzNsYX2nRR4xCPM+5ygfIlJT4TMQQEvT+aLdTzPRU8ZAhCbdI5xcSLeFXdTlMW19PUok09TOPcl2zkjUUi4/eu/jWhltm1aICfMuWurpm6RKhbKUbr66ZWDpoIKQvqBcq09zyamiq2xG4kH2lyqZjkxmEVX9QoA6hcs/L6ahBpqRleIh55+c9qzetfKn9/5lCl0WFwfHznyf+jtYlYzB30O18KT0OLvGrJJrfVL/vzytKV2ptW/eKZ0US11AAqJ7BCsuP/7YMT2gBCht2XsILWJ0qGtvYSNsOtURRAoXBSrJBNzUdT4uXY9D8ob6t9+tPZVKWay5hFc8MMKWlNkIS4MTtFPgCo8W77/acTzYl9YR8JD/2rFcM6VdcSDffI3ZEIYiAgxGKMIATjz8Fb91qJqRy6pVaJleiNh015daeZmVKUGltgTzndJ51TagUVJGFGJSeiZ+TZirNETqIDGmFmEKqAugQjP/K6aZkWS21IAFhVsYM1VoJCdCJgKfjQYOZLALScYKd7QByqtM3kSyyKzy0fMEX0EIHBi1sq/DDAiA0m3z1QLRLHC4q3DoKnE9DeAuP+Xd/+FEhpF0gnBk8/yLc98j7S5l//7YMTxgA3Q4WvnmHEB1yEtPYYNYf3Yhpn9pZ7R4bBgRGxyAzmEEgICC6wMQb+qyXVCKwskAAPcgEobTnd4vwjKm+jU1VVCKBQCp8fiYtJiLc3sdPzNJz5IJZ6+OZbU1vSB6A/JzPDN9AdgDPjl9/LeGWaGaRaf9/nDqntJS8uf+ZGw51Gaoc/2Sr5/57fRTkgZ6i10RPvOy4UkUVr+aU4DDgEK01C34ZU3C2q54YYFCNwo+/37ds5pdbpGQUqyFpbRUioWmQztkKwDEm7ytjDWklQXBRcwl66RHJ8rAQ8UBRM6soAucIDUnUThCxxv8uwhKi7XmdK+kv/7TYOBxQVCZ4kWqP/7cMT3ABORw1nMDTeJ5SisvYMN2JzaHgnyjBEx9SQ8NE71G39n1Fiy1/YxAqDaygaATlrfrtjHdU33ukIAEpJwJ8N9diPgFY/ANZFDkQkk6XSata1MgSDwea0rMqeg8kbF90OmYktP5izkfWOk4gmg2/6zep/NHE4IUFhsLguYGhoLvh9C2ETT7RgmeeULBQsX2ukXmpVIr9mRX+yNgZ5s65bRXdqrLHhmt20sYAx0ymnqrqlCAJ9yuIl6mwMkHiNSaxQMsioyMMn0cEke6QUSAoFFUvmziBQIybreOK6kWk/3TbyKKbEEABCf/5dOhEmxt0rLD7lUWiSUtT3MJCt7aStQVQ210zoq8kh/tGpcKTGqnjZhZiQq5bK0CgUPrcEBMy+gOQ46dQwBjAyMO0uFzp0ElWBBEOX/+2DE/gAQzcVd7LBrgcEY7P2UjZg8MC0vT0R1n7bTi2/lUnm9tkpJ6bqfbOvNrtHPPvjq39HYqXlIMAPwYJDSIAIFo2+tHfvKY/EaqViNQWoDpQ4nyCxpYv+1KDdf/tY+zU/fJclXPikAiWp37lyZps7bAFAWZYAExmkDhb2wEShgcTlkqkiJo8dOEdCBSSLC4kFWV1um497YngvHC71EkiT6rmfTJ6lc5zXutSmdiqx//Q9zh0UEw15jq7+5is4oRvZv+Yn/tlc4hd2+qaxfNjlQvC//3n/wIzkWSv5PIK7itZ0xoSB0OqclAhLqLoCVDuFRAabon3Ei6qFRW/rGvt0j7cX/+1DE+oAOEK1n55hvQbke7L2EjciJSy91IVIp+aKVVLx4Bsdzi7VD0gcchFQ1cRBTxNz/9UKOK0YKDlTIR+jCbuc4sAY9HIICLyEI31f/594sf+MAhgmiCZNKKL3sSbEqfxdGYAQIABEyOAAABhFQsgEZdRO5GqytILCO2YgpFFIfjsMmBoGB2ObvMDluHccI1q/+ddrVL/7ygWzjnKFMGzVeV68b79OlTqDU8b6f76/s0TaavUA49R6bTyMW98ddoGpgSicTiWXmrjznultM//tgxOiADvzRXewtL8HvJux9p5YhTdcJJGj6+Wz9SRB2sPHjyzv7//+RAIMYFqotWZgQ7W4MdaRGKt9WdJMkPUgEkNQ7QRjr8RQEYhXfSaAyB1iXBAIEYLNpkKA1iRIQErKYKBhZUFIBJZ1ZVXZgGHEyWP++AYSK1n4XMm/luUsu/qCqPaqmP4pbZi6fz82u3+2ZK///+djbMdToJbfmY/YfULSBBNcf/qRXsx////mcqUHU/z//1X0rwxKGTuVYx0mZ6iC7OpIItTPgrgAEJtDAggF1oWCghZHlUEEh5ZyYIWB2jEkoDkiS3M3hMTizCQ5S1+pbIO7Gd4q03+8wD+tv5mc4//twxOaADhUbY+ywsKKOtCt9lY9lGJdXGvaHDu3100qKyTskVDYY6n+Pn9gJmnIcgmIWSUbzXoiAH6rIN4tbRBl+vyraSRB+v//oGxvS5ZvZq7aUP2p2o3pz2/HTksp/JXAAAzwpARIRCmRAgJ46ER8ct8mHwwYWgHuIH5MMzMRvFsFnvHFQVjdOkA7ChQWsEuUOsTcpzEySA9CVOmRs4XxNLOCtXmAvNU5mJ09crG62NK0FJKMlq5xfhTraAAgimn+Jn8zf9SNxoI/r8/qINRQoDm4xut9yBMymRvEw2qEeZlBX+//H/j+iwAADNCAC2WREZMuVddSeUEjrdk6paBTSe2RY6vgYASpi2OUOr/RhtVE0BhCVfWDoO9IFMOIrQQBX950TtXlP1F9+tD1mnnT3q+p/MvTIRP/7cMTuAA+tWWPsvREiEDbrPbeeIKpKoF095cTwZeov0B6OhjX0+n15Qg/mbym8Z1WSZi8Vf6JvVKAAJDhACDSTh0LAXwxQ6JMVWHAEJMiOSTWZ7H7g6yGhrrWbUySA71v8rqSsvd8AOg78qCcOS1zwHi61uTHBl4CfCDeHfh1+UPv7N0f79RFvQ/mGv4t1EXw7gzktGzDn0VFHSGJ8B579TeQYAAKHAFyqswXciDpnzUeqwrCZhTKNgMc8Myq8Byyly+soarzjPEFEjViPJbrE1FBmohNi+bvUJsF88nL8yNfMl+kl1jFI76nL/Uj6lNlQEK8ormMK9vhW6W1IBHPVqdHHK9RyJnSzqziizxpz8nVvQ5AABHoAabSaB6caYOmMFAGmWFLSy4KHQ0JIcsahKeDKEVy5lSr/+2DE/wARJXNbzTSxycquLH2WinjdvX6fJbLXKDODyPvoDoz1k4FWq61CU+ot9RbUuxOZW6KbZ0Lwe1OSRp6L9QE+oYZ9DH+FF0wp/X+rpCvltOVyOjFTguWduk2Sx1v5JPEYAAARQAAFm5qgTo6lIPAsoSVBwrCjBCwr7E2ItNrwMFDDiBFq0/+5tHPJbyPM2SQWTIO/I4QemmXFFgG4DinMjUNmKi9Mckr2rGdK91LHWi71lwt03iIDQXqUS3zb4N0Qfpt6iRPJ9lXUHuXFG9P/k8yt1TIRRcUokQP36LOchEE2BznXB+t8NG9IoAAFZkIJGIiIwULJRrpVAAo7JFRCNCP/+1DE+QANTQlj7Sy0gcAkK/mminDkmB0CxjP9DIpohxaz2y1VDLdJh1mKr9/zC4wRucIR3VSoF5jvhLGqaCoNvHpfxfflC/UMgs2nIW+/0Wmb6/B/P9fhX6DjeifQnUiJsI9H9hL8xvv0ChhLmYwBPmsAAAZ6BMBhBu9AYKC2SCDy0VSuEIUEkPR7gxK7Uia7QfdB/P9mA8TYyu5YLM53eF9H9XIopJ0GJgX1F1MYhwn+skn6h2G3Y6/nDa7GgVjMt5Id7fl929TeHDP4329w//twxOkADnEjY+00VUIptCr5uBZwQpuv//1b0b/6aWW6KcuqoAgsJkvHfrpfRbAAFEbAMUBaH1HFnmyoKIh9EisXKoSqcJw9rH80lExrOXNEAZMOULQioRUWZMQQG1zIZwqhqZIuYCVu6CBPEWl571J/Mm8+rWTgm5lZaZJ/Q+z+vyfAWbnbyMm4WzI1///J9W//1Y7FUqAL+pdITRqz0XwAEJYwLfYgDvGZWDLUPIGbkqF8FhIAM34vgUSe1F4KeyKY1Dr4xhEesbW6yF2QIXqb7+mXWT1n0UlIjjCmd9R9+pd7gjehq4IS3cV9/nbnFOmfq0uaIH/73iDXiZ/9Va8RcAAgLgO+BQeojGy3rGFx5MtSFlQAhBnKrluoh0fHL99jpWB3vtRZGG/7QK2RnX6uu29uWF2o5P/7YMT8AA59n2PsqFcB2rJsOZaK4Ei5jqrLp7rKbdAkH9H1v0CYG4Qusl0t7t1FdE+orw4K3J6oS0WN0EHrQIX1M/RlahHptRKntqrUMgR+dny3Z3YoobOU175TIIQicZCSqQHXIXM1FAekPAciLprcKgN4CxCEYRl8Yz4t5zufu4no22VjOVsnvb+7G0S6K+JEreHmA5jiKDU9x/7kew4a+hB03BeRbt1U77en/3Yj3LLu5jWQqWZVPHgal3RT/4SfP4/MpKHW1taxghXeSMAmeE/aLdJEBIuvJV1RYJAJBq7jCiqAhoEqPl+UGwKUefK6MiB8ggyrgofB/dZ1F0A4z80Nqv/7UMT+gA5Jm2XtNFOBhKLt/TaKOO4eF6OS2haVb3zUccG9x4+d4+a3PLePeYC4kp1C2yiOLPLEfreeU7nkmnk2WiMSzqLeBQVLBY9/R/69JVOpJZRyi/NmARQBNCJTZOoaHgYGDVJkGsgIV5H6VWbCcirBam/aops1OT43IInqWvalwgHebG1UWGky5eTKNjbZsaLuqd/1Uz7Oup41dfDBNX/UuECiSrKBFKyuVsIFKXzeugh1Vp2NkI/3SQiomzt+tGu6OQw8adhH/LS5FN7/+2DE8gAPvaNlzTRagcqjrX2lnsjwyprhMXISVrF/A4BQAAAAAAc1iIJNlvLgQVJlbB25DwMKKjdAU3kWYtKBgYUAlv45yhx3ZsxCDBCbPGqe/OafxWF7ZbWudpv7h7BmAEJBf0ljsWD5CJYN1kbPpz5qlsbydosLkf/RKSiVYggBmM9sbu6v////WIGgxErY/dy10jlpsajDrhL9s9X9rHl+zu9+O/pi3y/qPb/94/1ad/f/v/YQ+U8hI1M+jKSFqtZL+pQCAyQZmS32YxdDEAJ24iTNSEvuh4thbzhTrR06k1ESJ3sERl/QsyFOegTiOCoPagSYrCW9L8qtijxaECZqgzr/+2DE8YAPMRlz7Bx64gknbL2XipjKMpUtz82J+MEoEDAAA2qkuaof//pDhqAqNlDbtHQyBLd4BgEaICyXElxjJhxsq55KLuWR8qA2HUusCYsN1PXvShNGUwCCTUiHqymHC+yhjrFxk/cGZvwvoMNuHrqM8OI4GcSGOCnEg0gg9kvYgPZw4ouEIFH+xkl/9XSzIiFBQgRZ5LJGn//w81vf7LWZ0MgbKzLSoFXFS2wOmlHmka1tKaekh/X/tiIisZkhSzSoFqywQaumkjjPACTtIRIZW67a50LA1iY+WanX+8qeQwhWtlcoj7FTWrf3fP0ZtH+2XPLEq6b47a2/MwtdKwUG8Cr/+3DE64AVsa1XzTDWyeAgrfmEDfQo4arw6RUyKf/kX0yW/zyA6EwYb3tPJ+QJ/teNeuUeKgiJbV2PlRUk+2o5haQQgVHVA38HRcGSFyqCrXRMXxSt1gpsa9ojZsJWjG4MM36Vy83WunBIOXqd/ZRtjV5+wfW67Pi4uyqdK9XqowjlPHCyhTSq26mKn/Pbd3fdXUwmpil9Dsu7srGzF/1f//fNd/czshiu9xC1yJDxbovtVKkPrCEGrNKHi2yXSQACSKAZcaHROeC5C0thUKmZbONhkMPMW0eNKmptvGhcIYcfcPA+JGtoYP6RBGfqXm4vq/mJe1mXpikVuzOkZv+lqu8ruLRkBBRQ5r/p6eye3//2Y7s1X1Y7kLsXmZzHEO4I4irVebOWlTADUfdI3R3RAQes0KOBYxrA//tgxOqADMT5c+wwaqHLHm29hg249slZEumL5Um31gab5fmUYedYhhJlAhJv+7rBUiZ26nX2CJJevC1pqj9ULQpxZmMMxit2qR3Iv9WW3qjIVgwCrMU6zej6jFW/9af/6tZ9H7WJR75gYAjhRKQQoXxrvrSwkM6EAAUqodrIfzA7wCoo66g0XYraXaxTK46XSm8jay7PWd1ZL2YPAFSb0zM1XQmYIlmFfnz1uOH2eEyZ9jZCsQazEFBZiHLTdjOcxfzlV1Z2d3pIOMMV3RjpX7ZBl3+u/+302Ptr9T5DrOYgydRiUHMJWeelmMqVMANNdYbUfSImSOZwwQFZToSqRVVmfyHo//tgxPYADn1/cewwranFsi59pAo1dYFB1t2VxU9+IdZVanXiAgjHAD1/qIYVaxBbcpssJLrFoINKZL5vh2a2FaIRkQuvUqq/6poZV7GBIjhgIiVMyLlz7RLo3///9b2udjtKzlgj2rKwoKDBOFUWjW1LeE2oZAwU3ZgIed9SIlZB1VBOVQB4G7NiDeO9CaH4Ps8sy13Clg4tLuuL4fEgV0fVr4yYslDQZt0i69OyDcTDbr2xBKiZUEBdldfxagqb9PzGqzILEVRUtDe/9N/6mf//62c3KTsVBKrkdjCRlKKrOBjioikQqua3t9inUIBSaUXfo/CCiiJmCBB3keXyZij4nG4j//tgxPsADm2TcewYUWnWMm19hhW0uc0SwgWRsayduSvteDLVjDJflJ/UqxeVH6UvF96yoZ6hlOX9S1DHOGFhiUIVlqzociFJ9WZwcOg5CIruKQqXoll/+v60//+7MZ+5vZlKtW7uciGDDKEH41vLM8KIAAb8p+mLGug5kqBLQJSoEQmK3rOYk0O3cs9irNcKtuRhpSGecrRlzgKAOJ8/8qZFiQSBI2iEK9pqq4+0i74X/JuKQwkOwRimNr0KDMjT/W91uzBaILNc16Kb+lEOT/p/pf+xC26l0dA4CcqHlRWdjHYEYYOcFmrVdpl3eZUQgFL7B4XtUWGYUgoFitZnl2MjVoXF//tgxP6ADxGVbeygUanasy19h5V8XlhBUEIMErLFIKtZ8O5DLSUGwSLFf9LLCUvF0dymiO2yUv4VQSKwhd36zCcVCSopXM7lv6SshjfTR6sc4eVhIWLOWWRu/6Y4R10en//9VT/2ye++bVmGirtO7PMtEMIACt9g1a6m8OhkKHJpyR7WGIKBNjJtI1LzAaCprW1tzb965vBWXNCSiQtAvs/7sxPcpNYTmH7tuq12ATWN4NUKlag3VjJS+tUjM3+tCEFiwIM9hzrRsKEmtmgMFc6SX7UvAzzf/khUJCIWPA1c1aeWmncgAFt/zyxO2fUqRKEgp0M3b1N1r6w61nSeCLxWXtnz//tgxP6ADoWVa+ywTan0M2y9lIot/VoGWtTqXSkIkYIiY98/v84WCUC8C6FdUv7KKIvKLNZSp1DFoZT8oCD+K5n/9SOdIasDAUDWD3fUStFHBlIOi6zx4kPLGlewC60OPCqgGNDRp4Z3e3VTBCV32CwSagBAswUZCRrFUdA9IfhLCcia3gm2a2/6RYncHMM+VEQNCUhhu/wcyWvUW788tvwpk1l7CN6PuRmYVHKWjJo5h7sxCezqhTRWIuEg6NSZ2UTdVp/35svt0rS9D7T/36Jn/qhlzOVHFc6ImHO3dSACmttLQyeOjqFhkN22QPU2ZnVXe1FvGVSzF3WTXsY8TEbT1vS1//tQxP2ADo2XZewwranKHav9h4l82CkAW99dzU8AIh675+8ryIMW268ErLKtqzdW1MpPHnN3mHwE6rHbamskx0UMQmqwohVw1gXcMPNUy5KhrXjWf29n2UrLTS6sYgTt2wKq0eWLZZguyFqtSdVOy4KETDgCJKguCoMXWV2Z9sxdXHpYREkVWELDHYTMlpzTQIWX1n3JTQzvggqWMRqoq4cqA5V8eRSFSYujKoirL0MU17UOUrY1h9rm92yshW8XMWiHdFM0EAFSaUNWaxzAv//7YMTngA6w613sJHEhzTNq/PSWLRKFuE6BVg2iSDcIMNvMkOClUDb8lm5aVGo5My05ZqO+5LyoKCmdGpxZhOrFg4TpeZH5vSea4kjPlXpWm+s/z8uUlhkTcdWOgx0NzptSrtr8J7n/l3M8uGdL1/hiYcax2fHFF3KvE6KFC1iFdURUIBN21se0wNDcvKzItTaSuTAR4Z+mU1PP8smlCMQIPeC08qU2axKlzUvlXqlDDB1mMJyldCgPuLrHIYZy0WMdgkZiIyp7Si8L/SvpLLtQq5M1hmlhc4Z5LW/BgqBGRugXRquuJocnA3J3+1VmeHZWY1CTmtlBmE7Bjl6IUJgMYFUT4P/7YMTrAA286VHsGFHhpBfqPYSNpKggy6LWPSIwq0m7HmSS0dgHGS2lUkYPrPzH2igD00GevlVYG6o/lLXsO5T5kbsdR2MLGoOnklQfGhQmNCyxUcjUmJjBL092hQ4ieza6ZExe4S3nXo7sqtDIYCd/+gnSRBopI+Ew7dVB1uR9li/WTK6huLwiCmiNOrS6lGhJj6XtO5nSOjP/TvOhjUkq+bVbvLRFzPfxiNLow/KQGikVqtaGFKHMG3MWGHKfXIoIC4gLroBLiqWuILZcn//0pQaYk3hzQIOWxwGqgxCyHk4BUCGAuxDQUs5WB0QVG0GAkVQ4vWek5JoETzbzZ5EeHTpA3//7YMT3gA8BYUnnpHEpvSMpPYSN7FQIly74vfUTRq9jq23OVEyY52+wbalTT0Mt8GRJRVqJFN7zoeHFGJr2sfzNLubFR5dCCbj7BddBjbeiWxhuzfanwxaqIB9ENPgL4cQ9ifYM8pL7YZUwFjxKMEdQaQqz2tCDCZjMzEyJR4QeRQb3+XSqlVE2AkVpUFAOD5AuCwFLk1FRKIUAuLpCKAwsYy97VKkALPJYeoVsIikdCjGxtsmvM40srt7amrqJL//8AWQH4mxbkmLaBlJqUQxRXjLIS4PldDQ0KolVWChKt91VQGlD9VWqoCEgafBqCp4FQVdiJ4lgqdLYKgqGioKlg7ETxP/7UMT7gA1cv0vnmFEho5eofZMOKK4SgqoOwaBrw6mWeVO/ETxLTEFNRTMuOTkuM1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+2DE7wANcNlF55hwoa2P6DWHmDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xDE+4PLnGNJ55huYAAAP8AAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==", + target: null, }, ], win: [], diff --git a/src/interfaces/action.ts b/src/interfaces/action.ts index aa29d73..0a7a2e8 100644 --- a/src/interfaces/action.ts +++ b/src/interfaces/action.ts @@ -4,6 +4,7 @@ export interface SoundEffect { /** Optional display name for this sound effect */ name: string | null; base64EncodedAudio: string; + target: string | null; } /** Represents an action the character can perform. */ diff --git a/src/pages/CreateCharacterPage/stages/CharacterStatesStage.tsx b/src/pages/CreateCharacterPage/stages/CharacterStatesStage.tsx index 74ea773..cc08a16 100644 --- a/src/pages/CreateCharacterPage/stages/CharacterStatesStage.tsx +++ b/src/pages/CreateCharacterPage/stages/CharacterStatesStage.tsx @@ -305,13 +305,13 @@ function CharacterStateSfxEditor({ state }: { state: CharacterState }) {

Sound Effects 🔊

{sfx.map((soundEffect: SoundEffect, index: number) => ( -
+ (soundEffect.target === null) ? (
-
+
) : "" ))} {isProcessing && ( @@ -355,6 +355,212 @@ function CharacterStateSfxEditor({ state }: { state: CharacterState }) { ); } +/** Editor for users to specify sound effects for certain characters */ +function CharacterStateTargetEditor({ state }: { state: CharacterState }) { + const { character, setCharacter } = useContext(CharacterContext); + const [targets, setTargets] = useState(0); + + // @ts-expect-error + let sfx = character.stateSoundEffects[state.id]; + if (targets == 0) { + if (sfx.length > 1) setTargets(sfx.length - 1) + } + + const changeTargets = (amount: number) => { + let prevTarget = targets; + let newTarget = targets + amount; + if (newTarget >= 0 && newTarget < 50) setTargets(newTarget); + else return; + + let temp: SoundEffect = { + name: "Targeted SFX", + base64EncodedAudio: "", + target: "Target Name" + }; + let newCharacter = character; + for (let i = prevTarget; i < newTarget; i++) { + // @ts-expect-error + newCharacter.stateSoundEffects[state.id].push(temp); + } + for (let i = prevTarget; i > newTarget; i--) { + // @ts-expect-error + newCharacter.stateSoundEffects[state.id].pop(); + } + setCharacter(newCharacter); + } + + return ( +
+

Targeted Sound Effects 🎯

+
+

# of targets: {targets}

+
+ + +
+
+
+ {sfx.map((soundEffect: SoundEffect, index: number) => ( + soundEffect.target != null ? + + : ""))} +
+
+ ); +} + +/** Editor for users to provide the audio clips and target character for a targeted sound effect */ +function CharacterStateTargetedSFXEditor({ state, target, targetName }: { state: CharacterState, target: number, targetName: string }) { + const { character, setCharacter } = useContext(CharacterContext); + const audioInputRef = useRef(null); + + const [isProcessing, setIsProcessing] = useState(false); + + if (!(state.id in character.stateSoundEffects)) { + return null; + } + + const handleProcessAudio = ( + b64: string, + sfxName: string, + mimetype: "audio/mpeg" | "audio/ogg" + ) => { + setIsProcessing(true); + processAudio(b64, mimetype) + .then((processB64) => { + let newCharacter = character; + // @ts-expect-error + newCharacter.stateSoundEffects[state.id][target + 1] = { + name: sfxName?.trim(), + base64EncodedAudio: processB64, + // @ts-expect-error + target: character.stateSoundEffects[state.id][target + 1].target + } + + setCharacter(newCharacter); + }) + .catch((err) => { + alert( + "There was an error uploading and/or processing the audio. Please try again later!" + ); + console.error(err); + }) + .finally(() => { + setIsProcessing(false); + }); + }; + + const handleSfxRecorded = (b64Url: string) => { + const sfxName = prompt("What's the name of the sound effect?"); + if (!sfxName) return; + + const b64 = b64Url.slice(b64Url.indexOf("base64,") + 7); // Remove URL prefix + + handleProcessAudio(b64, sfxName, "audio/ogg"); + }; + + const handleSfxUpload: React.ChangeEventHandler = (ev) => { + if (ev.target.files?.length) { + const file = ev.target.files[0]; + + let sfxName = prompt( + `What's the name of the sound effect? (default: ${file.name.replace( + ".mp3", + "" + )})` + ); + + if (!sfxName || sfxName.trim().length === 0) { + sfxName = file.name.replace(".mp3", ""); + } + + fileToBase64Url(file).then((b64MP3Url) => { + const b64 = b64MP3Url.replace("data:audio/mpeg;base64,", ""); + handleProcessAudio(b64, sfxName!, "audio/mpeg"); + }); + } + }; + + // @ts-expect-error + const sfx = character.stateSoundEffects[state.id][target]; + + const handleClearSfx = () => { + setCharacter({ + ...character, + stateSoundEffects: { + ...character.stateSoundEffects, + [state.id]: [], + }, + }); + if (audioInputRef.current) { + audioInputRef.current.value = ""; + } + }; + + return ( +
+

Target 🏹

+
+
+ { + let newCharacter = character; + // @ts-expect-error + newCharacter.stateSoundEffects[state.id][target].target = e.currentTarget.value; + setCharacter(newCharacter); + }} + placeholder={sfx.target || "Target Name"}> +
+ +
+ + {isProcessing && ( + + )} + +
+
+ +
+ + + {sfx.length > 0 && ( + + )} +
+
+ ); +} + /** A self-contained editor for a particular character state. Includes SFX editor and animation editor. */ function CharacterStateBox({ state }: { state: CharacterState }) { return ( @@ -377,6 +583,9 @@ function CharacterStateBox({ state }: { state: CharacterState }) {
+
+ +
); @@ -392,7 +601,7 @@ export function CharacterStatesStage() { character.stateAnimations[state.id].length > 0 && (state.id in character.stateSoundEffects ? // @ts-expect-error - character.stateSoundEffects[state.id].length > 0 + character.stateSoundEffects[state.id].length > 0 : true); return ( diff --git a/src/pages/IndexPage/IndexPage.tsx b/src/pages/IndexPage/IndexPage.tsx index 5a492fc..223416f 100644 --- a/src/pages/IndexPage/IndexPage.tsx +++ b/src/pages/IndexPage/IndexPage.tsx @@ -1,7 +1,7 @@ import { Link } from "react-router-dom"; import HelpButton from "../../components/HelpButton"; -import thing from "../../assets/light_punch_pose_frame_0.png"; +import logo from "../../assets/img/light_punch_pose_frame_0.png"; import "./IndexPage.scss"; @@ -47,7 +47,7 @@ export function IndexPage() {
- Dancing animation + Dancing animation