" + _this.emojis[_this.emojiCategories[_this.MAP.backStyle2Emoji[_this.backStyle]][arr[i]]] + "
";
+ }
+ break;
+ }
+ return back;
+ },
+ drawSingleMemoryCard: function (_this, arr, i) {
+ let card = document.createElement("div");
+ card.id = _this.memoryCardIdPrefix + i;
+ card.className = _this.memoryCardClass;
+ card.setAttribute("tabindex", 0);
+
+ card.style = "width: " + _this.size + "em; height: " + _this.size + "em";
+
+ let inner = document.createElement("div");
+ inner.className = _this.memoryCardInnerClass;
+ let front = document.createElement("div");
+ front.className = _this.memoryCardFrontClass + " " + _this.MAP.frontStyle2Class[_this.frontStyle];
+
+ inner.appendChild(front);
+ inner.appendChild(_this.createCardBackDom(_this, arr, i, _this.size * 0.8));
+ card.appendChild(inner);
+ _this.cardClick(_this, card);
+ _this.memoryDom.appendChild(card);
+ },
+ draw: function (_this) {
+ // if someone put somthing else into the memory
+ while (_this.memoryDom.firstChild) {
+ _this.memoryDom.removeChild(_this.memoryDom.firstChild);
+ }
+ if (_this.images !== null) {
+ _this.randomize(_this.images);
+ }
+ for (let i = 0; i < _this.emojiCategories.length; i++) {
+ _this.randomize(_this.emojiCategories[i]);
+ }
+
+
+ let arr = _this.fillArr(_this);
+ for (let i = 0; i < arr.length; i++) {
+ _this.drawSingleMemoryCard(_this, arr, i);
+ }
+ arr = [];
+ },
+ reset: function (_this) {
+ if (_this.wonDom !== null && !_this.wonDom.classList.contains(_this.displayNoneClass)) {
+ _this.wonDom.classList.add(_this.displayNoneClass);
+ }
+ if (typeof Firework === "object") {
+ Firework.stop();
+ }
+ let cards = document.getElementsByClassName(_this.memoryCardClass);
+ for (let i = 0; i < cards.length; i++) {
+ cards[i].removeEventListener("click", _this.cardAction, false);
+ cards[i].removeEventListener("keyup", _this.cardAction, false);
+ cards[i].remove();
+ }
+ cards = null;
+ _this.foundPairs = 0;
+ _this.actives = [];
+
+ },
+ hideWelcomeMessages: function (_this) {
+ let doms = document.getElementsByClassName("welcome");
+ for (let i = 0; i < doms.length; i++) {
+ if (!doms[i].classList.contains(_this.displayNoneClass)) {
+ doms[i].classList.add(_this.displayNoneClass);
+ }
+ }
+ },
+ showLoader: function (_this) {
+ if (_this.loaderDom.classList.contains(_this.displayNoneClass)) {
+ _this.loaderDom.classList.remove(_this.displayNoneClass);
+ }
+ if (!_this.memoryDom.classList.contains(_this.displayNoneClass)) {
+ _this.memoryDom.classList.add(_this.displayNoneClass);
+ }
+ },
+ hideLoader: function (_this) {
+ if (!_this.loaderDom.classList.contains(_this.displayNoneClass)) {
+ _this.loaderDom.classList.add(_this.displayNoneClass);
+ }
+ if (_this.memoryDom.classList.contains(_this.displayNoneClass)) {
+ _this.memoryDom.classList.remove(_this.displayNoneClass);
+ }
+ },
+ setCookieSaveHighscore: function (value) {
+ Memory.cookieSaveHighscore = parseInt(value);
+ Memory.setCookie("cookieSaveHighscore", Memory.cookieSaveHighscore);
+ },
+ setCookieStartValue: function (value) {
+ if (parseInt(value) > 0) {
+ Memory.cookieStartValue = parseInt(value);
+ Memory.setCookie("cookieStartValue", Memory.cookieStartValue);
+ Memory.setCooiesFromForm();
+ }
+ },
+ setCooiesFromForm: function () {
+ let _this = Memory;
+ if (_this.cookies && _this.cookieStartValue === 1) {
+ if (document.getElementById(_this.inputMemoryPairsId) !== null) {
+ _this.setCookie("amountPairs", parseInt(document.getElementById(_this.inputMemoryPairsId).value));
+ }
+ if (document.getElementById(_this.inputMemoryPairsCountId) !== null) {
+ _this.setCookie("countPairs", parseInt(document.getElementById(_this.inputMemoryPairsCountId).value));
+ }
+ if (document.getElementById(_this.selectSpeedId) !== null) {
+ _this.setCookie("speed", parseInt(document.getElementById(_this.selectSpeedId).value));
+ }
+ if (_this.selectFrontStyleDom !== null) {
+ _this.setCookie("frontStyle", parseInt(_this.selectFrontStyleDom.options[_this.selectFrontStyleDom.selectedIndex].value));
+ }
+ if (_this.selectBackStyleDom !== null) {
+ _this.setCookie("backStyle", parseInt(_this.selectBackStyleDom.options[_this.selectBackStyleDom.selectedIndex].value));
+ }
+ if (document.getElementById(_this.inputMemorySizeId) !== null) {
+ _this.setCookie("size", parseInt(document.getElementById(_this.inputMemorySizeId).value));
+ }
+ }
+ },
+ setCookieStartAction: function (_this) {
+ if (_this.cookies && _this.cookieStartValue === 2) {
+ _this.setCookie("amountPairs", _this.amountPairs);
+ _this.setCookie("countPairs", _this.countPairs);
+ _this.setCookie("speed", _this.speed);
+ _this.setCookie("size", _this.size);
+ _this.setCookie("frontStyle", _this.frontStyle);
+ _this.setCookie("backStyle", _this.backStyle);
+ }
+ },
+ startAction(_this) {
+ document.getElementById(_this.generateMemoryBtnId).addEventListener("click", function () {
+ _this.showLoader(_this);
+ _this.hideWelcomeMessages(_this);
+ _this.reset(_this);
+
+ if (document.getElementById(_this.inputMemoryPairsId) !== null) {
+ _this.amountPairs = parseInt(document.getElementById(_this.inputMemoryPairsId).value);
+ }
+ if (document.getElementById(_this.inputMemoryPairsCountId) !== null) {
+ _this.countPairs = parseInt(document.getElementById(_this.inputMemoryPairsCountId).value);
+ }
+ if (document.getElementById(_this.selectSpeedId) !== null) {
+ _this.speed = parseInt(document.getElementById(_this.selectSpeedId).value);
+ }
+ if (_this.selectFrontStyleDom !== null) {
+ _this.frontStyle = parseInt(_this.selectFrontStyleDom.options[_this.selectFrontStyleDom.selectedIndex].value);
+ }
+ if (_this.selectBackStyleDom !== null) {
+ _this.backStyle = parseInt(_this.selectBackStyleDom.options[_this.selectBackStyleDom.selectedIndex].value);
+ }
+ if (document.getElementById(_this.inputMemorySizeId) !== null) {
+ _this.size = parseInt(document.getElementById(_this.inputMemorySizeId).value);
+ }
+ _this.setCookieStartAction(_this);
+ _this.draw(_this);
+ _this.counter = 0;
+ setTimeout(function () {
+ _this.hideLoader(_this);
+ _this.memoryDom.scrollIntoView({behavior: "smooth"});
+ }, 750);
+ }, false);
+ },
+ setPrefilledCardActions: function (_this) {
+ // require same amount as in the pressetings for success on the init or u override the variables and create own inits
+ if (_this.memoryDom.getElementsByClassName(_this.memoryCardClass).length === (_this.amountPairs * _this.countPairs)) {
+ let cards = _this.memoryDom.getElementsByClassName(_this.memoryCardClass);
+ for (let i = 0; i < cards.length; i++) {
+ _this.cardClick(_this, cards[i]);
+ }
+ }
+ },
+ initDomVariables: function (_this) {
+ if (_this.memoryDom === null) {
+ _this.memoryDom = document.getElementById(_this.memoryId);
+ }
+ if (_this.countDom === null) {
+ _this.countDom = document.getElementById(_this.countId);
+ }
+ if (_this.selectFrontStyleDom === null) {
+ _this.selectFrontStyleDom = document.getElementById(_this.selectFrontStyleId);
+ }
+ if (_this.selectBackStyleDom === null) {
+ _this.selectBackStyleDom = document.getElementById(_this.selectBackStyleId);
+ }
+ if (_this.wonDom === null) {
+ _this.wonDom = document.getElementById(_this.wonId);
+ }
+ if (_this.loaderDom === null) {
+ _this.loaderDom = document.getElementById(_this.memoryLoaderId);
+ }
+ },
+ fetchEmojis: function (_this) {
+ if (_this.emojis === null) {
+ fetch(_this.emojiUrl)
+ .then(function (response) {
+ return response.json();
+ })
+ .then(function (data) {
+ _this.emojis = data;
+ })
+ .catch(function (error) {
+ _this.emojis = [];
+ });
+ }
+ if (_this.emojiCategories === null) {
+ fetch(_this.emojiCategoriesUrl)
+ .then(function (response) {
+ return response.json();
+ })
+ .then(function (data) {
+ _this.emojiCategories = data;
+ })
+ .catch(function (error) {
+ _this.emojiCategories = [];
+ });
+ }
+ },
+ fetchSingleImages: function (_this) {
+ if (_this.preFetchImages === true) {
+ document.addEventListener("DOMContentLoaded", async function () {
+ for (let i = 0; i < _this.images.length; i++) {
+ if (_this.images[i].indexOf('http') === 0) {
+ fetch(_this.images[i]);
+ }
+ }
+ }, false);
+ }
+ },
+ fetchImages: function (_this) {
+ if (typeof (_this.memoryDom.dataset.imagesSrc) !== "undefined") {
+ _this.imageUrl = _this.memoryDom.dataset.imagesSrc;
+ }
+ if (_this.images === null) {
+ fetch(_this.imageUrl)
+ .then(function (response) {
+ return response.json();
+ })
+ .then(function (data) {
+ _this.images = data;
+ _this.fetchSingleImages(_this);
+ })
+ .catch(function (error) {
+ _this.images = [];
+ });
+ }
+ },
+ initDomActions: function (_this) {
+ _this.initDomVariables(_this);
+ _this.startAction(_this);
+ _this.setPrefilledCardActions(_this);
+ },
+ eraseCookie: function (name) {
+ let d = new Date;
+ d.setTime(d.getTime() - 24 * 60 * 60 * 1000 * 1);
+ document.cookie = name + "=;secure=true;path=/;expires=" + d.toGMTString();
+ },
+ eraseAllCookies: function () {
+ let _this = Memory;
+ _this.cookies = false;
+ _this.cookieSaveHighscore = 0;
+ _this.cookieStartValue = 0;
+
+ _this.eraseCookie("amountPairs");
+ _this.eraseCookie("countPairs");
+ _this.eraseCookie("speed");
+ _this.eraseCookie("size");
+ _this.eraseCookie("frontStyle");
+ _this.eraseCookie("backStyle");
+ _this.eraseCookie("highscorePairs");
+ _this.eraseCookie("highscorePairsCount");
+ _this.eraseCookie("highscoreCount");
+ _this.eraseCookie("cookieStartValue");
+ _this.eraseCookie("cookieSaveHighscore");
+
+ },
+ getCookie: function (name) {
+ let v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
+ return v ? v[2] : null;
+ },
+ setCookie: function (name, value, days = 365) {
+ let d = new Date;
+ d.setTime(d.getTime() + 24 * 60 * 60 * 1000 * days);
+ document.cookie = name + "=" + value + ";secure=true;path=/;expires=" + d.toGMTString();
+ },
+ getInt: function (value, defaultValue = 0) {
+ return isNaN(parseInt(value)) ? defaultValue : parseInt(value);
+ },
+ fillForm: function (_this) {
+ if (document.getElementById(_this.inputMemoryPairsId) !== null) {
+ document.getElementById(_this.inputMemoryPairsId).value = _this.amountPairs;
+ }
+ if (document.getElementById(_this.inputMemoryPairsCountId) !== null) {
+ document.getElementById(_this.inputMemoryPairsCountId).value = _this.countPairs;
+ }
+ if (document.getElementById(_this.selectSpeedId) !== null) {
+ document.getElementById(_this.selectSpeedId).value = _this.speed;
+ }
+ if (_this.selectFrontStyleDom !== null) {
+ _this.selectFrontStyleDom.value = _this.frontStyle;
+ }
+ if (_this.selectBackStyleDom !== null) {
+ _this.selectBackStyleDom.value = _this.backStyle;
+ }
+ if (document.getElementById(_this.inputMemorySizeId) !== null) {
+ document.getElementById(_this.inputMemorySizeId).value = _this.size;
+ }
+ },
+ loadFromCookies(_this) {
+ _this.cookieSaveHighscore = _this.getInt(_this.getCookie("cookieSaveHighscore"));
+ _this.cookieStartValue = _this.getInt(_this.getCookie("cookieStartValue"));
+
+//
+//gulp.task('copy-resources', [ 'copy-media', 'copy-data', 'copy-favicon', 'copy-fonts']);
+ if (_this.cookieStartValue > 0) {
+ _this.cookies = true;
+ _this.amountPairs = _this.getInt(_this.getCookie("amountPairs"));
+ _this.countPairs = _this.getInt(_this.getCookie("countPairs"));
+ _this.speed = _this.getInt(_this.getCookie("speed"));
+ _this.size = _this.getInt(_this.getCookie("size"));
+ _this.frontStyle = _this.getInt(_this.getCookie("frontStyle"));
+ _this.backStyle = _this.getInt(_this.getCookie("backStyle"));
+ }
+
+ if (_this.cookieSaveHighscore > 0) {
+ _this.cookies = true;
+ _this.highscorePairs = _this.getInt(_this.getCookie("highscorePairs"));
+ _this.highscorePairsCount = _this.getInt(_this.getCookie("highscorePairsCount"));
+ _this.highscoreCount = _this.getInt(_this.getCookie("highscoreCount"));
+ }
+ },
+ init: function (preFetchImages = false, enforceCookies = false) {
+ let _this = this;
+ if (preFetchImages) {
+ _this.preFetchImages = true;
+ }
+ _this.loadFromCookies(_this);
+ if (!_this.cookies && enforceCookies) {
+ _this.cookies = true;
+ _this.setCookieSaveHighscore(1);
+ _this.setCookieStartValue(2);
+ }
+ if (document.getElementById(_this.memoryId) === null) {
+ document.addEventListener("DOMContentLoaded", function () {
+ if (document.getElementById(Memory.memoryId) === null) {
+ _this.initDomActions();
+ _this.showHighscore(_this);
+ _this.fillForm(_this);
+ }
+ }, false);
+ } else {
+ _this.initDomActions(_this);
+ _this.showHighscore(_this);
+ _this.fillForm(_this);
+ }
+ _this.fetchEmojis(_this);
+ _this.fetchImages(_this);
+ }
+};
+
+
+//Memory.init();
diff --git a/src/JavaScript/PWA.js b/src/JavaScript/PWA.js
new file mode 100644
index 0000000..8360f01
--- /dev/null
+++ b/src/JavaScript/PWA.js
@@ -0,0 +1,58 @@
+
+const PWA = {
+ installBtnClass: "btn-install-as-app",
+ deferredPrompt: null,
+ displaNoneClass: Css.classes.displayNone,
+ installBtnDoms: [],
+ getDeferredPromptEvent: function () {
+ let _this = this;
+ if (_this.deferredPrompt === null) {
+ window.addEventListener('beforeinstallprompt', async function (e) {
+ e.preventDefault();
+ _this.deferredPrompt = e;
+ for (let i = 0; i < _this.installBtnDoms.length; i++) {
+ _this.installBtnDoms[i].classList.remove(_this.displaNoneClass);
+ }
+ });
+ }
+ },
+ installBtnAction: function () {
+ let _this = PWA;
+ for (let i = 0; i < _this.installBtnDoms.length; i++) {
+ _this.installBtnDoms[i].classList.add(_this.displaNoneClass);
+ }
+ _this.deferredPrompt.prompt();
+ _this.deferredPrompt.userChoice;
+ _this.deferredPrompt = null;
+ },
+
+ setBtnActions: function () {
+ let _this = PWA;
+ for (let i = 0; i < _this.installBtnDoms.length; i++) {
+ _this.installBtnDoms[i].addEventListener('click', _this.installBtnAction, false);
+ }
+ window.addEventListener('appinstalled', function () {
+ for (let i = 0; i < _this.installBtnDoms.length; i++) {
+ _this.installBtnDoms[i].classList.add(_this.displaNoneClass);
+ }
+ _this.deferredPrompt = null;
+ });
+ },
+ isStandalone: false,
+ getPWADisplayMode: function () {
+ this.isStandalone = window.matchMedia('(display-mode: standalone)').matches;
+ if (document.referrer.startsWith('android-app://')) {
+ return 'twa';
+ } else if (navigator.standalone || this.isStandalone) {
+ return 'standalone';
+ }
+ return 'browser';
+ },
+ init: function () {
+ this.installBtnDoms = document.getElementsByClassName(PWA.installBtnClass)
+ this.getDeferredPromptEvent();
+ this.setBtnActions();
+ }
+};
+
+PWA.init();
\ No newline at end of file
diff --git a/src/JavaScript/main.js b/src/JavaScript/main.js
new file mode 100644
index 0000000..8421d97
--- /dev/null
+++ b/src/JavaScript/main.js
@@ -0,0 +1,212 @@
+const RaMemoryPage = {
+ howToPlayId: "how-to-play",
+ aboutId: "about",
+ gameId: "game",
+ imprintId: "imprint",
+ gdprId: "gdpr",
+ settingsId: "settings",
+ displayNoneClass: Css.classes.displayNone,
+ howToPlayBtnClass: "btn-howto",
+ gdprBtnClass: "btn-gdpr",
+ imprintBtnClass: "btn-imprint",
+ settingsBtnClass: "btn-settings",
+ themeSwitchBtnClass: "btn-toggle-theme",
+ settingsCheckUseCookiesId: "settings-use-cookies",
+ settingsCheckSaveHighscoreId: "settings-save-highscore",
+ settingsRadioStartValueClass: "settings-start-value",
+ scrollToTimeout: 200,
+ timeoutId: 0,
+ prefersDarkTheme: null,
+ currentTheme: null,
+ closeAll: function (_this, not = "") {
+ if (document.getElementById(_this.howToPlayId) && not !== _this.howToPlayId) {
+ if (!document.getElementById(_this.howToPlayId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.howToPlayId).classList.add(_this.displayNoneClass);
+ }
+ }
+ if (document.getElementById(_this.gameId) && not !== _this.gameId) {
+ if (!document.getElementById(_this.gameId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.gameId).classList.add(_this.displayNoneClass);
+ }
+ }
+ if (document.getElementById(_this.aboutId) && not !== _this.aboutId) {
+ if (!document.getElementById(_this.aboutId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.aboutId).classList.add(_this.displayNoneClass);
+ }
+ }
+
+ if (document.getElementById(_this.imprintId) && not !== _this.imprintId) {
+ if (!document.getElementById(_this.imprintId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.imprintId).classList.add(_this.displayNoneClass);
+ }
+ }
+ if (document.getElementById(_this.gdprId) && not !== _this.gdprId) {
+ if (!document.getElementById(_this.gdprId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.gdprId).classList.add(_this.displayNoneClass);
+ }
+ }
+ if (document.getElementById(_this.settingsId) && not !== _this.settingsId) {
+ if (!document.getElementById(_this.settingsId).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(_this.settingsId).classList.add(_this.displayNoneClass);
+ }
+ }
+ },
+ showJust: function (id) {
+ let _this = RaMemoryPage;
+ _this.closeAll(_this, id);
+ if (document.getElementById(id)) {
+ if (document.getElementById(id).classList.contains(_this.displayNoneClass)) {
+ document.getElementById(id).classList.remove(_this.displayNoneClass);
+ }
+ }
+ },
+ btnActions: function (_this, id) {
+ _this.showJust(id);
+ _this.timeoutId = setTimeout(function () {
+ document.getElementById(id).scrollIntoView({behavior: "smooth"});
+ }, _this.scrollToTimeout);
+ },
+ initBtnActions: function (_this) {
+ document.getElementById(Memory.generateMemoryBtnId).addEventListener("click", function () {
+ _this.showJust(_this.gameId);
+ });
+ let btns = document.getElementsByClassName(_this.howToPlayBtnClass);
+ for (let i = 0; i < btns.length; i++) {
+ btns[i].addEventListener("click", function () {
+ _this.btnActions(_this, _this.howToPlayId);
+ });
+ }
+ btns = document.getElementsByClassName(_this.gdprBtnClass);
+ for (let i = 0; i < btns.length; i++) {
+ btns[i].addEventListener("click", function () {
+ _this.btnActions(_this, _this.gdprId);
+ });
+ }
+ btns = document.getElementsByClassName(_this.imprintBtnClass);
+ for (let i = 0; i < btns.length; i++) {
+ btns[i].addEventListener("click", function () {
+ _this.btnActions(_this, _this.imprintId);
+ });
+ }
+ btns = document.getElementsByClassName(_this.settingsBtnClass);
+ for (let i = 0; i < btns.length; i++) {
+ btns[i].addEventListener("click", function () {
+ _this.btnActions(_this, _this.settingsId);
+ });
+ }
+
+ btns = document.getElementsByClassName(_this.themeSwitchBtnClass);
+ for (let i = 0; i < btns.length; i++) {
+ btns[i].addEventListener("click", function () {
+ let theme = "";
+ if (_this.prefersDarkTheme.matches) {
+ document.body.classList.toggle(Css.classes.lightTheme);
+ theme = document.body.classList.contains(Css.classes.lightTheme)
+ ? "light"
+ : "dark";
+ } else {
+ document.body.classList.toggle(Css.classes.darkTheme);
+ theme = document.body.classList.contains(Css.classes.darkTheme)
+ ? "dark"
+ : "light";
+ }
+ localStorage.setItem("theme", theme);
+ });
+ }
+ document.getElementById("save-settings").addEventListener("click", function (e) {
+ if (document.getElementById(_this.settingsCheckUseCookiesId).checked) {
+ _this.saveSettingsAction(_this);
+
+ document.getElementById(_this.settingsCheckUseCookiesId).parentNode.classList.remove("bg-alert");
+ document.getElementById(_this.settingsCheckUseCookiesId).parentNode.classList.remove("text-white");
+ } else {
+ document.getElementById(_this.settingsCheckUseCookiesId).parentNode.classList.add("bg-alert");
+ document.getElementById(_this.settingsCheckUseCookiesId).parentNode.classList.add("text-white");
+ }
+ });
+ document.getElementById("clear-settings").addEventListener("click", function (e) {
+ Memory.eraseAllCookies();
+ document.getElementById(_this.settingsRadioStartValueClass + "-0").checked = true;
+ document.getElementById(_this.settingsCheckSaveHighscoreId).checked = false;
+ document.getElementById(_this.settingsCheckUseCookiesId).checked = false;
+
+ document.getElementById("settings-saved").classList.remove("d-none");
+ setTimeout(function(){
+ document.getElementById("settings-saved").classList.add("d-none");
+ },1350);
+ });
+ },
+ initTheme: function (_this) {
+ _this.prefersDarkTheme = window.matchMedia("(prefers-color-scheme: dark)");
+ _this.currentTheme = localStorage.getItem("theme");
+ if (_this.currentTheme === "dark") {
+ document.body.classList.toggle(Css.classes.darkTheme);
+ } else if (_this.currentTheme === "light") {
+ document.body.classList.toggle(Css.classes.lightTheme);
+ }
+ },
+ initSettings: function (_this) {
+ document.getElementById(_this.settingsRadioStartValueClass + "-" + Memory.cookieStartValue).checked = true;
+ document.getElementById(_this.settingsCheckSaveHighscoreId).checked = Memory.cookieSaveHighscore === 0 ? false : true;
+ document.getElementById(_this.settingsCheckUseCookiesId).checked = Memory.cookies;
+ },
+ saveSettingsAction: function (_this) {
+ document.cookie = "";
+ Memory.cookies = true;
+ Memory.setCookieSaveHighscore(document.getElementById(_this.settingsCheckSaveHighscoreId).checked ? 1 : 0);
+ Memory.setCookieStartValue(document.querySelector('input[name="' + _this.settingsRadioStartValueClass + '"]:checked').value);
+ document.getElementById("settings-saved").classList.remove("d-none");
+ setTimeout(function(){
+ document.getElementById("settings-saved").classList.add("d-none");
+ },1350);
+ },
+ init: function () {
+ let _this = this;
+ if (typeof Memory === "object") {
+ Memory.init();
+ }
+ _this.initTheme(_this);
+ _this.initBtnActions(_this);
+ _this.initSettings(_this);
+ if (location.hash === "#" + _this.howToPlayId ||
+ location.hash === "#" + _this.settingsId ||
+ location.hash === "#" + _this.gdprId ||
+ location.hash === "#" + _this.imprintId
+ ) {
+ let id = location.hash.substr(1, location.hash.length - 1);
+ if (document.getElementById(id)) {
+ _this.showJust(id);
+ setTimeout(function () {
+ document.getElementById(id).scrollIntoView({behavior: "smooth"});
+ }, 450);
+ }
+ }
+ _this.closeAll(_this, _this.aboutId);
+ }
+};
+
+RaMemoryPage.init();
+
+
+const registerServiceWorker = async () => {
+ if ('serviceWorker' in navigator) {
+ try {
+ const registration = await navigator.serviceWorker.register(
+ './sw.js',
+ {
+ scope: './',
+ }
+ );
+ if (registration.installing) {
+ } else if (registration.waiting) {
+ } else if (registration.active) {
+ }
+ } catch (error) {
+ console.error(`Registration failed with ${error}`);
+ }
+ }
+};
+
+window.addEventListener("DOMContentLoaded", async function (event) {
+ registerServiceWorker();
+});
\ No newline at end of file
diff --git a/src/Scss/Firework.scss b/src/Scss/Firework.scss
new file mode 100644
index 0000000..40d06e5
--- /dev/null
+++ b/src/Scss/Firework.scss
@@ -0,0 +1,29 @@
+/*
+ Created on : Jan 29, 2024, 8:03:11 PM
+ Author : Raphael Martin
+*/
+
+.firework {
+ position: absolute;
+ width: 5px;
+ height: 5px;
+ opacity: 1;
+}
+
+@keyframes launchFirework {
+ to {
+ opacity: 0;
+ }
+}
+
+@for $i from 1 through 50 {
+ @keyframes launchFirework#{$i} {
+ to {
+ transform: translate(random(201) - 101 + px, random(201) - 101 + px);
+ }
+ }
+ .firework#{$i} {
+ animation: launchFirework random(1001) + 499 + ms linear forwards, launchFirework#{$i} random(1001) + 499 + ms linear forwards;
+ }
+}
+
diff --git a/src/Scss/Memory.scss b/src/Scss/Memory.scss
new file mode 100644
index 0000000..1c7f029
--- /dev/null
+++ b/src/Scss/Memory.scss
@@ -0,0 +1,89 @@
+#won {
+ bottom: 2rem;
+ height: 80px;
+}
+#memory{
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+
+ > .memory-flip-card{
+
+ font-size: 8px;
+ width: 230px;
+ height: 230px;
+ margin: 0.3rem;
+ background-color: transparent;
+ perspective: 1000px;
+ opacity: 1;
+ -webkit-transition: opacity 2s ease-in-out;
+ -moz-transition: opacity 2s ease-in-out;
+ transition: opacity 2s ease-in-out;
+ > .inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ transition: transform 0.8s;
+ transform-style: preserve-3d;
+ > .front {
+ cursor: pointer;
+ background-color: #333;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ &.style-one{
+ background-image: url("../media/frog512x512.png");
+
+ }
+ &.style-two{
+ background-image: url("../media/altogether-logo.png");
+ &.bg-black, &.bg-blue{
+ background-image: url("../media/altogether-logo-inverted.png");
+ }
+
+ }
+ }
+ > .back {
+ font-size: 8px;
+ transform: rotateY(180deg);
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center;
+ }
+ > .front, > .back {
+ -webkit-user-select: none; /* Safari */
+ -ms-user-select: none; /* IE 10 and IE 11 */
+ user-select: none; /* Standard syntax */
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
+ }
+ }
+ &.found{
+ opacity: 0.7;
+ > .inner{
+ > .back{
+ border: solid 1px #bcce43;
+ }
+ }
+ }
+ &.active, &.found{
+ > .inner{
+ transform: rotateY(180deg);
+ }
+ }
+ }
+}
+
+@media (min-width: 750px) {
+ #memory > .card{
+ font-size: 20px;
+ > .inner > .back {
+ font-size: 20px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Scss/_variables.scss b/src/Scss/_variables.scss
new file mode 100644
index 0000000..03aa072
--- /dev/null
+++ b/src/Scss/_variables.scss
@@ -0,0 +1,138 @@
+/*
+Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+Click nbfs://nbhost/SystemFileSystem/Templates/ClientSide/style.scss to edit this template
+*/
+/*
+ Created on : Jan 29, 2024, 8:40:51 PM
+ Author : Raphael Martin
+*/
+
+$darkRed: #8B0000;
+$crimson: #DC143C;
+$firebrick: #B22222;
+$indianRed: #CD5C5C;
+$tomato: #FF6347;
+
+$primary: #F09130;
+$secondry: #308ff0;
+$success: #bcce43;
+$violet: #5543ce;
+$black: #333;
+$white: #fff;
+$blue: #15739f;
+/*:root {
+ color-scheme: light dark; both supported
+
+ Light mode
+ --light-switch-shadow: #373d4e;
+ --light-switch-icon: "๐";
+ --light-switch-text: "dark mode?";
+
+ Dark mode
+ --dark-switch-shadow: #fce477;
+ --dark-switch-icon: "๐";
+ --dark-switch-text: "light mode?";
+}
+@media (prefers-color-scheme: dark) {
+
+ :root {
+ Default mode
+ --bg-color: #333;
+ --text-color: #fff;
+ --switch-shadow-color: var(--light-switch-shadow);
+ --switch-icon: var(--light-switch-icon);
+ --switch-text: var(--light-switch-text);
+ }
+}
+@media (prefers-color-scheme: light) {
+
+ :root {
+ Default mode
+ --bg-color: #fff;
+ --text-color: #333;
+ --switch-shadow-color: var(--light-switch-shadow);
+ --switch-icon: var(--light-switch-icon);
+ --switch-text: var(--light-switch-text);
+ }
+}*/
+
+$colors: (
+"primary": $primary,
+"black": $black,
+"white": $white,
+"secundary": $secondry,
+"alert": $firebrick,
+"success": $success,
+"blue": $blue,
+
+);
+
+$displays: (
+"flex",
+"none",
+"block"
+);
+
+$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");
+
+$positions: (
+absolute,
+fixed,
+relative
+);
+
+$aligns: (
+left,right,center
+);
+
+$displays: (
+flex,
+none,
+block
+);
+
+$justify: (
+"content": (
+space-between,
+center
+),
+);
+
+$cursors: (
+alias,
+all-scroll,
+auto,
+cell,
+col-resize,
+context-menu,
+copy,
+crosshair,
+default,
+e-resize,
+ew-resize,
+grab,
+grabbing,
+help,
+move,
+n-resize,
+ne-resize,
+nesw-resize,
+ns-resize,
+nw-resize,
+nwse-resize,
+no-drop,
+none,
+not-allowed,
+pointer,
+progress,
+row-resize,
+s-resize,
+se-resize,
+sw-resize,
+text,
+w-resize,
+wait,
+zoom-in,
+zoom-out
+);
+
diff --git a/src/Scss/main.scss b/src/Scss/main.scss
new file mode 100644
index 0000000..996fb33
--- /dev/null
+++ b/src/Scss/main.scss
@@ -0,0 +1,463 @@
+/*
+Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+Click nbfs://nbhost/SystemFileSystem/Templates/ClientSide/style.scss to edit this template
+*/
+/*
+ Created on : Jan 28, 2024, 4:32:52 PM
+ Author : Raphael Martin
+*/
+
+@font-face {
+ font-family: "TextMeOne";
+ src: url("/fonts/TextMeOne-Regular.ttf") format("truetype");
+}
+
+@function invert($color, $amount: 100%) {
+ $inverse: change-color($color, $hue: hue($color) + 180);
+ @return mix($inverse, $color, $amount);
+}
+
+@import "_variables.scss";
+@import "Firework.scss";
+@import "Memory.scss";
+
+
+.rounded-top{
+ border-radius: 0.5rem 0.5rem 0 0;
+}
+
+button, .btn {
+ border: none;
+ cursor: pointer;
+ height: 1.2rem;
+ font-family: "TextMeOne", sans-serif;
+ font-weight: bold;
+ font-size: 0.8rem;
+ padding: 0.1rem 0.5rem;
+}
+.btn, select{
+ cursor:pointer;
+}
+
+
+body {
+ --text-color:#fff;
+ --bkg-color: #333;
+ .bg{
+ --text-color:#fff;
+ --bkg-color: #333;
+ }
+ .dark-mode-only{
+ display: block;
+ }
+ .light-mode-only{
+ display: none;
+ }
+ button, .btn{
+ color :#333;
+ background: rgba(#fff, 0.6);
+ border-color: #333;
+ }
+ &.dark-theme {
+ --text-color:#333;
+ --bkg-color: #fff;
+ button, .btn{
+ color :#fff;
+ background: rgba(#333, 0.6);
+ border-color: #fff;
+ }
+ .dark-mode-only{
+ display: none;
+ }
+ .light-mode-only{
+ display: block;
+ }
+ .bg{
+ --text-color:#333;
+ --bkg-color: #fff;
+ }
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ /* defaults to dark theme */
+
+ body {
+ --text-color:#333;
+ --bkg-color: #fff;
+ .bg{
+ --text-color:#333;
+ --bkg-color: #fff;
+ }
+ .dark-mode-only{
+ display: none;
+ }
+ .light-mode-only{
+ display: block;
+ }
+
+ button, .btn{
+ color :#fff;
+ background: rgba(#333, 0.6);
+ border-color: #fff;
+ }
+ &.light-theme {
+ --text-color:#fff;
+ --bkg-color: #333;
+
+ button, .btn{
+ color :#333;
+ background: rgba(#fff, 0.6);
+ border-color: #333;
+ }
+ .dark-mode-only{
+ display: block;
+ }
+ .light-mode-only{
+ display: none;
+ }
+ .bg{
+ --text-color:#fff;
+ --bkg-color: #333;
+ }
+ }
+
+ }
+}
+.loader {
+ width: 100%;
+ height: 4.8px;
+ display: inline-block;
+ position: relative;
+ overflow: hidden;
+}
+.loader::after {
+ content: '';
+ width: 96px;
+ height: 4.8px;
+ background: $primary;
+ position: absolute;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ animation: hitZak 0.3s ease-in-out infinite alternate;
+}
+
+@keyframes hitZak {
+ 0% {
+ left: 0;
+ transform: translateX(-1%);
+ }
+ 100% {
+ left: 100%;
+ transform: translateX(-99%);
+ }
+}
+
+
+#main {
+ margin-bottom: 5rem;
+}
+
+body {
+ background: var(--bkg-color);
+ color: var(--text-color);
+ overflow-x: hidden;
+ height: 100%;
+ font-family: "TextMeOne", sans-serif;
+ font-size: 1rem;
+ > div{
+ border-top: solid 1px;
+ border-bottom: solid 1px;
+ border-color: $primary;
+ left: 0;
+ right: 0;
+ margin: auto;
+ text-align: center;
+ }
+ a{
+ color: $primary;
+ text-decoration: none;
+ font-weight: bold;
+ }
+ .bg{
+ background: var(--bkg-color);
+ color: var(--text-color);
+ }
+}
+
+html{
+ font-size: 14px;
+
+}
+@media (min-width: 480px) {
+ html{
+ font-size: 20px;
+ }
+}
+
+.main-btn{
+ margin-top: 1rem;
+ font-size: 1.2rem;
+
+ height: 1.8rem;
+}
+
+.w-100{
+ width: 100%;
+}
+
+.h-0{
+ height: 0;
+}
+.container, figure, video, img{
+ left:0;
+ right: 0;
+ width: 100%;
+ height: auto;
+ margin-left: auto;
+ margin-right: auto;
+ /*max-width: 890px;*/
+}
+
+.container{
+ max-width: 890px;
+}
+input, select {
+ border: 2px solid $primary;
+ color: $black;
+ box-shadow:
+ inset 0 0 8px rgba(0,0,0,0.1),
+ 0 0 16px rgba(0,0,0,0.1);
+ padding: 5px;
+ background: rgba(255,255,255,0.8);
+ margin: 0 0 5px 0;
+}
+
+.user-select-none {
+
+ -webkit-user-select: none; /* Safari */
+ -ms-user-select: none; /* IE 10 and IE 11 */
+ user-select: none; /* Standard syntax */
+}
+
+.text-wrap{
+ text-wrap: wrap;
+ overflow-wrap: break-word;
+}
+
+.to-top{
+ top: -1.3rem;
+}
+
+.left {
+ left: 0;
+}
+
+.right {
+ right: 0;
+}
+.top {
+ top: 0;
+}
+
+.bottom {
+ bottom: 0;
+}
+
+.overflow-hidden{
+ overflow: hidden;
+}
+
+.success{
+ background-color: $success !important;
+ color: $black;
+}
+
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+.flex-row {
+ flex-direction: row;
+}
+
+@for $i from 1 through 6 {
+ .h#{$i}, h#{$i} {
+ font-size: 0.275rem*(6 - $i)+1rem;
+ }
+}
+
+
+fieldset{
+ display: flex;
+ align-items: center;
+ input{
+ margin: 0;
+ cursor: pointer;
+ }
+ label{
+ cursor: pointer;
+ padding-left: 2rem;
+ width: 100%;
+ display: box;
+ }
+}
+
+@for $i from 0 through 10 {
+ .m-#{$i} {
+ margin: $i * 0.25rem;
+ }
+ .mb-#{$i} {
+ margin-bottom: $i * 0.25rem;
+ }
+ .mt-#{$i} {
+ margin-top: $i * 0.25rem;
+ }
+ .me-#{$i} {
+ margin-right: $i * 0.25rem;
+ }
+ .ms-#{$i} {
+ margin-left: $i * 0.25rem;
+ }
+
+ .p-#{$i} {
+ padding: $i * 0.25rem;
+ }
+ .pb-#{$i} {
+ padding-bottom: $i * 0.25rem;
+ }
+ .pt-#{$i} {
+ padding-top: $i * 0.25rem;
+ }
+ .pe-#{$i} {
+ padding-right: $i * 0.25rem;
+ }
+ .ps-#{$i} {
+ padding-left: $i * 0.25rem;
+ }
+}
+
+@each $name, $glyph in $icons {
+ .icon-#{$name}:before {
+ display: inline-block;
+ font-family: "Icon Font";
+ content: $glyph;
+ }
+}
+
+@each $name, $color in $colors {
+ .bg-#{$name} {
+ background-color: $color !important;
+ }
+ .text-#{$name} {
+ color: $color !important;
+ }
+ .border-#{$name} {
+ border-color: $color !important;
+ }
+}
+
+@each $name, $modes in $justify {
+ @each $mode in $modes {
+ .justify-#{$name}-#{$mode} {
+ justify-#{$name}: $mode !important;
+ }
+ }
+}
+@each $name in $displays {
+ .d-#{$name} {
+ display: $name !important;
+ }
+}
+@each $name in $cursors {
+ .cursor-#{$name} {
+ cursor: $name !important;
+ }
+}
+@each $name in $positions {
+ .position-#{$name} {
+ position: $name !important;
+ }
+}
+@each $name in $aligns {
+ .text-#{$name} {
+ text-align: $name !important;
+ }
+}
+
+@media all and (display-mode: standalone) {
+ .inapp-hidden{
+ display: none !important;
+ }
+}
+
+
+@media not all and (display-mode: standalone) {
+ .browser-hidden{
+ display: none !important;
+ }
+}
+
+
+
+
+
+
+
+
+
+.checkmark__circle {
+ stroke-dasharray: 166;
+ stroke-dashoffset: 166;
+ stroke-width: 2;
+ stroke-miterlimit: 10;
+ stroke: $success;
+ fill: none;
+ animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
+}
+
+.checkmark {
+ bottom: 150px;
+ left: 0;
+ right: 0;
+
+ position: fixed;
+ margin: auto;
+ width: 56px;
+ height: 56px;
+ border-radius: 50%;
+ display: block;
+ stroke-width: 2;
+ stroke: $white;
+ stroke-miterlimit: 10;
+ margin: 10% auto;
+ box-shadow: inset 0px 0px 0px $success;
+ animation: fill .4s ease-in-out .4s forwards, scale .3s ease-in-out .9s both;
+}
+
+.checkmark__check {
+ transform-origin: 50% 50%;
+ stroke-dasharray: 48;
+ stroke-dashoffset: 48;
+ animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
+}
+
+@keyframes stroke {
+ 100% {
+ stroke-dashoffset: 0;
+ }
+}
+@keyframes scale {
+ 0%, 100% {
+ transform: none;
+ }
+ 50% {
+ transform: scale3d(1.1, 1.1, 1);
+ }
+}
+@keyframes fill {
+ 100% {
+ box-shadow: inset 0px 0px 0px 30px #7ac142;
+ }
+}
\ No newline at end of file
diff --git a/src/config/EMOJI_LICENCE.md b/src/config/EMOJI_LICENCE.md
new file mode 100644
index 0000000..520fcfa
--- /dev/null
+++ b/src/config/EMOJI_LICENCE.md
@@ -0,0 +1,25 @@
+
+https://github.com/github/gemoji/blob/master/LICENSE
+
+Copyright (c) 2019 GitHub, Inc.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/src/config/emoji-categories.json b/src/config/emoji-categories.json
new file mode 100644
index 0000000..b716f04
--- /dev/null
+++ b/src/config/emoji-categories.json
@@ -0,0 +1,12 @@
+[
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165],
+ [166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528],
+ [529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680],
+ [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813],
+ [814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031],
+ [1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116],
+ [1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377],
+ [1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600],
+ [1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869]
+]
\ No newline at end of file
diff --git a/src/config/emoji-categories.min.json b/src/config/emoji-categories.min.json
new file mode 100644
index 0000000..0be8398
--- /dev/null
+++ b/src/config/emoji-categories.min.json
@@ -0,0 +1 @@
+[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1e3,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165],[166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528],[529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680],[681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813],[814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1e3,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031],[1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116],[1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377],[1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600],[1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869]]
\ No newline at end of file
diff --git a/src/config/emojis.json b/src/config/emojis.json
new file mode 100644
index 0000000..20d487b
--- /dev/null
+++ b/src/config/emojis.json
@@ -0,0 +1,1872 @@
+[
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐
",
+ "๐คฃ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ซ ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฅฐ",
+ "๐",
+ "๐คฉ",
+ "๐",
+ "๐",
+ "โบ๏ธ",
+ "๐",
+ "๐",
+ "๐ฅฒ",
+ "๐",
+ "๐",
+ "๐",
+ "๐คช",
+ "๐",
+ "๐ค",
+ "๐ค",
+ "๐คญ",
+ "๐ซข",
+ "๐ซฃ",
+ "๐คซ",
+ "๐ค",
+ "๐ซก",
+ "๐ค",
+ "๐คจ",
+ "๐",
+ "๐",
+ "๐ถ",
+ "๐ซฅ",
+ "๐ถโ๐ซ๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฌ",
+ "๐ฎโ๐จ",
+ "๐คฅ",
+ "๐ซจ",
+ "๐",
+ "๐",
+ "๐ช",
+ "๐คค",
+ "๐ด",
+ "๐ท",
+ "๐ค",
+ "๐ค",
+ "๐คข",
+ "๐คฎ",
+ "๐คง",
+ "๐ฅต",
+ "๐ฅถ",
+ "๐ฅด",
+ "๐ต",
+ "๐ตโ๐ซ",
+ "๐คฏ",
+ "๐ค ",
+ "๐ฅณ",
+ "๐ฅธ",
+ "๐",
+ "๐ค",
+ "๐ง",
+ "๐",
+ "๐ซค",
+ "๐",
+ "๐",
+ "โน๏ธ",
+ "๐ฎ",
+ "๐ฏ",
+ "๐ฒ",
+ "๐ณ",
+ "๐ฅบ",
+ "๐ฅน",
+ "๐ฆ",
+ "๐ง",
+ "๐จ",
+ "๐ฐ",
+ "๐ฅ",
+ "๐ข",
+ "๐ญ",
+ "๐ฑ",
+ "๐",
+ "๐ฃ",
+ "๐",
+ "๐",
+ "๐ฉ",
+ "๐ซ",
+ "๐ฅฑ",
+ "๐ค",
+ "๐ก",
+ "๐ ",
+ "๐คฌ",
+ "๐",
+ "๐ฟ",
+ "๐",
+ "โ ๏ธ",
+ "๐ฉ",
+ "๐คก",
+ "๐น",
+ "๐บ",
+ "๐ป",
+ "๐ฝ",
+ "๐พ",
+ "๐ค",
+ "๐บ",
+ "๐ธ",
+ "๐น",
+ "๐ป",
+ "๐ผ",
+ "๐ฝ",
+ "๐",
+ "๐ฟ",
+ "๐พ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "โฃ๏ธ",
+ "๐",
+ "โค๏ธโ๐ฅ",
+ "โค๏ธโ๐ฉน",
+ "โค๏ธ",
+ "๐ฉท",
+ "๐งก",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฉต",
+ "๐",
+ "๐ค",
+ "๐ค",
+ "๐ฉถ",
+ "๐ค",
+ "๐",
+ "๐ฏ",
+ "๐ข",
+ "๐ฅ",
+ "๐ซ",
+ "๐ฆ",
+ "๐จ",
+ "๐ณ๏ธ",
+ "๐ฌ",
+ "๐๏ธโ๐จ๏ธ",
+ "๐จ๏ธ",
+ "๐ฏ๏ธ",
+ "๐ญ",
+ "๐ค",
+ "๐",
+ "๐ค",
+ "๐๏ธ",
+ "โ",
+ "๐",
+ "๐ซฑ",
+ "๐ซฒ",
+ "๐ซณ",
+ "๐ซด",
+ "๐ซท",
+ "๐ซธ",
+ "๐",
+ "๐ค",
+ "๐ค",
+ "โ๏ธ",
+ "๐ค",
+ "๐ซฐ",
+ "๐ค",
+ "๐ค",
+ "๐ค",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "โ๏ธ",
+ "๐ซต",
+ "๐",
+ "๐",
+ "โ",
+ "๐",
+ "๐ค",
+ "๐ค",
+ "๐",
+ "๐",
+ "๐ซถ",
+ "๐",
+ "๐คฒ",
+ "๐ค",
+ "๐",
+ "โ๏ธ",
+ "๐
",
+ "๐คณ",
+ "๐ช",
+ "๐ฆพ",
+ "๐ฆฟ",
+ "๐ฆต",
+ "๐ฆถ",
+ "๐",
+ "๐ฆป",
+ "๐",
+ "๐ง ",
+ "๐ซ",
+ "๐ซ",
+ "๐ฆท",
+ "๐ฆด",
+ "๐",
+ "๐๏ธ",
+ "๐
",
+ "๐",
+ "๐ซฆ",
+ "๐ถ",
+ "๐ง",
+ "๐ฆ",
+ "๐ง",
+ "๐ง",
+ "๐ฑ",
+ "๐จ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐จโ๐ฆฐ",
+ "๐จโ๐ฆฑ",
+ "๐จโ๐ฆณ",
+ "๐จโ๐ฆฒ",
+ "๐ฉ",
+ "๐ฉโ๐ฆฐ",
+ "๐งโ๐ฆฐ",
+ "๐ฉโ๐ฆฑ",
+ "๐งโ๐ฆฑ",
+ "๐ฉโ๐ฆณ",
+ "๐งโ๐ฆณ",
+ "๐ฉโ๐ฆฒ",
+ "๐งโ๐ฆฒ",
+ "๐ฑโโ๏ธ",
+ "๐ฑโโ๏ธ",
+ "๐ง",
+ "๐ด",
+ "๐ต",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐
",
+ "๐
โโ๏ธ",
+ "๐
โโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐คฆ",
+ "๐คฆโโ๏ธ",
+ "๐คฆโโ๏ธ",
+ "๐คท",
+ "๐คทโโ๏ธ",
+ "๐คทโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐จโโ๏ธ",
+ "๐ฉโโ๏ธ",
+ "๐งโ๐",
+ "๐จโ๐",
+ "๐ฉโ๐",
+ "๐งโ๐ซ",
+ "๐จโ๐ซ",
+ "๐ฉโ๐ซ",
+ "๐งโโ๏ธ",
+ "๐จโโ๏ธ",
+ "๐ฉโโ๏ธ",
+ "๐งโ๐พ",
+ "๐จโ๐พ",
+ "๐ฉโ๐พ",
+ "๐งโ๐ณ",
+ "๐จโ๐ณ",
+ "๐ฉโ๐ณ",
+ "๐งโ๐ง",
+ "๐จโ๐ง",
+ "๐ฉโ๐ง",
+ "๐งโ๐ญ",
+ "๐จโ๐ญ",
+ "๐ฉโ๐ญ",
+ "๐งโ๐ผ",
+ "๐จโ๐ผ",
+ "๐ฉโ๐ผ",
+ "๐งโ๐ฌ",
+ "๐จโ๐ฌ",
+ "๐ฉโ๐ฌ",
+ "๐งโ๐ป",
+ "๐จโ๐ป",
+ "๐ฉโ๐ป",
+ "๐งโ๐ค",
+ "๐จโ๐ค",
+ "๐ฉโ๐ค",
+ "๐งโ๐จ",
+ "๐จโ๐จ",
+ "๐ฉโ๐จ",
+ "๐งโโ๏ธ",
+ "๐จโโ๏ธ",
+ "๐ฉโโ๏ธ",
+ "๐งโ๐",
+ "๐จโ๐",
+ "๐ฉโ๐",
+ "๐งโ๐",
+ "๐จโ๐",
+ "๐ฉโ๐",
+ "๐ฎ",
+ "๐ฎโโ๏ธ",
+ "๐ฎโโ๏ธ",
+ "๐ต๏ธ",
+ "๐ต๏ธโโ๏ธ",
+ "๐ต๏ธโโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐ฅท",
+ "๐ท",
+ "๐ทโโ๏ธ",
+ "๐ทโโ๏ธ",
+ "๐ซ
",
+ "๐คด",
+ "๐ธ",
+ "๐ณ",
+ "๐ณโโ๏ธ",
+ "๐ณโโ๏ธ",
+ "๐ฒ",
+ "๐ง",
+ "๐คต",
+ "๐คตโโ๏ธ",
+ "๐คตโโ๏ธ",
+ "๐ฐ",
+ "๐ฐโโ๏ธ",
+ "๐ฐโโ๏ธ",
+ "๐คฐ",
+ "๐ซ",
+ "๐ซ",
+ "๐คฑ",
+ "๐ฉโ๐ผ",
+ "๐จโ๐ผ",
+ "๐งโ๐ผ",
+ "๐ผ",
+ "๐
",
+ "๐คถ",
+ "๐งโ๐",
+ "๐ฆธ",
+ "๐ฆธโโ๏ธ",
+ "๐ฆธโโ๏ธ",
+ "๐ฆน",
+ "๐ฆนโโ๏ธ",
+ "๐ฆนโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐ถ",
+ "๐ถโโ๏ธ",
+ "๐ถโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐งโ๐ฆฏ",
+ "๐จโ๐ฆฏ",
+ "๐ฉโ๐ฆฏ",
+ "๐งโ๐ฆผ",
+ "๐จโ๐ฆผ",
+ "๐ฉโ๐ฆผ",
+ "๐งโ๐ฆฝ",
+ "๐จโ๐ฆฝ",
+ "๐ฉโ๐ฆฝ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐",
+ "๐บ",
+ "๐ด๏ธ",
+ "๐ฏ",
+ "๐ฏโโ๏ธ",
+ "๐ฏโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐คบ",
+ "๐",
+ "โท๏ธ",
+ "๐",
+ "๐๏ธ",
+ "๐๏ธโโ๏ธ",
+ "๐๏ธโโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "๐ฃ",
+ "๐ฃโโ๏ธ",
+ "๐ฃโโ๏ธ",
+ "๐",
+ "๐โโ๏ธ",
+ "๐โโ๏ธ",
+ "โน๏ธ",
+ "โน๏ธโโ๏ธ",
+ "โน๏ธโโ๏ธ",
+ "๐๏ธ",
+ "๐๏ธโโ๏ธ",
+ "๐๏ธโโ๏ธ",
+ "๐ด",
+ "๐ดโโ๏ธ",
+ "๐ดโโ๏ธ",
+ "๐ต",
+ "๐ตโโ๏ธ",
+ "๐ตโโ๏ธ",
+ "๐คธ",
+ "๐คธโโ๏ธ",
+ "๐คธโโ๏ธ",
+ "๐คผ",
+ "๐คผโโ๏ธ",
+ "๐คผโโ๏ธ",
+ "๐คฝ",
+ "๐คฝโโ๏ธ",
+ "๐คฝโโ๏ธ",
+ "๐คพ",
+ "๐คพโโ๏ธ",
+ "๐คพโโ๏ธ",
+ "๐คน",
+ "๐คนโโ๏ธ",
+ "๐คนโโ๏ธ",
+ "๐ง",
+ "๐งโโ๏ธ",
+ "๐งโโ๏ธ",
+ "๐",
+ "๐",
+ "๐งโ๐คโ๐ง",
+ "๐ญ",
+ "๐ซ",
+ "๐ฌ",
+ "๐",
+ "๐ฉโโค๏ธโ๐โ๐จ",
+ "๐จโโค๏ธโ๐โ๐จ",
+ "๐ฉโโค๏ธโ๐โ๐ฉ",
+ "๐",
+ "๐ฉโโค๏ธโ๐จ",
+ "๐จโโค๏ธโ๐จ",
+ "๐ฉโโค๏ธโ๐ฉ",
+ "๐ช",
+ "๐จโ๐ฉโ๐ฆ",
+ "๐จโ๐ฉโ๐ง",
+ "๐จโ๐ฉโ๐งโ๐ฆ",
+ "๐จโ๐ฉโ๐ฆโ๐ฆ",
+ "๐จโ๐ฉโ๐งโ๐ง",
+ "๐จโ๐จโ๐ฆ",
+ "๐จโ๐จโ๐ง",
+ "๐จโ๐จโ๐งโ๐ฆ",
+ "๐จโ๐จโ๐ฆโ๐ฆ",
+ "๐จโ๐จโ๐งโ๐ง",
+ "๐ฉโ๐ฉโ๐ฆ",
+ "๐ฉโ๐ฉโ๐ง",
+ "๐ฉโ๐ฉโ๐งโ๐ฆ",
+ "๐ฉโ๐ฉโ๐ฆโ๐ฆ",
+ "๐ฉโ๐ฉโ๐งโ๐ง",
+ "๐จโ๐ฆ",
+ "๐จโ๐ฆโ๐ฆ",
+ "๐จโ๐ง",
+ "๐จโ๐งโ๐ฆ",
+ "๐จโ๐งโ๐ง",
+ "๐ฉโ๐ฆ",
+ "๐ฉโ๐ฆโ๐ฆ",
+ "๐ฉโ๐ง",
+ "๐ฉโ๐งโ๐ฆ",
+ "๐ฉโ๐งโ๐ง",
+ "๐ฃ๏ธ",
+ "๐ค",
+ "๐ฅ",
+ "๐ซ",
+ "๐ฃ",
+ "๐ต",
+ "๐",
+ "๐ฆ",
+ "๐ฆง",
+ "๐ถ",
+ "๐",
+ "๐ฆฎ",
+ "๐โ๐ฆบ",
+ "๐ฉ",
+ "๐บ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฑ",
+ "๐",
+ "๐โโฌ",
+ "๐ฆ",
+ "๐ฏ",
+ "๐
",
+ "๐",
+ "๐ด",
+ "๐ซ",
+ "๐ซ",
+ "๐",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฆฌ",
+ "๐ฎ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ท",
+ "๐",
+ "๐",
+ "๐ฝ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ช",
+ "๐ซ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐",
+ "๐ฆฃ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ญ",
+ "๐",
+ "๐",
+ "๐น",
+ "๐ฐ",
+ "๐",
+ "๐ฟ๏ธ",
+ "๐ฆซ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ป",
+ "๐ปโโ๏ธ",
+ "๐จ",
+ "๐ผ",
+ "๐ฆฅ",
+ "๐ฆฆ",
+ "๐ฆจ",
+ "๐ฆ",
+ "๐ฆก",
+ "๐พ",
+ "๐ฆ",
+ "๐",
+ "๐",
+ "๐ฃ",
+ "๐ค",
+ "๐ฅ",
+ "๐ฆ",
+ "๐ง",
+ "๐๏ธ",
+ "๐ฆ
",
+ "๐ฆ",
+ "๐ฆข",
+ "๐ฆ",
+ "๐ฆค",
+ "๐ชถ",
+ "๐ฆฉ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ชฝ",
+ "๐ฆโโฌ",
+ "๐ชฟ",
+ "๐ธ",
+ "๐",
+ "๐ข",
+ "๐ฆ",
+ "๐",
+ "๐ฒ",
+ "๐",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ณ",
+ "๐",
+ "๐ฌ",
+ "๐ฆญ",
+ "๐",
+ "๐ ",
+ "๐ก",
+ "๐ฆ",
+ "๐",
+ "๐",
+ "๐ชธ",
+ "๐ชผ",
+ "๐",
+ "๐ฆ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ชฒ",
+ "๐",
+ "๐ฆ",
+ "๐ชณ",
+ "๐ท๏ธ",
+ "๐ธ๏ธ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ชฐ",
+ "๐ชฑ",
+ "๐ฆ ",
+ "๐",
+ "๐ธ",
+ "๐ฎ",
+ "๐ชท",
+ "๐ต๏ธ",
+ "๐น",
+ "๐ฅ",
+ "๐บ",
+ "๐ป",
+ "๐ผ",
+ "๐ท",
+ "๐ชป",
+ "๐ฑ",
+ "๐ชด",
+ "๐ฒ",
+ "๐ณ",
+ "๐ด",
+ "๐ต",
+ "๐พ",
+ "๐ฟ",
+ "โ๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ชน",
+ "๐ชบ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฅญ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ซ",
+ "๐ฅ",
+ "๐
",
+ "๐ซ",
+ "๐ฅฅ",
+ "๐ฅ",
+ "๐",
+ "๐ฅ",
+ "๐ฅ",
+ "๐ฝ",
+ "๐ถ๏ธ",
+ "๐ซ",
+ "๐ฅ",
+ "๐ฅฌ",
+ "๐ฅฆ",
+ "๐ง",
+ "๐ง
",
+ "๐ฅ",
+ "๐ซ",
+ "๐ฐ",
+ "๐ซ",
+ "๐ซ",
+ "๐",
+ "๐ฅ",
+ "๐ฅ",
+ "๐ซ",
+ "๐ฅจ",
+ "๐ฅฏ",
+ "๐ฅ",
+ "๐ง",
+ "๐ง",
+ "๐",
+ "๐",
+ "๐ฅฉ",
+ "๐ฅ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ญ",
+ "๐ฅช",
+ "๐ฎ",
+ "๐ฏ",
+ "๐ซ",
+ "๐ฅ",
+ "๐ง",
+ "๐ฅ",
+ "๐ณ",
+ "๐ฅ",
+ "๐ฒ",
+ "๐ซ",
+ "๐ฅฃ",
+ "๐ฅ",
+ "๐ฟ",
+ "๐ง",
+ "๐ง",
+ "๐ฅซ",
+ "๐ฑ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ ",
+ "๐ข",
+ "๐ฃ",
+ "๐ค",
+ "๐ฅ",
+ "๐ฅฎ",
+ "๐ก",
+ "๐ฅ",
+ "๐ฅ ",
+ "๐ฅก",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฆ",
+ "๐ฆช",
+ "๐ฆ",
+ "๐ง",
+ "๐จ",
+ "๐ฉ",
+ "๐ช",
+ "๐",
+ "๐ฐ",
+ "๐ง",
+ "๐ฅง",
+ "๐ซ",
+ "๐ฌ",
+ "๐ญ",
+ "๐ฎ",
+ "๐ฏ",
+ "๐ผ",
+ "๐ฅ",
+ "โ",
+ "๐ซ",
+ "๐ต",
+ "๐ถ",
+ "๐พ",
+ "๐ท",
+ "๐ธ",
+ "๐น",
+ "๐บ",
+ "๐ป",
+ "๐ฅ",
+ "๐ฅ",
+ "๐ซ",
+ "๐ฅค",
+ "๐ง",
+ "๐ง",
+ "๐ง",
+ "๐ง",
+ "๐ฅข",
+ "๐ฝ๏ธ",
+ "๐ด",
+ "๐ฅ",
+ "๐ช",
+ "๐ซ",
+ "๐บ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐บ๏ธ",
+ "๐พ",
+ "๐งญ",
+ "๐๏ธ",
+ "โฐ๏ธ",
+ "๐",
+ "๐ป",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐งฑ",
+ "๐ชจ",
+ "๐ชต",
+ "๐",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐ ",
+ "๐ก",
+ "๐ข",
+ "๐ฃ",
+ "๐ค",
+ "๐ฅ",
+ "๐ฆ",
+ "๐จ",
+ "๐ฉ",
+ "๐ช",
+ "๐ซ",
+ "๐ฌ",
+ "๐ญ",
+ "๐ฏ",
+ "๐ฐ",
+ "๐",
+ "๐ผ",
+ "๐ฝ",
+ "โช",
+ "๐",
+ "๐",
+ "๐",
+ "โฉ๏ธ",
+ "๐",
+ "โฒ",
+ "โบ",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐",
+ "๐
",
+ "๐",
+ "๐",
+ "๐",
+ "โจ๏ธ",
+ "๐ ",
+ "๐",
+ "๐ก",
+ "๐ข",
+ "๐",
+ "๐ช",
+ "๐",
+ "๐",
+ "๐",
+ "๐
",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ป",
+ "๐",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐ต",
+ "๐ฆฝ",
+ "๐ฆผ",
+ "๐บ",
+ "๐ฒ",
+ "๐ด",
+ "๐น",
+ "๐ผ",
+ "๐",
+ "๐ฃ๏ธ",
+ "๐ค๏ธ",
+ "๐ข๏ธ",
+ "โฝ",
+ "๐",
+ "๐จ",
+ "๐ฅ",
+ "๐ฆ",
+ "๐",
+ "๐ง",
+ "โ",
+ "๐",
+ "โต",
+ "๐ถ",
+ "๐ค",
+ "๐ณ๏ธ",
+ "โด๏ธ",
+ "๐ฅ๏ธ",
+ "๐ข",
+ "โ๏ธ",
+ "๐ฉ๏ธ",
+ "๐ซ",
+ "๐ฌ",
+ "๐ช",
+ "๐บ",
+ "๐",
+ "๐",
+ "๐ ",
+ "๐ก",
+ "๐ฐ๏ธ",
+ "๐",
+ "๐ธ",
+ "๐๏ธ",
+ "๐งณ",
+ "โ",
+ "โณ",
+ "โ",
+ "โฐ",
+ "โฑ๏ธ",
+ "โฒ๏ธ",
+ "๐ฐ๏ธ",
+ "๐",
+ "๐ง",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ ",
+ "๐",
+ "๐ก",
+ "๐",
+ "๐ข",
+ "๐",
+ "๐ฃ",
+ "๐",
+ "๐ค",
+ "๐",
+ "๐ฅ",
+ "๐",
+ "๐ฆ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ก๏ธ",
+ "โ๏ธ",
+ "๐",
+ "๐",
+ "๐ช",
+ "โญ",
+ "๐",
+ "๐ ",
+ "๐",
+ "โ๏ธ",
+ "โ
",
+ "โ๏ธ",
+ "๐ค๏ธ",
+ "๐ฅ๏ธ",
+ "๐ฆ๏ธ",
+ "๐ง๏ธ",
+ "๐จ๏ธ",
+ "๐ฉ๏ธ",
+ "๐ช๏ธ",
+ "๐ซ๏ธ",
+ "๐ฌ๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "โ๏ธ",
+ "โ",
+ "โฑ๏ธ",
+ "โก",
+ "โ๏ธ",
+ "โ๏ธ",
+ "โ",
+ "โ๏ธ",
+ "๐ฅ",
+ "๐ง",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐งจ",
+ "โจ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐งง",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐ซ",
+ "๐๏ธ",
+ "๐",
+ "๐
",
+ "๐ฅ",
+ "๐ฅ",
+ "๐ฅ",
+ "โฝ",
+ "โพ",
+ "๐ฅ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐พ",
+ "๐ฅ",
+ "๐ณ",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฅ",
+ "๐",
+ "๐ธ",
+ "๐ฅ",
+ "๐ฅ",
+ "๐ฅ
",
+ "โณ",
+ "โธ๏ธ",
+ "๐ฃ",
+ "๐คฟ",
+ "๐ฝ",
+ "๐ฟ",
+ "๐ท",
+ "๐ฅ",
+ "๐ฏ",
+ "๐ช",
+ "๐ช",
+ "๐ซ",
+ "๐ฑ",
+ "๐ฎ",
+ "๐ช",
+ "๐ฎ",
+ "๐น๏ธ",
+ "๐ฐ",
+ "๐ฒ",
+ "๐งฉ",
+ "๐งธ",
+ "๐ช
",
+ "๐ชฉ",
+ "๐ช",
+ "โ ๏ธ",
+ "โฅ๏ธ",
+ "โฆ๏ธ",
+ "โฃ๏ธ",
+ "โ๏ธ",
+ "๐",
+ "๐",
+ "๐ด",
+ "๐ญ",
+ "๐ผ๏ธ",
+ "๐จ",
+ "๐งต",
+ "๐ชก",
+ "๐งถ",
+ "๐ชข",
+ "๐",
+ "๐ถ๏ธ",
+ "๐ฅฝ",
+ "๐ฅผ",
+ "๐ฆบ",
+ "๐",
+ "๐",
+ "๐",
+ "๐งฃ",
+ "๐งค",
+ "๐งฅ",
+ "๐งฆ",
+ "๐",
+ "๐",
+ "๐ฅป",
+ "๐ฉฑ",
+ "๐ฉฒ",
+ "๐ฉณ",
+ "๐",
+ "๐",
+ "๐ชญ",
+ "๐",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐",
+ "๐ฉด",
+ "๐",
+ "๐",
+ "๐ฅพ",
+ "๐ฅฟ",
+ "๐ ",
+ "๐ก",
+ "๐ฉฐ",
+ "๐ข",
+ "๐ชฎ",
+ "๐",
+ "๐",
+ "๐ฉ",
+ "๐",
+ "๐งข",
+ "๐ช",
+ "โ๏ธ",
+ "๐ฟ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ข",
+ "๐ฃ",
+ "๐ฏ",
+ "๐",
+ "๐",
+ "๐ผ",
+ "๐ต",
+ "๐ถ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐ค",
+ "๐ง",
+ "๐ป",
+ "๐ท",
+ "๐ช",
+ "๐ธ",
+ "๐น",
+ "๐บ",
+ "๐ป",
+ "๐ช",
+ "๐ฅ",
+ "๐ช",
+ "๐ช",
+ "๐ช",
+ "๐ฑ",
+ "๐ฒ",
+ "โ๏ธ",
+ "๐",
+ "๐",
+ "๐ ",
+ "๐",
+ "๐ชซ",
+ "๐",
+ "๐ป",
+ "๐ฅ๏ธ",
+ "๐จ๏ธ",
+ "โจ๏ธ",
+ "๐ฑ๏ธ",
+ "๐ฒ๏ธ",
+ "๐ฝ",
+ "๐พ",
+ "๐ฟ",
+ "๐",
+ "๐งฎ",
+ "๐ฅ",
+ "๐๏ธ",
+ "๐ฝ๏ธ",
+ "๐ฌ",
+ "๐บ",
+ "๐ท",
+ "๐ธ",
+ "๐น",
+ "๐ผ",
+ "๐",
+ "๐",
+ "๐ฏ๏ธ",
+ "๐ก",
+ "๐ฆ",
+ "๐ฎ",
+ "๐ช",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐ฐ",
+ "๐๏ธ",
+ "๐",
+ "๐",
+ "๐ท๏ธ",
+ "๐ฐ",
+ "๐ช",
+ "๐ด",
+ "๐ต",
+ "๐ถ",
+ "๐ท",
+ "๐ธ",
+ "๐ณ",
+ "๐งพ",
+ "๐น",
+ "โ๏ธ",
+ "๐ง",
+ "๐จ",
+ "๐ฉ",
+ "๐ค",
+ "๐ฅ",
+ "๐ฆ",
+ "๐ซ",
+ "๐ช",
+ "๐ฌ",
+ "๐ญ",
+ "๐ฎ",
+ "๐ณ๏ธ",
+ "โ๏ธ",
+ "โ๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐",
+ "๐ผ",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐
",
+ "๐",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐",
+ "๐",
+ "โ๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐จ",
+ "๐ช",
+ "โ๏ธ",
+ "โ๏ธ",
+ "๐ ๏ธ",
+ "๐ก๏ธ",
+ "โ๏ธ",
+ "๐ฃ",
+ "๐ช",
+ "๐น",
+ "๐ก๏ธ",
+ "๐ช",
+ "๐ง",
+ "๐ช",
+ "๐ฉ",
+ "โ๏ธ",
+ "๐๏ธ",
+ "โ๏ธ",
+ "๐ฆฏ",
+ "๐",
+ "โ๏ธ",
+ "๐ช",
+ "๐งฐ",
+ "๐งฒ",
+ "๐ช",
+ "โ๏ธ",
+ "๐งช",
+ "๐งซ",
+ "๐งฌ",
+ "๐ฌ",
+ "๐ญ",
+ "๐ก",
+ "๐",
+ "๐ฉธ",
+ "๐",
+ "๐ฉน",
+ "๐ฉผ",
+ "๐ฉบ",
+ "๐ฉป",
+ "๐ช",
+ "๐",
+ "๐ช",
+ "๐ช",
+ "๐๏ธ",
+ "๐๏ธ",
+ "๐ช",
+ "๐ฝ",
+ "๐ช ",
+ "๐ฟ",
+ "๐",
+ "๐ชค",
+ "๐ช",
+ "๐งด",
+ "๐งท",
+ "๐งน",
+ "๐งบ",
+ "๐งป",
+ "๐ชฃ",
+ "๐งผ",
+ "๐ซง",
+ "๐ชฅ",
+ "๐งฝ",
+ "๐งฏ",
+ "๐",
+ "๐ฌ",
+ "โฐ๏ธ",
+ "๐ชฆ",
+ "โฑ๏ธ",
+ "๐งฟ",
+ "๐ชฌ",
+ "๐ฟ",
+ "๐ชง",
+ "๐ชช",
+ "๐ง",
+ "๐ฎ",
+ "๐ฐ",
+ "โฟ",
+ "๐น",
+ "๐บ",
+ "๐ป",
+ "๐ผ",
+ "๐พ",
+ "๐",
+ "๐",
+ "๐",
+ "๐
",
+ "โ ๏ธ",
+ "๐ธ",
+ "โ",
+ "๐ซ",
+ "๐ณ",
+ "๐ญ",
+ "๐ฏ",
+ "๐ฑ",
+ "๐ท",
+ "๐ต",
+ "๐",
+ "โข๏ธ",
+ "โฃ๏ธ",
+ "โฌ๏ธ",
+ "โ๏ธ",
+ "โก๏ธ",
+ "โ๏ธ",
+ "โฌ๏ธ",
+ "โ๏ธ",
+ "โฌ
๏ธ",
+ "โ๏ธ",
+ "โ๏ธ",
+ "โ๏ธ",
+ "โฉ๏ธ",
+ "โช๏ธ",
+ "โคด๏ธ",
+ "โคต๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "โ๏ธ",
+ "๐๏ธ",
+ "โก๏ธ",
+ "โธ๏ธ",
+ "โฏ๏ธ",
+ "โ๏ธ",
+ "โฆ๏ธ",
+ "โช๏ธ",
+ "โฎ๏ธ",
+ "๐",
+ "๐ฏ",
+ "๐ชฏ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "๐",
+ "๐",
+ "๐",
+ "โถ๏ธ",
+ "โฉ",
+ "โญ๏ธ",
+ "โฏ๏ธ",
+ "โ๏ธ",
+ "โช",
+ "โฎ๏ธ",
+ "๐ผ",
+ "โซ",
+ "๐ฝ",
+ "โฌ",
+ "โธ๏ธ",
+ "โน๏ธ",
+ "โบ๏ธ",
+ "โ๏ธ",
+ "๐ฆ",
+ "๐
",
+ "๐",
+ "๐ถ",
+ "๐",
+ "๐ณ",
+ "๐ด",
+ "โ๏ธ",
+ "โ๏ธ",
+ "โง๏ธ",
+ "โ๏ธ",
+ "โ",
+ "โ",
+ "โ",
+ "๐ฐ",
+ "โพ๏ธ",
+ "โผ๏ธ",
+ "โ๏ธ",
+ "โ",
+ "โ",
+ "โ",
+ "โ",
+ "ใฐ๏ธ",
+ "๐ฑ",
+ "๐ฒ",
+ "โ๏ธ",
+ "โป๏ธ",
+ "โ๏ธ",
+ "๐ฑ",
+ "๐",
+ "๐ฐ",
+ "โญ",
+ "โ
",
+ "โ๏ธ",
+ "โ๏ธ",
+ "โ",
+ "โ",
+ "โฐ",
+ "โฟ",
+ "ใฝ๏ธ",
+ "โณ๏ธ",
+ "โด๏ธ",
+ "โ๏ธ",
+ "ยฉ๏ธ",
+ "ยฎ๏ธ",
+ "โข๏ธ",
+ "#๏ธโฃ",
+ "*๏ธโฃ",
+ "0๏ธโฃ",
+ "1๏ธโฃ",
+ "2๏ธโฃ",
+ "3๏ธโฃ",
+ "4๏ธโฃ",
+ "5๏ธโฃ",
+ "6๏ธโฃ",
+ "7๏ธโฃ",
+ "8๏ธโฃ",
+ "9๏ธโฃ",
+ "๐",
+ "๐ ",
+ "๐ก",
+ "๐ข",
+ "๐ฃ",
+ "๐ค",
+ "๐
ฐ๏ธ",
+ "๐",
+ "๐
ฑ๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "โน๏ธ",
+ "๐",
+ "โ๏ธ",
+ "๐",
+ "๐",
+ "๐
พ๏ธ",
+ "๐",
+ "๐
ฟ๏ธ",
+ "๐",
+ "๐",
+ "๐",
+ "๐",
+ "๐๏ธ",
+ "๐ท๏ธ",
+ "๐ถ",
+ "๐ฏ",
+ "๐",
+ "๐น",
+ "๐",
+ "๐ฒ",
+ "๐",
+ "๐ธ",
+ "๐ด",
+ "๐ณ",
+ "ใ๏ธ",
+ "ใ๏ธ",
+ "๐บ",
+ "๐ต",
+ "๐ด",
+ "๐ ",
+ "๐ก",
+ "๐ข",
+ "๐ต",
+ "๐ฃ",
+ "๐ค",
+ "โซ",
+ "โช",
+ "๐ฅ",
+ "๐ง",
+ "๐จ",
+ "๐ฉ",
+ "๐ฆ",
+ "๐ช",
+ "๐ซ",
+ "โฌ",
+ "โฌ",
+ "โผ๏ธ",
+ "โป๏ธ",
+ "โพ",
+ "โฝ",
+ "โช๏ธ",
+ "โซ๏ธ",
+ "๐ถ",
+ "๐ท",
+ "๐ธ",
+ "๐น",
+ "๐บ",
+ "๐ป",
+ "๐ ",
+ "๐",
+ "๐ณ",
+ "๐ฒ",
+ "๐",
+ "๐ฉ",
+ "๐",
+ "๐ด",
+ "๐ณ๏ธ",
+ "๐ณ๏ธโ๐",
+ "๐ณ๏ธโโง๏ธ",
+ "๐ดโโ ๏ธ",
+ "๐ฆ๐จ",
+ "๐ฆ๐ฉ",
+ "๐ฆ๐ช",
+ "๐ฆ๐ซ",
+ "๐ฆ๐ฌ",
+ "๐ฆ๐ฎ",
+ "๐ฆ๐ฑ",
+ "๐ฆ๐ฒ",
+ "๐ฆ๐ด",
+ "๐ฆ๐ถ",
+ "๐ฆ๐ท",
+ "๐ฆ๐ธ",
+ "๐ฆ๐น",
+ "๐ฆ๐บ",
+ "๐ฆ๐ผ",
+ "๐ฆ๐ฝ",
+ "๐ฆ๐ฟ",
+ "๐ง๐ฆ",
+ "๐ง๐ง",
+ "๐ง๐ฉ",
+ "๐ง๐ช",
+ "๐ง๐ซ",
+ "๐ง๐ฌ",
+ "๐ง๐ญ",
+ "๐ง๐ฎ",
+ "๐ง๐ฏ",
+ "๐ง๐ฑ",
+ "๐ง๐ฒ",
+ "๐ง๐ณ",
+ "๐ง๐ด",
+ "๐ง๐ถ",
+ "๐ง๐ท",
+ "๐ง๐ธ",
+ "๐ง๐น",
+ "๐ง๐ป",
+ "๐ง๐ผ",
+ "๐ง๐พ",
+ "๐ง๐ฟ",
+ "๐จ๐ฆ",
+ "๐จ๐จ",
+ "๐จ๐ฉ",
+ "๐จ๐ซ",
+ "๐จ๐ฌ",
+ "๐จ๐ญ",
+ "๐จ๐ฎ",
+ "๐จ๐ฐ",
+ "๐จ๐ฑ",
+ "๐จ๐ฒ",
+ "๐จ๐ณ",
+ "๐จ๐ด",
+ "๐จ๐ต",
+ "๐จ๐ท",
+ "๐จ๐บ",
+ "๐จ๐ป",
+ "๐จ๐ผ",
+ "๐จ๐ฝ",
+ "๐จ๐พ",
+ "๐จ๐ฟ",
+ "๐ฉ๐ช",
+ "๐ฉ๐ฌ",
+ "๐ฉ๐ฏ",
+ "๐ฉ๐ฐ",
+ "๐ฉ๐ฒ",
+ "๐ฉ๐ด",
+ "๐ฉ๐ฟ",
+ "๐ช๐ฆ",
+ "๐ช๐จ",
+ "๐ช๐ช",
+ "๐ช๐ฌ",
+ "๐ช๐ญ",
+ "๐ช๐ท",
+ "๐ช๐ธ",
+ "๐ช๐น",
+ "๐ช๐บ",
+ "๐ซ๐ฎ",
+ "๐ซ๐ฏ",
+ "๐ซ๐ฐ",
+ "๐ซ๐ฒ",
+ "๐ซ๐ด",
+ "๐ซ๐ท",
+ "๐ฌ๐ฆ",
+ "๐ฌ๐ง",
+ "๐ฌ๐ฉ",
+ "๐ฌ๐ช",
+ "๐ฌ๐ซ",
+ "๐ฌ๐ฌ",
+ "๐ฌ๐ญ",
+ "๐ฌ๐ฎ",
+ "๐ฌ๐ฑ",
+ "๐ฌ๐ฒ",
+ "๐ฌ๐ณ",
+ "๐ฌ๐ต",
+ "๐ฌ๐ถ",
+ "๐ฌ๐ท",
+ "๐ฌ๐ธ",
+ "๐ฌ๐น",
+ "๐ฌ๐บ",
+ "๐ฌ๐ผ",
+ "๐ฌ๐พ",
+ "๐ญ๐ฐ",
+ "๐ญ๐ฒ",
+ "๐ญ๐ณ",
+ "๐ญ๐ท",
+ "๐ญ๐น",
+ "๐ญ๐บ",
+ "๐ฎ๐จ",
+ "๐ฎ๐ฉ",
+ "๐ฎ๐ช",
+ "๐ฎ๐ฑ",
+ "๐ฎ๐ฒ",
+ "๐ฎ๐ณ",
+ "๐ฎ๐ด",
+ "๐ฎ๐ถ",
+ "๐ฎ๐ท",
+ "๐ฎ๐ธ",
+ "๐ฎ๐น",
+ "๐ฏ๐ช",
+ "๐ฏ๐ฒ",
+ "๐ฏ๐ด",
+ "๐ฏ๐ต",
+ "๐ฐ๐ช",
+ "๐ฐ๐ฌ",
+ "๐ฐ๐ญ",
+ "๐ฐ๐ฎ",
+ "๐ฐ๐ฒ",
+ "๐ฐ๐ณ",
+ "๐ฐ๐ต",
+ "๐ฐ๐ท",
+ "๐ฐ๐ผ",
+ "๐ฐ๐พ",
+ "๐ฐ๐ฟ",
+ "๐ฑ๐ฆ",
+ "๐ฑ๐ง",
+ "๐ฑ๐จ",
+ "๐ฑ๐ฎ",
+ "๐ฑ๐ฐ",
+ "๐ฑ๐ท",
+ "๐ฑ๐ธ",
+ "๐ฑ๐น",
+ "๐ฑ๐บ",
+ "๐ฑ๐ป",
+ "๐ฑ๐พ",
+ "๐ฒ๐ฆ",
+ "๐ฒ๐จ",
+ "๐ฒ๐ฉ",
+ "๐ฒ๐ช",
+ "๐ฒ๐ซ",
+ "๐ฒ๐ฌ",
+ "๐ฒ๐ญ",
+ "๐ฒ๐ฐ",
+ "๐ฒ๐ฑ",
+ "๐ฒ๐ฒ",
+ "๐ฒ๐ณ",
+ "๐ฒ๐ด",
+ "๐ฒ๐ต",
+ "๐ฒ๐ถ",
+ "๐ฒ๐ท",
+ "๐ฒ๐ธ",
+ "๐ฒ๐น",
+ "๐ฒ๐บ",
+ "๐ฒ๐ป",
+ "๐ฒ๐ผ",
+ "๐ฒ๐ฝ",
+ "๐ฒ๐พ",
+ "๐ฒ๐ฟ",
+ "๐ณ๐ฆ",
+ "๐ณ๐จ",
+ "๐ณ๐ช",
+ "๐ณ๐ซ",
+ "๐ณ๐ฌ",
+ "๐ณ๐ฎ",
+ "๐ณ๐ฑ",
+ "๐ณ๐ด",
+ "๐ณ๐ต",
+ "๐ณ๐ท",
+ "๐ณ๐บ",
+ "๐ณ๐ฟ",
+ "๐ด๐ฒ",
+ "๐ต๐ฆ",
+ "๐ต๐ช",
+ "๐ต๐ซ",
+ "๐ต๐ฌ",
+ "๐ต๐ญ",
+ "๐ต๐ฐ",
+ "๐ต๐ฑ",
+ "๐ต๐ฒ",
+ "๐ต๐ณ",
+ "๐ต๐ท",
+ "๐ต๐ธ",
+ "๐ต๐น",
+ "๐ต๐ผ",
+ "๐ต๐พ",
+ "๐ถ๐ฆ",
+ "๐ท๐ช",
+ "๐ท๐ด",
+ "๐ท๐ธ",
+ "๐ท๐บ",
+ "๐ท๐ผ",
+ "๐ธ๐ฆ",
+ "๐ธ๐ง",
+ "๐ธ๐จ",
+ "๐ธ๐ฉ",
+ "๐ธ๐ช",
+ "๐ธ๐ฌ",
+ "๐ธ๐ญ",
+ "๐ธ๐ฎ",
+ "๐ธ๐ฏ",
+ "๐ธ๐ฐ",
+ "๐ธ๐ฑ",
+ "๐ธ๐ฒ",
+ "๐ธ๐ณ",
+ "๐ธ๐ด",
+ "๐ธ๐ท",
+ "๐ธ๐ธ",
+ "๐ธ๐น",
+ "๐ธ๐ป",
+ "๐ธ๐ฝ",
+ "๐ธ๐พ",
+ "๐ธ๐ฟ",
+ "๐น๐ฆ",
+ "๐น๐จ",
+ "๐น๐ฉ",
+ "๐น๐ซ",
+ "๐น๐ฌ",
+ "๐น๐ญ",
+ "๐น๐ฏ",
+ "๐น๐ฐ",
+ "๐น๐ฑ",
+ "๐น๐ฒ",
+ "๐น๐ณ",
+ "๐น๐ด",
+ "๐น๐ท",
+ "๐น๐น",
+ "๐น๐ป",
+ "๐น๐ผ",
+ "๐น๐ฟ",
+ "๐บ๐ฆ",
+ "๐บ๐ฌ",
+ "๐บ๐ฒ",
+ "๐บ๐ณ",
+ "๐บ๐ธ",
+ "๐บ๐พ",
+ "๐บ๐ฟ",
+ "๐ป๐ฆ",
+ "๐ป๐จ",
+ "๐ป๐ช",
+ "๐ป๐ฌ",
+ "๐ป๐ฎ",
+ "๐ป๐ณ",
+ "๐ป๐บ",
+ "๐ผ๐ซ",
+ "๐ผ๐ธ",
+ "๐ฝ๐ฐ",
+ "๐พ๐ช",
+ "๐พ๐น",
+ "๐ฟ๐ฆ",
+ "๐ฟ๐ฒ",
+ "๐ฟ๐ผ",
+ "๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ",
+ "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ",
+ "๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"
+]
\ No newline at end of file
diff --git a/src/config/emojis.min.json b/src/config/emojis.min.json
new file mode 100644
index 0000000..338bf90
--- /dev/null
+++ b/src/config/emojis.min.json
@@ -0,0 +1 @@
+["๐","๐","๐","๐","๐","๐
","๐คฃ","๐","๐","๐","๐ซ ","๐","๐","๐","๐ฅฐ","๐","๐คฉ","๐","๐","โบ๏ธ","๐","๐","๐ฅฒ","๐","๐","๐","๐คช","๐","๐ค","๐ค","๐คญ","๐ซข","๐ซฃ","๐คซ","๐ค","๐ซก","๐ค","๐คจ","๐","๐","๐ถ","๐ซฅ","๐ถโ๐ซ๏ธ","๐","๐","๐","๐ฌ","๐ฎโ๐จ","๐คฅ","๐ซจ","๐","๐","๐ช","๐คค","๐ด","๐ท","๐ค","๐ค","๐คข","๐คฎ","๐คง","๐ฅต","๐ฅถ","๐ฅด","๐ต","๐ตโ๐ซ","๐คฏ","๐ค ","๐ฅณ","๐ฅธ","๐","๐ค","๐ง","๐","๐ซค","๐","๐","โน๏ธ","๐ฎ","๐ฏ","๐ฒ","๐ณ","๐ฅบ","๐ฅน","๐ฆ","๐ง","๐จ","๐ฐ","๐ฅ","๐ข","๐ญ","๐ฑ","๐","๐ฃ","๐","๐","๐ฉ","๐ซ","๐ฅฑ","๐ค","๐ก","๐ ","๐คฌ","๐","๐ฟ","๐","โ ๏ธ","๐ฉ","๐คก","๐น","๐บ","๐ป","๐ฝ","๐พ","๐ค","๐บ","๐ธ","๐น","๐ป","๐ผ","๐ฝ","๐","๐ฟ","๐พ","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","โฃ๏ธ","๐","โค๏ธโ๐ฅ","โค๏ธโ๐ฉน","โค๏ธ","๐ฉท","๐งก","๐","๐","๐","๐ฉต","๐","๐ค","๐ค","๐ฉถ","๐ค","๐","๐ฏ","๐ข","๐ฅ","๐ซ","๐ฆ","๐จ","๐ณ๏ธ","๐ฌ","๐๏ธโ๐จ๏ธ","๐จ๏ธ","๐ฏ๏ธ","๐ญ","๐ค","๐","๐ค","๐๏ธ","โ","๐","๐ซฑ","๐ซฒ","๐ซณ","๐ซด","๐ซท","๐ซธ","๐","๐ค","๐ค","โ๏ธ","๐ค","๐ซฐ","๐ค","๐ค","๐ค","๐","๐","๐","๐","๐","โ๏ธ","๐ซต","๐","๐","โ","๐","๐ค","๐ค","๐","๐","๐ซถ","๐","๐คฒ","๐ค","๐","โ๏ธ","๐
","๐คณ","๐ช","๐ฆพ","๐ฆฟ","๐ฆต","๐ฆถ","๐","๐ฆป","๐","๐ง ","๐ซ","๐ซ","๐ฆท","๐ฆด","๐","๐๏ธ","๐
","๐","๐ซฆ","๐ถ","๐ง","๐ฆ","๐ง","๐ง","๐ฑ","๐จ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐จโ๐ฆฐ","๐จโ๐ฆฑ","๐จโ๐ฆณ","๐จโ๐ฆฒ","๐ฉ","๐ฉโ๐ฆฐ","๐งโ๐ฆฐ","๐ฉโ๐ฆฑ","๐งโ๐ฆฑ","๐ฉโ๐ฆณ","๐งโ๐ฆณ","๐ฉโ๐ฆฒ","๐งโ๐ฆฒ","๐ฑโโ๏ธ","๐ฑโโ๏ธ","๐ง","๐ด","๐ต","๐","๐โโ๏ธ","๐โโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐
","๐
โโ๏ธ","๐
โโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐คฆ","๐คฆโโ๏ธ","๐คฆโโ๏ธ","๐คท","๐คทโโ๏ธ","๐คทโโ๏ธ","๐งโโ๏ธ","๐จโโ๏ธ","๐ฉโโ๏ธ","๐งโ๐","๐จโ๐","๐ฉโ๐","๐งโ๐ซ","๐จโ๐ซ","๐ฉโ๐ซ","๐งโโ๏ธ","๐จโโ๏ธ","๐ฉโโ๏ธ","๐งโ๐พ","๐จโ๐พ","๐ฉโ๐พ","๐งโ๐ณ","๐จโ๐ณ","๐ฉโ๐ณ","๐งโ๐ง","๐จโ๐ง","๐ฉโ๐ง","๐งโ๐ญ","๐จโ๐ญ","๐ฉโ๐ญ","๐งโ๐ผ","๐จโ๐ผ","๐ฉโ๐ผ","๐งโ๐ฌ","๐จโ๐ฌ","๐ฉโ๐ฌ","๐งโ๐ป","๐จโ๐ป","๐ฉโ๐ป","๐งโ๐ค","๐จโ๐ค","๐ฉโ๐ค","๐งโ๐จ","๐จโ๐จ","๐ฉโ๐จ","๐งโโ๏ธ","๐จโโ๏ธ","๐ฉโโ๏ธ","๐งโ๐","๐จโ๐","๐ฉโ๐","๐งโ๐","๐จโ๐","๐ฉโ๐","๐ฎ","๐ฎโโ๏ธ","๐ฎโโ๏ธ","๐ต๏ธ","๐ต๏ธโโ๏ธ","๐ต๏ธโโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐ฅท","๐ท","๐ทโโ๏ธ","๐ทโโ๏ธ","๐ซ
","๐คด","๐ธ","๐ณ","๐ณโโ๏ธ","๐ณโโ๏ธ","๐ฒ","๐ง","๐คต","๐คตโโ๏ธ","๐คตโโ๏ธ","๐ฐ","๐ฐโโ๏ธ","๐ฐโโ๏ธ","๐คฐ","๐ซ","๐ซ","๐คฑ","๐ฉโ๐ผ","๐จโ๐ผ","๐งโ๐ผ","๐ผ","๐
","๐คถ","๐งโ๐","๐ฆธ","๐ฆธโโ๏ธ","๐ฆธโโ๏ธ","๐ฆน","๐ฆนโโ๏ธ","๐ฆนโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐","๐โโ๏ธ","๐โโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐ถ","๐ถโโ๏ธ","๐ถโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐งโ๐ฆฏ","๐จโ๐ฆฏ","๐ฉโ๐ฆฏ","๐งโ๐ฆผ","๐จโ๐ฆผ","๐ฉโ๐ฆผ","๐งโ๐ฆฝ","๐จโ๐ฆฝ","๐ฉโ๐ฆฝ","๐","๐โโ๏ธ","๐โโ๏ธ","๐","๐บ","๐ด๏ธ","๐ฏ","๐ฏโโ๏ธ","๐ฏโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐คบ","๐","โท๏ธ","๐","๐๏ธ","๐๏ธโโ๏ธ","๐๏ธโโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","๐ฃ","๐ฃโโ๏ธ","๐ฃโโ๏ธ","๐","๐โโ๏ธ","๐โโ๏ธ","โน๏ธ","โน๏ธโโ๏ธ","โน๏ธโโ๏ธ","๐๏ธ","๐๏ธโโ๏ธ","๐๏ธโโ๏ธ","๐ด","๐ดโโ๏ธ","๐ดโโ๏ธ","๐ต","๐ตโโ๏ธ","๐ตโโ๏ธ","๐คธ","๐คธโโ๏ธ","๐คธโโ๏ธ","๐คผ","๐คผโโ๏ธ","๐คผโโ๏ธ","๐คฝ","๐คฝโโ๏ธ","๐คฝโโ๏ธ","๐คพ","๐คพโโ๏ธ","๐คพโโ๏ธ","๐คน","๐คนโโ๏ธ","๐คนโโ๏ธ","๐ง","๐งโโ๏ธ","๐งโโ๏ธ","๐","๐","๐งโ๐คโ๐ง","๐ญ","๐ซ","๐ฌ","๐","๐ฉโโค๏ธโ๐โ๐จ","๐จโโค๏ธโ๐โ๐จ","๐ฉโโค๏ธโ๐โ๐ฉ","๐","๐ฉโโค๏ธโ๐จ","๐จโโค๏ธโ๐จ","๐ฉโโค๏ธโ๐ฉ","๐ช","๐จโ๐ฉโ๐ฆ","๐จโ๐ฉโ๐ง","๐จโ๐ฉโ๐งโ๐ฆ","๐จโ๐ฉโ๐ฆโ๐ฆ","๐จโ๐ฉโ๐งโ๐ง","๐จโ๐จโ๐ฆ","๐จโ๐จโ๐ง","๐จโ๐จโ๐งโ๐ฆ","๐จโ๐จโ๐ฆโ๐ฆ","๐จโ๐จโ๐งโ๐ง","๐ฉโ๐ฉโ๐ฆ","๐ฉโ๐ฉโ๐ง","๐ฉโ๐ฉโ๐งโ๐ฆ","๐ฉโ๐ฉโ๐ฆโ๐ฆ","๐ฉโ๐ฉโ๐งโ๐ง","๐จโ๐ฆ","๐จโ๐ฆโ๐ฆ","๐จโ๐ง","๐จโ๐งโ๐ฆ","๐จโ๐งโ๐ง","๐ฉโ๐ฆ","๐ฉโ๐ฆโ๐ฆ","๐ฉโ๐ง","๐ฉโ๐งโ๐ฆ","๐ฉโ๐งโ๐ง","๐ฃ๏ธ","๐ค","๐ฅ","๐ซ","๐ฃ","๐ต","๐","๐ฆ","๐ฆง","๐ถ","๐","๐ฆฎ","๐โ๐ฆบ","๐ฉ","๐บ","๐ฆ","๐ฆ","๐ฑ","๐","๐โโฌ","๐ฆ","๐ฏ","๐
","๐","๐ด","๐ซ","๐ซ","๐","๐ฆ","๐ฆ","๐ฆ","๐ฆฌ","๐ฎ","๐","๐","๐","๐ท","๐","๐","๐ฝ","๐","๐","๐","๐ช","๐ซ","๐ฆ","๐ฆ","๐","๐ฆฃ","๐ฆ","๐ฆ","๐ญ","๐","๐","๐น","๐ฐ","๐","๐ฟ๏ธ","๐ฆซ","๐ฆ","๐ฆ","๐ป","๐ปโโ๏ธ","๐จ","๐ผ","๐ฆฅ","๐ฆฆ","๐ฆจ","๐ฆ","๐ฆก","๐พ","๐ฆ","๐","๐","๐ฃ","๐ค","๐ฅ","๐ฆ","๐ง","๐๏ธ","๐ฆ
","๐ฆ","๐ฆข","๐ฆ","๐ฆค","๐ชถ","๐ฆฉ","๐ฆ","๐ฆ","๐ชฝ","๐ฆโโฌ","๐ชฟ","๐ธ","๐","๐ข","๐ฆ","๐","๐ฒ","๐","๐ฆ","๐ฆ","๐ณ","๐","๐ฌ","๐ฆญ","๐","๐ ","๐ก","๐ฆ","๐","๐","๐ชธ","๐ชผ","๐","๐ฆ","๐","๐","๐","๐ชฒ","๐","๐ฆ","๐ชณ","๐ท๏ธ","๐ธ๏ธ","๐ฆ","๐ฆ","๐ชฐ","๐ชฑ","๐ฆ ","๐","๐ธ","๐ฎ","๐ชท","๐ต๏ธ","๐น","๐ฅ","๐บ","๐ป","๐ผ","๐ท","๐ชป","๐ฑ","๐ชด","๐ฒ","๐ณ","๐ด","๐ต","๐พ","๐ฟ","โ๏ธ","๐","๐","๐","๐","๐ชน","๐ชบ","๐","๐","๐","๐","๐","๐","๐","๐","๐ฅญ","๐","๐","๐","๐","๐","๐","๐ซ","๐ฅ","๐
","๐ซ","๐ฅฅ","๐ฅ","๐","๐ฅ","๐ฅ","๐ฝ","๐ถ๏ธ","๐ซ","๐ฅ","๐ฅฌ","๐ฅฆ","๐ง","๐ง
","๐ฅ","๐ซ","๐ฐ","๐ซ","๐ซ","๐","๐ฅ","๐ฅ","๐ซ","๐ฅจ","๐ฅฏ","๐ฅ","๐ง","๐ง","๐","๐","๐ฅฉ","๐ฅ","๐","๐","๐","๐ญ","๐ฅช","๐ฎ","๐ฏ","๐ซ","๐ฅ","๐ง","๐ฅ","๐ณ","๐ฅ","๐ฒ","๐ซ","๐ฅฃ","๐ฅ","๐ฟ","๐ง","๐ง","๐ฅซ","๐ฑ","๐","๐","๐","๐","๐","๐","๐ ","๐ข","๐ฃ","๐ค","๐ฅ","๐ฅฎ","๐ก","๐ฅ","๐ฅ ","๐ฅก","๐ฆ","๐ฆ","๐ฆ","๐ฆ","๐ฆช","๐ฆ","๐ง","๐จ","๐ฉ","๐ช","๐","๐ฐ","๐ง","๐ฅง","๐ซ","๐ฌ","๐ญ","๐ฎ","๐ฏ","๐ผ","๐ฅ","โ","๐ซ","๐ต","๐ถ","๐พ","๐ท","๐ธ","๐น","๐บ","๐ป","๐ฅ","๐ฅ","๐ซ","๐ฅค","๐ง","๐ง","๐ง","๐ง","๐ฅข","๐ฝ๏ธ","๐ด","๐ฅ","๐ช","๐ซ","๐บ","๐","๐","๐","๐","๐บ๏ธ","๐พ","๐งญ","๐๏ธ","โฐ๏ธ","๐","๐ป","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐งฑ","๐ชจ","๐ชต","๐","๐๏ธ","๐๏ธ","๐ ","๐ก","๐ข","๐ฃ","๐ค","๐ฅ","๐ฆ","๐จ","๐ฉ","๐ช","๐ซ","๐ฌ","๐ญ","๐ฏ","๐ฐ","๐","๐ผ","๐ฝ","โช","๐","๐","๐","โฉ๏ธ","๐","โฒ","โบ","๐","๐","๐๏ธ","๐","๐
","๐","๐","๐","โจ๏ธ","๐ ","๐","๐ก","๐ข","๐","๐ช","๐","๐","๐","๐
","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐ป","๐","๐","๐","๐๏ธ","๐๏ธ","๐ต","๐ฆฝ","๐ฆผ","๐บ","๐ฒ","๐ด","๐น","๐ผ","๐","๐ฃ๏ธ","๐ค๏ธ","๐ข๏ธ","โฝ","๐","๐จ","๐ฅ","๐ฆ","๐","๐ง","โ","๐","โต","๐ถ","๐ค","๐ณ๏ธ","โด๏ธ","๐ฅ๏ธ","๐ข","โ๏ธ","๐ฉ๏ธ","๐ซ","๐ฌ","๐ช","๐บ","๐","๐","๐ ","๐ก","๐ฐ๏ธ","๐","๐ธ","๐๏ธ","๐งณ","โ","โณ","โ","โฐ","โฑ๏ธ","โฒ๏ธ","๐ฐ๏ธ","๐","๐ง","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐ ","๐","๐ก","๐","๐ข","๐","๐ฃ","๐","๐ค","๐","๐ฅ","๐","๐ฆ","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐ก๏ธ","โ๏ธ","๐","๐","๐ช","โญ","๐","๐ ","๐","โ๏ธ","โ
","โ๏ธ","๐ค๏ธ","๐ฅ๏ธ","๐ฆ๏ธ","๐ง๏ธ","๐จ๏ธ","๐ฉ๏ธ","๐ช๏ธ","๐ซ๏ธ","๐ฌ๏ธ","๐","๐","๐","โ๏ธ","โ","โฑ๏ธ","โก","โ๏ธ","โ๏ธ","โ","โ๏ธ","๐ฅ","๐ง","๐","๐","๐","๐","๐","๐งจ","โจ","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐งง","๐","๐","๐๏ธ","๐๏ธ","๐ซ","๐๏ธ","๐","๐
","๐ฅ","๐ฅ","๐ฅ","โฝ","โพ","๐ฅ","๐","๐","๐","๐","๐พ","๐ฅ","๐ณ","๐","๐","๐","๐ฅ","๐","๐ธ","๐ฅ","๐ฅ","๐ฅ
","โณ","โธ๏ธ","๐ฃ","๐คฟ","๐ฝ","๐ฟ","๐ท","๐ฅ","๐ฏ","๐ช","๐ช","๐ซ","๐ฑ","๐ฎ","๐ช","๐ฎ","๐น๏ธ","๐ฐ","๐ฒ","๐งฉ","๐งธ","๐ช
","๐ชฉ","๐ช","โ ๏ธ","โฅ๏ธ","โฆ๏ธ","โฃ๏ธ","โ๏ธ","๐","๐","๐ด","๐ญ","๐ผ๏ธ","๐จ","๐งต","๐ชก","๐งถ","๐ชข","๐","๐ถ๏ธ","๐ฅฝ","๐ฅผ","๐ฆบ","๐","๐","๐","๐งฃ","๐งค","๐งฅ","๐งฆ","๐","๐","๐ฅป","๐ฉฑ","๐ฉฒ","๐ฉณ","๐","๐","๐ชญ","๐","๐","๐","๐๏ธ","๐","๐ฉด","๐","๐","๐ฅพ","๐ฅฟ","๐ ","๐ก","๐ฉฐ","๐ข","๐ชฎ","๐","๐","๐ฉ","๐","๐งข","๐ช","โ๏ธ","๐ฟ","๐","๐","๐","๐","๐","๐","๐","๐ข","๐ฃ","๐ฏ","๐","๐","๐ผ","๐ต","๐ถ","๐๏ธ","๐๏ธ","๐๏ธ","๐ค","๐ง","๐ป","๐ท","๐ช","๐ธ","๐น","๐บ","๐ป","๐ช","๐ฅ","๐ช","๐ช","๐ช","๐ฑ","๐ฒ","โ๏ธ","๐","๐","๐ ","๐","๐ชซ","๐","๐ป","๐ฅ๏ธ","๐จ๏ธ","โจ๏ธ","๐ฑ๏ธ","๐ฒ๏ธ","๐ฝ","๐พ","๐ฟ","๐","๐งฎ","๐ฅ","๐๏ธ","๐ฝ๏ธ","๐ฌ","๐บ","๐ท","๐ธ","๐น","๐ผ","๐","๐","๐ฏ๏ธ","๐ก","๐ฆ","๐ฎ","๐ช","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐","๐ฐ","๐๏ธ","๐","๐","๐ท๏ธ","๐ฐ","๐ช","๐ด","๐ต","๐ถ","๐ท","๐ธ","๐ณ","๐งพ","๐น","โ๏ธ","๐ง","๐จ","๐ฉ","๐ค","๐ฅ","๐ฆ","๐ซ","๐ช","๐ฌ","๐ญ","๐ฎ","๐ณ๏ธ","โ๏ธ","โ๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐","๐ผ","๐","๐","๐๏ธ","๐
","๐","๐๏ธ","๐๏ธ","๐","๐","๐","๐","๐","๐","๐","๐","๐๏ธ","๐","๐","โ๏ธ","๐๏ธ","๐๏ธ","๐๏ธ","๐","๐","๐","๐","๐","๐๏ธ","๐จ","๐ช","โ๏ธ","โ๏ธ","๐ ๏ธ","๐ก๏ธ","โ๏ธ","๐ฃ","๐ช","๐น","๐ก๏ธ","๐ช","๐ง","๐ช","๐ฉ","โ๏ธ","๐๏ธ","โ๏ธ","๐ฆฏ","๐","โ๏ธ","๐ช","๐งฐ","๐งฒ","๐ช","โ๏ธ","๐งช","๐งซ","๐งฌ","๐ฌ","๐ญ","๐ก","๐","๐ฉธ","๐","๐ฉน","๐ฉผ","๐ฉบ","๐ฉป","๐ช","๐","๐ช","๐ช","๐๏ธ","๐๏ธ","๐ช","๐ฝ","๐ช ","๐ฟ","๐","๐ชค","๐ช","๐งด","๐งท","๐งน","๐งบ","๐งป","๐ชฃ","๐งผ","๐ซง","๐ชฅ","๐งฝ","๐งฏ","๐","๐ฌ","โฐ๏ธ","๐ชฆ","โฑ๏ธ","๐งฟ","๐ชฌ","๐ฟ","๐ชง","๐ชช","๐ง","๐ฎ","๐ฐ","โฟ","๐น","๐บ","๐ป","๐ผ","๐พ","๐","๐","๐","๐
","โ ๏ธ","๐ธ","โ","๐ซ","๐ณ","๐ญ","๐ฏ","๐ฑ","๐ท","๐ต","๐","โข๏ธ","โฃ๏ธ","โฌ๏ธ","โ๏ธ","โก๏ธ","โ๏ธ","โฌ๏ธ","โ๏ธ","โฌ
๏ธ","โ๏ธ","โ๏ธ","โ๏ธ","โฉ๏ธ","โช๏ธ","โคด๏ธ","โคต๏ธ","๐","๐","๐","๐","๐","๐","๐","๐","โ๏ธ","๐๏ธ","โก๏ธ","โธ๏ธ","โฏ๏ธ","โ๏ธ","โฆ๏ธ","โช๏ธ","โฎ๏ธ","๐","๐ฏ","๐ชฏ","โ","โ","โ","โ","โ","โ","โ","โ","โ","โ","โ","โ","โ","๐","๐","๐","โถ๏ธ","โฉ","โญ๏ธ","โฏ๏ธ","โ๏ธ","โช","โฎ๏ธ","๐ผ","โซ","๐ฝ","โฌ","โธ๏ธ","โน๏ธ","โบ๏ธ","โ๏ธ","๐ฆ","๐
","๐","๐ถ","๐","๐ณ","๐ด","โ๏ธ","โ๏ธ","โง๏ธ","โ๏ธ","โ","โ","โ","๐ฐ","โพ๏ธ","โผ๏ธ","โ๏ธ","โ","โ","โ","โ","ใฐ๏ธ","๐ฑ","๐ฒ","โ๏ธ","โป๏ธ","โ๏ธ","๐ฑ","๐","๐ฐ","โญ","โ
","โ๏ธ","โ๏ธ","โ","โ","โฐ","โฟ","ใฝ๏ธ","โณ๏ธ","โด๏ธ","โ๏ธ","ยฉ๏ธ","ยฎ๏ธ","โข๏ธ","#๏ธโฃ","*๏ธโฃ","0๏ธโฃ","1๏ธโฃ","2๏ธโฃ","3๏ธโฃ","4๏ธโฃ","5๏ธโฃ","6๏ธโฃ","7๏ธโฃ","8๏ธโฃ","9๏ธโฃ","๐","๐ ","๐ก","๐ข","๐ฃ","๐ค","๐
ฐ๏ธ","๐","๐
ฑ๏ธ","๐","๐","๐","โน๏ธ","๐","โ๏ธ","๐","๐","๐
พ๏ธ","๐","๐
ฟ๏ธ","๐","๐","๐","๐","๐๏ธ","๐ท๏ธ","๐ถ","๐ฏ","๐","๐น","๐","๐ฒ","๐","๐ธ","๐ด","๐ณ","ใ๏ธ","ใ๏ธ","๐บ","๐ต","๐ด","๐ ","๐ก","๐ข","๐ต","๐ฃ","๐ค","โซ","โช","๐ฅ","๐ง","๐จ","๐ฉ","๐ฆ","๐ช","๐ซ","โฌ","โฌ","โผ๏ธ","โป๏ธ","โพ","โฝ","โช๏ธ","โซ๏ธ","๐ถ","๐ท","๐ธ","๐น","๐บ","๐ป","๐ ","๐","๐ณ","๐ฒ","๐","๐ฉ","๐","๐ด","๐ณ๏ธ","๐ณ๏ธโ๐","๐ณ๏ธโโง๏ธ","๐ดโโ ๏ธ","๐ฆ๐จ","๐ฆ๐ฉ","๐ฆ๐ช","๐ฆ๐ซ","๐ฆ๐ฌ","๐ฆ๐ฎ","๐ฆ๐ฑ","๐ฆ๐ฒ","๐ฆ๐ด","๐ฆ๐ถ","๐ฆ๐ท","๐ฆ๐ธ","๐ฆ๐น","๐ฆ๐บ","๐ฆ๐ผ","๐ฆ๐ฝ","๐ฆ๐ฟ","๐ง๐ฆ","๐ง๐ง","๐ง๐ฉ","๐ง๐ช","๐ง๐ซ","๐ง๐ฌ","๐ง๐ญ","๐ง๐ฎ","๐ง๐ฏ","๐ง๐ฑ","๐ง๐ฒ","๐ง๐ณ","๐ง๐ด","๐ง๐ถ","๐ง๐ท","๐ง๐ธ","๐ง๐น","๐ง๐ป","๐ง๐ผ","๐ง๐พ","๐ง๐ฟ","๐จ๐ฆ","๐จ๐จ","๐จ๐ฉ","๐จ๐ซ","๐จ๐ฌ","๐จ๐ญ","๐จ๐ฎ","๐จ๐ฐ","๐จ๐ฑ","๐จ๐ฒ","๐จ๐ณ","๐จ๐ด","๐จ๐ต","๐จ๐ท","๐จ๐บ","๐จ๐ป","๐จ๐ผ","๐จ๐ฝ","๐จ๐พ","๐จ๐ฟ","๐ฉ๐ช","๐ฉ๐ฌ","๐ฉ๐ฏ","๐ฉ๐ฐ","๐ฉ๐ฒ","๐ฉ๐ด","๐ฉ๐ฟ","๐ช๐ฆ","๐ช๐จ","๐ช๐ช","๐ช๐ฌ","๐ช๐ญ","๐ช๐ท","๐ช๐ธ","๐ช๐น","๐ช๐บ","๐ซ๐ฎ","๐ซ๐ฏ","๐ซ๐ฐ","๐ซ๐ฒ","๐ซ๐ด","๐ซ๐ท","๐ฌ๐ฆ","๐ฌ๐ง","๐ฌ๐ฉ","๐ฌ๐ช","๐ฌ๐ซ","๐ฌ๐ฌ","๐ฌ๐ญ","๐ฌ๐ฎ","๐ฌ๐ฑ","๐ฌ๐ฒ","๐ฌ๐ณ","๐ฌ๐ต","๐ฌ๐ถ","๐ฌ๐ท","๐ฌ๐ธ","๐ฌ๐น","๐ฌ๐บ","๐ฌ๐ผ","๐ฌ๐พ","๐ญ๐ฐ","๐ญ๐ฒ","๐ญ๐ณ","๐ญ๐ท","๐ญ๐น","๐ญ๐บ","๐ฎ๐จ","๐ฎ๐ฉ","๐ฎ๐ช","๐ฎ๐ฑ","๐ฎ๐ฒ","๐ฎ๐ณ","๐ฎ๐ด","๐ฎ๐ถ","๐ฎ๐ท","๐ฎ๐ธ","๐ฎ๐น","๐ฏ๐ช","๐ฏ๐ฒ","๐ฏ๐ด","๐ฏ๐ต","๐ฐ๐ช","๐ฐ๐ฌ","๐ฐ๐ญ","๐ฐ๐ฎ","๐ฐ๐ฒ","๐ฐ๐ณ","๐ฐ๐ต","๐ฐ๐ท","๐ฐ๐ผ","๐ฐ๐พ","๐ฐ๐ฟ","๐ฑ๐ฆ","๐ฑ๐ง","๐ฑ๐จ","๐ฑ๐ฎ","๐ฑ๐ฐ","๐ฑ๐ท","๐ฑ๐ธ","๐ฑ๐น","๐ฑ๐บ","๐ฑ๐ป","๐ฑ๐พ","๐ฒ๐ฆ","๐ฒ๐จ","๐ฒ๐ฉ","๐ฒ๐ช","๐ฒ๐ซ","๐ฒ๐ฌ","๐ฒ๐ญ","๐ฒ๐ฐ","๐ฒ๐ฑ","๐ฒ๐ฒ","๐ฒ๐ณ","๐ฒ๐ด","๐ฒ๐ต","๐ฒ๐ถ","๐ฒ๐ท","๐ฒ๐ธ","๐ฒ๐น","๐ฒ๐บ","๐ฒ๐ป","๐ฒ๐ผ","๐ฒ๐ฝ","๐ฒ๐พ","๐ฒ๐ฟ","๐ณ๐ฆ","๐ณ๐จ","๐ณ๐ช","๐ณ๐ซ","๐ณ๐ฌ","๐ณ๐ฎ","๐ณ๐ฑ","๐ณ๐ด","๐ณ๐ต","๐ณ๐ท","๐ณ๐บ","๐ณ๐ฟ","๐ด๐ฒ","๐ต๐ฆ","๐ต๐ช","๐ต๐ซ","๐ต๐ฌ","๐ต๐ญ","๐ต๐ฐ","๐ต๐ฑ","๐ต๐ฒ","๐ต๐ณ","๐ต๐ท","๐ต๐ธ","๐ต๐น","๐ต๐ผ","๐ต๐พ","๐ถ๐ฆ","๐ท๐ช","๐ท๐ด","๐ท๐ธ","๐ท๐บ","๐ท๐ผ","๐ธ๐ฆ","๐ธ๐ง","๐ธ๐จ","๐ธ๐ฉ","๐ธ๐ช","๐ธ๐ฌ","๐ธ๐ญ","๐ธ๐ฎ","๐ธ๐ฏ","๐ธ๐ฐ","๐ธ๐ฑ","๐ธ๐ฒ","๐ธ๐ณ","๐ธ๐ด","๐ธ๐ท","๐ธ๐ธ","๐ธ๐น","๐ธ๐ป","๐ธ๐ฝ","๐ธ๐พ","๐ธ๐ฟ","๐น๐ฆ","๐น๐จ","๐น๐ฉ","๐น๐ซ","๐น๐ฌ","๐น๐ญ","๐น๐ฏ","๐น๐ฐ","๐น๐ฑ","๐น๐ฒ","๐น๐ณ","๐น๐ด","๐น๐ท","๐น๐น","๐น๐ป","๐น๐ผ","๐น๐ฟ","๐บ๐ฆ","๐บ๐ฌ","๐บ๐ฒ","๐บ๐ณ","๐บ๐ธ","๐บ๐พ","๐บ๐ฟ","๐ป๐ฆ","๐ป๐จ","๐ป๐ช","๐ป๐ฌ","๐ป๐ฎ","๐ป๐ณ","๐ป๐บ","๐ผ๐ซ","๐ผ๐ธ","๐ฝ๐ฐ","๐พ๐ช","๐พ๐น","๐ฟ๐ฆ","๐ฟ๐ฒ","๐ฟ๐ผ","๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ","๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ","๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"]
\ No newline at end of file
diff --git a/src/config/images.json b/src/config/images.json
new file mode 100644
index 0000000..1061404
--- /dev/null
+++ b/src/config/images.json
@@ -0,0 +1,10 @@
+[
+ "https://travel.altogether.at/fileadmin/_processed_/f/e/csm_20220522_075119_f7f59f1947.jpg",
+ "https://travel.altogether.at/fileadmin/_processed_/c/4/csm_20220522_085437_6878ca9c79.jpg",
+ "https://travel.altogether.at/fileadmin/_processed_/a/e/csm_283250228_686175499137323_4942479361100056197_n_0f723df57f.jpg",
+ "https://travel.altogether.at/fileadmin/travel_blog/RaMa/AuthorSeite/282494555_2983554695217426_1326172026026569453_n.jpg",
+ "https://travel.altogether.at/fileadmin/_processed_/7/a/csm_285725297_181441544337054_6388859613749282169_n_1a54978bd2.jpg",
+ "https://travel.altogether.at/fileadmin/_processed_/9/6/csm_20220521_143042_e08fe4a244.jpg",
+ "https://travel.altogether.at//fileadmin/_processed_/8/f/csm_Hermanus6_362e5b53cf.jpg",
+ "https://travel.altogether.at/fileadmin/_processed_/4/c/csm_Hermanus-2_c1aa521e7d.jpg"
+]
\ No newline at end of file
diff --git a/src/favicon/android-chrome-192x192.png b/src/favicon/android-chrome-192x192.png
new file mode 100644
index 0000000..80dd5d7
Binary files /dev/null and b/src/favicon/android-chrome-192x192.png differ
diff --git a/src/favicon/android-chrome-512x512.png b/src/favicon/android-chrome-512x512.png
new file mode 100644
index 0000000..989b094
Binary files /dev/null and b/src/favicon/android-chrome-512x512.png differ
diff --git a/src/favicon/apple-touch-icon.png b/src/favicon/apple-touch-icon.png
new file mode 100644
index 0000000..90b4122
Binary files /dev/null and b/src/favicon/apple-touch-icon.png differ
diff --git a/src/favicon/browserconfig.xml b/src/favicon/browserconfig.xml
new file mode 100644
index 0000000..4360864
--- /dev/null
+++ b/src/favicon/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #ffffff
+
+
+
diff --git a/src/favicon/favicon-16x16.png b/src/favicon/favicon-16x16.png
new file mode 100644
index 0000000..6822448
Binary files /dev/null and b/src/favicon/favicon-16x16.png differ
diff --git a/src/favicon/favicon-32x32.png b/src/favicon/favicon-32x32.png
new file mode 100644
index 0000000..8bdea17
Binary files /dev/null and b/src/favicon/favicon-32x32.png differ
diff --git a/src/favicon/favicon.ico b/src/favicon/favicon.ico
new file mode 100644
index 0000000..d3826b4
Binary files /dev/null and b/src/favicon/favicon.ico differ
diff --git a/src/favicon/favicon_package_v0.16(1).zip b/src/favicon/favicon_package_v0.16(1).zip
new file mode 100644
index 0000000..6102eea
Binary files /dev/null and b/src/favicon/favicon_package_v0.16(1).zip differ
diff --git a/src/favicon/maskable/maskable_icon.png b/src/favicon/maskable/maskable_icon.png
new file mode 100644
index 0000000..da7171d
Binary files /dev/null and b/src/favicon/maskable/maskable_icon.png differ
diff --git a/src/favicon/maskable/maskable_icon_x128.png b/src/favicon/maskable/maskable_icon_x128.png
new file mode 100644
index 0000000..299552b
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x128.png differ
diff --git a/src/favicon/maskable/maskable_icon_x192.png b/src/favicon/maskable/maskable_icon_x192.png
new file mode 100644
index 0000000..638ccb6
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x192.png differ
diff --git a/src/favicon/maskable/maskable_icon_x384.png b/src/favicon/maskable/maskable_icon_x384.png
new file mode 100644
index 0000000..93ebe25
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x384.png differ
diff --git a/src/favicon/maskable/maskable_icon_x48.png b/src/favicon/maskable/maskable_icon_x48.png
new file mode 100644
index 0000000..d18773d
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x48.png differ
diff --git a/src/favicon/maskable/maskable_icon_x512.png b/src/favicon/maskable/maskable_icon_x512.png
new file mode 100644
index 0000000..e4d48bd
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x512.png differ
diff --git a/src/favicon/maskable/maskable_icon_x72.png b/src/favicon/maskable/maskable_icon_x72.png
new file mode 100644
index 0000000..9d5975f
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x72.png differ
diff --git a/src/favicon/maskable/maskable_icon_x96.png b/src/favicon/maskable/maskable_icon_x96.png
new file mode 100644
index 0000000..ecc9a57
Binary files /dev/null and b/src/favicon/maskable/maskable_icon_x96.png differ
diff --git a/src/favicon/mstile-150x150.png b/src/favicon/mstile-150x150.png
new file mode 100644
index 0000000..18d2e10
Binary files /dev/null and b/src/favicon/mstile-150x150.png differ
diff --git a/src/favicon/mstile-310x150.png b/src/favicon/mstile-310x150.png
new file mode 100644
index 0000000..8668f9c
Binary files /dev/null and b/src/favicon/mstile-310x150.png differ
diff --git a/src/favicon/mstile-310x310.png b/src/favicon/mstile-310x310.png
new file mode 100644
index 0000000..68d0e38
Binary files /dev/null and b/src/favicon/mstile-310x310.png differ
diff --git a/src/favicon/mstile-70x70.png b/src/favicon/mstile-70x70.png
new file mode 100644
index 0000000..229819e
Binary files /dev/null and b/src/favicon/mstile-70x70.png differ
diff --git a/src/favicon/safari-pinned-tab.svg b/src/favicon/safari-pinned-tab.svg
new file mode 100644
index 0000000..245cc6a
--- /dev/null
+++ b/src/favicon/safari-pinned-tab.svg
@@ -0,0 +1,135 @@
+
+
+
+
+Created by potrace 1.14, written by Peter Selinger 2001-2017
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/favicon/site.webmanifest b/src/favicon/site.webmanifest
new file mode 100644
index 0000000..4469ec1
--- /dev/null
+++ b/src/favicon/site.webmanifest
@@ -0,0 +1,79 @@
+{
+ "name": "RaMemory",
+ "short_name": "RMMM",
+ "description": "Raphy's Memory Matrix Madness is a captivating and colorful memory matching game that can be played offline. Test your memory skills, customize the gameplay, and enjoy a vibrant celebration of success with this small but mighty JavaScript and CSS powered game.",
+ "icons": [
+ {
+ "src": "/favicon/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicon/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon.png",
+ "sizes": "1024x1024",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x384.png",
+ "sizes": "384x384",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x128.png",
+ "sizes": "128x128",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/Memory/favicon/maskable/maskable_icon_x96.png",
+ "sizes": "96x96",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x72.png",
+ "sizes": "72x72",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/favicon/maskable/maskable_icon_x48.png",
+ "sizes": "48x48",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "screenshots" : [
+ {
+ "src": "/media/light_emoji_1280x720.webp",
+ "sizes": "1280x720",
+ "type": "image/webp",
+ "form_factor": "wide",
+ "label": "RaMemory MM gameplay black images"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "scope": "/",
+ "background_color": "#ffffff",
+ "start_url": "https://ramemory.altogether.at",
+ "display": "standalone"
+}
diff --git a/src/fonts/TextMeOne-Regular.ttf b/src/fonts/TextMeOne-Regular.ttf
new file mode 100644
index 0000000..70e9c95
Binary files /dev/null and b/src/fonts/TextMeOne-Regular.ttf differ
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..907ba7b
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,474 @@
+
+
+
+
Raphy's Memory Matrix Madness | Sharpen Cognitive Skills Offline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
RaMemory MM
+
Raphy's Memory Matrix Madness
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome back
+
+
Welcome to RaMemory MM - Raphy's Memory Matrix Madness โ a captivating and colorful journey through the world of memory matching games. Whether you're looking to pass the time, sharpen your cognitive skills, or simply enjoy a challenge, you've discovered the perfect gaming companion that travels with you everywhere, with no internet connection required. Launch into an offline adventure where your memory skills are both your weapon and ally in the whimsical universe of matching pairs.
+
+
+
+
+
+
+
+
+
+
+ flip speed:
+
+ ๐ด sleep mode
+ ๐ฆฅ slot
+ ๐ snail
+ ๐ถ chilly
+ ๐ train
+ ๐ rocket
+ ๐คช insane
+
+
+
+ front style:
+
+
+ ยฉโฌ black
+ ยฉโฌ๏ธ white
+ ยฉ๐ง๏ธ orange
+ ยฉ๐ฉ๏ธ green
+ ยฉ๐ฆ blue
+
+
+ ๐ธโฌ black
+ ๐ธโฌ๏ธ white
+ ๐ธ๐ง๏ธ orange
+ ๐ธ๐ฉ๏ธ green
+ ๐ธ๐ฆ blue
+
+
+ โฌ๏ธ black
+ โฌ๏ธ white
+ ๐ง๏ธorange
+ ๐ฉ๏ธ green
+ ๐ฆ blue
+
+
+
+
+ back stylet:
+
+ ๐จ colors
+ ๐ท pictures
+
+ 0๏ธโฃ start with 0
+ 0๏ธโฃ start with 0 + ๐จ
+ 0๏ธโฃ random
+ 0๏ธโฃ random + ๐จ
+
+
+ ๐short
+ ๐short + ๐จ
+ ๐long
+ ๐long + ๐จ
+
+
+ โด๏ธ all emojis
+ โด all emojis + ๐จ
+ ๐๏ธ smileys & emotions
+ ๐๏ธ smileys & emotions + ๐จ
+ ๐ง people & body
+ ๐ง people & body + ๐จ
+ ๐ธ animals & nature
+ ๐ธ animals & nature + ๐จ
+ ๐ food & drinks
+ ๐ food & drinks + ๐จ
+ ๐บ๏ธ travel & place
+ ๐บ๏ธ travel & place + ๐จ
+ ๐ activities
+ ๐ activities + ๐จ
+ ๐ก objects
+ ๐ก objects + ๐จ
+ โ๏ธ symbols
+ โ๏ธ symbols + ๐จ
+ ๐ดโโ ๏ธ flags
+ ๐ดโโ ๏ธ flags + ๐จ
+
+
+
+
+
+
+
+
+
+
+ โ How to play
+ ๐ง Settings
+
+
+
+ ๐ Dark
+ Light ๐๏ธ
+
+
+
+
+
+
+
+
+
+
+
+ ๐ well done ๐
+
+
+
+
+
About RaMemory MM
+
+
This innovative memory training game offers an exciting opportunity to enhance your memory skills like never before. With the ability to customize the amount of duplicate cards and the number of duplicates, you can challenge yourself with not just pairs, but also triplets, quadruplets, and more.
+
+
By searching for multiple matches, you can push your memory to its limits, improving your cognitive abilities and concentration. With different front and back designs to choose from, RMMM allows for a rich and varied gaming experience tailored to your preferences.
+
+
As you navigate through the game, you'll feel the thrill of uncovering and matching cards, all while strengthening your memory and mental agility. Whether you're seeking a fun and engaging way to train your memory or a new challenge to test your skills, Raphy's Memory Matrix Madness is the perfect choice. Step into the realm of memory mastery and enjoy the benefits of enhanced cognitive function with RMMM!
+
+
+
+
+
+
+
+
+
+
+
+
Game Highlights
+
Offline Access: ย Never miss a moment of fun with our game's offline playability. Make long commutes, waiting rooms, and remote locales the perfect backdrop for a bit of memory-testing fun, no internet required!
+
+
Engaging Challenges: ย Tailor the difficulty to your preference by choosing the amount of duplicates and how many duplicates are shown. From the serene ๐ด sleep mode to the electrifying ๐คช insane level, venture through a heart-pumping experience that adapts to your skill level.
+
+
Customizable Experience: ย Make it your game, your way! Choose from a variety of front styles, ranging from sleek ยฉ๏ธ dark to vibrant ๐ธ green themes, and select from a diverse range of back styles including ๐จ colors and ๐๏ธ smileys to create a gaming environment that's uniquely yours.
+
+
Skill Development: ย Beyond mere entertainment, our game is a reliable companion on your cognitive development journey, enhancing concentration, memory, and decision-making processes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
General Game Synopsis
+
+
Raphy's Memory Matrix Madness offers more than just a gaming experience; it's a journey of cognitive enhancement wrapped in layers of joy. Crafted with ingenuity using JavaScript and CSS, the game provides an intuitive and user-friendly interface that welcomes players of all ages to indulge in hours of engaging memory play.
+
+
From captivating ๐ท picture cards to iconic ๐ดโโ ๏ธ flags, each round presents a refreshing challenge. Celebrate the achievement of a well-played game and track your progress with our highscore feature. With each tap, you have the opportunity to surpass your previous best, making each game an opportunity to reach new heights of memorization mastery.
+
+
Whether you're enjoying leisure time at home or seeking entertainment on-the-go, Raphy's Memory Matrix Madness is the ideal pocket-sized partner, always primed to deliver delightful and brain-boosting entertainment.
+
+
Embark on this memory-matching adventure with Raphy's Memory Matrix Madness, where fun and mental fitness intertwine seamlessly!
+
+
+
+
+
โ How to play โ
+
+
Get ready to dive into the captivating world of memory matching with Raphy's Memory Matrix Madness (RaMemory MM). This exciting and convenient memory training game is designed to be intuitive and user-friendly, offering an engaging experience for players of all ages.
+
+
+ To immerse yourself in the game, follow these simple steps:
+
+
+ Navigate and Select: Use the keyboard to navigate through the grid of selectable cards. Press "Tab" to move to the next card and "Shift + Tab" to move to the previous card.
+
+
+ Match the Cards: Once you've selected a card, click or press "Enter" to flip it and reveal its hidden side. Remember the position and design as you uncover the cards.
+
+
+ Uncover Duplicates: Your goal is to uncover duplicate cards, including pairs, triplets, quadruplets, and beyond, depending on your chosen settings.
+
+
+ Customize Your Experience: Before you start your game, you can choose the amount of duplicate cards, the card size, flip speed, and various front and back designs to personalize your gaming environment.
+
+
+ Challenge Yourself: Adapt the level of difficulty by selecting the amount of duplicate cards and their frequency. Push your memory to its limits and enjoy the thrill of matching while enhancing your cognitive abilities.
+
+
+ Offline Enjoyment: RaMemory MM is an installable progressive web app (PWA) that works seamlessly in offline mode, allowing you to enjoy uninterrupted memory training fun wherever you go.
+
+
+ Embark on this memory-matching adventure, and get ready to uncover the full potential of your memory skills with RaMemory MM. Enjoy a delightful and brain-boosting gaming experience tailored to your preferences!
+
+
+
+
+
GDPR Compliance Statement
+
+
+
Our website is dedicated to adhering to the General Data Protection Regulation (GDPR) to safeguard the privacy and security of our users' data. In this regard, we provide the following information regarding cookies and service workers utilized on our site:
+
+
Cookies:
+
+
Our website employs cookies to enhance functionality and provide an efficient user experience. However, it is important to note that cookies are only utilized if explicitly activated within the settings using your pre-game preferences. Without explicit activation, cookies will not be used.
+
+
Service Worker:
+
+ We utilize service worker technology solely for offline functionality, allowing users to enjoy uninterrupted memory training fun regardless of their internet connection.
+
+
Data Security:
+
+ We want to emphasize that we do not store any personal data of our users, ensuring the privacy and security of all user data.
+ Additionally, our site is free to use and consume, and we are committed to GDPR compliance to ensure the protection of our users' privacy and security.
+ If you have any inquiries or require more information about our GDPR compliance and data privacy, please feel free to contact us at rama@altogether.at .
+
+
+ We are committed to maintaining GDPR compliance and ensuring the protection of our users' privacy and security.
+
+
+ Kindly note that the information provided is based on the details available for this site. If there are specific requirements or additional details, we recommend reaching out to the provided contact for precise information.
+
+
+
+
+
Imprint
+
+
Name: Raphael Martin
+
E-Mail: rama@altogether.at
+
All images on this site, are created by Raphael Martin. The rights to these pictures are wholly owned by Raphael Martin.
+
+
The font used on this site is "Text Me One" under the Open Font License. More information about the license can be found on theย Google Fonts website .
+
+
+
+
Disclaimer
+
+ We do not take responsibility for the content from external links. Any external links provided on this website are solely for informational purposes. We do not exercise any control over the content on these external links and, therefore, we do not take responsibility for such content. It is advisable to use discretion and assess the content of external links for your own protection.
+
+
+
+
๐ง Settings ๐ง
+
+
+
+
+
+
+
+
+
+
+
+ tries this round 0
+
+
+ your highscore 0 x0 pairs 0 moves
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/robots.txt b/src/robots.txt
new file mode 100644
index 0000000..b6f356b
--- /dev/null
+++ b/src/robots.txt
@@ -0,0 +1,6 @@
+User-Agent: *
+
+Allow: /
+Disallow:
+
+Sitemap: https://blog.altogether.at/sitemap.xml
\ No newline at end of file
diff --git a/src/sitemap.xml b/src/sitemap.xml
new file mode 100644
index 0000000..7dee12d
--- /dev/null
+++ b/src/sitemap.xml
@@ -0,0 +1,8 @@
+๏ปฟ
+
+
+ https://games.altogether.at/ramemory
+ 2024-02-05T11:49:36+01:00
+ 1.0
+
+
diff --git a/src/sw.js b/src/sw.js
new file mode 100644
index 0000000..e27821a
--- /dev/null
+++ b/src/sw.js
@@ -0,0 +1,97 @@
+const swName = "RaMemoryMM";
+
+const addResourcesToCache = async function (resources) {
+ const cache = await caches.open(swName);
+ await cache.addAll(resources);
+};
+
+const putInCache = async function (request, response) {
+ const cache = await caches.open(swName);
+ await cache.put(request, response);
+};
+
+const enableNavigationPreload = async function () {
+ if (self.registration.navigationPreload) {
+ // Enable navigation preloads!
+ await self.registration.navigationPreload.enable();
+ }
+};
+
+self.addEventListener('activate', function (event) {
+ event.waitUntil(enableNavigationPreload());
+});
+
+self.addEventListener('install', function (event) {
+ event.waitUntil(
+ addResourcesToCache([
+ './index.html',
+ './JavaScript/Css.min.js',
+ './JavaScript/PWA.min.js',
+ './JavaScript/Firework.min.js',
+ './JavaScript/Memory.min.js',
+ './JavaScript/main.min.js',
+ './Css/Firework.min.css',
+ './Css/main.min.css',
+ './fonts/TextMeOne-Regular.ttf',
+ './config/emoji-categories.min.json',
+ './config/emojis.min.json',
+ './config/images.json',
+ './media/frog512x512.png',
+ './media/altogether-logo.png',
+ './media/altogether-logo-inverted.png',
+ './media/dark_intro.webm',
+ './media/light_intro.webm',
+ './media/dark_intro.mp4',
+ './media/light_intro.mp4',
+ './media/light_emoji.png',
+ './favicon/site.webmanifest',
+ './media/green_string.png',
+ './favicon/favicon.ico',
+ './favicon/favicon-32x32.png',
+ './favicon/favicon-16x16.png',
+ './favicon/android-chrome-192x192.png',
+ './favicon/android-chrome-512x512.png',
+ './favicon/maskable/maskable_icon.png',
+ './favicon/maskable/maskable_icon_x48.png',
+ './favicon/maskable/maskable_icon_x72.png',
+ './favicon/maskable/maskable_icon_x96.png',
+ './favicon/maskable/maskable_icon_x128.png',
+ './favicon/maskable/maskable_icon_x192.png',
+ './favicon/maskable/maskable_icon_x384.png',
+ './favicon/maskable/maskable_icon_x512.png'
+ ])
+ );
+});
+
+
+self.addEventListener('fetch', function (evt) {
+
+ if (!(evt.request.url.indexOf('http') === 0)) {
+ return;
+ }
+ evt.respondWith(
+ caches
+ .match(evt.request)
+ .then(function (cacheRes) {
+ return cacheRes || fetch(evt.request).then(function (fetchRes) {
+ cache.open(swName).then(function (cache) {
+ cache.put(evt.request.url, fetchRes.clone());
+ limitCacheSize(swName, 200);
+ return fetchRes;
+ });
+ });
+ }).catch(function () {
+ caches.match('/fallback');
+ })
+ )
+});
+
+const limitCacheSize = function (name, size) {
+ caches.open(name).then(function (cache) {
+ cache.keys().then(function (keys) {
+ if (keys.length > size) {
+ cache.delete(keys[0]).then(limitCacheSize(name, size));
+ }
+ });
+ });
+};